{"version":3,"file":"main-bundle.js?h=cec8c33bed0c4ee0f90b","mappings":"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EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;;EAEA;;EAEA;;EAEA;EACA;EACA;;EAEA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA56K,MAAM,CAAC8tJ,QAAQ,GAAG,UAAUjtG,QAAQ,EAAE;IAElC,IAAI12C,MAAM,GAAGrG,CAAC,CAAC+8C,QAAQ,CAAC;IACxB,IAAI12C,MAAM,CAAC/D,MAAM,EAAE;MACf9D,KAAK,CAAC0zB,cAAc,CAAC,CAAC;MACtBlyB,CAAC,CAAC,YAAY,CAAC,CAAC8/C,IAAI,CAAC,CAAC,CAACmqG,OAAO,CAAC;QAC3BlgG,SAAS,EAAE1jD,MAAM,CAACohB,MAAM,CAAC,CAAC,CAACK;MAC/B,CAAC,EAAE,IAAI,CAAC;IACZ;EACJ,CAAC;;EAED;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA5rB,MAAM,CAACouJ,iBAAiB,GAAG,YAAY;IACnC,IAAInrH,GAAG,GAAG,CAAC;IACX,IAAIjjC,MAAM,CAAC4/I,gBAAgB,IAAI,UAAU,IAAI,CAAC,CAAC5/I,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE;MACxEmK,GAAG,IAAIjjC,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACmK,GAAG,CAAC,QAAQ,CAAC;IACpD;IAEA,OAAOA,GAAG;EACd,CAAC;EAEDjjC,MAAM,CAAC+/I,oBAAoB,GAAG,UAAUoX,qBAAqB,EAAE;IAC3D,IAAI5vB,SAAS,GAAGlnI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC23H,SAAS,EAAE;MACZ,IAAI+vB,kBAAkB,GAAG,CAAC;MAC1B,IAAIl2H,QAAQ,GAAG,CAAC;MAChB,IAAIphC,MAAM,CAAC4P,WAAW,EAAE;QACpBwxB,QAAQ,GAAGphC,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACzD0nJ,kBAAkB,GAAGt3J,MAAM,CAAC4P,WAAW,CAACirI,kBAAkB;MAC9D;MAEA,IAAI4V,UAAU,GAAG,CAAC;MAClB,IAAI,EAAE0G,qBAAqB,KAAK,IAAI,CAAC,EAAE;QACnC1G,UAAU,GAAGzwJ,MAAM,CAACywJ,UAAU,CAAC,CAAC;MACpC;MAEA,OAAOpwJ,aAAa,CAAC6uB,SAAS,CAACkS,QAAQ,GAAGqvH,UAAU,GAAGzwJ,MAAM,CAACouJ,iBAAiB,CAAC,CAAC,GAAGkJ,kBAAkB,EAAE,CAAC,CAAC;IAC9G,CAAC,MAAM;MACH,OAAOz9H,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAAC2mJ,iBAAiB,CAAC;IACzD;EAEJ,CAAC;EAEDv2J,MAAM,CAAC66K,kBAAkB,GAAG,YAAY;IACpC/2K,CAAC,CAAC,qCAAqC,CAAC,CAAC++D,WAAW,CAAC,MAAM,CAAC;EAChE,CAAC;EAED7iE,MAAM,CAAC86K,iBAAiB,GAAG,UAAUhxK,IAAI,EAAE;IACvC,IAAMuqH,MAAM,GAAGvqH,IAAI,CAAC1G,EAAE;IACtBU,CAAC,CAAC,wCAAwC,GAAGuwH,MAAM,GAAG,IAAI,CAAC,CAACtsH,WAAW,CAAC,MAAM,CAAC;IAC/EjE,CAAC,CAAC,gBAAgB,GAAGuwH,MAAM,CAAC,CAACxxD,WAAW,CAAC,MAAM,CAAC;IAEhD,IAAK/+D,CAAC,CAAC,gBAAgB,GAAGuwH,MAAM,CAAC,CAAC9sC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAChDvnF,MAAM,CAAC0b,mBAAmB,CAAC5R,IAAI,EAAC,gBAAgB,GAAGuqH,MAAM,CAAC;IAC9D;EACJ,CAAC;EAEDr0H,MAAM,CAAC+6K,YAAY,GAAG,UAAUx5J,CAAC,EAAE;IAC/B;IACA;IACAzd,CAAC,CAAC,YAAY,CAAC,CAACo0E,UAAU,CAAC,MAAM,CAAC;EACtC,CAAC;EAEDl4E,MAAM,CAACg7K,cAAc,GAAG,KAAK;EAC7Bh7K,MAAM,CAACi7K,oBAAoB,GAAG,YAAY;IACtCj7K,MAAM,CAACg7K,cAAc,GAAG,CAACh7K,MAAM,CAACg7K,cAAc;;IAE9C;IACA/6K,UAAU,CAAC+K,UAAU,CAAC,gBAAgB,CAAC;IACvC/K,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,CAAC;EAChD,CAAC;EAEDhL,MAAM,CAACk7K,YAAY,GAAG;IAClB1uH,IAAI,EAAE;EACV,CAAC;EAEDxsD,MAAM,CAAC6vK,cAAc,GAAG,YAAY;IAChC,IAAI,CAAC7vK,MAAM,CAAC4P,WAAW,CAACi7H,SAAS,EAAE;MAC/B7qI,MAAM,CAACk7K,YAAY,CAAC1uH,IAAI,GAAGnsD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;MACrEp7B,aAAa,CAAC8E,UAAU,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY;QAC9DrB,CAAC,CAAC,YAAY,CAAC,CAACo0E,UAAU,CAAC,MAAM,CAAC;MACtC,CAAC,CAAC;IACN,CAAC,MAAM;MACHl4E,MAAM,CAACkwK,QAAQ,CAAC,CAAC;IACrB;EACJ,CAAC;EAEDlwK,MAAM,CAACm7K,uBAAuB,GAAG,UAAU9xK,GAAG,EAAE;IAC5C,IAAIA,GAAG,KAAK,MAAM,EAAE;MAChBrJ,MAAM,CAACkwK,QAAQ,CAAClwK,MAAM,CAACk7K,YAAY,CAAC1uH,IAAI,CAAC;IAC7C;EACJ,CAAC;EAEDxsD,MAAM,CAAC8gK,qBAAqB,GAAG,YAAY;IACvCtgK,QAAQ,CAAC,YAAY;MACjB;MACAkhJ,kBAAkB,CAACr1E,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;MAC7Eq1E,kBAAkB,CAACr1E,cAAc,CAAC,qBAAqB,EAAE,eAAe,EAAE,EAAE,CAAC;MAC7E;MACA;MACA;;MAEAq1E,kBAAkB,CAACr1E,cAAc,CAAC,gBAAgB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;MACrEq1E,kBAAkB,CAACr1E,cAAc,CAAC,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;MACzEq1E,kBAAkB,CAACr1E,cAAc,CAAC,gBAAgB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;MAErEq1E,kBAAkB,CAACr1E,cAAc,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;MACvEq1E,kBAAkB,CAACr1E,cAAc,CAAC,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;MAC3Eq1E,kBAAkB,CAACr1E,cAAc,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;MAEvEq1E,kBAAkB,CAACr1E,cAAc,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAE3E,CAAC,EAAE,GAAG,CAAC;IACPrsE,MAAM,CAACo7K,qBAAqB,CAAC,CAAC;EAElC,CAAC;EAEDp7K,MAAM,CAAC0uK,wBAAwB,GAAG,YAAY;IAC1CluK,QAAQ,CAAC,YAAY;MACjBkhJ,kBAAkB,CAACr1E,cAAc,CAAC,qBAAqB,EAAE,eAAe,EAAE,EAAE,CAAC;MAC7Eq1E,kBAAkB,CAACr1E,cAAc,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,CAAC;MAC5Eq1E,kBAAkB,CAACr1E,cAAc,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,CAAC;MAC5Eq1E,kBAAkB,CAACr1E,cAAc,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,CAAC;MAC5Eq1E,kBAAkB,CAACr1E,cAAc,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,CAAC;IAChF,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDrsE,MAAM,CAACo7K,qBAAqB,GAAG,YAAY;IACvC56K,QAAQ,CAAC,YAAY;MACjBkhJ,kBAAkB,CAACr1E,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC;MACjEq1E,kBAAkB,CAACr1E,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,CAAC;MACnEq1E,kBAAkB,CAACr1E,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,CAAC;MACnEq1E,kBAAkB,CAACr1E,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC;MAC9Dq1E,kBAAkB,CAACr1E,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC;MAChEq1E,kBAAkB,CAACr1E,cAAc,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,CAAC;MACnE7rE,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;MACxC,CAAC,EAAE,GAAG,CAAC;IAEX,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDhL,MAAM,CAACyzJ,IAAI,GAAG,IAAI;EAElBzzJ,MAAM,CAACo2J,wBAAwB,GAAG,UAAUz0I,GAAG,EAAE;IAC7C,IAAI,CAACA,GAAG,CAAC+xI,oBAAoB,EAAE;MAC3B1zJ,MAAM,CAAC8sD,UAAU,GAAG,kBAAkB;MACtC9sD,MAAM,CAACyzJ,IAAI,GAAG9xI,GAAG;MACjBthB,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,wDAAwD,CAAC,EAClFf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,MACGmgB,GAAG,CAAC+xI,oBAAoB,GAAG,KAAK;EACxC,CAAC;EAGDnP,WAAW,CAAC,CAAC;EAEbka,QAAQ,CAACp4J,IAAI,CAAErG,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,YAAY;IAClDrC,MAAM,CAAC8gK,qBAAqB,CAAC,CAAC;EAClC,CAAC,CAAC,CAAC;EAGHrC,QAAQ,CAACp4J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,eAAe,EAAE,YAAY;IAClD7B,QAAQ,CAAC,YAAY;MACjBH,aAAa,CAACwI,kBAAkB,CAAC,GAAG,GAAG/E,CAAC,CAAC,qBAAqB,CAAC,CAAC6D,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IAC7F,CAAC,CAAC;EACN,CAAC,CAAC,CAAC;EAEH82J,QAAQ,CAACp4J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,eAAe,EAAE,YAAY;IAClD7B,QAAQ,CAAC,YAAY;MACjBH,aAAa,CAACwI,kBAAkB,CAAC,GAAG,GAAG/E,CAAC,CAAC,qBAAqB,CAAC,CAAC6D,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IAC7F,CAAC,CAAC;EACN,CAAC,CAAC,CAAC;EAEH,IAAI0zK,kBAAkB,GAAGz3G,OAAO,CAAC41F,UAAU;EAC3C,IAAI8hB,mBAAmB,GAAG13G,OAAO,CAACxhE,WAAW;EAC7C,SAASm5K,eAAeA,CAAA,EAAG;IACvB;IACA,IAAIC,cAAc,GAAG53G,OAAO,CAAC41F,UAAU,KAAK6hB,kBAAkB,IAAIz3G,OAAO,CAACxhE,WAAW,GAAGk5K,mBAAmB;IAC3G,IAAIE,cAAc,IAAIn8K,MAAM,CAACw3C,MAAM,IAAIx3C,MAAM,CAACw3C,MAAM,CAACC,QAAQ,KAAK,SAAS,IAAIhzC,CAAC,CAACwc,QAAQ,CAACkzC,aAAa,CAAC,CAACpwC,EAAE,CAAC,iBAAiB,CAAC,EAAE;MAC5H;IACJ;IACAi4J,kBAAkB,GAAGz3G,OAAO,CAAC41F,UAAU;IACvC8hB,mBAAmB,GAAG13G,OAAO,CAACxhE,WAAW;IACzCpC,MAAM,CAAC8/J,0BAA0B,CAAC,CAAC;EACvC;EACAh8J,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAEunH,eAAe,CAAC;EAEvCv7K,MAAM,CAACopK,sBAAsB,GAAG,UAAUlmI,CAAC,EAAE;IACzC,IAAI,CAAC,CAACA,CAAC,IAAIhjC,aAAa,CAACu7K,oBAAoB,KAAK,IAAI,IAClDz7K,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,IAAI,IAAI,IACnC,CAAC,CAACZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC23C,SAAS,IACvCrV,CAAC,CAACpE,QAAQ,KAAK,YAAY,IAC3BoE,CAAC,CAACxD,WAAW,KAAK,UAAU,EAC9B;MACE,IAAIg8I,IAAI,GAAGjiK,MAAM,CAACzZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC23C,SAAS,CAAC33B,MAAM,CAAC,OAAO,CAACxa,MAAM,CAAC,CAAC;MAC/E,IAAIs1K,IAAI,IAAI,CAAC,IAAIA,IAAI,IAAI,EAAE,EAAE;QACzB,IAAIpS,KAAK,GAAGpmI,CAAC;QACb;QACA,IAAI,CAAC,CAACA,CAAC,CAACgpD,SAAS,EACbo9E,KAAK,GAAG5xI,IAAI,CAAC2T,KAAK,CAACnI,CAAC,CAACgpD,SAAS,CAAC;QAEnC,IAAIljF,GAAG,GAAGsgK,KAAK,CAAC,OAAO,GAAGoS,IAAI,CAAC;QAC/B,IAAI,CAAC1yK,GAAG,EAAEA,GAAG,GAAG,CAAC;QACjB,OAAOA,GAAG;MACd;IACJ;IAEA,OAAO,CAAC,CAACk6B,CAAC,CAAC5C,YAAY,GAAG4C,CAAC,CAAC5C,YAAY,GAAG4C,CAAC,CAACnF,KAAK;EACtD,CAAC;EAED/9B,MAAM,CAAC4gK,0BAA0B,GAAG,UAAU7+H,IAAI,EAAEwyG,YAAY,EAAE;IAC9D,IAAI,CAACxyG,IAAI,IAAI,CAACA,IAAI,CAACpG,aAAa,EAAE;IAElC73B,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACpG,aAAa,EAAE,UAAUz1B,GAAG,EAAEg9B,CAAC,EAAE;MACzC,IAAIA,CAAC,CAACne,MAAM,IAAI,CAAC,IAAIme,CAAC,CAACtE,OAAO,KAAK,KAAK,EAAE;QACtC,IAAIuqI,WAAW,GAAGnpK,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB;QACxD,IAAIi4E,EAAE,GAAGryJ,MAAM,CAACopK,sBAAsB,CAAClmI,CAAC,CAAC;QACzC,IAAIpF,KAAK,GAAGqrI,WAAW,GAAG,CAAC9W,EAAE,GAAGA,EAAE;QAElC,IAAI70H,SAAS,GAAG0F,CAAC,CAACnE,KAAK;QACvB,IAAIyB,YAAY,GAAGxgC,MAAM,CAAC0tI,eAAe,GAAG2kB,EAAE,GAAGA,EAAE,GAAG92H,YAAY,CAACiC,SAAS,EAAE60H,EAAE,CAAC;QACjF,IAAIl0H,UAAU,GAAGgrI,WAAW,GAAG,CAAC3oI,YAAY,GAAGA,YAAY;QAE3D0C,CAAC,CAACnF,KAAK,GAAGD,KAAK;QACf;QACAoF,CAAC,CAACvE,YAAY,GAAGR,UAAU;QAC3B+E,CAAC,CAAClE,SAAS,GAAGlB,KAAK;QACnB;;QAEA99B,MAAM,CAACypK,eAAe,CAACvmI,CAAC,EAAEqxG,YAAY,CAAC,CAAC,CAAC;MAC7C;IACJ,CAAC,CAAC;EACN,CAAC;EAEDv0I,MAAM,CAACygK,qBAAqB,GAAG,YAAY;IACvC;IACA,IAAI,CAACzgK,MAAM,CAACwgK,kBAAkB,IAC1B,CAAC,CAACxgK,MAAM,CAAC4P,WAAW,IAAI,CAAC,CAAC5P,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,IACrDZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC4C,mBAAmB,KAAK,IAAI,IAAIxD,MAAM,CAAC8hK,WAAW,KAAK,IAAI,EAAE;MACzF9hK,MAAM,CAAC+hK,cAAc,GAAG,KAAK;IACjC,CAAC,MACG/hK,MAAM,CAAC+hK,cAAc,GAAG,IAAI;EACpC,CAAC;EAED/hK,MAAM,CAAC27K,wBAAwB,GAAG,YAAY;IAC1C,IAAIC,SAAS,GAAGv7K,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACujK,UAAU,CAAC/kJ,OAAO,CAAC,EAAE,CAAC,CAAC;IACjF,IAAIq9J,SAAS,GAAGx7K,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACujK,UAAU,CAACC,WAAW,CAAC,EAAE,CAAC,CAAC;IACrF,IAAIlqF,MAAM,GAAGuiG,SAAS,GAAGD,SAAS;IAClC,IAAItiG,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAG,CAAC;IAC1BA,MAAM,GAAGj5E,aAAa,CAAC6uB,SAAS,CAACoqD,MAAM,EAAE,CAAC,CAAC;IAC3C,OAAOA,MAAM;EACjB,CAAC;EAEDt5E,MAAM,CAAC87K,UAAU,GAAG,IAAI;EACxB97K,MAAM,CAACyuK,mBAAmB,GAAG,EAAE;EAE/BzuK,MAAM,CAAC+7K,cAAc,GAAG,YAAY;IAChC/7K,MAAM,CAAC87K,UAAU,CAACpsJ,MAAM,CAAC,CAAC;EAC9B,CAAC;EAED1vB,MAAM,CAACg8K,UAAU,GAAG,UAAUx/J,GAAG,EAAE;IAC/Bxc,MAAM,CAAC87K,UAAU,CAAChxK,IAAI,CAAC0R,GAAG,CAAC;IAC3B,IAAIA,GAAG,KAAK,IAAI,EAAE;MACdxc,MAAM,CAACgsK,gBAAgB,CAAC,CAAC;MAEzBxrK,QAAQ,CAAC,YAAY;QACjBkhJ,kBAAkB,CAACr1E,cAAc,CAAC,qBAAqB,EAAE,eAAe,EAAE,EAAE,CAAC;MACjF,CAAC,EAAE,GAAG,CAAC;IACX;EACJ,CAAC;EAEDrsE,MAAM,CAACi8K,WAAW,GAAG,UAAU96K,IAAI,EAAE;IACjCnB,MAAM,CAACohK,QAAQ,GAAGjgK,IAAI;EAC1B,CAAC;EAEDnB,MAAM,CAACk8K,iBAAiB,GAAG,UAAU/6K,IAAI,EAAE;IACvCnB,MAAM,CAACqhK,cAAc,GAAGlgK,IAAI;EAChC,CAAC;EAEDnB,MAAM,CAACm8K,iBAAiB,GAAG,UAAU13J,MAAM,EAAE;IACzCzkB,MAAM,CAACujK,UAAU,CAACC,WAAW,GAAG/+I,MAAM;IACtCjkB,QAAQ,CAAC,YAAY;MACjBkhJ,kBAAkB,CAACr1E,cAAc,CAAC,qBAAqB,EAAE,eAAe,EAAE,EAAE,CAAC;IACjF,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDrsE,MAAM,CAACo8K,QAAQ,GAAG,YAAY;IAC1B,IAAI33J,MAAM,GAAGzkB,MAAM,CAACujK,UAAU,CAACC,WAAW;IAC1C,IAAI/+I,MAAM,GAAG,CAAC,EAAE;MACZzkB,MAAM,CAACujK,UAAU,CAAC/kJ,OAAO,GAAGxe,MAAM,CAACujK,UAAU,CAACC,WAAW;MACzDxjK,MAAM,CAACujK,UAAU,CAACC,WAAW,GAAG,CAAC;IACrC;IAEAhjK,QAAQ,CAAC,YAAY;MACjBkhJ,kBAAkB,CAACr1E,cAAc,CAAC,iBAAiB,EAAE,WAAW,EAAE,EAAE,CAAC;IACzE,CAAC,EAAE,GAAG,CAAC;IAEP,OAAOrsE,MAAM,CAAC4wJ,OAAO,CAAC,CAAC;EAC3B,CAAC;EAED5wJ,MAAM,CAACq8K,cAAc,GAAG,YAAY;IAChC,IAAI53J,MAAM,GAAGzkB,MAAM,CAACujK,UAAU,CAACC,WAAW;IAC1C,IAAI/+I,MAAM,GAAG,CAAC,EAAE;MACZzkB,MAAM,CAACujK,UAAU,CAAC/kJ,OAAO,GAAGxe,MAAM,CAACujK,UAAU,CAACC,WAAW;MACzDxjK,MAAM,CAACujK,UAAU,CAACC,WAAW,GAAG,CAAC;IACrC;IAEAhjK,QAAQ,CAAC,YAAY;MACjBkhJ,kBAAkB,CAACr1E,cAAc,CAAC,iBAAiB,EAAE,WAAW,EAAE,EAAE,CAAC;IACzE,CAAC,EAAE,GAAG,CAAC;IAEP,OAAOrsE,MAAM,CAACuxJ,aAAa,CAAC,CAAC;EACjC,CAAC;EAEDvxJ,MAAM,CAACs8K,mBAAmB,GAAG,YAAY;IACrC;IACA;IACAr8K,UAAU,CAAC+K,UAAU,CAAC,gBAAgB,EAAEhL,MAAM,CAAC4P,WAAW,CAAC;EAE/D,CAAC;EAED6uJ,QAAQ,CAACp4J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACjE,IAAIqjI,SAAS,GAAGlnI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;;IAEnE;IACA9L,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUnnB,CAAC,EAAE/G,CAAC,EAAE;MACrD,IAAIi2C,EAAE,GAAGx/C,IAAI,CAACuJ,CAAC,CAACrK,EAAE,CAAC;MAEnB,IAAIsgD,EAAE,EAAE;QACJ,IAAI6jF,SAAS,EAAE;UACX95H,CAAC,CAAC8uK,4BAA4B,GAAG74H,EAAE,CAACjmB,yBAAyB;UAC7DhwB,CAAC,CAAC+uK,4BAA4B,GAAG94H,EAAE,CAAC/lB,yBAAyB;QACjE,CAAC,MAAM;UACHlwB,CAAC,CAACsxB,KAAK,GAAGj7B,CAAC,CAAC2L,MAAM,CAAChC,CAAC,CAACsxB,KAAK,EAAE2kB,EAAE,CAAC;QACnC;QACAj2C,CAAC,CAACO,SAAS,GAAG01C,EAAE,CAAC9lB,MAAM;MAC3B;IACJ,CAAC,CAAC;IAEF,IAAI,CAAC2pG,SAAS,EACVk8B,aAAa,CAAC,CAAC,CAAC,KAEhB3oI,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC2gI,eAAe,CAAC,CAAC,EAAE7+I,MAAM,EAAEg7B,iEAAc,CAAC0C,GAAG,CAAC;EAChI,CAAC,CAAC,CAAC;EAEH19B,MAAM,CAACy8K,mBAAmB,GAAG,YAAY;IACrC,IAAIl1C,SAAS,GAAGlnI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAIoN,GAAG,GAAGhd,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC51B,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAC5D,OAAOA,EAAE,CAACg/B,OAAO,KAAK,KAAK;IAC/B,CAAC,CAAC;IACF,OAAO5hB,GAAG,CAAC5W,MAAM,GAAG,CAAC;EACzB,CAAC;EAEDpG,MAAM,CAAC+uK,0BAA0B,GAAG,UAAU2N,oBAAoB,EAAEr+J,UAAU,EAAE;IAC5E,IAAIo9G,OAAO,GAAGv7H,aAAa,CAAC2kC,iBAAiB,CAAC9+B,MAAM,CAAC,UAAUm9B,CAAC,EAAE;MAC9D,OAAOA,CAAC,CAAC4M,wBAAwB,KAAK4sI,oBAAoB;IAC9D,CAAC,CAAC;IAEF,IAAIjhD,OAAO,CAACr1H,MAAM,GAAG,CAAC,IAAIq1H,OAAO,CAAC,CAAC,CAAC,CAACp9G,UAAU,IAAIo9G,OAAO,CAAC,CAAC,CAAC,CAACp9G,UAAU,CAACjY,MAAM,GAAG,CAAC,EAAE;MACjF,IAAIs9C,EAAE,GAAG,CAAC,CAAC;MACX5/C,CAAC,CAACmC,IAAI,CAACoY,UAAU,EAAE,UAAU7J,CAAC,EAAE6gC,CAAC,EAAE;QAC/BqO,EAAE,CAACrO,CAAC,CAAC+2F,WAAW,CAAC,GAAG/2F,CAAC;MACzB,CAAC,CAAC;MAEF,IAAIhsC,GAAG,GAAG,EAAE;MACZvF,CAAC,CAACmC,IAAI,CAACw1H,OAAO,CAAC,CAAC,CAAC,CAACp9G,UAAU,EAAE,UAAU7J,CAAC,EAAE6gC,CAAC,EAAE;QAC1C,IAAIizG,IAAI,GAAG5kG,EAAE,CAACrO,CAAC,CAAC;QAChB,IAAIizG,IAAI,EACJj/I,GAAG,CAAChD,IAAI,CAACiiJ,IAAI,CAAC;MACtB,CAAC,CAAC;MAEF,OAAOj/I,GAAG;IACd;IAEA,OAAO,IAAI;EACf,CAAC;EAEDrJ,MAAM,CAACm+I,sBAAsB,GAAG,YAAY;IACxC,OAAOjgI,WAAW,CAACigI,sBAAsB,CAACn+I,MAAM,CAACs1G,QAAQ,EAAEt1G,MAAM,CAACy8I,iBAAiB,CAAC;EACxF,CAAC;EAEDz8I,MAAM,CAACo+I,YAAY,GAAG,YAAY;IAC9B,OAAOlgI,WAAW,CAACigI,sBAAsB,CAACn+I,MAAM,CAACs1G,QAAQ,EAAEt1G,MAAM,CAACy8I,iBAAiB,CAAC,GAChFv+H,WAAW,CAACkgI,YAAY,CAACp+I,MAAM,CAACs1G,QAAQ,EAAEt1G,MAAM,CAACy8I,iBAAiB,CAAC;EAC3E,CAAC;EAEDz8I,MAAM,CAAC6wK,gBAAgB,GAAG,YAAY;IAClC,IAAI8L,EAAE,GAAG74K,CAAC,CAAC,2BAA2B,CAAC;IACvC,IAAI64K,EAAE,CAACv2K,MAAM,GAAG,CAAC,EAAE;MACfu2K,EAAE,CAAC/sG,QAAQ,CAAC,QAAQ,CAAC;IACzB;EACJ,CAAC;EAED5vE,MAAM,CAAC89E,iBAAiB,GAAG,YAAY;IACnC,OAAOhjD,4FAAuB,CAACgjD,iBAAiB,CAAC99E,MAAM,CAAC4P,WAAW,CAAC;EACxE,CAAC;EAGD5P,MAAM,CAAC48K,oBAAoB,GAAG,YAAY;IACtC,IAAItiK,CAAC,GAAG,CAACpa,aAAa,CAACmtG,gBAAgB,GAAG,KAAK,GAAG,IAAI;IACtD,IAAIowC,EAAE,GAAGz9I,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG,CAAC,IAAI74B,aAAa,CAACmB,QAAQ;IAC/D,IAAIw7K,iBAAiB,GAAG,CAAC,CAAC78K,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACmpG,YAAY,IAAI/pG,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACmpG,YAAY,IAAI,GAAG;IACrH,IAAI1gG,GAAG,GAAGiR,CAAC,IAAIuiK,iBAAiB,IAAI38K,aAAa,CAACmB,QAAQ,IAAI,CAACrB,MAAM,CAACwgK,kBAAkB,IAAI,CAACzzD,mBAAmB,CAACnE,SAAS;IAC1H,IAAI5oG,MAAM,CAACmB,IAAI,KAAK,SAAS,IAAImZ,CAAC,IAAImjI,EAAE,IAAIo/B,iBAAiB,IAAI,CAAC78K,MAAM,CAACwgK,kBAAkB,IAAI,CAACzzD,mBAAmB,CAACnE,SAAS,EAAE;MAC3H,IAAI5oG,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAAE;QAChC2pG,mBAAmB,CAACrB,UAAU,CAAC,CAAC;MACpC,CAAC,MAAM;QACHqB,mBAAmB,CAACpB,UAAU,CAAC,CAAC;MACpC;IACJ,CAAC,MAAM;MACHoB,mBAAmB,CAACpB,UAAU,CAAC,CAAC;IACpC;IAEA,OAAOtiG,GAAG;EACd,CAAC;EAEDpJ,UAAU,CAAC68K,sBAAsB,GAAG,YAAY;IAC5Cz8K,aAAa,CAAC+L,WAAW,CAACtI,CAAC,CAAC,mBAAmB,CAAC,CAAC;EACrD,CAAC;EAGD,SAASi5K,mBAAmBA,CAAA,EAAG;IAC3B,IAAI/8K,MAAM,CAAC0hK,mBAAmB,CAACC,aAAa,EAAE;MAC1C,IAAIp2J,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACzL,MAAM,CAAC0hK,mBAAmB,CAAC;MAC5C,OAAOn2J,QAAQ,CAACG,OAAO;IAC3B;IACA5H,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAOw/E,cAAc,CAAC+gB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAC9EtgG,IAAI,CAAC,UAAUC,IAAI,EAAE;MAElB,IAAI+hJ,cAAc,GAAG,0BAA0B;MAC/C,IAAI1xF,QAAQ,GAAGrwD,IAAI,CAAC41F,QAAQ,CAACv/D,MAAM,CAAC,4BAA4B,CAAC;MACjE,IAAI7S,MAAM,GAAG,CAACxjB,IAAI,CAAC41F,QAAQ,CAACnwF,KAAK,CAAC,CAAC,EAAE4qD,QAAQ,CAAC,EAAE0xF,cAAc,EAAE/hJ,IAAI,CAAC41F,QAAQ,CAACnwF,KAAK,CAAC4qD,QAAQ,CAAC,CAAC,CAAC3/C,IAAI,CAAC,EAAE,CAAC;MAEvG,IAAIuyG,cAAc,GAAG,gSAAgS;MACrTz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAEunG,cAAc,CAAC;MACrFA,cAAc,GAAG,qSAAqS;MACtTz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,6CAA6C,EAAEunG,cAAc,CAAC;MAEtFA,cAAc,GAAG,kWAAkW;MACnXz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAEunG,cAAc,CAAC;MACvFA,cAAc,GAAG,sWAAsW;MACvXz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,+CAA+C,EAAEunG,cAAc,CAAC;MACxFA,cAAc,GAAG,iYAAiY;MAClZz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,wDAAwD,EAAEunG,cAAc,CAAC;MACjGA,cAAc,GAAG,mWAAmW;MACpXz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAEunG,cAAc,CAAC;MACvFA,cAAc,GAAG,mWAAmW;MACpXz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAEunG,cAAc,CAAC;MAEvFlnH,MAAM,CAAC0hK,mBAAmB,CAACC,aAAa,GAAGl6I,MAAM;MAEjD,IAAIxjB,IAAI,CAACsgG,aAAa,EAAE;QACpBjwC,QAAQ,GAAGrwD,IAAI,CAACsgG,aAAa,CAACjqE,MAAM,CAAC,4BAA4B,CAAC;QAClE7S,MAAM,GAAG,CAACxjB,IAAI,CAACsgG,aAAa,CAAC76F,KAAK,CAAC,CAAC,EAAE4qD,QAAQ,CAAC,EAAE0xF,cAAc,EAAE/hJ,IAAI,CAACsgG,aAAa,CAAC76F,KAAK,CAAC4qD,QAAQ,CAAC,CAAC,CAAC3/C,IAAI,CAAC,EAAE,CAAC;QAE7GuyG,cAAc,GAAG,2EAA2E;QAC5Fz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAEunG,cAAc,CAAC;QACrFA,cAAc,GAAG,4EAA4E;QAC7Fz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,6CAA6C,EAAEunG,cAAc,CAAC;QAEtFA,cAAc,GAAG,4GAA4G;QAC7Hz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAEunG,cAAc,CAAC;QACnFA,cAAc,GAAG,6GAA6G;QAC9Hz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,2CAA2C,EAAEunG,cAAc,CAAC;QACpFA,cAAc,GAAG,sHAAsH;QACvIz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,oDAAoD,EAAEunG,cAAc,CAAC;QAC7FA,cAAc,GAAG,4GAA4G;QAC7Hz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAEunG,cAAc,CAAC;QACnFA,cAAc,GAAG,4GAA4G;QAC7Hz/F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAEunG,cAAc,CAAC;QAEnFlnH,MAAM,CAAC0hK,mBAAmB,CAACE,kBAAkB,GAAGn6I,MAAM;MAC1D,CAAC,MAAM;QACHznB,MAAM,CAAC0hK,mBAAmB,CAACE,kBAAkB,GAAGn6I,MAAM;MAC1D;MACAznB,MAAM,CAAC0hK,mBAAmB,CAACsb,iBAAiB,GAAG/4K,IAAI,CAACugG,YAAY;MAChExkG,MAAM,CAAC0hK,mBAAmB,CAACub,eAAe,GAAGh5K,IAAI,CAACwgG,UAAU;MAE5D3gG,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,OAAOrE,MAAM,CAAC0hK,mBAAmB;IAErC,CAAC,EAAE,UAAUv9J,GAAG,EAAE;MACdL,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAIyrD,EAAE,GAAG,EAAE;MACX,IAAI,OAAQ3rD,GAAI,KAAK,QAAQ,EAAE;QAC3B2rD,EAAE,GAAG3rD,GAAG;MACZ,CAAC,MAAM,IAAIA,GAAG,CAAC60B,SAAS,EAAE;QACtB82B,EAAE,GAAG3rD,GAAG,CAAC60B,SAAS;MACtB,CAAC,MAAM,IAAI70B,GAAG,CAACD,IAAI,EAAE;QACjB,IAAIC,GAAG,CAACD,IAAI,CAAC80B,SAAS,EAClB82B,EAAE,GAAG3rD,GAAG,CAACD,IAAI,CAAC80B,SAAS,CAAC,KACvB,IAAI70B,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,IAAIC,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC80B,SAAS,EACzC82B,EAAE,GAAG3rD,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC80B,SAAS;MAClC;MAEA,IAAIN,YAAY,GAAGj4B,cAAc,CAACe,SAAS,CAAC,qCAAqC,CAAC,GAAG,IAAI,GAAGsuD,EAAE;MAC9F3vD,YAAY,CAACiE,SAAS,CAACs0B,YAAY,CAAC;MACpC,OAAO,KAAK;IAChB,CAAC,CAAC;EACV;EAAC;EAED,SAASwkJ,wBAAwBA,CAAA,EAAG;IAChC,OAAOH,mBAAmB,CAAC,CAAC,CACvB/4K,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClB,IAAIA,IAAI,KAAK,KAAK,EACd,OAAOA,IAAI;MAEf,IAAI,CAACjE,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,IAAI1Y,QAAQ,CAAChkB,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,CAAC,GAAG,CAAC,EAAE;QAC3F,OAAOxe,WAAW,CAAC8kF,eAAe,CAAC9iG,aAAa,CAACiN,YAAY,EAAEjN,aAAa,CAAC8rB,cAAc,CAAC,CACvFhoB,IAAI,CAAC,UAAUE,IAAI,EAAE;UAClB,IAAIumK,iBAAiB,GAAGvqK,aAAa,CAAC8rB,cAAc,CAAC3Q,KAAK,CAAC,GAAG,CAAC;UAC/Drb,MAAM,CAAC4P,WAAW,CAAC0oB,WAAW,GAAG,CAACp4B,aAAa,CAACymC,cAAc,GAAGzmC,aAAa,CAACymC,cAAc,GAAG,EAAE,IAC9FziC,IAAI,IAAIhE,aAAa,CAAC0mC,cAAc,GAAG1mC,aAAa,CAAC0mC,cAAc,GAAG,EAAE,CAAC;UAC7E5mC,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,GAAGx4B,IAAI;UAC1ClE,MAAM,CAAC4P,WAAW,CAAC4K,OAAO,GAAGiwJ,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG5wI,IAAI,CAACo+B,KAAK,CAACx8B,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAACr0D,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAGhE,QAAQ,CAAC9f,IAAI,EAAE,EAAE,CAAC,CAAC8jB,QAAQ,CAAC,EAAE,CAAC;QAChJ,CAAC,CAAC;MACV;IACJ,CAAC,CAAC;EACV;EAIAhoB,MAAM,CAACm9K,aAAa,GAAG,YAAY;IAC/B,OAAO,EAAE,CAACn9K,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,IAAI37B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM,IAAI,CAAC,IAAIpG,MAAM,CAACkiK,WAAW,KAAK,KAAK,CAAC,IACvHhiK,aAAa,CAACmB,QAAQ,IAAIrB,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,KAAK,CAACpD,MAAM,CAACo6E,QAAQ,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,SAAS,CAAC;EACvH,CAAC;EAEDp6E,MAAM,CAACo9K,aAAa,GAAG,YAAY;IAC/B,OAAO,EAAE,CAACp9K,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,IAAI37B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM,IAAI,CAAC,IAAIpG,MAAM,CAACkiK,WAAW,KAAK,KAAK,CAAC,IACvHhiK,aAAa,CAACX,MAAM,IAAIS,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,KAAK,CAACpD,MAAM,CAACo6E,QAAQ,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,SAAS,CAAC;;IAEjH;IACA;IACA;EACJ,CAAC;EAIDp6E,MAAM,CAACq9K,UAAU,GAAG,YAAY;IAC5BH,wBAAwB,CAAC,CAAC,CACrBl5K,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClB,IAAIA,IAAI,KAAK,KAAK,EACd;MAEJurI,aAAa,CAAC,CAAC;MACfx8E,UAAU,CAAC,YAAY;QACnB,OAAOn7C,YAAY,CAAC+lF,YAAY,CAAC95F,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;MAC7E,CAAC,EAAE,EAAE,CAAC;IACV,CAAC,CAAC;EAEV,CAAC;EAGD9D,MAAM,CAACs9K,oBAAoB,GAAG,YAAY;IACtC,IAAI,CAAC,CAACt9K,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,IACpCvxD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,CAAC1uD,KAAK,EAAE;MAC1C7C,MAAM,CAAC0hK,mBAAmB,CAACG,UAAU,GAAG7hK,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,CAAC1uD,KAAK;IACpF,CAAC,MAAM;MACH7C,MAAM,CAAC0hK,mBAAmB,CAACG,UAAU,GAAG,EAAE;IAC9C;IAEA,IAAIh0I,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;IAClDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAGD7tB,MAAM,CAACu9K,qBAAqB,GAAG,YAAY;IACvC,IAAI1vJ,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;IAClDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAGD7tB,MAAM,CAACw9K,cAAc,GAAG,YAAY;IAChCN,wBAAwB,CAAC,CAAC,CACrBl5K,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClB,IAAIA,IAAI,KAAK,KAAK,EACd;MAEJurI,aAAa,CAAC,CAAC;MACf1rI,CAAC,CAACC,OAAO,CAAC,CAAC;MAEXivD,UAAU,CAAC,YAAY;QACnB,IAAIsR,SAAS,GAAGmxD,YAAY,CAAC9wD,aAAa,CAAC,uBAAuB,CAAC,CAACllD,IAAI,CAAC,CAAC;QAC1E,IAAI4kD,YAAY,GAAGrkE,MAAM,CAAC0hK,mBAAmB,CAACsb,iBAAiB;QAE/D,IAAItyK,KAAK,GAAG1K,MAAM,CAAC0hK,mBAAmB,CAACG,UAAU;QACjD,IAAIrsE,MAAM,GAAGigC,YAAY,CAACzxD,eAAe,CAAChkE,MAAM,CAAC4P,WAAW,CAAC;QAC7D6lH,YAAY,CAACrxD,gBAAgB,CAACoxB,MAAM,CAACvxB,OAAO,EAAEuxB,MAAM,CAACtxB,WAAW,EAAEx5D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAE,IAAI,EAAEtkE,MAAM,CAAC0hK,mBAAmB,CAACub,eAAe,CAAC,CAC9Ij5K,IAAI,CAAC,UAAUyjB,MAAM,EAAE;UACpB;UACA3jB,CAAC,CAACO,SAAS,CAAC,CAAC;UACbrE,MAAM,CAACu9K,qBAAqB,CAAC,CAAC;UAE9B,IAAI91J,MAAM,CAACm9E,MAAM,IAAI,IAAI,EAAE;YAGvB,IAAI/2E,cAAc,GAAG/pB,CAAC,CAAC,uBAAuB,CAAC;YAC/CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;YAExC7tB,MAAM,CAACy9K,6BAA6B,GAAG,YAAY;cAC/C,IAAI5vJ,cAAc,GAAG/pB,CAAC,CAAC,uBAAuB,CAAC;cAC/CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;YAC7C,CAAC;UACL,CAAC,MAAM;YACH,IAAIA,cAAc,GAAG/pB,CAAC,CAAC,4BAA4B,CAAC;YACpDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;YAExC7tB,MAAM,CAACy9K,6BAA6B,GAAG,YAAY;cAC/C,IAAI5vJ,cAAc,GAAG/pB,CAAC,CAAC,4BAA4B,CAAC;cACpDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;YAC7C,CAAC;UACL;QACJ,CAAC,EAAE,UAAU1pB,GAAG,EAAE;UACdL,CAAC,CAACO,SAAS,CAAC,CAAC;UACb,IAAIuxC,GAAG,GAAGn1C,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC;UAC1D,IAAI,CAAC,CAAC2C,GAAG,CAACD,IAAI,IAAIC,GAAG,CAACD,IAAI,CAACkC,MAAM,GAAG,CAAC,IAAI,CAAC,CAACjC,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC80B,SAAS,EAC5D4c,GAAG,GAAGzxC,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC80B,SAAS;UAE/B74B,YAAY,CAACiE,SAAS,CAAC,CAAC,CAACD,GAAG,CAACD,IAAI,GAAGC,GAAG,CAACD,IAAI,GAAG0xC,GAAG,CAAC;QACvD,CAAC,CAAC;MACV,CAAC,EAAE,EAAE,CAAC;IACV,CAAC,CAAC;EACV,CAAC;EAED6oH,QAAQ,CAACp4J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,wBAAwB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACtE,IAAIlE,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAAE;MAChCpD,MAAM,CAACmgK,cAAc,GAAGj8J,IAAI,CAACk4F,IAAI;MACjC,IAAIl4F,IAAI,CAACk4F,IAAI,EAAE;QACXp8F,MAAM,CAACkgK,YAAY,GAAG;UAAE7mH,UAAU,EAAEr5C,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE;UAAEg5F,IAAI,EAAEl4F,IAAI,CAACk4F;QAAK,CAAC;MACzF;MACA,IAAGl4F,IAAI,CAACkQ,KAAK,KAAK,IAAI,EAAE;QACpB,IAAG,CAAClU,aAAa,CAACmiK,eAAe,EAAE;UAC/BliK,YAAY,CAACiE,SAAS,CAClB3D,cAAc,CAACe,SAAS,CAAC,wFAAwF,CAAC,EAClH,IAAI,EACJf,cAAc,CAACe,SAAS,CAAC,mBAAmB,CAChD,CAAC;UACD;QACJ;QACAsC,CAAC,CAACC,OAAO,CAAC,CAAC;QACXma,WAAW,CAACgjI,qBAAqB,CAAClhJ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC20H,YAAY,CAAC,CAC1EvxH,IAAI,CAAC,UAAUyjB,MAAM,EAAE;UACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;UACb,IAAMglB,KAAK,GAAG5B,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAG,CAAC,CAAC;UACzB,IAAG,CAAA4B,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEq0J,SAAS,KAAI,GAAG,EAAC;YACvBv9K,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC2P,SAAS,EAAE,IAAI,EAAEv4B,cAAc,CAACe,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC5F;UACJ;UACA,IAAGimB,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEk2J,OAAO,EAAE;YAAA,IAAAC,mBAAA;YAChB,IAAMC,MAAM,GAAGp2J,MAAM,CAACk2J,OAAO,CAACtsK,IAAI,CAAC,UAAArL,CAAC;cAAA,OAAIA,CAAC,CAACoO,KAAK,KAAKlQ,IAAI,CAACkQ,KAAK;YAAA,EAAC;YAC/D,IAAM0pK,QAAQ,IAAAF,mBAAA,GAAGv+K,MAAM,CAAC0pG,WAAW,cAAA60E,mBAAA,gBAAAA,mBAAA,GAAlBA,mBAAA,CAAoBh9K,QAAQ,cAAAg9K,mBAAA,gBAAAA,mBAAA,GAA5BA,mBAAA,CAA8BG,cAAc,cAAAH,mBAAA,uBAA5CA,mBAAA,CAA+C,CAAC,CAAC;YAClE,IAAI,CAACC,MAAM,IAAI,CAACC,QAAQ,EAAE;cACtB39K,YAAY,CAACiE,SAAS,CAClB3D,cAAc,CAACe,SAAS,CAAC,8HAA8H,CAC3J,CAAC;cACD;YACJ;YACAxB,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACmvI,cAAc,GAAG7rI,IAAI,CAACk4F,IAAI;YACtDp8F,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,GAAGgiJ,MAAM,CAACG,eAAe;YACpDh+K,MAAM,CAAC4P,WAAW,CAACgsB,iBAAiB,GAAGiiJ,MAAM,CAACI,aAAa,KAAK,YAAY,GAAG,IAAI,GAAG,KAAK;YAC3Fj+K,MAAM,CAAC06D,cAAc,GAAGmjH,MAAM,CAACI,aAAa;YAC5Cj+K,MAAM,CAACogK,eAAe,GAAGl8J,IAAI,CAACkQ,KAAK;YACnCpU,MAAM,CAAC4P,WAAW,CAACmtB,uBAAuB,GAAG,IAAI;YAE7C,IAAI2D,OAAO,GAAG;cACdt9B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;cACnByS,kBAAkB,EAAE,IAAI;cACxB5b,MAAM,EAAE,CAAC;cAAE;cACX0W,IAAI,EAAE3K,MAAM,CAACC,GAAG,CAAC,CAAC;cAClB8P,SAAS,EAAE,aAAa;cACxBC,eAAe,EAAGrgC,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;cACjEu/B,OAAO,EAAE+8I,QAAQ,CAACI,UAAU;cAC5BpxC,uBAAuB,EAAGgxC,QAAQ,CAACtzK,EAAE;cACrCw2B,SAAS,EAAEhhC,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC20H;YAC3C,CAAC;YACDv1H,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACzyB,IAAI,CAACq6B,OAAO,CAAC;YAEzC,IAAIr3B,GAAG,GAAGyxB,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC2gI,eAAe,CAAC,CAAC,EAAE7+I,MAAM,EAAEg7B,iEAAc,CAACjC,KAAK,CAAC;YACpI,IAAI1vB,GAAG,CAACoqK,uBAAuB,KAAK,IAAI,EAAE;cACtCzzK,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,GAAGx7B,aAAa,CAAC6uB,SAAS,CAAC7lB,GAAG,CAACoqK,uBAAuB,EAAE,CAAC,CAAC;YACzF;UACJ;QACJ,CAAC,CAAC,SACI,CAAC,UAAUtvK,GAAG,EAAE;UAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,CAAC;MACN,CAAC,MACI;QACD,IAAIzE,GAAE,GAAGI,MAAM,CAACmzK,WAAW,CAACn3G,QAAQ,CAAC,CAAC;QACtCp8D,GAAE,CAACg6D,WAAW,CAAC7vD,KAAK,GAAG,CAAC;QACxBnK,GAAE,CAAC86D,cAAc,GAAG,IAAI;QACxB16D,MAAM,CAACogK,eAAe,GAAG,IAAI;QAC7BpgK,MAAM,CAAC06D,cAAc,GAAG,IAAI;MAChC;MACA9iD,YAAY,CAACmD,QAAQ,CAAC,CAAC;IAC3B;IACA,IAAI,CAAC7a,aAAa,CAACX,MAAM,IAAID,kBAAkB,CAACw3C,QAAQ,KAAK,SAAS,EAAE;MACpEhwB,OAAO,CAACqC,OAAO,CAACmjF,SAAS,CAACzmG,IAAI,CAAC3B,IAAI,CAACk4F,IAAI,CAAC;IAC7C;EACJ,CAAC,CAAC,CAAC;EAEHp8F,MAAM,CAACu8C,kBAAkB,GAAG,YAAW;IACnC,OAAOr8C,aAAa,CAAC+I,cAAc,GAAG,EAAE,GAAG,cAAc;EAC7D,CAAC;EAEDjJ,MAAM,CAACm5J,WAAW,GAAG,YAAU;IAC3Bl5J,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,EAC3C;MACI+2B,IAAI,EAAE/hC,MAAM,CAAC4P,WAAW;MACxBu9C,MAAM,EAAE;IACZ,CAAC,CAAC;EACN,CAAC;EACDntD,MAAM,CAACw8C,mBAAmB,GAAG,YAAW;IACpC,OAAOt8C,aAAa,CAAC+I,cAAc,GAAG,aAAa,GAAG,EAAE;EAC5D,CAAC;;EAED;EACA;EACA;;EAEAjJ,MAAM,CAAC8oB,IAAI,GAAG,YAAW;IACrBhC,OAAO,CAACqC,OAAO,CAACC,cAAc,CAACN,IAAI,CAC/B,UAAUrB,MAAM,EAAE;MACdziB,OAAO,CAACC,GAAG,CAAC,oBAAoB,GAC5B,UAAU,GAAGwiB,MAAM,CAACvf,IAAI,GAAG,IAAI,GAC/B,UAAU,GAAGuf,MAAM,CAACwB,MAAM,GAAG,IAAI,GACjC,aAAa,GAAGxB,MAAM,CAACyB,SAAS,CAAC;IACzC,CAAC,EACD,UAAUG,KAAK,EAAE;MACbrkB,OAAO,CAACC,GAAG,CAAC,mBAAmB,GAAGokB,KAAK,CAAC;IAC5C,CACJ,CAAC;EACL,CAAC;EAEDrpB,MAAM,CAACm+K,6BAA6B,GAAG,YAAW;IAC9C,IAAMlqH,SAAS,GAAGnwD,CAAC,CAAC,WAAW,CAAC;IAChC,IAAImwD,SAAS,IAAIA,SAAS,CAAC7tD,MAAM,EAAE;MAC/B,OAAO6tD,SAAS,CAAC92C,MAAM,CAAC,CAAC;IAC7B;IAEA,OAAO,IAAI;EACf,CAAC;EAEDnd,MAAM,CAAC8/J,0BAA0B,GAAG,YAAW;IAC3C,IAAI9/J,MAAM,CAAC6/J,eAAe,KAAK,YAAY,EAAE;MACzC;IACJ;IAEA,IAAIllJ,IAAI,GAAGza,aAAa,CAAC4wC,kBAAkB,CAAC,CAAC;IAC7C,IAAMojB,eAAe,GAAGl0D,MAAM,CAACm+K,6BAA6B,CAAC,CAAC;IAE9D,IAAI,CAACjqH,eAAe,EAAE;MAClB;IACJ;IAEA,IAAIv5C,IAAI,IAAI,CAAC,IAAIu5C,eAAe,GAAG,GAAG,EAAE;MACpCv5C,IAAI,GAAG,CAAC;IACZ;IACA,IAAIA,IAAI,GAAG,CAAC,IAAIu5C,eAAe,GAAG,GAAG,EAAE;MACnCv5C,IAAI,GAAG,CAAC;IACZ;IACA3a,MAAM,CAAC2/J,QAAQ,GAAGhlJ,IAAI;IACtB3a,MAAM,CAAC++J,eAAe,GAAGpkJ,IAAI;EACjC,CAAC;EAED3a,MAAM,CAAC0gK,8BAA8B,GAAG,UAAU9/J,QAAQ,EAAE;IAExDkD,CAAC,CAAC,gBAAgB,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;IAC3B,IAAI6kB,cAAc,GAAG/pB,CAAC,CAAC,6BAA6B,CAAC;IACrD+pB,cAAc,CAACxc,IAAI,CAAC,mBAAmB,CAAC,CAACnJ,IAAI,CAACtH,QAAQ,CAACgpG,OAAO,CAAC;IAC/DvpG,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACo+K,+BAA+B,GAAG,YAAY;IAEjD,IAAIvwJ,cAAc,GAAG/pB,CAAC,CAAC,6BAA6B,CAAC;IACrDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACq+K,iBAAiB,GAAG,YAAY;IAEnC,IAAIC,aAAa,GAAGx6K,CAAC,CAAC,gBAAgB,CAAC,CAACkF,GAAG,CAAC,CAAC;IAE7C,IAAI,CAAC,CAACs1K,aAAa,EAAE;MAEjBx6K,CAAC,CAACC,OAAO,CAAC,CAAC;MAEX,IAAImL,cAAc,GAAGpP,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC;MAE9D,IAAI,CAAC,CAACsO,cAAc,CAACtM,QAAQ,IAAIsM,cAAc,CAACtM,QAAQ,CAACwD,MAAM,GAAG,CAAC,EAC/D8I,cAAc,CAACtM,QAAQ,CAAC,CAAC,CAAC,CAACC,KAAK,GAAGy7K,aAAa,CAAC,KAErD;QACI,IAAI7pK,OAAO,GAAG,CAAC;UACX/R,IAAI,EAAEwM,cAAc,CAACxM,IAAI;UACzBG,KAAK,EAAEy7K,aAAa;UACpBx7K,KAAK,EAAE,IAAI;UACXC,WAAW,EAAE,IAAI;UACjBwB,gBAAgB,EAAE;QACtB,CAAC,CAAC;QACF2K,cAAc,CAACtM,QAAQ,GAAG6R,OAAO;MACrC;MAEA,IAAIlF,UAAU,GAAG,EAAE;MAEnB,IAAI3O,QAAQ,GAAGd,OAAO,CAAC2P,MAAM,CAACP,cAAc,EAAE;QAAEK,UAAU,EAAEA;MAAW,CAAC,CAAC;MAEzEnP,eAAe,CAACsP,cAAc,CAAC9O,QAAQ,CAAC,CAACoD,IAAI,CAAC,UAAUC,IAAI,EAAE;QAC1D7D,eAAe,CAACuP,iBAAiB,CAAC/O,QAAQ,CAAC4J,EAAE,IAAI5J,QAAQ,CAACwC,EAAE,CAAC,WACjD,CAAC,YAAY;UACjBpD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAGA,QAAQ;UACtCZ,MAAM,CAACggK,kBAAkB,CAAChgK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC;UACtDkD,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,CAAC;MAEV,CAAC,EAAE,UAAUF,GAAG,EAAE;QACdL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACN;EACJ,CAAC;EAEDnE,MAAM,CAAC+/J,gBAAgB,GAAG,YAAY;IAClC,OAAOt2I,eAAe,CAACsC,sBAAsB,CAAC7rB,aAAa,CAAC8rB,cAAc,EAAE9rB,aAAa,CAAC+rB,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,CAACjoB,IAAI,CAAC,UAAUC,IAAI,EAAE;MACzI,IAAIA,IAAI,CAAC,CAAC,CAAC,EAAE;QACTjE,MAAM,CAACquB,eAAe,GAAGpqB,IAAI,CAAC,CAAC,CAAC,CAACb,EAAE;QACnClD,aAAa,CAACmuB,eAAe,GAAGpqB,IAAI,CAAC,CAAC,CAAC,CAACb,EAAE;MAC9C,CAAC,MAAM;QACHpD,MAAM,CAACquB,eAAe,GAAG,IAAI;QAC7BxE,SAAS,CAACiD,IAAI,CAAC,oBAAoB,CAAC;MACxC;IACJ,CAAC,CAAC;EACN,CAAC;EAED9sB,MAAM,CAACkuK,uBAAuB,GAAG,UAAUjqK,IAAI,EAAE;IAC7C,IAAIA,IAAI,CAACotB,OAAO,IAAI,CAACrxB,MAAM,CAAC61J,aAAa,CAACC,WAAW,CAACJ,YAAY,CAAC53F,QAAQ,CAAC99D,MAAM,CAAC0K,KAAK,CAACgrJ,YAAY,CAAC,IAAI,CAAC11J,MAAM,CAAC61J,aAAa,CAACC,WAAW,CAACJ,YAAY,CAAC3pJ,QAAQ,IAAI/L,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACgD,mBAAmB,EAAE;MAClN5D,MAAM,CAAC+rK,SAAS,GAAG,KAAK;MACxB,IAAIwS,SAAS,GAAG59K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BxL,MAAM,CAACokE,gBAAgB,CAAC,CAAC;MACzBpkE,MAAM,CAAC0I,MAAM,CAAC,WAAW,EAAE,UAAUC,QAAQ,EAAE;QAC3C,IAAIA,QAAQ,KAAK,IAAI,EAAE;UACnB41K,SAAS,CAAC9yK,OAAO,CAAC,CAAC;QACvB;MACJ,CAAC,CAAC;MAEFjL,QAAQ,CAAC,YAAY;QACjB,IAAI,CAACR,MAAM,CAAC+rK,SAAS,EAAE;UACnBwS,SAAS,CAAC9yK,OAAO,CAAC,CAAC;QACvB;MACJ,CAAC,EAAE,IAAI,CAAC;MAER,OAAO8yK,SAAS,CAAC7yK,OAAO;IAC5B;EACJ,CAAC;EAED+yJ,QAAQ,CAACp4J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,UAAU,EAAE,YAAY;IAC7C;IACAmhF,cAAc,CAAC8mB,aAAa,CAAC,CAAC;IAC9BxmG,CAAC,CAACwc,QAAQ,CAAC,CAACgL,GAAG,CAAC,yBAAyB,EAAE,2EAA2E,EAAE21I,wBAAwB,CAAC;IAEjJhhK,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC;IAChDlH,CAAC,CAACzE,MAAM,CAAC,CAACisB,GAAG,CAAC,QAAQ,EAAEsvJ,QAAQ,CAAC;IACjC92K,CAAC,CAACzE,MAAM,CAAC,CAACisB,GAAG,CAAC,QAAQ,EAAEiwJ,eAAe,CAAC;IACxC9c,QAAQ,CAAC/xJ,OAAO,CAAC,UAAC1G,CAAC,EAAK;MACpB,IAAI;QACAA,CAAC,CAAC,CAAC;MACP,CAAC,CAAC,OAAOub,CAAC,EAAE;QACRvc,OAAO,CAACC,GAAG,CAACsc,CAAC,CAAC;MAClB;IACJ,CAAC,CAAC;EACN,CAAC,CAAC,CAAC;AACP,CAAC,CACJ,CAAC;AAEVzhB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACuG,MAAM,CAAC,mBAAmB,cAAE,UAAUikB,OAAO,EAAE;EACrE,OAAO,UAAUkvD,KAAK,EAAEg9C,SAAS,EAAE;IAC/B,IAAI7sH,GAAG,GAAG,EAAE;IACZvJ,OAAO,CAAC4M,OAAO,CAACwsE,KAAK,EAAE,UAAUt5E,EAAE,EAAE;MACjC,IAAI2qE,QAAQ,GAAG,IAAI;MAEnB,KAAK,IAAIrnC,CAAC,IAAIgzF,SAAS,EAAE;QACrB,IAAIxhH,CAAC,GAAGwhH,SAAS,CAAChzF,CAAC,CAAC;QACpB,IAAI,CAAC,CAACxuB,CAAC,CAACgrD,QAAQ,IAAI9/D,EAAE,CAACsjC,CAAC,CAAC,KAAKxuB,CAAC,CAACgrD,QAAQ,EAAE;UACtC6K,QAAQ,GAAG,KAAK;UAChB;QACJ;MACJ;MAEA,IAAIA,QAAQ,EAAE;QACVlhE,GAAG,CAAChD,IAAI,CAACzG,EAAE,CAAC;MAChB;IACJ,CAAC,CAAC;IAEF,OAAOyJ,GAAG;EACd,CAAC;AACL,CAAC,EAAC;AAEFvJ,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACuG,MAAM,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,UAASikB,OAAO,EAAE3pB,aAAa,EAAE;EAC5G,IAAIm+K,cAAc,GAAGx0J,OAAO,CAAC,UAAU,CAAC;EACxC,OAAO,UAASvF,MAAM,EAAEg6J,cAAc,EAAE;IACpC,IAAG,CAACh6J,MAAM,EACNA,MAAM,GAAG,CAAC;IAEd,OAAO+5J,cAAc,CAACn+K,aAAa,CAAC6uB,SAAS,CAACzK,MAAM,EAAE,CAAC,CAAC,EAAEg6J,cAAc,CAAC;EAC7E,CAAC;AACD,CAAC,CAAE,CAAC,C;;;;;;;;;;ACtuPJ3+K,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,kBAAkB,EACnD,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAC,WAAW,EAC7I,UAAUC,MAAM,EAAEC,UAAU,EAAEE,YAAY,EAAEE,aAAa,EAAEG,QAAQ,EAAEgpB,YAAY,EAAEtpB,aAAa,EAAEO,cAAc,EAAEi+K,MAAM,EAAE70J,SAAS,EAAE;EAEjI5pB,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE;EAAG,CAAC,CAAC,CAAC,CAAC;;EAElEjqB,MAAM,CAAC2+K,cAAc,GAAGl+K,cAAc,CAACe,SAAS,CAAC,kCAAkC,CAAC;EAEpFxB,MAAM,CAAC4+K,OAAO,GAAG,IAAI;EACrB5+K,MAAM,CAAC6+K,aAAa,GAAG,IAAI;EAC3B7+K,MAAM,CAACgmC,UAAU,GAAG9lC,aAAa,CAAC8lC,UAAU;EAC5ChmC,MAAM,CAACimC,QAAQ,GAAG/lC,aAAa,CAAC+lC,QAAQ;EACxCjmC,MAAM,CAAC8+K,gBAAgB,GAAG,KAAK;EAE/B9+K,MAAM,CAAC++K,QAAQ,GAAG,EAAE;EACpB,KAAK,IAAIvqK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtU,aAAa,CAAC6lC,OAAO,EAAEvxB,CAAC,EAAE,EAC1CxU,MAAM,CAAC++K,QAAQ,CAAC14K,IAAI,CAAC,IAAI,CAAC;;EAE9B;EACArG,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB7rB,MAAM,CAAC8+K,gBAAgB,GAAGJ,MAAM,CAACxuG,OAAO,CAAC+nC,MAAM,CAAC6mE,gBAAgB,IAAI,KAAK;IACzEt+K,QAAQ,CAAC,YAAY;MACjBH,aAAa,CAAC40E,iBAAiB,CAAC,CAAC;MACjCnxE,CAAC,CAACwc,QAAQ,CAAC,CAAC0zC,EAAE,CAAC,SAAS,EAAEgrH,gBAAgB,CAAC;IAC/C,CAAC,CAAC;IAEFh/K,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;EAC7B,CAAC;EAED7sB,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EAAE,UAAS0iD,MAAM,EAAEC,MAAM,EAAE;IAC7DrrD,MAAM,CAACimC,QAAQ,GAAGmlB,MAAM;EAC5B,CAAC,CAAC;EAEFprD,MAAM,CAACqC,GAAG,CAAC,UAAU,EAAE,YAAY;IAC/ByB,CAAC,CAACwc,QAAQ,CAAC,CAAC2yC,MAAM,CAAC,SAAS,EAAE+rH,gBAAgB,CAAC;EACnD,CAAC,CAAC;EAEF,SAASA,gBAAgBA,CAACz9J,CAAC,EAAC;IACxB,IAAGvhB,MAAM,CAAC4+K,OAAO,EAAC;MACd,IAAIr9J,CAAC,CAAC+5C,OAAO,IAAI,EAAE,IAAI/5C,CAAC,CAAC+5C,OAAO,IAAI,EAAE,IAAM/5C,CAAC,CAAC+5C,OAAO,IAAI,EAAE,IAAI/5C,CAAC,CAAC+5C,OAAO,IAAI,GAAI,EAC5Et7D,MAAM,CAAC+3D,QAAQ,CAACx2C,CAAC,CAAC8+B,GAAG,CAAC,CAAC,KACtB,IAAG9+B,CAAC,CAAC+5C,OAAO,KAAK,CAAC,EACnBt7D,MAAM,CAAC+3D,QAAQ,CAAC,WAAW,CAAC,CAAC,KAC5B,IAAGx2C,CAAC,CAAC+5C,OAAO,KAAK,EAAE,EACpBt7D,MAAM,CAACi/K,IAAI,CAAC,CAAC;IACrB;EACJ;EAAC;EAEDj/K,MAAM,CAACk/K,QAAQ,GAAG,KAAK;EACvBl/K,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClCrsB,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACwe,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACZ;EACQ;EAAC;EAEDpqB,MAAM,CAAC+3D,QAAQ,GAAG,UAAU1iB,CAAC,EAAE;IAC3B70C,QAAQ,CAAC,YAAY;MACjB,IAAI60C,CAAC,IAAI,WAAW,EAAE;QAClB,KAAK,IAAI7gC,CAAC,GAAIxU,MAAM,CAAC++K,QAAQ,CAAC34K,MAAM,GAAG,CAAE,EAAGoO,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;UACrD,IAAIxU,MAAM,CAAC++K,QAAQ,CAACvqK,CAAC,CAAC,IAAI,IAAI,EAAE;YAC5BxU,MAAM,CAAC++K,QAAQ,CAACvqK,CAAC,CAAC,GAAG,IAAI;YACzB;UACJ;QACJ;MACJ,CAAC,MACI;QACD,KAAK,IAAIA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAAC++K,QAAQ,CAAC34K,MAAM,EAAEoO,CAAC,EAAE,EAAE;UAC7C,IAAIxU,MAAM,CAAC++K,QAAQ,CAACvqK,CAAC,CAAC,IAAI,IAAI,EAAE;YAC5BxU,MAAM,CAAC++K,QAAQ,CAACvqK,CAAC,CAAC,GAAG6gC,CAAC;YACtB;UACJ;QACJ;MAEJ;MAEAr1C,MAAM,CAACk/K,QAAQ,GAAGl/K,MAAM,CAAC++K,QAAQ,CAAC/+K,MAAM,CAAC++K,QAAQ,CAAC34K,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;IACzE,CAAC,CAAC;EACN,CAAC;EAEDpG,MAAM,CAACi/K,IAAI,GAAG,YAAY;IACtBn7K,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIw9F,GAAG,GAAG,EAAE;IACZ,KAAK,IAAI/sF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAAC++K,QAAQ,CAAC34K,MAAM,EAAEoO,CAAC,EAAE,EAC3C+sF,GAAG,IAAIvhG,MAAM,CAAC++K,QAAQ,CAACvqK,CAAC,CAAC;IAE7BgV,YAAY,CAACi5E,OAAO,CAAClB,GAAG,CAAC,CACxBv9F,IAAI,CAAC,YAAY;MACVF,CAAC,CAACO,SAAS,CAAC,CAAC;MACb;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MAEArE,MAAM,CAAC8+K,gBAAgB,GAAG,IAAI;MAC9B9+K,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IAC7B,CAAC,CAAC,SACA,CAAC,UAAU1oB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAACyiE,KAAK,GAAG,YAAY;IACvB3+D,CAAC,CAACC,OAAO,CAAC,CAAC;IAEXylB,YAAY,CAACi5E,OAAO,CAAC,IAAI,CAAC,CACzBz+F,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAACowE,cAAc,CAAC;QACzBr8D,KAAK,EAAE,EAAE;QACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB;MAC3D,CAAC,EAAE,YAAW;QACVhB,QAAQ,CAAC,YAAU;UACfk+K,MAAM,CAACS,YAAY,CAAC;YAChBL,gBAAgB,EAAE;UACtB,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,CAAC,SACI,CAAC,UAAU36K,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAACwwJ,YAAY,GAAG,YAAW;IAC7B3mI,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;AC1IPhtB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,iBAAiB,EAClD,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EACtI,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,0BAA0B,EAC/F,UAAUC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAEjpB,SAAS,EAAEL,aAAa,EAAE2X,YAAY,EAAEgpG,iBAAiB,EAAEC,YAAY,EAAE3gH,YAAY,EAC7HE,aAAa,EAAEG,QAAQ,EAAEC,cAAc,EAAE6iF,cAAc,EAAEk7E,wBAAwB,EAAE;EAEnF;EACAv+J,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE;EAAG,CAAC,CAAC,CAAC,CAAC;;EAElEjqB,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,IAAI,GAAG;EAAK,CAAC;EAC5DpC,MAAM,CAACghH,KAAK,GAAG;IAAE,QAAQ,EAAG3hH,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAI,GAAG,GAAG;EAAK,CAAC;EACpEpC,MAAM,CAACo/K,gBAAgB,GAAG,SAAS;EACnCp/K,MAAM,CAACq/K,QAAQ,GAAG;IACdC,cAAc,EAAE,IAAI;IACpBC,aAAa,EAAE;EACnB,CAAC;EAEDv/K,MAAM,CAACw/K,eAAe,GAAGlgL,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;;EAE7D;EACA92C,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxBhU,YAAY,CAAC++E,UAAU,CAAC,CAAC;IACzBiqB,iBAAiB,CAACjqB,UAAU,CAAC,CAAC;IAE9Bp2F,QAAQ,CAAC,YAAY;MACjBH,aAAa,CAAC40E,iBAAiB,CAAC,CAAC;IACrC,CAAC,CAAC;IAEFj1E,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;EAE7B,CAAC;EAED7sB,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClCrsB,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EACDhL,MAAM,CAACT,MAAM,GAAGW,aAAa,CAACX,MAAM;EAEpCS,MAAM,CAAC43F,SAAS,GAAG,CACf;IAAE1vF,IAAI,EAAE,OAAO;IAAEqN,KAAK,EAAE,CAAC;IAAEkqK,MAAM,EAAE;EAAI,CAAC,EACxC;IAAEv3K,IAAI,EAAE,OAAO;IAAEqN,KAAK,EAAE,CAAC;IAAEkqK,MAAM,EAAE;EAAI,CAAC,EACxC;IAAEv3K,IAAI,EAAE,OAAO;IAAEqN,KAAK,EAAE,CAAC;IAAEkqK,MAAM,EAAE;EAAI,CAAC,CAC3C;EAEDz/K,MAAM,CAACiiH,cAAc,GAAGnB,YAAY,CAAC1nB,iBAAiB,CAAC,CAAC;EACxDp5F,MAAM,CAAC0/K,aAAa,GAAG,EAAE;EAEzB,IAAI,CAACl2J,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACZ;EACQ;EAAC;EAEDpqB,MAAM,CAAC82F,QAAQ,GAAG52F,aAAa,CAAC+tC,kBAAkB,CAAC,IAAI,CAAC;EACxDjuC,MAAM,CAAC2/K,aAAa,GAAGz/K,aAAa,CAACuuC,uBAAuB,CAAC,IAAI,CAAC;EAElEzpC,OAAO,CAACC,GAAG,CAAC,UAAU,EAAEjF,MAAM,CAAC82F,QAAQ,CAAC;;EAExC;EACA92F,MAAM,CAACmlK,eAAe,GAAGjlK,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;EAC/D,IAAIvvC,MAAM,CAACmlK,eAAe,CAACya,0BAA0B,IAAI,IAAI,IACzD5/K,MAAM,CAACmlK,eAAe,CAACya,0BAA0B,IAAIjvK,SAAS,EAAE;IAC5D3Q,MAAM,CAACmlK,eAAe,CAACya,0BAA0B,GAAG,IAAI;EAChE;EAGA,IAAI5/K,MAAM,CAACmlK,eAAe,CAAC0a,qBAAqB,IAAI,IAAI,EAAE;IACtD7/K,MAAM,CAACmlK,eAAe,CAAC0a,qBAAqB,GAAG,IAAI;EACvD;EAEA7/K,MAAM,CAACmlK,eAAe,CAACr4H,YAAY,GAAG5sC,aAAa,CAAC4sC,YAAY;EAEhE9sC,MAAM,CAAC8/K,qBAAqB,GAAG;IAAEz/H,GAAG,EAAErgD,MAAM,CAACmlK,eAAe,CAAC31H;EAAY,CAAC;EAE1ExvC,MAAM,CAAC0I,MAAM,CAAC,2BAA2B,EACrC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE1B,IAAI6nB,QAAQ,GAAGzwB,MAAM,CAAC+/K,SAAS,CAACh6K,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAAE,OAAOA,EAAE,CAACygD,GAAG,KAAK13C,QAAQ;IAAE,CAAC,CAAC;IACrF,IAAIq3K,YAAY,GAAGvvJ,QAAQ,CAAC,CAAC,CAAC,CAAC7mB,IAAI;IACnC5J,MAAM,CAAC8/K,qBAAqB,CAACG,UAAU,GAAGD,YAAY;IAEtD,IAAI;MACA,IAAIhgL,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,IAAG,4BAA4B,EAAE;QACjErgD,MAAM,CAACkgL,yBAAyB,CAAC,CAAC;MACtC;IACJ,CAAC,CAAC,OAAM3+J,CAAC,EAAE,CACX;;IAGA;IACA;IACA;IACA;IACA;EACJ,CACJ,CAAC;EAEDvhB,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,GAAGrgD,MAAM,CAACmlK,eAAe,CAAC31H,WAAW;;EAErE;;EAEAxvC,MAAM,CAAC+/K,SAAS,GAAGz8F,cAAc,CAAC68F,qBAAqB,CAAC,CAAC;EAEzD,IAAIC,WAAW,GAAGpgL,MAAM,CAAC+/K,SAAS,CAACh6K,MAAM,CAAC,UAAUnG,EAAE,EAAE;IAAE,OAAOA,EAAE,CAACygD,GAAG,KAAKrgD,MAAM,CAACmlK,eAAe,CAAC31H,WAAW;EAAE,CAAC,CAAC;EAClH,IAAI4wI,WAAW,CAACh6K,MAAM,IAAI,CAAC,EAAE;IACzBpG,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,GAAG,eAAe;EACtD;EACA;;EAEArgD,MAAM,CAACqgL,YAAY,GAAGrgL,MAAM,CAAC43F,SAAS,CAAC,CAAC,CAAC;EACzC;;EAEA53F,MAAM,CAACsgL,cAAc,GAAGpgL,aAAa,CAAC2tC,iBAAiB,CAAC,CAAC;EAEzD,IAAG,CAAC,CAAC7tC,MAAM,CAAC82F,QAAQ,IAAI,CAAC,CAAC92F,MAAM,CAAC82F,QAAQ,CAACxoD,WAAW,EAAE;IACnD,IAAIiyI,EAAE,GAAGvgL,MAAM,CAACsgL,cAAc,CAACv6K,MAAM,CAAC,UAASm9B,CAAC,EAAE;MAAC,OAAOA,CAAC,CAAC3tB,KAAK,KAAKvV,MAAM,CAAC82F,QAAQ,CAACxoD,WAAW;IAAC,CAAC,CAAC;IACpG,IAAGiyI,EAAE,CAACn6K,MAAM,GAAC,CAAC,EACVpG,MAAM,CAACq/K,QAAQ,CAACC,cAAc,GAAGiB,EAAE,CAAC,CAAC,CAAC,CAAChrK,KAAK;EACpD;EAEA,IAAG,CAACvV,MAAM,CAACq/K,QAAQ,CAACC,cAAc,EAC9Bt/K,MAAM,CAACq/K,QAAQ,CAACC,cAAc,GAAGt/K,MAAM,CAACsgL,cAAc,CAAC,CAAC,CAAC,CAAC/qK,KAAK;EAEnE,IAAGvV,MAAM,CAACq/K,QAAQ,CAACC,cAAc,IAAI,MAAM,IAAIt/K,MAAM,CAACq/K,QAAQ,CAACC,cAAc,IAAI,OAAO,EAAE;IACtFt/K,MAAM,CAAC0/K,aAAa,GAAG7nK,YAAY,CAAC2nG,gBAAgB,CAACx/G,MAAM,CAACq/K,QAAQ,CAACC,cAAc,CAAC;EACxF;EAEA,IAAG,CAAC,CAACt/K,MAAM,CAAC82F,QAAQ,IAAI,CAAC,CAAC92F,MAAM,CAAC82F,QAAQ,CAACvoD,YAAY,EAAE;IACpD,IAAIiyI,MAAM,GAAGxgL,MAAM,CAAC0/K,aAAa,CAAC35K,MAAM,CAAC,UAASm9B,CAAC,EAAE;MAAC,OAAOA,CAAC,CAACo7E,UAAU,KAAKt+G,MAAM,CAAC82F,QAAQ,CAACvoD,YAAY;IAAC,CAAC,CAAC;IAC7G,IAAGiyI,MAAM,CAACp6K,MAAM,GAAG,CAAC,EAChBpG,MAAM,CAACq/K,QAAQ,CAACE,aAAa,GAAGiB,MAAM,CAAC,CAAC,CAAC;EACjD;EAEA,IAAG,CAACxgL,MAAM,CAACq/K,QAAQ,CAACE,aAAa,EAC7Bv/K,MAAM,CAACq/K,QAAQ,CAACE,aAAa,GAAG,EAAE;EAEtCv/K,MAAM,CAACygL,mBAAmB,GAAGvgL,aAAa,CAAC8tC,sBAAsB,CAAC,CAAC;EACnEhuC,MAAM,CAAC0gL,mBAAmB,GAAG1gL,MAAM,CAACygL,mBAAmB,CAAC,CAAC,CAAC,CAAClrK,KAAK;EAEhEvV,MAAM,CAAC0I,MAAM,CAAC,yBAAyB,EACrC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IACtB,QAAQD,QAAQ;MACZ,KAAK,QAAQ;QACT3I,MAAM,CAAC82F,QAAQ,CAACtoD,WAAW,GAAG,SAAS;QACvCxuC,MAAM,CAACq/K,QAAQ,CAACE,aAAa,GAAG,EAAE;QAClC;MACJ,KAAK,UAAU;QACXv/K,MAAM,CAAC82F,QAAQ,CAACtoD,WAAW,GAAG,mBAAmB;QACjDxuC,MAAM,CAACq/K,QAAQ,CAACE,aAAa,GAAG,EAAE;QAClC;MACJ,KAAK,OAAO;QACV,IAAG32K,QAAQ,IAAIA,QAAQ,IAAID,QAAQ,EAAE;UACjC3I,MAAM,CAACq/K,QAAQ,CAACE,aAAa,GAAG,EAAE;UAClCv/K,MAAM,CAAC82F,QAAQ,CAACtoD,WAAW,GAAG,EAAE;UAChCxuC,MAAM,CAAC82F,QAAQ,CAACsjB,SAAS,GAAG,EAAE;QAClC;QACEp6G,MAAM,CAAC0/K,aAAa,GAAG7nK,YAAY,CAAC2nG,gBAAgB,CAAC,OAAO,CAAC;QAC7Dh/G,QAAQ,CAAC,YAAY;UACnBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;UACrCV,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACzC,CAAC,EAAE,CAAC,CAAC;QACH;MACJ;QACE,IAAG,CAACxE,MAAM,CAAC82F,QAAQ,CAACtoD,WAAW,EAAC;UAC5BxuC,MAAM,CAAC82F,QAAQ,CAACtoD,WAAW,GAAG,gBAAgB;QAClD;QACA,IAAG5lC,QAAQ,IAAIA,QAAQ,IAAID,QAAQ,EAAE;UACjC3I,MAAM,CAACq/K,QAAQ,CAACE,aAAa,GAAG,EAAE;UAClCv/K,MAAM,CAAC82F,QAAQ,CAACtoD,WAAW,GAAG,EAAE;UAChCxuC,MAAM,CAAC82F,QAAQ,CAACsjB,SAAS,GAAG,EAAE;QAClC;QACAp6G,MAAM,CAAC0/K,aAAa,GAAG7nK,YAAY,CAAC2nG,gBAAgB,CAAC,MAAM,CAAC;QAC5Dh/G,QAAQ,CAAC,YAAY;UACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;UACrCV,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACzC,CAAC,EAAE,CAAC,CAAC;QACH;IACR;EACR,CACF,CAAC;EAEDxE,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EACpC,UAAUC,QAAQ,EAAE;IACZ,IAAGA,QAAQ,EAAE;MACX,IAAIg4K,YAAY,GAAG,CAAC;MACpB3gL,MAAM,CAAC0/K,aAAa,CAAChzK,OAAO,CAAC,UAAU6U,CAAC,EAAErb,GAAG,EAAE;QAC3C,IAAIqb,CAAC,CAAC+8F,UAAU,IAAI31G,QAAQ,IAAI4Y,CAAC,CAACs+F,SAAS,EAAE;UACzC8gE,YAAY,GAAGp/J,CAAC,CAACs+F,SAAS;UAC1B,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MAEF7/G,MAAM,CAAC43F,SAAS,CAAClrF,OAAO,CAAC,UAAU6U,CAAC,EAAErb,GAAG,EAAE;QACvC,IAAIqb,CAAC,CAAChM,KAAK,IAAIorK,YAAY,EAAE;UACzB3gL,MAAM,CAACqgL,YAAY,GAAG;YAClBZ,MAAM,EAAEl+J,CAAC,CAACk+J,MAAM;YAChBv3K,IAAI,EAAEqZ,CAAC,CAACrZ,IAAI;YACZqN,KAAK,EAAEgM,CAAC,CAAChM;UACb,CAAC;UACD,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MAEF/U,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACrCV,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC,CAAC,EAAE,CAAC,CAAC;IAEP;EACR,CACF,CAAC;EAEDxE,MAAM,CAAC0I,MAAM,CAAC,qBAAqB,EACjC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB,QAAQD,QAAQ;QACZ;AACtB;AACA;AACA;AACA;QACsB;UACI3I,MAAM,CAAC2/K,aAAa,CAAC3wI,gBAAgB,GAAG,MAAM;UAC9C;MACR;IACJ;EACJ,CACD,CAAC;EAEFhvC,MAAM,CAAC4gL,aAAa,GAAG,YAAY;IAC/B5gL,MAAM,CAAC43F,SAAS,CAAClrF,OAAO,CAAC,UAAU6U,CAAC,EAAErb,GAAG,EAAE;MACvC,IAAIqb,CAAC,CAAChM,KAAK,IAAIvV,MAAM,CAAC82F,QAAQ,CAAC3oD,gBAAgB,EAAE;QAC7CnuC,MAAM,CAACqgL,YAAY,GAAG;UAClBZ,MAAM,EAAEl+J,CAAC,CAACk+J,MAAM;UAChBv3K,IAAI,EAAEqZ,CAAC,CAACrZ,IAAI;UACZqN,KAAK,EAAEgM,CAAC,CAAChM;QACb,CAAC;QACD,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEFvV,MAAM,CAACsgL,cAAc,CAAC5zK,OAAO,CAAC,UAAU6U,CAAC,EAAErb,GAAG,EAAE;MAC5C,IAAIqb,CAAC,CAAChM,KAAK,IAAIvV,MAAM,CAAC82F,QAAQ,CAACxoD,WAAW,EAAE;QACxCtuC,MAAM,CAACq/K,QAAQ,CAACC,cAAc,GAAG/9J,CAAC,CAAChM,KAAK;QACxC,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEFvV,MAAM,CAAC0/K,aAAa,CAAChzK,OAAO,CAAC,UAAU6U,CAAC,EAAErb,GAAG,EAAE;MAC3C,IAAIqb,CAAC,CAAC+8F,UAAU,IAAIt+G,MAAM,CAAC82F,QAAQ,CAACvoD,YAAY,EAAE;QAC9CvuC,MAAM,CAACq/K,QAAQ,CAACE,aAAa,GAAGh+J,CAAC,CAAC+8F,UAAU;QAC5C,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEF99G,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACrCV,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,EAAE,CAAC,CAAC;EACT,CAAC;EAEDhE,QAAQ,CAAC,YAAY;IACjB0E,WAAW,CAAC,YAAW;MACnB,IAAItF,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC;MAChB,IAAIlE,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,KAAK,qBAAqB,EAAE;QACpC1K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC0/K,aAAa,EAAE,UAASz9E,CAAC,EAAE;UAC9C,IAAI/+D,CAAC,GACD,wBAAwB,GACxB++D,CAAC,CAACzgF,OAAO,GACT,QAAQ,GACR,+CAA+C,IAC9C,CAAC,CAACygF,CAAC,CAAC2d,UAAU,GAAG3d,CAAC,CAAC2d,UAAU,CAACjrG,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GACrD,QAAQ;UACZ,IAAI+lH,EAAE,GAAG96H,EAAE,CAACyR,IAAI,CAAC,WAAW,GAAG4wF,CAAC,CAAC0d,OAAO,CAAC;UAEzC+a,EAAE,CAACj7G,IAAI,CAACyjB,CAAC,CAAC;QACd,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IACFp/B,CAAC,CAAC,4BAA4B,CAAC,CAACsZ,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;EACxD,CAAC,EAAE,IAAI,CAAC;;EAGR;EACApd,MAAM,CAACg8F,sBAAsB,GAAGv7F,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;EAC/ExB,MAAM,CAACi8F,mBAAmB,GAAGx7F,cAAc,CAACe,SAAS,CAAC,+DAA+D,CAAC;EACtHxB,MAAM,CAACk8F,sBAAsB,GAAGl8F,MAAM,CAACk8F,sBAAsB,GACzD,CAAC;IACGtyF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;IACxC+T,KAAK,EAAE;EACX,CAAC,CAAC;EAENvV,MAAM,CAACm8F,cAAc,GAAG,UAAUC,IAAI,EAAE;IACpC,QAAQA,IAAI;MACR,KAAK,QAAQ;QACT9Y,cAAc,CAAC+Y,wBAAwB,CAACr8F,MAAM,EAAE,oBAAoB,CAAC;QACrE;IACR;EACJ,CAAC;EAEDA,MAAM,CAAC6gL,QAAQ,GAAG,YAAY;IAE1BxgL,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC;IAC5CrB,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI2H,OAAO,GAAG43E,cAAc,CAACw9F,IAAI,CAAC9gL,MAAM,EAAE,oBAAoB,CAAC;IAE/D0L,OAAO,CAAC1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACxBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;MAC7C/L,aAAa,CAACowE,cAAc,CAAC;QACzBr8D,KAAK,EAAEpU,MAAM,CAACg8F,sBAAsB;QACpCvlD,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,2DAA2D;MAC9F,CAAC,CAAC;MACFxB,MAAM,CAACo/K,gBAAgB,GAAG,MAAM;IACpC,CAAC,CAAC,SACI,CAAC,UAAUj7K,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;MAC7CjM,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC;MACrD9jC,MAAM,CAACo/K,gBAAgB,GAAG,MAAM;IACpC,CAAC,CAAC;EACN,CAAC;EAEDp/K,MAAM,CAAC+gL,UAAU,GAAG,YAAY;IAC5Bj9K,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAOu/E,cAAc,CAACw9F,IAAI,CAAC9gL,MAAM,EAAE,sBAAsB,EAAEA,MAAM,CAACmlK,eAAe,CAAC,CAC7EnhK,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAACowE,cAAc,CAAC;QACzBr8D,KAAK,EAAEpU,MAAM,CAACg8F,sBAAsB;QACpCvlD,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,2DAA2D;MAC9F,CAAC,CAAC;MACFxB,MAAM,CAACo/K,gBAAgB,GAAG,MAAM;IACpC,CAAC,CAAC,SACI,CAAC,UAAUj7K,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,CAAC,CAACF,GAAG,CAAC0/B,QAAQ,IAAI,CAAC,CAAC1/B,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,EACjD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC,CAAC,KAEtD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/BnE,MAAM,CAACo/K,gBAAgB,GAAG,MAAM;IACpC,CAAC,CAAC;EACV,CAAC;EAEDp/K,MAAM,CAACghL,gBAAgB,GAAG,YAAY;IAClCl9K,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAOu/E,cAAc,CAACkY,MAAM,CAACx7F,MAAM,EAAE,sBAAsB,EAAEA,MAAM,CAACmlK,eAAe,CAAC,CAC/EnhK,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAACowE,cAAc,CAAC;QACzBr8D,KAAK,EAAEpU,MAAM,CAACg8F,sBAAsB;QACpCvlD,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,iEAAiE;MACpG,CAAC,CAAC;MACFxB,MAAM,CAACo/K,gBAAgB,GAAG,MAAM;IACpC,CAAC,CAAC,SACI,CAAC,UAAUj7K,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,CAAC,CAACF,GAAG,CAAC0/B,QAAQ,IAAI,CAAC,CAAC1/B,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,EACjD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC,CAAC,KAEtD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/BnE,MAAM,CAACo/K,gBAAgB,GAAG,MAAM;IACpC,CAAC,CAAC;EACV,CAAC;EAEDp/K,MAAM,CAACihL,iBAAiB,GAAG,YAAY;IACnC,IAAM5gI,GAAG,GAAGrgD,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG;IAC5CrgD,MAAM,CAACkhL,wBAAwB,GAAG,KAAK;IAEvC,IAAI;MACA,IAAI,CAAC59F,cAAc,CAAC69F,QAAQ,CAAC9gI,GAAG,CAAC,EAAE;QAC/B;MACJ;IACJ,CAAC,CAAC,OAAO9+B,CAAC,EAAE;MACRphB,YAAY,CAACiE,SAAS,CAACmd,CAAC,CAAC;MACzB;IACJ;IACAvhB,MAAM,CAACmlK,eAAe,CAAC31H,WAAW,GAAG6Q,GAAG;IAExC,IAAIrgD,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,IAAI,oBAAoB,EACxD,OAAOrgD,MAAM,CAACmlK,eAAe,CAACya,0BAA0B;IAE5D,IAAI5/K,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,IAAI,6BAA6B,EACrE;MACI,OAAOrgD,MAAM,CAACmlK,eAAe,CAACtoE,mCAAmC;MACjE,OAAO78F,MAAM,CAACmlK,eAAe,CAACjoE,sCAAsC;MACpE,OAAOl9F,MAAM,CAACmlK,eAAe,CAACxqE,qBAAqB;MACnDt7F,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,OAAO,CAAC;MACvC/pD,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,QAAQ,CAAC;IAC5C;IAEA,IAAIppD,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,IAAI,kBAAkB,EAAE;MACxD,OAAOrgD,MAAM,CAACmlK,eAAe,CAAC0a,qBAAqB;IACvD;IAEA7/K,MAAM,CAACohL,gBAAgB,GAAG,MAAM;IAChC5gL,QAAQ,CAAC,YAAU;MACfsD,CAAC,CAACzE,MAAM,CAAC,CAACmF,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC,CAAC;IACFtE,aAAa,CAACovC,sBAAsB,CAACtvC,MAAM,CAACmlK,eAAe,CAAC;EAChE,CAAC;EAEDnlK,MAAM,CAACqhL,iBAAiB,GAAG,YAAW;IAClC,IAAIrhL,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,KAAK,4BAA4B,EAAE;MACnE,OAAO,CAAC,CAACrgD,MAAM,CAACmlK,eAAe,CAACzuD,sBAAsB;IAC1D,CAAC,MACD,IAAI12G,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,KAAK,6BAA6B,EAAE;MACpE,OAAOngD,aAAa,CAACqmC,wBAAwB;IACjD;IAEA,OAAO,IAAI;EACf,CAAC;EAEDvmC,MAAM,CAACg8F,sBAAsB,GAAGv7F,cAAc,CAACe,SAAS,CAAC,uBAAuB,CAAC;EACjFxB,MAAM,CAACi8F,mBAAmB,GAAGx7F,cAAc,CAACe,SAAS,CAAC,+DAA+D,CAAC;EACtHxB,MAAM,CAACk8F,sBAAsB,GAAGl8F,MAAM,CAACk8F,sBAAsB,GACzD,CAAC;IACGtyF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;IACxC+T,KAAK,EAAE;EACX,CAAC,CAAC;EAENvV,MAAM,CAACm8F,cAAc,GAAG,UAAUC,IAAI,EAAE;IACpC,QAAQA,IAAI;MACR,KAAK,QAAQ;QACT9Y,cAAc,CAAC+Y,wBAAwB,CAACr8F,MAAM,EAAE,6BAA6B,CAAC;QAC9E;IACR;EACJ,CAAC;EAEDA,MAAM,CAACshL,iBAAiB,GAAG,YAAY;IAEnC,IAAIphL,aAAa,CAACqmC,wBAAwB,EACtCvmC,MAAM,CAACuhL,oCAAoC,CAAC,CAAC,CAAC,KAE9CvhL,MAAM,CAACwhL,uBAAuB,CAAC,CAAC;EACxC,CAAC;EAEDxhL,MAAM,CAACwhL,uBAAuB,GAAG,YAAY;IAEzCnhL,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC;IAC5CrB,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI2H,OAAO,GAAG43E,cAAc,CAACw9F,IAAI,CAAC9gL,MAAM,EAAE,6BAA6B,CAAC;IAExE0L,OAAO,CAAC1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACxBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;MAC7C/L,aAAa,CAACowE,cAAc,CAAC;QACzBr8D,KAAK,EAAEpU,MAAM,CAACg8F,sBAAsB;QACpCvlD,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,2DAA2D;MAC9F,CAAC,CAAC;MACFxB,MAAM,CAACo/K,gBAAgB,GAAG,SAAS;MACnCl/K,aAAa,CAACqmC,wBAAwB,GAAG,IAAI;IACjD,CAAC,CAAC,SACI,CAAC,UAAUpiC,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;MAC7CjM,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC;MACrD9jC,MAAM,CAACo/K,gBAAgB,GAAG,SAAS;IACvC,CAAC,CAAC;EACN,CAAC;EAEDp/K,MAAM,CAACyhL,uBAAuB,GAAG,YAAY;IACzC39K,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAOu/E,cAAc,CAACkY,MAAM,CAACx7F,MAAM,EAAE,6BAA6B,EAAEA,MAAM,CAACmlK,eAAe,CAAC,CACtFnhK,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAACowE,cAAc,CAAC;QACzBr8D,KAAK,EAAEpU,MAAM,CAACg8F,sBAAsB;QACpCvlD,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,iEAAiE;MACpG,CAAC,CAAC;MACFxB,MAAM,CAACo/K,gBAAgB,GAAG,SAAS;MACnC,OAAOp/K,MAAM,CAACmlK,eAAe,CAACxqE,qBAAqB;MACnD,OAAO36F,MAAM,CAACmlK,eAAe,CAACtoE,mCAAmC;MACjE,OAAO78F,MAAM,CAACmlK,eAAe,CAACjoE,sCAAsC;MACpEh9F,aAAa,CAACqmC,wBAAwB,GAAG,KAAK;IAClD,CAAC,CAAC,SACI,CAAC,UAAUpiC,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,CAAC,CAACF,GAAG,CAAC0/B,QAAQ,IAAI,CAAC,CAAC1/B,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,EACjD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC,CAAC,KAEtD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/BnE,MAAM,CAACo/K,gBAAgB,GAAG,SAAS;IACvC,CAAC,CAAC;EACV,CAAC;EAEDp/K,MAAM,CAAC0hL,2BAA2B,GAAG,YAAY;IAC7C1hL,MAAM,CAACohL,gBAAgB,GAAG,SAAS;IACnC5gL,QAAQ,CAAC,YAAU;MACfsD,CAAC,CAACzE,MAAM,CAAC,CAACmF,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EACD;;EAEAxE,MAAM,CAAC4gL,aAAa,CAAC,CAAC;EACtB;;EAEA5gL,MAAM,CAACwQ,aAAa,GAAG,UAAUxI,IAAI,EAAEksJ,OAAO,EAAE;IAC5C,IAAIlsJ,IAAI,CAAC4I,MAAM,EAAE;MACb,IAAI5I,IAAI,CAAC6I,MAAM,CAACC,QAAQ,EACpB,OAAOojJ,OAAO,GAAG,4CAA4C,GAAG,0BAA0B,CAAC,KAE3F,OAAOA,OAAO,GAAG,8CAA8C,GAAG,4BAA4B;IACtG;EACJ,CAAC;EAEDl0J,MAAM,CAAC2hL,YAAY,GAAG,YAAY;IAC9B3hL,MAAM,CAAC82F,QAAQ,GAAG,CAAC,CAAC;IACpB92F,MAAM,CAACqgL,YAAY,GAAGrgL,MAAM,CAAC43F,SAAS,CAAC,CAAC,CAAC;IACzC53F,MAAM,CAACq/K,QAAQ,CAACC,cAAc,GAAGt/K,MAAM,CAACsgL,cAAc,CAAC,CAAC,CAAC,CAAC/qK,KAAK;IAC/DvV,MAAM,CAACq/K,QAAQ,CAACE,aAAa,GAAG,EAAE;IAClC;EACJ,CAAC;EAEDv/K,MAAM,CAAC4hL,YAAY,GAAG,EAAE;EACxB5hL,MAAM,CAAC6hL,iBAAiB,GAAG,EAAE;EAE7B7hL,MAAM,CAAC8hL,eAAe,GAAG,YAAY;IACjCh+K,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8T,YAAY,CAACyjG,yBAAyB,CAACt7G,MAAM,CAACq/K,QAAQ,CAACC,cAAc,CAAC,CAACt7K,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACvF;MACA;MACArE,OAAO,CAACC,GAAG,CAAC,YAAY,GAAGyyB,IAAI,CAACC,SAAS,CAACtuB,GAAG,CAAC,CAAC;MAE/CvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,CAACgF,GAAG,IAAIA,GAAG,CAACjD,MAAM,IAAI,CAAC,EAAE;QACzBjG,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,wEAAwE,CAAC,CAAC;MAC9H,CAAC,MACI;QACDxB,MAAM,CAAC4hL,YAAY,GAAGv4K,GAAG;QAEzB,IAAIA,GAAG,CAACjD,MAAM,IAAI,CAAC,EAAE;UACjBpG,MAAM,CAAC+hL,kBAAkB,CAAC14K,GAAG,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC,MACI;UACD;UACAhJ,aAAa,CAAC8E,UAAU,CAAC,gCAAgC,CAAC;QAC9D;MACJ;IACJ,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAACgiL,oBAAoB,GAAG,YAAY;IACtCl+K,CAAC,CAACC,OAAO,CAAC,CAAC;IACX88G,iBAAiB,CAAC3pB,8BAA8B,CAACl3F,MAAM,CAACq/K,QAAQ,CAACC,cAAc,CAAC,CAACt7K,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjG;MACA;MACArE,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAGyyB,IAAI,CAACC,SAAS,CAACtuB,GAAG,CAAC,CAAC;MAErDvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,CAACgF,GAAG,IAAIA,GAAG,CAACjD,MAAM,IAAI,CAAC,EAAE;QACzBjG,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,oFAAoF,CAAC,CAAC;MAC1I,CAAC,MACI;QACDxB,MAAM,CAAC6hL,iBAAiB,GAAGx4K,GAAG;QAE9B,IAAIA,GAAG,CAACjD,MAAM,IAAI,CAAC,EAAE;UACjBpG,MAAM,CAACiiL,uBAAuB,CAAC54K,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,MACI;UACD;UACAhJ,aAAa,CAAC8E,UAAU,CAAC,qCAAqC,CAAC;QACnE;MACJ;IACJ,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAACi/K,IAAI,GAAG,YAAY;IACtB,IAAG,CAACj/K,MAAM,CAACq/K,QAAQ,CAACC,cAAc,IAAI,MAAM,IACzCt/K,MAAM,CAACq/K,QAAQ,CAACC,cAAc,IAAI,OAAO,KAC5C,CAACt/K,MAAM,CAACq/K,QAAQ,CAACE,aAAa,EAAE;MAC5Bp/K,YAAY,CAACiE,SAAS,CAAC,6BAA6B,CAAC;MACrD;IACJ;IAEApE,MAAM,CAAC43F,SAAS,CAAClrF,OAAO,CAAC,UAAU6U,CAAC,EAAErb,GAAG,EAAE;MACvC,IAAIqb,CAAC,CAACrZ,IAAI,IAAIlI,MAAM,CAACqgL,YAAY,CAACn4K,IAAI,EAAE;QACpClI,MAAM,CAACqgL,YAAY,GAAG;UAClBZ,MAAM,EAAEl+J,CAAC,CAACk+J,MAAM;UAChBv3K,IAAI,EAAEqZ,CAAC,CAACrZ,IAAI;UACZqN,KAAK,EAAEgM,CAAC,CAAChM;QACb,CAAC;QACD,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEFvV,MAAM,CAAC82F,QAAQ,CAAC3oD,gBAAgB,GAAGnuC,MAAM,CAACqgL,YAAY,CAAC9qK,KAAK;IAC5DvV,MAAM,CAAC82F,QAAQ,CAAC1oD,kBAAkB,GAAGpuC,MAAM,CAACqgL,YAAY,CAACZ,MAAM;IAC/Dz/K,MAAM,CAAC82F,QAAQ,CAACxoD,WAAW,GAAGtuC,MAAM,CAACq/K,QAAQ,CAACC,cAAc;IAC5Dt/K,MAAM,CAAC82F,QAAQ,CAACvoD,YAAY,GAAGvuC,MAAM,CAACq/K,QAAQ,CAACE,aAAa;IAE5D,IAAIv/K,MAAM,CAACq/K,QAAQ,CAACC,cAAc,IAAI,QAAQ,EAAE;MAC5Ct/K,MAAM,CAAC82F,QAAQ,CAACtoD,WAAW,GAAG,SAAS;MACvCxuC,MAAM,CAAC82F,QAAQ,CAACvoD,YAAY,GAAG,EAAE;IACrC;IAEAruC,aAAa,CAACytC,kBAAkB,CAAC3tC,MAAM,CAAC82F,QAAQ,CAAC;IAEjDz2F,aAAa,CAACowE,cAAc,CAAC;MACzBr8D,KAAK,EAAE,EAAE;MACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,mCAAmC;IACtE,CAAC,EAAE,YAAY;MACXqW,YAAY,CAAC++E,UAAU,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF;;IAEA,IAAI/jC,KAAK,GAAG/yD,OAAO,CAACw3C,OAAO,CAAC,iBAAiB,CAAC,CAACub,KAAK,CAAC,CAAC;IACtDA,KAAK,CAACqvH,YAAY,CAACn9K,YAAY,CAAC,CAAC;EACrC,CAAC;EAED/E,MAAM,CAACmiL,cAAc,GAAG,YAAY;IAChCr+K,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8T,YAAY,CAACqkG,sBAAsB,CAAC,CAAC,CAChCl4G,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MAEbhE,aAAa,CAACowE,cAAc,CAAC;QACzBr8D,KAAK,EAAE,EAAE;QACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,mBAAmB;MACtD,CAAC,CAAC;IACV,CAAC,CAAC,SACI,CAAC,UAAU2C,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;EAEDnE,MAAM,CAACoiL,mBAAmB,GAAG,YAAY;IACrCt+K,CAAC,CAACC,OAAO,CAAC,CAAC;IACX88G,iBAAiB,CAACrpB,2BAA2B,CAAC,CAAC,CAC1CxzF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MAEbhE,aAAa,CAACowE,cAAc,CAAC;QACzBr8D,KAAK,EAAE,EAAE;QACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,sBAAsB;MACzD,CAAC,CAAC;IACN,CAAC,CAAC,SACA,CAAC,UAAU2C,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;EAEDnE,MAAM,CAACq8G,SAAS,GAAG,YAAY;IAC3Bv4G,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8T,YAAY,CAACwkG,SAAS,CAAC,CAAC,CACnBr4G,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACA,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAACy3F,cAAc,GAAG,YAAY;IAChC3zF,CAAC,CAACC,OAAO,CAAC,CAAC;IACX88G,iBAAiB,CAACppB,cAAc,CAAC,CAAC,CAC7BzzF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACA,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;;EAED;EACAnE,MAAM,CAAC+hL,kBAAkB,GAAG,UAAU7nK,GAAG,EAAE;IAC3C;;IAEIpa,OAAO,CAAC+F,IAAI,CAACqU,GAAG,EAAEla,MAAM,CAAC82F,QAAQ,CAAC;IAClC;IACA92F,MAAM,CAAC4gL,aAAa,CAAC,CAAC;IAEtBvgL,aAAa,CAACowE,cAAc,CAAC;MACzBr8D,KAAK,EAAE,EAAE;MACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wCAAwC;IAC3E,CAAC,CAAC;EACN,CAAC;EAEDxB,MAAM,CAACiiL,uBAAuB,GAAG,UAAU/nK,GAAG,EAAE;IAC5Cla,MAAM,CAACqiL,iBAAiB,CAACzxK,MAAM,GAAG,IAAI;IAEtC9Q,OAAO,CAAC+F,IAAI,CAACqU,GAAG,EAAEla,MAAM,CAAC82F,QAAQ,CAAC;IAClC;IACA;;IAEAz2F,aAAa,CAACowE,cAAc,CAAC;MACzBr8D,KAAK,EAAE,EAAE;MACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,8CAA8C;IACjF,CAAC,CAAC;EACN,CAAC;EAEDxB,MAAM,CAACsiL,aAAa,GAAG,MAAM;EAE7BtiL,MAAM,CAACuiL,gBAAgB,GAAG,YAAY;IAClCviL,MAAM,CAACsiL,aAAa,GAAG,MAAM;IAC7B,IAAIz0J,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAW;MAChD/pB,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAACwiL,iBAAiB,GAAG,YAAY;IACnCxiL,MAAM,CAACsiL,aAAa,GAAG,MAAM;IAC7BtiL,MAAM,CAACyiL,SAAS,GAAG,EAAE;IACrB,IAAI50J,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC0iL,eAAe,GAAGxiL,aAAa,CAAC+uC,kBAAkB,CAAC,CAAC;EAE3DjvC,MAAM,CAAC0I,MAAM,CAAC,+BAA+B,EACzC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB1I,aAAa,CAACkvC,kBAAkB,CAACpvC,MAAM,CAAC0iL,eAAe,CAAC;IAC5D;EACJ,CACJ,CAAC;EAED1iL,MAAM,CAAC0I,MAAM,CAAC,kCAAkC,EAC5C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB1I,aAAa,CAACkvC,kBAAkB,CAACpvC,MAAM,CAAC0iL,eAAe,CAAC;IAC5D;EACJ,CACJ,CAAC;EAED1iL,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvBpI,QAAQ,CAAC,YAAU;QACfsD,CAAC,CAACzE,MAAM,CAAC,CAACmF,OAAO,CAAC,QAAQ,CAAC;MAC/B,CAAC,CAAC;IACN;EACJ,CACJ,CAAC;EAEDxE,MAAM,CAACyiL,SAAS,GAAG,EAAE;EACrBziL,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,UAAUC,KAAK,EAAEoY,OAAO,EAAE;IACjD1V,OAAO,CAACC,GAAG,CAAC,gBAAgB,GAAGyV,OAAO,CAAC;IACvC1a,MAAM,CAACyiL,SAAS,GAAG/nK,OAAO;IAC1B1a,MAAM,CAACsiL,aAAa,GAAG,MAAM;EACjC,CAAC,CAAC;EAEFtiL,MAAM,CAAC2iL,SAAS,GAAG,YAAU;IACzB3iL,MAAM,CAACsiL,aAAa,GAAG,MAAM;IAC7BtiL,MAAM,CAACyiL,SAAS,GAAG,EAAE;EACzB,CAAC;EAEDziL,MAAM,CAAC4iL,gBAAgB,GAAG,YAAW;IACjC,OAAO5iL,MAAM,CAACsiL,aAAa,IAAI,MAAM;EACzC,CAAC;EAEDtiL,MAAM,CAAC6iL,gBAAgB,GAAG,YAAY;IAElC7iL,MAAM,CAACohL,gBAAgB,GAAG,SAAS;IACnC,IAAIphL,MAAM,CAAC8/K,qBAAqB,IAAI9/K,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,IAAIrgD,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,IAAI,eAAe,EAAE;MACzHrgD,MAAM,CAACihL,iBAAiB,CAAC,CAAC;IAC9B;IAEA,IAAIpzJ,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IAExCrtB,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDxE,MAAM,CAAC8iL,iBAAiB,GAAG,YAAY;IACnC,IAAM3d,eAAe,GAAGjlK,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAC9D,IAAMC,WAAW,GAAG21H,eAAe,IAAIA,eAAe,CAAC31H,WAAW,GAAG21H,eAAe,CAAC31H,WAAW,GAAG,IAAI;IACvG,IAAKxvC,MAAM,CAAC8/K,qBAAqB,IAAI9/K,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,IAAIrgD,MAAM,CAAC8/K,qBAAqB,CAACz/H,GAAG,IAAI,eAAe,IAAKrgD,MAAM,CAACqhL,iBAAiB,CAAC,CAAC,KAAK7xI,WAAW,IAAI,IAAI,IAAIA,WAAW,IAAI,eAAe,CAAC,EAAE;MACpNxvC,MAAM,CAAC+iL,iCAAiC,CAAC,CAAC;IAC9C,CAAC,MACI;MACD,IAAMl1J,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;MAC9CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAC7C;EACJ,CAAC;EAED7tB,MAAM,CAACgjL,oBAAoB,GAAG,CAAC,CAAC;EAEhChjL,MAAM,CAACijL,wBAAwB,GAAG,YAAY;IAC1C,IAAIC,UAAU,GAAG1rJ,YAAY,CAAC0Q,OAAO,CAAC,wBAAwB,CAAC,KAAK,MAAM;IAC1EloC,MAAM,CAACgjL,oBAAoB,CAACE,UAAU,GAAGA,UAAU;IACnD,IAAIr1J,cAAc,GAAG/pB,CAAC,CAAC,4BAA4B,CAAC;IACpDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACmjL,yBAAyB,GAAG,YAAY;IAC3C,IAAIt1J,cAAc,GAAG/pB,CAAC,CAAC,4BAA4B,CAAC;IACpDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACojL,wBAAwB,GAAG,YAAY;IAC1C5rJ,YAAY,CAACC,OAAO,CAAC,wBAAwB,EAAEz3B,MAAM,CAACgjL,oBAAoB,CAACE,UAAU,CAAC;IACtF,IAAIr1J,cAAc,GAAG/pB,CAAC,CAAC,4BAA4B,CAAC;IACpDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACqjL,kBAAkB,GAAG,YAAW;IACnC7kB,wBAAwB,CAAC0G,oBAAoB,CAAC,CAAC,CAAC,CAAC;EACrD,CAAC;;EAED;EACA;EACA;EACA;;EAEAllK,MAAM,CAACsjL,yBAAyB,GAAG,IAAI;EAEvCtjL,MAAM,CAACujL,gBAAgB,GAAG,YAAY;IAClCvjL,MAAM,CAACo/K,gBAAgB,GAAG,SAAS;IACnC,IAAIvxJ,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IACxCrtB,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,EAAE,GAAG,CAAC;IAEPhE,QAAQ,CAAC,YAAY;MACjB,IAAIR,MAAM,CAACsjL,yBAAyB,EAAE;QAClCtjL,MAAM,CAACsjL,yBAAyB,GAAG,KAAK;MAC5C;IACJ,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDtjL,MAAM,CAACwjL,iBAAiB,GAAG,YAAY;IACnC,IAAI31J,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACyjL,qBAAqB,GAAG,YAAY;IACvCzjL,MAAM,CAACo/K,gBAAgB,GAAG,SAAS;EACvC,CAAC;EAEDp/K,MAAM,CAAC0jL,qBAAqB,GAAG,EAAE;EACjC1jL,MAAM,CAACkhL,wBAAwB,GAAG,KAAK;EAEvClhL,MAAM,CAACkgL,yBAAyB,GAAG,YAAY;IAC3Cp8K,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC0jL,qBAAqB,GAAG,EAAE;;IAEjC;IACA,OAAOpgG,cAAc,CAACw9F,IAAI,CAAC9gL,MAAM,EAAE,4BAA4B,EAAEA,MAAM,CAACmlK,eAAe,CAAC,CACnFnhK,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAAC0jL,qBAAqB,GAAGr6K,GAAG,CAACoe,MAAM,CAAC1hB,MAAM,CAAC,UAAUkkF,CAAC,EAAE;QAC1D,OAAOA,CAAC,CAAClyC,MAAM,KAAK,WAAW;MACnC,CAAC,CAAC;MAEF/3C,MAAM,CAACkhL,wBAAwB,GAAG,IAAI;MACtCp9K,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBnE,MAAM,CAACkhL,wBAAwB,GAAG,KAAK;MACvCp9K,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,CAAC,CAACF,GAAG,CAAC0/B,QAAQ,IAAI,CAAC,CAAC1/B,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,EACjD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC,CAAC,KAEtD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IACnC,CAAC,CAAC,WACM,CAAC,YAAY;MACjB3D,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC,CAAC,CAAC;IACN,CAAC,CAAC;EACV,CAAC;EAEDxE,MAAM,CAACuhL,oCAAoC,GAAG,YAAY;IAEtD,IAAI1zJ,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAC9CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAAC2jL,qCAAqC,GAAG,YAAY;IAEvD,IAAI91J,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAC9CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC+iL,iCAAiC,GAAG,YAAY;IACnD/iL,MAAM,CAACwvK,cAAc,GAAG/uK,cAAc,CAACe,SAAS,CAAC,8EAA8E,CAAC;IAChIxB,MAAM,CAACyvK,aAAa,GAAGhvK,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC;IACtDxB,MAAM,CAAC0vK,YAAY,GAAGjvK,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;IACpDxB,MAAM,CAACsvK,kBAAkB,GAAGtvK,MAAM,CAAC4jL,kCAAkC;IAErE,IAAM/1J,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC5CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAAC4jL,kCAAkC,GAAG,UAAUC,qBAAqB,EAAE;IACzE,IAAMh2J,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC5CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAEzC,IAAI,CAACg2J,qBAAqB,EAAE;MACxB,IAAMh2J,eAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;MAC9CzD,aAAa,CAAC+L,WAAW,CAACyhB,eAAc,CAAC;IAC7C;EACJ,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACt5BP/tB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,mBAAmB,EACpD,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAChE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAC3F,cAAc,EAAE,aAAa,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,+BAA+B,EAC5I,qBAAqB,EACrB,UAAUC,MAAM,EAAEC,UAAU,EAAE4pB,SAAS,EAAEtpB,SAAS,EAAEwyB,eAAe,EAC/D7yB,aAAa,EAAEspB,YAAY,EAAEI,SAAS,EAAEvpB,aAAa,EAAEG,QAAQ,EAAEC,cAAc,EAC/Em0D,YAAY,EAAE12C,WAAW,EAAEkS,qBAAqB,EAAE1vB,iBAAiB,EAAEmX,YAAY,EAAE1X,YAAY,EAAEijD,6BAA6B,EAC9H6qB,mBAAmB,EAAE;EAErBjuE,MAAM,CAAC8jL,iBAAiB,GAAG;IACvBz6C,KAAK,EAAE,KAAK;IACZjqC,QAAQ,EAAE,KAAK;IACfgkB,OAAO,EAAE,KAAK;IACdvoE,SAAS,EAAE,KAAK;IAChB6gF,KAAK,EAAE,KAAK;IACZqoD,KAAK,EAAE,KAAK;IACZC,OAAO,EAAE,KAAK;IACdC,SAAS,EAAE,KAAK;IAChBC,OAAO,EAAE;EACb,CAAC;EAEDlkL,MAAM,CAACmkL,SAAS,GAAG7kL,kBAAkB,CAACw3C,QAAQ,KAAK,SAAS;EAG5D92C,MAAM,CAACokL,eAAe,GAAG,YAAY;IACjC,IAAIlkL,aAAa,CAACmkL,WAAW,EAAE;MAC3B,IAAIh/J,GAAG,GAAGnlB,aAAa,CAACszB,YAAY,GAAG,MAAM,GAAGtzB,aAAa,CAACmkL,WAAW;MACzEh/J,GAAG,IAAI,SAAS,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE;MACvC,OAAOA,GAAG;IACd,CAAC,MACG,OAAO,IAAI;EAEnB,CAAC;EAED,SAASi/J,kBAAkBA,CAAA,EAAG;IAC1BrkL,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,EAAE,CAC1C,CAAC,CAAC;EACN;EAEAhL,MAAM,CAACukL,IAAI,GAAG,YAAY;IACtB,OAAOrkL,aAAa,CAAC4lC,QAAQ;EACjC,CAAC;EAED9lC,MAAM,CAACwkL,qBAAqB,GAAG,YAAY;IACvC,OAAOtkL,aAAa,CAAC0vC,8BAA8B,CAAC,CAAC;EACzD,CAAC;EAED5vC,MAAM,CAACkzC,uBAAuB,GAAG3yC,SAAS,CAAC2yC,uBAAuB;EAClElzC,MAAM,CAAC2xC,oBAAoB,GAAGpxC,SAAS,CAACoxC,oBAAoB;EAE5D3xC,MAAM,CAACmzC,yBAAyB,GAAG5yC,SAAS,CAAC4yC,yBAAyB;EACtEnzC,MAAM,CAACwyC,sBAAsB,GAAGjyC,SAAS,CAACiyC,sBAAsB;EAEhExyC,MAAM,CAACozC,uBAAuB,GAAG7yC,SAAS,CAAC6yC,uBAAuB;EAClEpzC,MAAM,CAAC0yC,oBAAoB,GAAGnyC,SAAS,CAACmyC,oBAAoB;EAE5D1yC,MAAM,CAACqzC,oBAAoB,GAAG9yC,SAAS,CAAC8yC,oBAAoB;EAC5DrzC,MAAM,CAAC0xC,iBAAiB,GAAGnxC,SAAS,CAACmxC,iBAAiB;EACtD1xC,MAAM,CAAC4xC,yBAAyB,GAAGrxC,SAAS,CAACqxC,yBAAyB;EACtE5xC,MAAM,CAAC6xC,yBAAyB,GAAGtxC,SAAS,CAACsxC,yBAAyB;EACtE7xC,MAAM,CAAC+yC,qBAAqB,GAAGxyC,SAAS,CAACwyC,qBAAqB;EAC9D/yC,MAAM,CAAC+xC,wBAAwB,GAAGxxC,SAAS,CAACwxC,wBAAwB;EACpE/xC,MAAM,CAACi5B,4BAA4B,GAAG14B,SAAS,CAAC04B,4BAA4B;EAG5Ej5B,MAAM,CAACszC,wBAAwB,GAAG/yC,SAAS,CAAC+yC,wBAAwB;EACpEtzC,MAAM,CAACgyC,qBAAqB,GAAGzxC,SAAS,CAACyxC,qBAAqB;EAE9DhyC,MAAM,CAACizC,oBAAoB,GAAG1yC,SAAS,CAAC0yC,oBAAoB;EAC5DjzC,MAAM,CAACyxC,iBAAiB,GAAGlxC,SAAS,CAACkxC,iBAAiB;EAEtDzxC,MAAM,CAACuzC,yBAAyB,GAAGhzC,SAAS,CAACgzC,yBAAyB;EACtEvzC,MAAM,CAACiyC,sBAAsB,GAAG1xC,SAAS,CAAC0xC,sBAAsB;EAEhEjyC,MAAM,CAACwzC,qBAAqB,GAAGjzC,SAAS,CAACizC,qBAAqB;EAC9DxzC,MAAM,CAACkyC,2BAA2B,GAAG3xC,SAAS,CAAC2xC,2BAA2B;EAE1ElyC,MAAM,CAACyzC,yBAAyB,GAAGlzC,SAAS,CAACkzC,yBAAyB;EACtEzzC,MAAM,CAACmyC,sBAAsB,GAAG5xC,SAAS,CAAC4xC,sBAAsB;EAEhEnyC,MAAM,CAAC0zC,uBAAuB,GAAGnzC,SAAS,CAACmzC,uBAAuB;EAClE1zC,MAAM,CAACoyC,8BAA8B,GAAG7xC,SAAS,CAAC6xC,8BAA8B;EAEhFpyC,MAAM,CAACqyC,kBAAkB,GAAG9xC,SAAS,CAAC8xC,kBAAkB;EAExDryC,MAAM,CAAC2zC,qBAAqB,GAAGpzC,SAAS,CAACozC,qBAAqB;EAC9D3zC,MAAM,CAACsyC,yBAAyB,GAAG/xC,SAAS,CAAC+xC,yBAAyB;EACtEtyC,MAAM,CAACuyC,8BAA8B,GAAGhyC,SAAS,CAACgyC,8BAA8B;EAChFvyC,MAAM,CAACykL,cAAc,GAAGlkL,SAAS,CAAC0yC,oBAAoB;EAEtDjzC,MAAM,CAAC0kL,kBAAkB,GAAG,IAAI;EAChC1kL,MAAM,CAAC2kL,wBAAwB,GAAG,IAAI;EAEtC3kL,MAAM,CAACT,MAAM,GAAGW,aAAa,CAACX,MAAM;EACpCS,MAAM,CAAC4kL,eAAe,GAAG,YAAY;IACjC,OAAO1kL,aAAa,CAAC0kL,eAAe;EACxC,CAAC;EAED5kL,MAAM,CAAC6kL,gBAAgB,GAAG,KAAK;EAC/B7kL,MAAM,CAAC8kL,mBAAmB,GAAG,IAAI;EAEjC9kL,MAAM,CAAC+kL,kBAAkB,GAAG,IAAI,CAAC;;EAEjC/kL,MAAM,CAAC2iF,UAAU,GAAGrjF,kBAAkB,CAACqjF,UAAU;EAEjD3iF,MAAM,CAACglL,MAAM,GAAG,YAAY;IACxBn7J,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAACwuE,WAAW,GAAG,IAAI;EACzBxuE,MAAM,CAACilL,cAAc,GAAG,IAAI;EAC5BjlL,MAAM,CAACklL,eAAe,GAAG,IAAI;EAC7BllL,MAAM,CAACyuE,aAAa,GAAG,IAAI;EAC3BzuE,MAAM,CAAC0uE,eAAe,GAAG,IAAI;EAE7B1uE,MAAM,CAACqC,GAAG,CAAC,oBAAoB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAEpDlE,MAAM,CAACwuE,WAAW,GAAGtqE,IAAI,CAACsqE,WAAW;IACrCxuE,MAAM,CAACilL,cAAc,GAAG/gL,IAAI,CAAC+gL,cAAc;IAC3CjlL,MAAM,CAACklL,eAAe,GAAGhhL,IAAI,CAACghL,eAAe;IAC7CllL,MAAM,CAACmlL,aAAa,GAAGjhL,IAAI,CAACihL,aAAa;IACzC3kL,QAAQ,CAAC,YAAY;MACjB8jL,kBAAkB,CAAC,CAAC;IACxB,CAAC,EAAE,GAAG,CAAC;EACX,CAAC,CAAC;EAEFtkL,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACtDlE,MAAM,CAACyuE,aAAa,GAAGvqE,IAAI,CAAC+qE,UAAU;IACtCjvE,MAAM,CAAC0uE,eAAe,GAAGxqE,IAAI,CAACupC,YAAY;EAC9C,CAAC,CAAC;EAEFztC,MAAM,CAACqB,QAAQ,GAAGnB,aAAa,CAACmB,QAAQ;EAExCrB,MAAM,CAAColL,cAAc,GAAG,KAAK;EAC7BplL,MAAM,CAACq5J,WAAW,GAAG,KAAK;EAC1Br5J,MAAM,CAACqlL,OAAO,GAAG,KAAK;EAEtB77J,YAAY,CAAC87J,sBAAsB,CAACC,SAAS,CAAC;EAE9C,SAASA,SAASA,CAAA,EAAG;IACjBvlL,MAAM,CAAColL,cAAc,GAAGllL,aAAa,CAACskC,IAAI,KAAK,SAAS;IACxDxkC,MAAM,CAACq5J,WAAW,GAAGn5J,aAAa,CAACo5J,4BAA4B,KAAK,IAAI;IACxEt5J,MAAM,CAACqlL,OAAO,GAAG,IAAI;EACzB;EAEArlL,MAAM,CAACwlL,aAAa,GAAG,IAAI;EAE3BxlL,MAAM,CAAC8+C,WAAW,GAAG,UAAU2mI,OAAO,EAAEv3I,KAAK,EAAE;IAC3CluC,MAAM,CAACwlL,aAAa,GAAG,CAACxlL,MAAM,CAACwlL,aAAa;IAE5C9iK,MAAM,CAACC,mBAAmB,CAAC3iB,MAAM,CAAC8jL,iBAAiB,CAAC,CAAC/9K,MAAM,CACvD,UAAUiD,GAAG,EAAE;MACX,OAAOA,GAAG,IAAIy8K,OAAO;IACzB,CAAC,CAAC,CAAC/4K,OAAO,CACN,UAAU1D,GAAG,EAAE;MACXhJ,MAAM,CAAC8jL,iBAAiB,CAAC96K,GAAG,CAAC,GAAG,KAAK;IACzC,CAAC,CAAC;IAEV,IAAIhJ,MAAM,CAAC2uG,SAAS,EAAE;MAClB,IAAM+2E,eAAe,GAAG1lL,MAAM,CAACykL,cAAc;MAC7C,IAAI,CAACv2I,KAAK,IAAIluC,MAAM,CAAC8jL,iBAAiB,CAAC50I,cAAc,CAACu2I,OAAO,CAAC,EAAE;QAC5DzlL,MAAM,CAAC6kL,gBAAgB,GAAG,IAAI;QAC9B7kL,MAAM,CAAC8jL,iBAAiB,CAAC2B,OAAO,CAAC,GAAGzlL,MAAM,CAAC6kL,gBAAgB;QAC3D7kL,MAAM,CAACykL,cAAc,GAAGgB,OAAO;QAC/BzlL,MAAM,CAAC0kL,kBAAkB,GAAGe,OAAO;QACnCzlL,MAAM,CAAC2kL,wBAAwB,GAAGc,OAAO;QAEzCjlL,QAAQ,CAAC,YAAY;UACjBsD,CAAC,CAAC,sBAAsB,CAAC,CAACU,OAAO,CAAC,eAAe,CAAC;QACtD,CAAC,CAAC;MACN,CAAC,MACI;QACDxE,MAAM,CAAC6kL,gBAAgB,GAAG,KAAK;QAC/B7kL,MAAM,CAACykL,cAAc,GAAGlkL,SAAS,CAAC0yC,oBAAoB;QACtDjzC,MAAM,CAAC0kL,kBAAkB,GAAGnkL,SAAS,CAAC0yC,oBAAoB;QAC1DjzC,MAAM,CAAC2kL,wBAAwB,GAAGpkL,SAAS,CAAC0yC,oBAAoB;MACpE;MAEA,IAAIjzC,MAAM,CAACwlL,aAAa,KAAK,IAAI,IAAIE,eAAe,IAAID,OAAO,EAAE;QAC7DzlL,MAAM,CAAC6kL,gBAAgB,GAAG,KAAK;QAC/B7kL,MAAM,CAACykL,cAAc,GAAGlkL,SAAS,CAAC0yC,oBAAoB;QACtDjzC,MAAM,CAAC0kL,kBAAkB,GAAGnkL,SAAS,CAAC0yC,oBAAoB;QAC1DjzC,MAAM,CAAC2kL,wBAAwB,GAAGpkL,SAAS,CAAC0yC,oBAAoB;MACpE;IACJ;EACJ,CAAC;EAEDjzC,MAAM,CAAC2uG,SAAS,GAAG,KAAK;EAExB3uG,MAAM,CAAC2lL,OAAO,GAAG,YAAY;IACzB,IAAIv+K,KAAK,GAAGpH,MAAM;IAClB8D,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8T,YAAY,CAAC++E,UAAU,CAAC,CAAC,WACb,CAAC,YAAY;MACjB9yF,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAMkgL,IAAI,GAAGn9K,KAAK,CAACm9K,IAAI,CAAC,CAAC;MACzB,IAAMqB,MAAM,GAAGrB,IAAI,GAAG,cAAc,GAAG,YAAY;MACnD,IAAMsB,QAAQ,GAAGtB,IAAI,GAAG,aAAa,GAAG,UAAU;MAElDllL,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACmiJ,eAAe,CAAC;QACvCC,OAAO,EAAE,QAAQ;QACjBrhG,WAAW,EAAEmhG,QAAQ;QACrBxgK,GAAG,EAAEugK;MACT,CAAC,EAAE,UAAUv8J,KAAK,EAAE29C,OAAO,EAAE;QACzB,IAAI39C,KAAK,EAAE;UACPjiB,KAAK,CAAC+rD,MAAM,CAAC,YAAY;YACrB6yH,gCAAgC,CAAC,CAAC;YAClCnuK,YAAY,CAACo/E,OAAO,CAAC,CAAC;UAC1B,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACV,CAAC;EAEDj3F,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,UAAUC,KAAK,EAAE;IAC1C,IAAItC,MAAM,CAAC2uG,SAAS,EAChB3uG,MAAM,CAACgpJ,WAAW,CAAC,CAAC,CAAC,KAErBhpJ,MAAM,CAAC0kL,kBAAkB,GAAG,IAAI;IAChC1kL,MAAM,CAAC2kL,wBAAwB,GAAG,IAAI;IAE1C3kL,MAAM,CAAC2uG,SAAS,GAAG3uG,MAAM,CAAC2uG,SAAS,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI;IAE3DnuG,QAAQ,CAAC,YAAY;MACjB;IAAA,CACH,CAAC;EACN,CAAC,CAAC;EAEFR,MAAM,CAACqC,GAAG,CAAC,qBAAqB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACrDlE,MAAM,CAAC2uG,SAAS,GAAG,KAAK;IACxB3uG,MAAM,CAACgpJ,WAAW,CAAC9kJ,IAAI,CAAC;EAC5B,CAAC,CAAC;EAEFlE,MAAM,CAACimL,WAAW,GAAG,YAAY;IAC7B,IAAIjmL,MAAM,CAAC2uG,SAAS,EAAE;MAClB3uG,MAAM,CAACgpJ,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC;MAE5BhpJ,MAAM,CAAC2uG,SAAS,GAAG,KAAK;IAC5B;IAEA3uG,MAAM,CAACkmL,gBAAgB,CAAC,CAAC;IAEzB,OAAO,IAAI;EACf,CAAC;EAEDlmL,MAAM,CAACkmL,gBAAgB,GAAG,YAAW;IACjCr8J,SAAS,CAACyQ,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC;EAC9C,CAAC;EAEDt6B,MAAM,CAACmmL,YAAY,GAAG,UAAU5kK,CAAC,EAAE;IAC/B,IAAIzd,CAAC,CAACyd,CAAC,CAACpX,MAAM,CAAC,CAACxC,IAAI,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE;MACxC3H,MAAM,CAACimL,WAAW,CAAC,CAAC;IACxB;EACJ,CAAC;EAEDjmL,MAAM,CAACgpJ,WAAW,GAAG,UAAU9kJ,IAAI,EAAEgqC,KAAK,EAAE;IACxC,IAAIk4I,MAAM,GAAI,CAAC,CAACliL,IAAI,IAAI,CAAC,CAACA,IAAI,CAACmiL,WAAW,GAAIniL,IAAI,CAACmiL,WAAW,GAAGrmL,MAAM,CAACykL,cAAc;IACtFzkL,MAAM,CAAC8+C,WAAW,CAAC,EAAE,EAAE5Q,KAAK,CAAC;IAC7BluC,MAAM,CAACykL,cAAc,GAAG2B,MAAM;EAClC,CAAC;EAEDpmL,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACjEvC,MAAM,CAACqB,QAAQ,GAAGkB,MAAM;IACxB,IAAIuqB,IAAI,GAAGjD,SAAS,CAACiD,IAAI,CAAC,CAAC;IAC3B9nB,OAAO,CAACC,GAAG,CAAC,iCAAiC,GAAG6nB,IAAI,CAAC;IAErD,IAAI,CAAC,CAACA,IAAI,IAAIA,IAAI,KAAK,OAAO,IAAIA,IAAI,KAAK,cAAc,IAAIA,IAAI,KAAK,OAAO,IACzEA,IAAI,KAAK,oBAAoB,IAAIA,IAAI,KAAK,iBAAiB,IACxDA,IAAI,KAAK,eAAe,IAAIvqB,MAAM,KAAK,KAAK,EAAE;MACjD+jL,sBAAsB,CAAC,CAAC;IAC5B,CAAC,MAAM;MACHtmL,MAAM,CAACsvE,2BAA2B,CAAC,CAAC;IACxC;EAEJ,CAAC,CAAC;EAEF,SAASg3G,sBAAsBA,CAAA,EAAG;IAC9B,IAAIz4J,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;IAClDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C;EAEA7tB,MAAM,CAACsvE,2BAA2B,GAAG,YAAY;IAC7C,IAAIzhD,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;IAClDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACumL,WAAW,GAAG,YAAY;IAC7BlnL,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;IACjD5N,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAGD,SAASk5J,gCAAgCA,CAAA,EAAG;IACxC,IAAIn4J,cAAc,GAAG/pB,CAAC,CAAC,oCAAoC,CAAC;IAC5D,IAAI0iL,EAAE,GAAGxmL,MAAM,CAACukL,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE;IAClC,IAAI3pK,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,iEAAiE,EAAE;MAAEglL,EAAE,EAAEA;IAAG,CAAC,CAAC;IACjH1iL,CAAC,CAAC,gBAAgB,CAAC,CAAC2b,IAAI,CAAC,CAAC;IAC1Bpf,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C;EAEA7tB,MAAM,CAACymL,qCAAqC,GAAG,YAAY;IACvD,IAAI54J,cAAc,GAAG/pB,CAAC,CAAC,oCAAoC,CAAC;IAC5DzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC0mL,MAAM,GAAG,YAAY;IACxB,IAAIX,OAAO,GAAG/lL,MAAM,CAACukL,IAAI,CAAC,CAAC,GAAG,kBAAkB,GAAG,eAAe;IAClE,IAAInxH,IAAI,GAAGpzD,MAAM,CAACukL,IAAI,CAAC,CAAC,GAAGjlL,kBAAkB,CAACqnL,kBAAkB,GAAG,UAAU;IAC7E,IAAIthK,GAAG,GAAG9kB,SAAS,CAAC20C,gBAAgB,GAAGke,IAAI;IAE3C,IAAI9zD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK,EAAE;MACtCsc,IAAI,GAAGpzD,MAAM,CAACukL,IAAI,CAAC,CAAC,GAAGjlL,kBAAkB,CAACsnL,qBAAqB,GAAG,4BAA4B;MAC9FvhK,GAAG,GAAG9kB,SAAS,CAAC40C,iBAAiB,GAAGie,IAAI;IAC5C;IAEA,IAAIhsD,KAAK,GAAGpH,MAAM;IAClBX,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACmiJ,eAAe,CAAC;MAAEC,OAAO,EAAE,QAAQ;MAAE1gK,GAAG,EAAEA,GAAG;MAAEwhK,iBAAiB,EAAE;IAAK,CAAC,EAAE,UAAUx9J,KAAK,EAAE29C,OAAO,EAAE;MAC3H5/D,KAAK,CAAC+rD,MAAM,CAAC,YAAY;QACrB,IAAI9pC,KAAK,KAAK,gBAAgB,EAAE;UAC5B,IAAIzO,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,iFAAiF,EAAE;YAAEqhF,GAAG,EAAEkjG;UAAQ,CAAC,CAAC;UACvI5lL,YAAY,CAACiE,SAAS,CAACwW,GAAG,CAAC;QAC/B;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAGD5a,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,UAAUC,KAAK,EAAE;IAC1C,IAAIwkL,cAAc,GAAGvmL,SAAS,CAACyyC,sBAAsB,CAAC,CAAC;IACvDhzC,MAAM,CAAC0xC,iBAAiB,GAAGo1I,cAAc,CAACp1I,iBAAiB;IAC3D1xC,MAAM,CAAC4xC,yBAAyB,GAAGk1I,cAAc,CAACl1I,yBAAyB;IAC3E5xC,MAAM,CAAC6xC,yBAAyB,GAAGi1I,cAAc,CAACj1I,yBAAyB;IAC3E7xC,MAAM,CAAC+yC,qBAAqB,GAAG+zI,cAAc,CAAC/zI,qBAAqB;IACnE/yC,MAAM,CAAC+xC,wBAAwB,GAAG+0I,cAAc,CAAC/0I,wBAAwB;IACzE/xC,MAAM,CAACi5B,4BAA4B,GAAG6tJ,cAAc,CAAC7tJ,4BAA4B;IACjFj5B,MAAM,CAACgyC,qBAAqB,GAAG80I,cAAc,CAAC90I,qBAAqB;IACnEhyC,MAAM,CAACyxC,iBAAiB,GAAGq1I,cAAc,CAACr1I,iBAAiB;IAC3DzxC,MAAM,CAACiyC,sBAAsB,GAAG60I,cAAc,CAAC70I,sBAAsB;IACrEjyC,MAAM,CAACkyC,2BAA2B,GAAG40I,cAAc,CAAC50I,2BAA2B;IAC/ElyC,MAAM,CAACmyC,sBAAsB,GAAG20I,cAAc,CAAC30I,sBAAsB;IACrEnyC,MAAM,CAACoyC,8BAA8B,GAAG00I,cAAc,CAAC10I,8BAA8B;IACrFpyC,MAAM,CAACqyC,kBAAkB,GAAGy0I,cAAc,CAACz0I,kBAAkB;IAC7DryC,MAAM,CAACsyC,yBAAyB,GAAGw0I,cAAc,CAACx0I,yBAAyB;IAC3EtyC,MAAM,CAACuyC,8BAA8B,GAAGu0I,cAAc,CAACv0I,8BAA8B;EACzF,CAAC,CAAC;EAEFvyC,MAAM,CAAC+mL,SAAS,GAAG,UAAUC,UAAU,EAAE;IACrChnL,MAAM,CAACimL,WAAW,CAAC,CAAC;IACpBniL,CAAC,CAACC,OAAO,CAAC,CAAC;IACXylB,YAAY,CAACmyI,OAAO,CAACv4G,6BAA6B,CAAC,CAC9Cp/C,IAAI,CAAC,YAAY;MACd,IAAI9D,aAAa,CAAC2L,QAAQ,EAAE;QACxB+oD,YAAY,CAACvsC,UAAU,CAAC,CAAC;MAC7B;MACA,IAAI2+J,UAAU,KAAG,KAAK,EAAE;QACpB3mL,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,qDAAqD;QACxF,CAAC,EAAE,YAAY;UACXhB,QAAQ,CAAC,YAAY;YACjBnB,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;YACjD5N,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;YACvB7sB,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,CAAC;UAC9C,CAAC,EAAE,CAAC,CAAC;QACT,CAAC,CAAC;MACN;IACJ,CAAC,CAAC,WACM,CAAC,YAAY;MAAElH,CAAC,CAACO,SAAS,CAAC,CAAC;IAAE,CAAC,CAAC;EAChD,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEArE,MAAM,CAACmvE,cAAc,GAAG,YAAY;IAChCnvE,MAAM,CAACimL,WAAW,CAAC,CAAC;IACpBhmL,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,CAAC;EAClD,CAAC;EAEDhL,MAAM,CAAC2vE,MAAM,GAAG,YAAY;IACxB3vE,MAAM,CAACimL,WAAW,CAAC,CAAC;IACpBhmL,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;IAEtCijE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;EAEhC,CAAC;EAED7vE,MAAM,CAAC+vE,YAAY,GAAG,YAAY;IAC9B/vE,MAAM,CAACimL,WAAW,CAAC,CAAC;IACpBhmL,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,CAAC;EAChD,CAAC;EAEDhL,MAAM,CAACinL,WAAW,GAAG,YAAY;IAC7B;IACA,OAAO,IAAI;EACf,CAAC;EAEDjnL,MAAM,CAACknL,YAAY,GAAG,YAAY;IAC9B,OAAOhnL,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW;EACtD,CAAC;EAED53C,MAAM,CAACqC,GAAG,CAAC,wBAAwB,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IAC1D,IAAIrC,aAAa,CAACX,MAAM,IAAIS,MAAM,CAACknL,YAAY,CAAC,CAAC,EAAE;MAC/C92J,qBAAqB,CAAC+hE,oBAAoB,CAAC,CAAC,CACvCnuF,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,OAAOxD,iBAAiB,CAACy+F,QAAQ,CAACj7F,IAAI,CAAC8hH,QAAQ,CAAC;MACpD,CAAC,CAAC;IACV,CAAC,MAEGhmH,MAAM,CAAC+mL,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;AAEN,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;ACvbwC;AACC;AAEpDjnL,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,cAAc,EAC7C,CAAC,IAAI,EACD,UAAUxiD,EAAE,EAAE;EAEV,IAAIiX,YAAY,GAAG,CAAC,CAAC;EACrB,IAAIyvK,SAAS,GAAG,IAAIC,KAAK,CAACF,sDAAS,CAAC;EACpC,IAAIG,QAAQ,GAAG,IAAID,KAAK,CAACH,qDAAQ,CAAC;EAElC,SAAShD,SAASA,CAAA,EAAG;IACjB,OAAO9kL,MAAM,CAACw3C,MAAM,IAAIA,MAAM,CAACC,QAAQ,IAAID,MAAM,CAACC,QAAQ,CAACv/B,WAAW,CAAC,CAAC,KAAK,SAAS;EAC1F;EAEA,SAASiwK,sBAAsBA,CAAA,EAAG;IAC9B,IAAIj8K,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAACnM,MAAM,CAACynB,OAAO,IAAI,CAACA,OAAO,CAACogE,IAAI,IAAI,CAACi9F,SAAS,CAAC,CAAC,EAAE;MAClD54K,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI;MACAob,OAAO,CAACogE,IAAI,CACR,UAAUz/D,MAAM,EAAE;QACdlc,QAAQ,CAACE,OAAO,CAACgc,MAAM,IAAIA,MAAM,CAACggK,YAAY,KAAK,IAAI,CAAC;MAC5D,CAAC,EACD,YAAY;QACRl8K,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MAC1B,CAAC,EACD,WAAW,EACX,cAAc,EACd,EACJ,CAAC;IACL,CAAC,CAAC,OAAO8V,CAAC,EAAE;MACRhW,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B;IAEA,OAAOF,QAAQ,CAACG,OAAO;EAC3B;EAEA,SAASg8K,YAAYA,CAACC,KAAK,EAAE;IACzB,IAAIp8K,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI;MACAm8K,KAAK,CAACC,KAAK,CAAC,CAAC;MACbD,KAAK,CAACE,WAAW,GAAG,CAAC;MAErB,IAAIC,WAAW,GAAGH,KAAK,CAACI,IAAI,CAAC,CAAC;MAE9B,IAAID,WAAW,IAAIhoL,OAAO,CAACkoL,UAAU,CAACF,WAAW,CAAC9jL,IAAI,CAAC,EAAE;QACrD8jL,WAAW,CAAC9jL,IAAI,CAAC,YAAY;UACzBuH,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC,SAAM,CAAC,YAAY;UACjBF,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;MACN,CAAC,MAAM;QACHF,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MAC1B;IAEJ,CAAC,CAAC,OAAO8V,CAAC,EAAE;MACRhW,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B;IAEA,OAAOF,QAAQ,CAACG,OAAO;EAC3B;EAEA,SAASu8K,SAASA,CAACN,KAAK,EAAE;IAEtB,OAAOH,sBAAsB,CAAC,CAAC,CAC1BxjL,IAAI,CAAC,UAAUkkL,OAAO,EAAE;MAErB,IAAI,CAACA,OAAO,EAAE;QACV,OAAO,IAAI;MACf;MAEA,OAAOR,YAAY,CAACC,KAAK,CAAC;IAC9B,CAAC,CAAC,SACI,CAAC,YAAY;MACf,OAAO,IAAI;IACf,CAAC,CAAC;EACV;EAEA/vK,YAAY,CAACmD,QAAQ,GAAG,YAAY;IAChC,OAAOktK,SAAS,CAACZ,SAAS,CAAC;EAC/B,CAAC;EAEDzvK,YAAY,CAACkD,OAAO,GAAG,YAAY;IAC/B,OAAOmtK,SAAS,CAACV,QAAQ,CAAC;EAC9B,CAAC;EAED,OAAO3vK,YAAY;AACvB,CAAC,CACJ,CAAC,C;;;;;;;;;;;AC9FN9X,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,sBAAsB,EACrD,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAC,OAAO,EAC/D,UAAUle,EAAE,EAAET,aAAa,EAAEO,cAAc,EAAE4vB,eAAe,EAAE1G,KAAK,EAAE;EAAA,IAAAw+J,aAAA;EAEjE,IAAI,CAACpuF,KAAK,GAAGz6F,kBAAkB,CAAC8oL,mBAAmB;EACnD,IAAI,CAACC,YAAY,GAAG,IAAI;EACxB,IAAMC,OAAO,GAAGhpL,kBAAkB,CAACipL,kBAAkB;EACrD,IAAI,CAACC,eAAe,GAAGv+K,KAAK,CAAC0wC,OAAO,CAAC2tI,OAAO,CAAC,IAAAH,aAAA,GACnCG,OAAO,CAACj3K,IAAI,CAAC,UAAArL,CAAC;IAAA,OAAIA,CAAC,CAAC44E,UAAU,CAAC,QAAQ,CAAC;EAAA,EAAC,cAAAupG,aAAA,cAAAA,aAAA,GAAI,IAAI,GACjDG,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,IAAI;EAEzB,IAAI,CAAC7kJ,WAAW,GAAG,UAAUl8B,OAAO,EAAE;IAElC,IAAIgE,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI+T,IAAI,GAAG;MACPkpK,aAAa,EAAE,IAAI,CAAC1uF,KAAK;MACzBx2F,QAAQ,EAAEgE,OAAO,CAAChE,QAAQ;MAC1BmgC,QAAQ,EAAEn8B,OAAO,CAACm8B,QAAQ;MAC1BglJ,OAAO,EAAE,CAAC,MAAM,CAAC;MACjBC,UAAU,EAAEzoL,aAAa,CAAC6qC,oBAAoB;MAC9Cs+C,MAAM,EAAE,IAAI,CAACm/F;IACjB,CAAC;IAED,IAAI,CAACtoL,aAAa,CAAC6qC,oBAAoB,EAAE;MACrCx/B,QAAQ,CAACqb,MAAM,CAAC;QACZa,MAAM,EAAE,KAAK;QAAEoc,QAAQ,EAAE;UACrBC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,gKAAgK;QAC/M;MACJ,CAAC,CAAC;MAEF,OAAO+J,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI,CAAC,IAAI,CAAC88K,eAAe,EAAE;MACvBj9K,QAAQ,CAACqb,MAAM,CAAC;QACZa,MAAM,EAAE,KAAK;QAAEoc,QAAQ,EAAE;UACrBC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,0FAA0F;QACzI;MACJ,CAAC,CAAC;MAEF,OAAO+J,QAAQ,CAACG,OAAO;IAC3B;;IAEA;IACAob,OAAO,CAAC8hK,MAAM,CAAChlJ,aAAa,CAACr8B,OAAO,CAACkd,MAAM,GAAG,GAAG,EAAElF,IAAI,EACpD,UAAUlW,GAAG,EAAE;MACXrE,OAAO,CAACC,GAAG,CAAC,sBAAsB,GAAGoE,GAAG,CAAC;MACzCkC,QAAQ,CAACE,OAAO,CAAC;QACbgc,MAAM,EAAE,IAAI;QAAEoc,QAAQ,EAAE;UACpB2oG,mBAAmB,EAAEnjI,GAAG,CAACw/K,mBAAmB;UAC5C9kJ,mBAAmB,EAAE16B,GAAG,CAACy/K,mBAAmB;UAC5CC,mBAAmB,EAAE7oL,aAAa,CAAC8qC,uBAAuB;UAC1Dg+I,gBAAgB,EAAE9oL,aAAa,CAAC6qC;QACpC;MACJ,CAAC,CAAC;IACN,CAAC,EACA,UAAU5mC,GAAG,EAAE;MACXa,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;MAClCD,OAAO,CAACC,GAAG,CAACd,GAAG,CAAC;MAChBoH,QAAQ,CAACqb,MAAM,CAAC;QAAEa,MAAM,EAAE,KAAK;QAAEoc,QAAQ,EAAE1/B,GAAG;QAAE0W,OAAO,EAAE,OAAO1W,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAGwM;MAAU,CAAC,CAAC;IACzG,CAAC,CAAC;IAEN,OAAOpF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC02B,MAAM,GAAG,UAAUxiC,EAAE,EAAEq+F,SAAS,EAAE;IACnC,IAAI1yF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;;IAEzB;IACA6kB,eAAe,CAAC44J,YAAY,CAACrpL,EAAE,CAACmpL,mBAAmB,EACfnpL,EAAE,CAACmkC,mBAAmB,EACtB,CAACnkC,EAAE,CAACmkC,mBAAmB,GAAGnkC,EAAE,CAAC4sI,mBAAmB,GAAG,IAAI,EACvD5sI,EAAE,CAAC67B,IAAI,EAAE,0BAA0B,EACnCwiE,SAAS,EACTr+F,EAAE,CAACmlB,MAAM,EACT4E,KAAK,CAACuE,OAAO,CAAC,CACd,CAAC,CACxC84C,OAAO,CAAC,UAAU39D,GAAG,EAAE;MACpBkC,QAAQ,CAACE,OAAO,CAAC;QACbs4B,mBAAmB,EAAEnkC,EAAE,CAACmkC,mBAAmB;QAC3CyoG,mBAAmB,EAAE5sI,EAAE,CAAC4sI,mBAAmB;QAC3C/nH,MAAM,EAAEw5E,SAAS;QACjBx2E,MAAM,EAAC;MACX,CAAC,CAAC;IACN,CAAC,CAAC,CACD4B,KAAK,CAAC,UAAUllB,GAAG,EAAE;MAClB,IAAI0W,OAAO,GAAC,IAAI;MAChB,IAAI,CAAC,CAAC1W,GAAG,IAAIA,GAAG,CAACiC,MAAM,GAAG,CAAC,EAAE;QAEzB,IAAI,CAAC,CAACjC,GAAG,CAAC,CAAC,CAAC,CAAC60B,SAAS,EAAE;UACpB,IAAG;YACC,IAAIrX,GAAG,GAAG+V,IAAI,CAAC2T,KAAK,CAAClnC,GAAG,CAAC,CAAC,CAAC,CAAC60B,SAAS,CAAC;YACtCne,OAAO,GAAG8G,GAAG,CAAC9G,OAAO;UACzB,CAAC,CACD,OAAOi1C,EAAE,EAAE;YACPj1C,OAAO,GAAG1W,GAAG,CAAC,CAAC,CAAC,CAAC60B,SAAS;UAC9B;QACJ;MACJ;MACAztB,QAAQ,CAACE,OAAO,CAAC;QACbgZ,MAAM,EAAEw5E,SAAS;QACjBx2E,MAAM,EAAE,KAAK;QACb5M,OAAO,EAAEA;MACb,CAAC,CAAC,CAAC,CAAC;IACR,CAAC,CAAC;IAEE,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;AC9GX5L,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,oCAAoC,EACrE,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,sBAAsB,EAChF,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,EAClE,cAAc,EAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,EACpD,UAAUC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAE/oB,cAAc,EAAEyoL,oBAAoB,EACtE7oL,aAAa,EAAEG,QAAQ,EAAEN,aAAa,EAAEC,YAAY,EACpDyX,YAAY,EAAEjX,EAAE,EAAEkX,YAAY,EAAE8R,KAAK,EAAEgzB,gBAAgB,EAAE3yB,OAAO,EAAE;EAEjEhqB,MAAM,CAAC+X,gBAAgB,GAAG,iBAAiB;EAC3C/X,MAAM,CAACsO,IAAI,GAAG,UAAU;EAExBtO,MAAM,CAACmpL,eAAe,GAAG,EAAE;EAC3BnpL,MAAM,CAACuH,OAAO,GAAG,CAAC,CAAC;EACnBvH,MAAM,CAACuyF,QAAQ,GAAG,CAAC,CAAC;EACpBvyF,MAAM,CAACopL,UAAU,GAAG,CAAC,CAAC;EACtBppL,MAAM,CAACqpL,aAAa,GAAG,IAAI;EAC3BrpL,MAAM,CAACspL,gBAAgB,GAAG,YAAY,CAAE,CAAC;EACzCtpL,MAAM,CAACupL,gBAAgB,GAAG,KAAK;EAE/BvpL,MAAM,CAACwpL,UAAU,GAAG,EAAE;EACtBxpL,MAAM,CAACypL,eAAe,GAAG,EAAE;EAC3BzpL,MAAM,CAAC0pL,gBAAgB,GAAG,CAAC;EAC3B1pL,MAAM,CAAC2pL,sBAAsB,GAAG,EAAE;EAElC3pL,MAAM,CAAC4pL,aAAa,GAAG,CAAC,CAAC;EACzB5pL,MAAM,CAAC6pL,aAAa,GAAG,EAAE;EACzB7pL,MAAM,CAAC8pL,YAAY,GAAG,KAAK;EAC3B9pL,MAAM,CAAC+pL,UAAU,GAAG,IAAI;EACxB/pL,MAAM,CAACgqL,oBAAoB,GAAG,EAAE;EAEhChqL,MAAM,CAACiqL,YAAY,GAAG,IAAI;EAC1BjqL,MAAM,CAACkqL,gBAAgB,GAAG,IAAI;EAC9BlqL,MAAM,CAAC6L,QAAQ,GAAG3L,aAAa,CAAC2L,QAAQ;EAExC,IAAIs+K,UAAU,GAAG9qL,MAAM,CAAC+C,WAAW,GAAG/C,MAAM,CAACm6J,UAAU,GAAG,GAAG,GAAG,GAAG;EACnEx5J,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG+nL,UAAU,GAAG;EAAK,CAAC;EAElEnqL,MAAM,CAACqC,GAAG,CAAC,wBAAwB,EAAE,UAASC,KAAK,EAAE4B,IAAI,EAAE;IACvDlE,MAAM,CAAC4pL,aAAa,GAAG,CAAC,CAAC;IAEzB5pL,MAAM,CAACiY,iBAAiB,GAAG/T,IAAI,CAAC+T,iBAAiB;IACjDjY,MAAM,CAACoqL,gBAAgB,GAAGlmL,IAAI,CAACkmL,gBAAgB;IAC/CpqL,MAAM,CAACuyF,QAAQ,GAAGruF,IAAI,CAACquF,QAAQ;IAC/BvyF,MAAM,CAACopL,UAAU,GAAGllL,IAAI,CAACklL,UAAU;IACnCppL,MAAM,CAACuH,OAAO,GAAGrD,IAAI,CAACqD,OAAO;IAC7BvH,MAAM,CAAC+pL,UAAU,GAAG7lL,IAAI,CAAC6lL,UAAU;IACnC/pL,MAAM,CAACqqL,gBAAgB,GAAGnmL,IAAI,CAACmmL,gBAAgB;IAC/CrqL,MAAM,CAACsqL,cAAc,GAAGpmL,IAAI,CAAComL,cAAc;IAE3C,IAAGpmL,IAAI,CAACmmL,gBAAgB,EAAC;MACrBrqL,MAAM,CAAC+X,gBAAgB,GAAG,iBAAiB;MAC3C/X,MAAM,CAACsO,IAAI,GAAG,UAAU;IAC5B,CAAC,MAAM;MACHtO,MAAM,CAAC+X,gBAAgB,GAAG,UAAU;MACpC/X,MAAM,CAACsO,IAAI,GAAG,UAAU;IAC5B;IAIAtO,MAAM,CAACuqL,qBAAqB,CAAC,CAAC;IAE9BvqL,MAAM,CAACwqL,aAAa,CAAC,CAAC;EAC1B,CAAC,CAAC;EAEFxqL,MAAM,CAACuqL,qBAAqB,GAAG,YAAW;IACtC,IAAIE,qBAAqB,GAAG,EAAE;IAC9B,IAAIC,qBAAqB,GAAG,EAAE;IAC9B,IAAIC,qBAAqB,GAAG,EAAE;IAE9B,IAAIC,aAAa,GAAG,EAAE;IACtB,IAAIC,aAAa,GAAG,EAAE;IACtB,IAAIC,aAAa,GAAG,EAAE;IAEtB,IAAIluH,OAAO,GAAG58D,MAAM,CAACiY,iBAAiB,CAAC,CAAC,CAAC,CAACk2E,WAAW;IACrD,IAAItxB,OAAO,GAAG78D,MAAM,CAACiY,iBAAiB,CAAC,CAAC,CAAC,CAACo2E,WAAW;IACrD,IAAIvxB,OAAO,GAAG98D,MAAM,CAACiY,iBAAiB,CAAC,CAAC,CAAC,CAACs2E,WAAW;IACrD,IAAIl6D,SAAS,GAAG,EAAE;IAClB,IAAI9tB,KAAK,GAAG,CAAC;IACb,IAAIwkL,QAAQ,GAAG,EAAE;IACjBjrL,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACiY,iBAAiB,EAAE,UAASnO,IAAI,EAAE;MACrD,IAAGA,IAAI,CAACw1B,OAAO,IAAImrJ,qBAAqB,CAACp7K,OAAO,CAACvF,IAAI,CAACw1B,OAAO,CAAC,GAAG,CAAC,EAAE;QAChEmrJ,qBAAqB,CAACpkL,IAAI,CAACyD,IAAI,CAACw1B,OAAO,CAAC;MAC5C;MAEA,IAAGx1B,IAAI,CAACy1B,OAAO,IAAImrJ,qBAAqB,CAACr7K,OAAO,CAACvF,IAAI,CAACy1B,OAAO,CAAC,GAAG,CAAC,EAAE;QAChEmrJ,qBAAqB,CAACrkL,IAAI,CAACyD,IAAI,CAACy1B,OAAO,CAAC;MAC5C;MAEA,IAAGz1B,IAAI,CAAC01B,OAAO,IAAImrJ,qBAAqB,CAACt7K,OAAO,CAACvF,IAAI,CAAC01B,OAAO,CAAC,GAAG,CAAC,EAAE;QAChEmrJ,qBAAqB,CAACtkL,IAAI,CAACyD,IAAI,CAAC01B,OAAO,CAAC;MAC5C;MACA,IAAImgH,YAAY;MAChB,IAAIqrC,aAAa,GAAGhrL,MAAM,CAACoqL,gBAAgB,CAACrkL,MAAM,CAAC,UAASsvC,CAAC,EAAE;QAAC,OAAOA,CAAC,CAACh5B,SAAS,KAAKvS,IAAI,CAACuS,SAAS;MAAC,CAAC,CAAC;MACxG,IAAG2uK,aAAa,CAAC5kL,MAAM,KAAK,CAAC,EAAC;QAC1Bu5I,YAAY,GAAGqrC,aAAa,CAAC,CAAC,CAAC;MACnC;MAEA,IAAGrrC,YAAY,KAAKA,YAAY,CAACxmG,QAAQ,IAAIwmG,YAAY,CAAC7xI,OAAO,CAAC,EAAC;QAC/Di9K,QAAQ,GAAGprC,YAAY,CAACxmG,QAAQ,IAAIwmG,YAAY,CAAC7xI,OAAO;MAC5D;MACA,IAAIm9K,aAAa,GAAGnrL,OAAO,CAAC+F,IAAI,CAACiE,IAAI,CAAC;MACtCmhL,aAAa,CAACC,KAAK,GAAG3kL,KAAK;MAC3B0kL,aAAa,CAACpvK,cAAc,GAAG/R,IAAI,CAACgS,MAAM;MAC1CmvK,aAAa,CAACjvK,iBAAiB,GAAGlS,IAAI,CAACmS,SAAS;MAChD,IAAGjc,MAAM,CAACsO,IAAI,KAAK,UAAU,EAAE;QAC3B28K,aAAa,CAACltJ,KAAK,GAAGj0B,IAAI,CAACi0B,KAAK;MACpC;MACAx3B,KAAK,EAAE;MACP,IAAGo5I,YAAY,EAAC;QACZsrC,aAAa,CAACjrL,MAAM,CAAC+X,gBAAgB,CAAC,GAAG,CAAC4nI,YAAY,CAAC3/I,MAAM,CAAC+X,gBAAgB,CAAC;QAC/EkzK,aAAa,CAAC9xI,QAAQ,GAAGwmG,YAAY,CAACxmG,QAAQ;QAC9C8xI,aAAa,CAACn9K,OAAO,GAAG6xI,YAAY,CAAC7xI,OAAO;QAC5Cm9K,aAAa,CAAChvK,SAAS,GAAG0jI,YAAY,CAAC3jI,iBAAiB;QACxD,IAAGhc,MAAM,CAACsO,IAAI,KAAK,UAAU,EAAE;UAC3B28K,aAAa,CAACltJ,KAAK,GAAG4hH,YAAY,CAAC5hH,KAAK;QAC5C;MACJ,CAAC,MAAM;QACHktJ,aAAa,CAACjrL,MAAM,CAAC+X,gBAAgB,CAAC,GAAG,IAAI;QAC7CkzK,aAAa,CAAC9xI,QAAQ,GAAG,EAAE;QAC3B8xI,aAAa,CAACn9K,OAAO,GAAG,EAAE;MAC9B;MAEAumB,SAAS,CAAChuB,IAAI,CAAC4kL,aAAa,CAAC;IACjC,CAAC,CAAC;IAEFnrL,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACuH,OAAO,CAAC4jL,aAAa,EAAE,UAASlrK,GAAG,EAAE;MACxD,IAAGwqK,qBAAqB,CAAC1kL,MAAM,CAAC,UAASqlL,EAAE,EAAE;QAAC,OAAOA,EAAE,KAAKnrK,GAAG;MAAC,CAAC,CAAC,CAAC7Z,MAAM,GAAG,CAAC,EAAC;QAC1EwkL,aAAa,CAACvkL,IAAI,CAAC4Z,GAAG,CAAC;MAC3B;IACJ,CAAC,CAAC;IACFngB,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACuH,OAAO,CAAC8jL,aAAa,EAAE,UAASprK,GAAG,EAAE;MACxD,IAAGyqK,qBAAqB,CAAC3kL,MAAM,CAAC,UAASqlL,EAAE,EAAE;QAAC,OAAOA,EAAE,KAAKnrK,GAAG;MAAC,CAAC,CAAC,CAAC7Z,MAAM,GAAG,CAAC,EAAC;QAC1EykL,aAAa,CAACxkL,IAAI,CAAC4Z,GAAG,CAAC;MAC3B;IACJ,CAAC,CAAC;IACFngB,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACuH,OAAO,CAAC+jL,aAAa,EAAE,UAASrrK,GAAG,EAAE;MACxD,IAAG0qK,qBAAqB,CAAC5kL,MAAM,CAAC,UAASqlL,EAAE,EAAE;QAAC,OAAOA,EAAE,KAAKnrK,GAAG;MAAC,CAAC,CAAC,CAAC7Z,MAAM,GAAG,CAAC,EAAC;QAC1E0kL,aAAa,CAACzkL,IAAI,CAAC4Z,GAAG,CAAC;MAC3B;IACJ,CAAC,CAAC;IAEFjgB,MAAM,CAAC4pL,aAAa,GAAG;MACnB2B,OAAO,EAAE;QACLjsJ,OAAO,EAAEs9B,OAAO;QAChBuuH,aAAa,EAAEP,aAAa;QAC5BrrJ,OAAO,EAAEs9B,OAAO;QAChBwuH,aAAa,EAAER,aAAa;QAC5BrrJ,OAAO,EAAEs9B,OAAO;QAChBwuH,aAAa,EAAER;MACnB,CAAC;MACD7uK,SAAS,EAAEoY;IACf,CAAC;IACDr0B,MAAM,CAACiuG,GAAG,CAAC88E,QAAQ,GAAGA,QAAQ;IAC9B/qL,MAAM,CAACwpL,UAAU,GAAG5sH,OAAO;IAC3B58D,MAAM,CAACspL,gBAAgB,CAACtpL,MAAM,CAACwpL,UAAU,CAAC;IAE1ChpL,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,CAAC;MACbpB,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IACrCxY,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC,CAAC;EACFxE,MAAM,CAACwrL,UAAU,GAAG,UAAS91I,GAAG,EAAE;IAC9B,IAAG11C,MAAM,CAAC+pL,UAAU,EAAE;MAClB/pL,MAAM,CAAC4Y,cAAc,GAAG;QACpBrD,KAAK,EAAEvV,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAClW,MAAM,CAAC,UAASyO,CAAC,EAAE;UAAC,OAAOA,CAAC,CAAC02K,KAAK,KAAKx1I,GAAG,CAACw1I,KAAK;QAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAClrL,MAAM,CAAC+X,gBAAgB,CAAC;QACrHmzK,KAAK,EAAEx1I,GAAG,CAACw1I,KAAK;QAChBjvK,SAAS,EAAEy5B,GAAG,CAACz5B,SAAS;QACxBF,OAAO,EAAE25B,GAAG,CAAC35B,OAAO;QACpB0vK,QAAQ,EAAEzrL,MAAM,CAACqqL,gBAAgB,GAAI,eAAe,GAAGrqL,MAAM,CAACqqL,gBAAgB,GAAG,IAAI,GACnF30I,GAAG,CAACz5B,SAAS,GACb,gBAAgB,GAAGjc,MAAM,CAACsqL,cAAc,GAAG,IAAI,GAAG50I,GAAG,CAAC35B,OAAO,GAAK,aAAa,GACjF,CAAE25B,GAAG,CAACz5B,SAAS,GAAG,cAAc,GAAGy5B,GAAG,CAAC35B;MAC3C,CAAC;MACD/b,MAAM,CAAC0b,mBAAmB,CAAC,MAAM,GAAGg6B,GAAG,CAACr5B,SAAS,CAAC;IACtD;IACA;EACJ,CAAC;EAEDrc,MAAM,CAACwqL,aAAa,GAAG,YAAW;IAC9BnqL,aAAa,CAAC8E,UAAU,CAAC,iBAAiB,EAAE,YAAY;MACpD,IAAInF,MAAM,CAACiqL,YAAY,EAAE;QACrBjqL,MAAM,CAACiqL,YAAY,GAAG,KAAK;QAC3BnmL,CAAC,CAAC,2BAA2B,CAAC,CAAC+R,IAAI,CAAC,CAAC;MACzC;MACA7V,MAAM,CAAC8pL,YAAY,GAAG,IAAI;IAC9B,CAAC,CAAC;EACN,CAAC;EAED9pL,MAAM,CAAC0rL,UAAU,GAAG,YAAY;IAC5B,IAAI,OAAO1rL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,WAAW,IAC3Dv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,IAAI,IAC7Cv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,EAAE,IAC3Cv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,IAAIrrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,CAACjlL,MAAM,GAAG,CAAC,EAAE,OAAO,IAAI;IACpH,OAAO,KAAK;EAChB,CAAC;EAEDpG,MAAM,CAAC2rL,UAAU,GAAG,YAAY;IAC5B,IAAI,OAAO3rL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,KAAK,WAAW,IAC3Dx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,KAAK,IAAI,IAC7Cx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,KAAK,EAAE,IAC5Cx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,IAAItrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,CAACllL,MAAM,GAAG,CAAC,EAAE,OAAO,IAAI;IACnH,OAAO,KAAK;EAChB,CAAC;EAEDpG,MAAM,CAACy9H,UAAU,GAAG,YAAY;IAC5B,IAAImuD,YAAY,GAAG,CAAC;IACpB,IAAIC,QAAQ,GAAG,CAAC;IAChB7rL,MAAM,CAAC6pL,aAAa,GAAG,EAAE;IAEzB,IAAI,OAAO7pL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,WAAW,IAC3Dv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,IAAI,IAC7Cv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,EAAE,IAC3Cv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,IAAIrrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,CAACjlL,MAAM,GAAG,CAAC,EAAE;MACrGwlL,YAAY,EAAE;MAEd,IAAI5rL,MAAM,CAACwpL,UAAU,CAACnmK,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,CAAClc,WAAW,CAAC,CAAC,EAAE;QACxFwoK,QAAQ,GAAG,CAAC;MAChB;IACJ;IAEA,IAAI,OAAO7rL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,KAAK,WAAW,IAC3Dx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,KAAK,IAAI,IAC7Cx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,KAAK,EAAE,IACxCx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,IAAItrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,CAACllL,MAAM,GAAG,CAAC,EAAE;MACxGwlL,YAAY,EAAE;MAEd,IAAI5rL,MAAM,CAACwpL,UAAU,CAACnmK,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,CAACnc,WAAW,CAAC,CAAC,EAAE;QACxFwoK,QAAQ,GAAG,CAAC;MAChB;IACJ;IAEA,IAAID,YAAY,KAAK,CAAC,EAAE;MACpB;MACA5rL,MAAM,CAACupL,gBAAgB,GAAG,IAAI;MAC9B,IAAIuC,cAAc,GAAG9rL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC/kL,MAAM;MAGtE,IAAI0lL,cAAc,GAAG,CAAC;QAAE;QACxB;UACI9rL,MAAM,CAAC0pL,gBAAgB,GAAG,CAAC;UAC3B1pL,MAAM,CAAC2pL,sBAAsB,GAAG,GAAG,GAAG3pL,MAAM,CAAC0pL,gBAAgB;UAC7D1pL,MAAM,CAAC6pL,aAAa,GAAG,CACnB,CAAC;YAAEkC,QAAQ,EAAE,IAAI;YAAEC,MAAM,EAAE;UAAG,CAAC,EAAE;YAAEA,MAAM,EAAEhsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO;YAAEysJ,QAAQ,EAAE;UAAK,CAAC,CAAC,CACrG;UAED,KAAK,IAAIv3K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGs3K,cAAc,EAAEt3K,CAAC,EAAE,EAAE;YACrC,IAAIy3K,QAAQ,GAAGjsL,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAC7V,MAAM;YACpD,IAAI0D,IAAI,GAAG,IAAI;YACf,KAAK,IAAI4K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu3K,QAAQ,EAAEv3K,CAAC,EAAE,EAAE;cAC/B,IAAI1U,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,CAAC,CAAC,CAAC4qB,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC32K,CAAC,CAAC,CAAC6O,WAAW,CAAC,CAAC,EAAE;gBACzHvZ,IAAI,GAAG9J,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,CAAC,CAAC;gBACxC;cACJ;YACJ;YACA1U,MAAM,CAAC6pL,aAAa,CAACxjL,IAAI,CAAC,CAAC;cAAE2lL,MAAM,EAAEhsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC32K,CAAC,CAAC;cAAEu3K,QAAQ,EAAE;YAAK,CAAC,EAAEjiL,IAAI,CAAC,CAAC;UAChH;QACJ,CAAC,MAAM;QACH9J,MAAM,CAAC0pL,gBAAgB,GAAG1pL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC/kL,MAAM,GAAG,CAAC;QAC/EpG,MAAM,CAAC2pL,sBAAsB,GAAG,GAAG,GAAG3pL,MAAM,CAAC0pL,gBAAgB;QAC7D,IAAIwC,UAAU,GAAG,CAAC;UAAEH,QAAQ,EAAE,IAAI;UAAEC,MAAM,EAAE;QAAG,CAAC,CAAC;QACjD,IAAIG,QAAQ,GAAG,CAAC;UAAEH,MAAM,EAAEhsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO;UAAEysJ,QAAQ,EAAE;QAAK,CAAC,CAAC;QAEjF,KAAK,IAAIv3K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGs3K,cAAc,EAAEt3K,CAAC,EAAE,EAAE;UACrC03K,UAAU,CAAC7lL,IAAI,CAAC;YAAE2lL,MAAM,EAAEhsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC32K,CAAC,CAAC;YAAEu3K,QAAQ,EAAE;UAAK,CAAC,CAAC;UAE1F,IAAIE,QAAQ,GAAGjsL,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAC7V,MAAM;UACpD,IAAI0D,IAAI,GAAG,IAAI;UACf,KAAK,IAAI4K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu3K,QAAQ,EAAEv3K,CAAC,EAAE,EAAE;YAC/B,IAAIpJ,EAAE,GAAGtL,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,CAAC,CAAC;YAC1C,IAAIpJ,EAAE,CAACg0B,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC32K,CAAC,CAAC,CAAC6O,WAAW,CAAC,CAAC,IAAI,CAAC/X,EAAE,CAACi0B,OAAO,IAAI,CAACj0B,EAAE,CAACk0B,OAAO,EAAE;cACxH11B,IAAI,GAAGwB,EAAE;cACT;YACJ;UACJ;UAEA6gL,QAAQ,CAAC9lL,IAAI,CAACyD,IAAI,CAAC;QACvB;QAEA9J,MAAM,CAAC6pL,aAAa,GAAG,CAACqC,UAAU,EAAEC,QAAQ,CAAC;MACjD;IACJ;IAEA,IAAIP,YAAY,KAAK,CAAC,EAAE;MACpB;MACA5rL,MAAM,CAACupL,gBAAgB,GAAG,IAAI;MAC9B,IAAI6C,eAAe,GAAGpsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC/kL,MAAM;MACvE,IAAIimL,eAAe,GAAG,CAAC;MACvB,IAAIC,SAAS,GAAG,CAAC;MACjB,IAAI,OAAOtsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,WAAW,IAC3Dv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,IAAI,IAC7Cv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,EAAE,EAAE;QAC7C8sJ,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,CAACjlL,MAAM;MACvE,CAAC,MACI;QACDimL,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,CAACllL,MAAM;QACnEkmL,SAAS,GAAG,CAAC;MACjB;MAEA,IAAIC,SAAS,GAAG,CAACH,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,GAAIgtJ,SAAS,KAAK,CAAC,GAAGtsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,GAAGv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAQ,EAAEnc,WAAW,CAAC,CAAC;MAC3M,IAAImpK,SAAS,GAAG,CAACJ,eAAe,IAAIC,eAAe,GAAIC,SAAS,KAAK,CAAC,GAAGtsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,GAAGv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,GAAIx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,EAAEjc,WAAW,CAAC,CAAC;MAC3M,IAAIopK,SAAS,GAAIL,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,GAAImB,SAAS,KAAK,CAAC,GAAGtsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,GAAGrrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAe;MAC/M,IAAIoB,SAAS,GAAIN,eAAe,IAAIC,eAAe,GAAIC,SAAS,KAAK,CAAC,GAAGtsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,GAAGrrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,GAAItrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAc;MAE/M,IAAIwB,UAAU,GAAG,CAAC;QAAEZ,QAAQ,EAAE,IAAI;QAAEC,MAAM,EAAE;MAAG,CAAC,CAAC;MACjD,KAAK,IAAIx8K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGi9K,SAAS,CAACrmL,MAAM,EAAEoJ,CAAC,EAAE,EAAE;QACvCm9K,UAAU,CAACtmL,IAAI,CAAC;UAAE0lL,QAAQ,EAAE,IAAI;UAAEC,MAAM,EAAES,SAAS,CAACj9K,CAAC;QAAE,CAAC,CAAC;MAC7D;MACAxP,MAAM,CAAC6pL,aAAa,CAACxjL,IAAI,CAACsmL,UAAU,CAAC;MACrC3sL,MAAM,CAAC0pL,gBAAgB,GAAG+C,SAAS,CAACrmL,MAAM,GAAG,CAAC;MAC9CpG,MAAM,CAAC2pL,sBAAsB,GAAG,GAAG,GAAG3pL,MAAM,CAAC0pL,gBAAgB;MAE7D,IAAIuC,QAAQ,GAAGjsL,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAC7V,MAAM;MAEpD,KAAK,IAAI+lE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGugH,SAAS,CAACtmL,MAAM,EAAE+lE,CAAC,EAAE,EAAE;QACvC,IAAIygH,SAAS,GAAG,CAAC;UAAEb,QAAQ,EAAE,IAAI;UAAEC,MAAM,EAAEU,SAAS,CAACvgH,CAAC;QAAE,CAAC,CAAC;QAE1D,KAAK,IAAInmE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGymL,SAAS,CAACrmL,MAAM,EAAEJ,CAAC,EAAE,EAAE;UACvC,IAAI8D,IAAI,GAAG,IAAI;UACf,KAAK,IAAI4K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu3K,QAAQ,EAAEv3K,CAAC,EAAE,EAAE;YAC/B,IAAIm4K,EAAE,GAAG7sL,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,CAAC,CAAC;YAC1C,IAAI63K,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,CAACjc,WAAW,CAAC,CAAC,KAC9DipK,SAAS,KAAK,CAAC,IAAIE,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,CAAClc,WAAW,CAAC,CAAC,IAC7EipK,SAAS,KAAK,CAAC,IAAIE,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,CAACnc,WAAW,CAAC,CAAE,CAAC,EAAE;cAC/F,IAAKwpK,EAAE,CAACvtJ,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,CAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,KACtDipK,SAAS,KAAK,CAAC,IAAIO,EAAE,CAACttJ,OAAO,CAAClc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,IAAI,CAACwpK,EAAE,CAACrtJ,OAAO,IACvF8sJ,SAAS,KAAK,CAAC,IAAIO,EAAE,CAACrtJ,OAAO,CAACnc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,IAAK,CAACwpK,EAAE,CAACttJ,OAAO,CAAC,EACjG;gBACEz1B,IAAI,GAAG+iL,EAAE;gBACT;cACJ;YACJ,CAAC,MACI,IAAIL,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,CAACjc,WAAW,CAAC,CAAC,KACnEipK,SAAS,KAAK,CAAC,IAAIC,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,CAAClc,WAAW,CAAC,CAAC,IAC7EipK,SAAS,KAAK,CAAC,IAAIC,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,CAACnc,WAAW,CAAC,CAAE,CAAC,EAAE;cAC/F,IAAKwpK,EAAE,CAACvtJ,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,KACtDipK,SAAS,KAAK,CAAC,IAAIO,EAAE,CAACttJ,OAAO,CAAClc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,CAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,IAAI,CAACwpK,EAAE,CAACrtJ,OAAO,IACvF8sJ,SAAS,KAAK,CAAC,IAAIO,EAAE,CAACrtJ,OAAO,CAACnc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,CAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,IAAK,CAACwpK,EAAE,CAACttJ,OAAO,CAAC,EACjG;gBACEz1B,IAAI,GAAG+iL,EAAE;gBACT;cACJ;YACJ;UACJ,CAAC,CAAC;UACF,IAAI/iL,IAAI,KAAK,IAAI,EAAE8iL,SAAS,CAACvmL,IAAI,CAACyD,IAAI,CAAC,CAAC,KACnC8iL,SAAS,CAACvmL,IAAI,CAAC;YAAEymL,KAAK,EAAE;UAAK,CAAC,CAAC;QACxC,CAAC,CAAC;QACF9sL,MAAM,CAAC6pL,aAAa,CAACxjL,IAAI,CAACumL,SAAS,CAAC;MACxC,CAAC,CAAC;IACN;IAEA,IAAIhB,YAAY,KAAK,CAAC,EAAE;MACpB;MACA5rL,MAAM,CAACupL,gBAAgB,GAAG,KAAK;MAC/B,IAAI6C,eAAe,GAAG,CAAC;MACvB,IAAIC,eAAe,GAAG,CAAC;MACvB,IAAIE,SAAS,GAAG,EAAE;MAClB,IAAIC,SAAS,GAAG,EAAE;MAClB,IAAIC,SAAS,GAAG,EAAE;MAClB,IAAIC,SAAS,GAAG,EAAE;MAClB,IAAIb,QAAQ,KAAK,CAAC,EAAE;QAChBO,eAAe,GAAGpsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,CAACjlL,MAAM;QACnEimL,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,CAACllL,MAAM;QAEnEmmL,SAAS,GAAG,CAACH,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,GAAGv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,EAAEnc,WAAW,CAAC,CAAC;QAC5ImpK,SAAS,GAAG,CAACJ,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,GAAGx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,EAAElc,WAAW,CAAC,CAAC;QAC5IopK,SAAS,GAAIL,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,GAAGrrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAc;QAC1IoB,SAAS,GAAIN,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,GAAGtrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAc;MAC9I,CAAC,MACG,IAAIQ,QAAQ,KAAK,CAAC,EAAE;QAChBO,eAAe,GAAGpsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC/kL,MAAM;QACnEimL,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,CAACllL,MAAM;QAEnEmmL,SAAS,GAAG,CAACH,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,GAAGt/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,EAAEnc,WAAW,CAAC,CAAC;QAC5ImpK,SAAS,GAAG,CAACJ,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,GAAGx/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,EAAEjc,WAAW,CAAC,CAAC;QAC5IopK,SAAS,GAAIL,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,GAAGnrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAc;QAC1IoB,SAAS,GAAIN,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,GAAGtrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAc;MAC9I,CAAC,MACG,IAAIU,QAAQ,KAAK,CAAC,EAAE;QAChBO,eAAe,GAAGpsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC/kL,MAAM;QACnEimL,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,CAACjlL,MAAM;QAEnEmmL,SAAS,GAAG,CAACH,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,GAAGt/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,EAAElc,WAAW,CAAC,CAAC;QAC5ImpK,SAAS,GAAG,CAACJ,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,GAAGv/B,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,EAAEjc,WAAW,CAAC,CAAC;QAC5IopK,SAAS,GAAIL,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,GAAGnrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAc;QAC1IqB,SAAS,GAAIN,eAAe,IAAIC,eAAe,GAAGrsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,GAAGrrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAc;MAC9I;MAER,IAAIwB,UAAU,GAAG,CAAC;QAAEZ,QAAQ,EAAE,IAAI;QAAEC,MAAM,EAAE;MAAG,CAAC,CAAC;MACjD,KAAK,IAAIx8K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGi9K,SAAS,CAACrmL,MAAM,EAAEoJ,CAAC,EAAE,EAAE;QACvCm9K,UAAU,CAACtmL,IAAI,CAAC;UAAE0lL,QAAQ,EAAE,IAAI;UAAEC,MAAM,EAAES,SAAS,CAACj9K,CAAC;QAAE,CAAC,CAAC;MAC7D;MACAxP,MAAM,CAAC6pL,aAAa,CAACxjL,IAAI,CAACsmL,UAAU,CAAC;MACrC3sL,MAAM,CAAC0pL,gBAAgB,GAAG+C,SAAS,CAACrmL,MAAM,GAAG,CAAC;MAC9CpG,MAAM,CAAC2pL,sBAAsB,GAAG,GAAG,GAAG3pL,MAAM,CAAC0pL,gBAAgB;MAE7D,IAAIuC,QAAQ,GAAGjsL,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAC7V,MAAM;MAEpD,KAAK,IAAI+lE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGugH,SAAS,CAACtmL,MAAM,EAAE+lE,CAAC,EAAE,EAAE;QACvC,IAAIygH,SAAS,GAAG,CAAC;UAAEb,QAAQ,EAAE,IAAI;UAAEC,MAAM,EAAEU,SAAS,CAACvgH,CAAC;QAAE,CAAC,CAAC;QAE1D,KAAK,IAAInmE,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGymL,SAAS,CAACrmL,MAAM,EAAEJ,EAAC,EAAE,EAAE;UACvC,IAAI8D,IAAI,GAAG,IAAI;UACf,KAAK,IAAI4K,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGu3K,QAAQ,EAAEv3K,EAAC,EAAE,EAAE;YAC/B,IAAIm3K,QAAQ,KAAK,CAAC,EAAE;cAChB,IAAIU,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,CAAClc,WAAW,CAAC,CAAC,IAAImpK,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,CAACnc,WAAW,CAAC,CAAC,EAAE;gBACtI,IAAIrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC4qB,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAACypL,eAAe,CAACpmK,WAAW,CAAC,CAAC,IAChGrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC6qB,OAAO,CAAClc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,EAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,IACtFrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC8qB,OAAO,CAACnc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,EAAE;kBACxFvZ,IAAI,GAAG9J,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC;kBACxC;gBACJ;cACJ,CAAC,MACI,IAAI63K,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,CAACnc,WAAW,CAAC,CAAC,IAAImpK,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,CAAClc,WAAW,CAAC,CAAC,EAAE;gBAC3I,IAAIrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC4qB,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAACypL,eAAe,CAACpmK,WAAW,CAAC,CAAC,IAC/FrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC8qB,OAAO,CAACnc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,EAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,IACpFrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC6qB,OAAO,CAAClc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,EAAE;kBAC3FvZ,IAAI,GAAG9J,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC;kBACxC;gBACJ;cACJ;YACJ,CAAC,MAAM,IAAIm3K,QAAQ,KAAK,CAAC,EAAE;cACvB,IAAIU,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,CAACjc,WAAW,CAAC,CAAC,IAAImpK,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,CAACnc,WAAW,CAAC,CAAC,EAAE;gBACtI,IAAIrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC6qB,OAAO,CAAClc,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAACypL,eAAe,CAACpmK,WAAW,CAAC,CAAC,IAChGrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC4qB,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,EAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,IACnFrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC8qB,OAAO,CAACnc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,EAAE;kBAC3FvZ,IAAI,GAAG9J,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC;kBACxC;gBACJ;cACJ,CAAC,MACI,IAAI63K,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,CAACnc,WAAW,CAAC,CAAC,IAAImpK,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,CAACjc,WAAW,CAAC,CAAC,EAAE;gBAC3I,IAAIrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC6qB,OAAO,CAAClc,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAACypL,eAAe,CAACpmK,WAAW,CAAC,CAAC,IAChGrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC8qB,OAAO,CAACnc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,EAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,IACnFrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC4qB,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,EAAE;kBAC3FvZ,IAAI,GAAG9J,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC;kBACxC;gBACJ;cACJ;YACJ,CAAC,MAAM,IAAIm3K,QAAQ,KAAK,CAAC,EAAE;cACvB,IAAIU,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,CAACjc,WAAW,CAAC,CAAC,IAAImpK,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,CAAClc,WAAW,CAAC,CAAC,EAAE;gBACtI,IAAIrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC8qB,OAAO,CAACnc,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAACypL,eAAe,CAACpmK,WAAW,CAAC,CAAC,IAChGrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC4qB,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,EAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,IACnFrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC6qB,OAAO,CAAClc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,EAAE;kBAC3FvZ,IAAI,GAAG9J,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC;kBACxC;gBACJ;cACJ,CAAC,MACI,IAAI63K,SAAS,KAAKvsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,CAAClc,WAAW,CAAC,CAAC,IAAImpK,SAAS,KAAKxsL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,CAACjc,WAAW,CAAC,CAAC,EAAE;gBAC3I,IAAIrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC8qB,OAAO,CAACnc,WAAW,CAAC,CAAC,KAAKrjB,MAAM,CAACypL,eAAe,CAACpmK,WAAW,CAAC,CAAC,IAChGrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC6qB,OAAO,CAAClc,WAAW,CAAC,CAAC,KAAKopK,SAAS,CAACzmL,EAAC,CAAC,CAACqd,WAAW,CAAC,CAAC,IACnFrjB,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC,CAAC4qB,OAAO,CAACjc,WAAW,CAAC,CAAC,KAAKqpK,SAAS,CAACvgH,CAAC,CAAC,CAAC9oD,WAAW,CAAC,CAAC,EAAE;kBAC3FvZ,IAAI,GAAG9J,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAACvH,EAAC,CAAC;kBACxC;gBACJ;cACJ;YACJ;UACJ,CAAC,CAAC;UACF,IAAI5K,IAAI,KAAK,IAAI,EAAE8iL,SAAS,CAACvmL,IAAI,CAACyD,IAAI,CAAC,CAAC,KACnC8iL,SAAS,CAACvmL,IAAI,CAAC;YAAEymL,KAAK,EAAE;UAAK,CAAC,CAAC;QACxC,CAAC,CAAC;QACF9sL,MAAM,CAAC6pL,aAAa,CAACxjL,IAAI,CAACumL,SAAS,CAAC;MACxC,CAAC,CAAC;IACN;IACA5sL,MAAM,CAAC+sL,sBAAsB,GAAG/sL,MAAM,CAAC6pL,aAAa,CAAC,CAAC,CAAC,CAACzjL,MAAM;IAC9D5F,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,QAAQ,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAC9BV,CAAC,CAAC,8BAA8B,CAAC,CAACU,OAAO,CAAC,QAAQ,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC;EACV,CAAC;EAEDxE,MAAM,CAACgtL,qBAAqB,GAAG,UAAUvD,eAAe,EAAE;IACtDzpL,MAAM,CAACypL,eAAe,GAAGA,eAAe;IACxCzpL,MAAM,CAACy9H,UAAU,CAAC,CAAC;EACvB,CAAC;EAEDz9H,MAAM,CAACspL,gBAAgB,GAAG,UAAUE,UAAU,EAAE;IAC5CxpL,MAAM,CAACgqL,oBAAoB,GAAG,EAAE;IAEhChqL,MAAM,CAACwpL,UAAU,GAAGA,UAAU;IAC9B,IAAIA,UAAU,KAAKxpL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACjsJ,OAAO,EAAE;MACrDt/B,MAAM,CAACgqL,oBAAoB,GAAGhqL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa;MACxEnrL,MAAM,CAACypL,eAAe,GAAGzpL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACJ,aAAa,CAAC,CAAC,CAAC;IAC1E;IACA,IAAInrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,KAAK,EAAE,EAAE;MAC7C,IAAIiqJ,UAAU,KAAKxpL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAChsJ,OAAO,EAAE;QACrDv/B,MAAM,CAACgqL,oBAAoB,GAAGhqL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa;QACxErrL,MAAM,CAACypL,eAAe,GAAGzpL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACF,aAAa,CAAC,CAAC,CAAC;MAC1E;IACJ;IACA,IAAIrrL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,KAAK,EAAE,EAAE;MAC7C,IAAIgqJ,UAAU,KAAKxpL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAAC/rJ,OAAO,EAAE;QACrDx/B,MAAM,CAACgqL,oBAAoB,GAAGhqL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa;QACxEtrL,MAAM,CAACypL,eAAe,GAAGzpL,MAAM,CAAC4pL,aAAa,CAAC2B,OAAO,CAACD,aAAa,CAAC,CAAC,CAAC;MAC1E;IACJ;IACAtrL,MAAM,CAACy9H,UAAU,CAAC,CAAC;EACvB,CAAC;EAEDz9H,MAAM,CAACiuG,GAAG,GAAG,CAAC,CAAC;EACfjuG,MAAM,CAACitL,SAAS,GAAG,YAAU;IACzBjtL,MAAM,CAAC4Y,cAAc,GAAG;MACpBrD,KAAK,EAAE,EAAE;MACTk2K,QAAQ,EAAE,EAAE;MACZyB,OAAO,EAAE;IACb,CAAC;IACDltL,MAAM,CAAC0b,mBAAmB,CAAC,UAAU,CAAC;EAC1C,CAAC;EAED1b,MAAM,CAACmtL,gBAAgB,GAAG,IAAI,CAAC,CAAC;;EAEhCntL,MAAM,CAAC0b,mBAAmB,GAAG,UAAUY,IAAI,EAAE;IACzC9b,QAAQ,CAAC,YAAY;MACbR,MAAM,CAACmtL,gBAAgB,CAACt3K,IAAI,CAAC,CAACyG,IAAI,GAAG,iBAAiB,GAAG,GAAG,GAACA,IAAI,CAAC;IAC1E,CAAC,CAAC;EACN,CAAC;;EAED;EACAtc,MAAM,CAACuc,WAAW,GAAG,UAAUC,GAAG,EAAEla,KAAK,EAAE;IAEvC9B,QAAQ,CAAC,YAAY;MAAER,MAAM,CAACmtL,gBAAgB,CAACriL,IAAI,CAAC,IAAI,CAAC;IAAE,CAAC,CAAC;IAE7D,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAY;QACjB,IAAG,CAACR,MAAM,CAAC4Y,cAAc,CAACs0K,OAAO,EAAE;UAC/BltL,MAAM,CAAC4Y,cAAc,CAAC5Y,MAAM,CAAC+X,gBAAgB,CAAC,GAAG,CAAC/X,MAAM,CAAC4Y,cAAc,CAACrD,KAAK;UAC7E,IAAI63K,SAAS,GAAGptL,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAClW,MAAM,CAAC,UAASyO,CAAC,EAAE;YAAC,OAAOA,CAAC,CAAC02K,KAAK,KAAKlrL,MAAM,CAAC4Y,cAAc,CAACsyK,KAAK;UAAC,CAAC,CAAC,CAAC,CAAC,CAAC;UACvH,IAAIriE,KAAK,GAAG7oH,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAClW,MAAM,CAAC,UAASyO,CAAC,EAAE;YAAC,OAAOA,CAAC,CAAC8qB,OAAO,KAAK8tJ,SAAS,CAAC9tJ,OAAO,IAC9F9qB,CAAC,CAAC+qB,OAAO,KAAK6tJ,SAAS,CAAC7tJ,OAAO,IAAI/qB,CAAC,CAACgrB,OAAO,KAAK4tJ,SAAS,CAAC5tJ,OAAO;UACzE,CAAC,CAAC;UACF1/B,OAAO,CAAC4M,OAAO,CAACm8G,KAAK,EAAE,UAAS/+G,IAAI,EAAE;YAClCA,IAAI,CAAC9J,MAAM,CAAC+X,gBAAgB,CAAC,GAAG/X,MAAM,CAAC4Y,cAAc,CAAC5Y,MAAM,CAAC+X,gBAAgB,CAAC;UAClF,CAAC,CAAC;QACN,CAAC,MAAM;UACHjY,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,EAAE,UAASnS,IAAI,EAAC;YAC1DA,IAAI,CAAC9J,MAAM,CAAC+X,gBAAgB,CAAC,GAAG,CAAC/X,MAAM,CAAC4Y,cAAc,CAACrD,KAAK;UAChE,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN;IACAjT,KAAK,CAACyzB,eAAe,CAAC,CAAC;IACvBzzB,KAAK,CAAC0zB,cAAc,CAAC,CAAC;EAC1B,CAAC;EAEDh2B,MAAM,CAACi/K,IAAI,GAAG,YAAW;IACrB,IAAIviK,SAAS,GAAG,EAAE;IAClB5c,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,EAAE,UAASnS,IAAI,EAAE;MAC3DA,IAAI,CAACqvC,QAAQ,GAAGn5C,MAAM,CAACiuG,GAAG,CAAC88E,QAAQ;MACnCjhL,IAAI,CAACgE,OAAO,GAAG9N,MAAM,CAACiuG,GAAG,CAAC88E,QAAQ;MAElC,IAAGruK,SAAS,CAAC3W,MAAM,CAAC,UAASC,CAAC,EAAC;QAC3B,OAAOA,CAAC,CAACs5B,OAAO,IAAIx1B,IAAI,CAACw1B,OAAO,IAAIt5B,CAAC,CAACu5B,OAAO,IAAIz1B,IAAI,CAACy1B,OAAO,IAAIv5B,CAAC,CAACw5B,OAAO,IAAI11B,IAAI,CAAC01B,OAAO;MAC9F,CAAC,CAAC,CAACp5B,MAAM,IAAI,CAAC,EAAC;QACX,IAAIinL,UAAU,GAAGrtL,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAClW,MAAM,CAAC,UAASyO,CAAC,EAAE;UAC/D,OAAOA,CAAC,CAAC8qB,OAAO,KAAKx1B,IAAI,CAACw1B,OAAO,IAAI9qB,CAAC,CAAC+qB,OAAO,KAAKz1B,IAAI,CAACy1B,OAAO,IAAI/qB,CAAC,CAACgrB,OAAO,KAAK11B,IAAI,CAAC01B,OAAO,IAC1F11B,IAAI,CAACohL,KAAK,KAAK12K,CAAC,CAAC02K,KAAK;QAC7B,CAAC,CAAC;QAEFprL,OAAO,CAAC4M,OAAO,CAAC2gL,UAAU,EAAE,UAASt2C,SAAS,EAAE;UAC5CA,SAAS,CAAC/2I,MAAM,CAAC+X,gBAAgB,CAAC,GAAGjO,IAAI,CAAC9J,MAAM,CAAC+X,gBAAgB,CAAC;QACtE,CAAC,CAAC;QACF2E,SAAS,CAACrW,IAAI,CAAC;UAACi5B,OAAO,EAAEx1B,IAAI,CAACw1B,OAAO;UAAEC,OAAO,EAAEz1B,IAAI,CAACy1B,OAAO;UAAEC,OAAO,EAAE11B,IAAI,CAAC01B;QAAO,CAAC,CAAC;MACzF;IAEJ,CAAC,CAAC;IACFv/B,UAAU,CAAC+K,UAAU,CAAChL,MAAM,CAACsO,IAAI,IAAI,UAAU,GAAG,wBAAwB,GAAG,gCAAgC,EAAE;MAC3GikF,QAAQ,EAAEvyF,MAAM,CAACuyF,QAAQ;MACzBs2B,KAAK,EAAE7oH,MAAM,CAAC4pL,aAAa,CAAC3tK,SAAS,CAAClW,MAAM,CAAC,UAASqlL,EAAE,EAAE;QAAC,OAAOA,EAAE,CAACprL,MAAM,CAAC+X,gBAAgB,CAAC,GAAG,CAAC;MAAC,CAAC,CAAC;MACpGgzK,QAAQ,EAAE/qL,MAAM,CAACiuG,GAAG,CAAC88E;IACzB,CAAC,CAAC;IACF/qL,MAAM,CAAC8K,IAAI,CAAC,CAAC;EACjB,CAAC;EAED9K,MAAM,CAAC8K,IAAI,GAAG,YAAU;IACpB9K,MAAM,CAAC8pL,YAAY,GAAG,KAAK;IAC3BzpL,aAAa,CAAC+L,WAAW,CAAC,iBAAiB,CAAC;IAC5CpM,MAAM,CAACupL,gBAAgB,GAAG,IAAI;IAC9BvpL,MAAM,CAACiuG,GAAG,GAAG,CAAC,CAAC;EACnB,CAAC;AAEjB,CAAC,CAAC,CAAC,CACFr7C,SAAS,CAAC,uBAAuB,EAC1B,YAAW;EACP,OAAO,UAASC,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IAEnC,IAAIw6H,SAAS,GAAG,OAAO;IACvB,IAAIC,UAAU,GAAG,KAAK;IACtB,IAAG,CAAC16H,KAAK,CAACk3H,UAAU,IAAI,CAACl3H,KAAK,CAAChnD,QAAQ,EAAE;MACrC/H,CAAC,CAACwzC,OAAO,CAAC,CACTl6B,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CACnBA,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CACxBu9C,OAAO,CAAC;QACLT,SAAS,EAAE,UAAU;QACrB11D,OAAO,EAAE,aAAa;QACtBib,IAAI,EAAE,IAAI;QACVo7C,OAAO,EAAE,SAATA,OAAOA,CAAA,EAAc;UACjB,OAAO/2D,CAAC,CAAC,SAAS,CAAC,CACd2b,IAAI,CAAC,mBAAmB,GAAGqzC,KAAK,CAACz+B,SAAS,GAAG,cAAc,GAAGy+B,KAAK,CAAC06H,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAACt0F,SAAS;QACjH,CAAC;QACD,UAAU,EACN,0HAA0H,GACtHo0F,SAAS,GACT,sBAAsB,GACtBC,UAAU,GACV;MACZ,CAAC,CAAC,CACD7hI,IAAI,CAAC,YAAW;QACb5nD,CAAC,CAAC,IAAI,CAAC,CAAC62D,OAAO,CAAC,MAAM,CAAC;MAC3B,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC,CAAC,C;;;;;;;;;;ACvmBV76D,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,yBAAyB,EAC1D,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAC9D,eAAe,EAAE,UAAU,EAAE,eAAe,EAC5C,UAAUC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAE0/J,oBAAoB,EACtD7oL,aAAa,EAAEG,QAAQ,EAAEN,aAAa,EAAE;EAEvC,IAAI,CAACspB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEA,IAAIqjK,aAAa,GAAG,IAAI;EACxB,IAAI31K,YAAY,GAAG,OAAO;EAC1B,IAAI41K,cAAc,GAAG,SAAS;EAC9B,IAAIC,cAAc,GAAG,SAAS;EAC9B,IAAIC,iBAAiB,GAAG,YAAY;EACpC,IAAIC,kBAAkB,GAAG,aAAa;EACtC,IAAIC,gBAAgB,GAAG,WAAW;EAClC,IAAIC,aAAa,GAAG,QAAQ;EAE5B/tL,MAAM,CAACa,UAAU,GAAG,EAAE;EACtBb,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACmhH,QAAQ,GAAG,CAAC;EACnBnhH,MAAM,CAACohH,eAAe;EACtBphH,MAAM,CAACyb,UAAU,GAAG,GAAG;EACvBzb,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EACxBlJ,MAAM,CAACguL,iBAAiB,GAAG,EAAE;EAC7BhuL,MAAM,CAACiY,iBAAiB,GAAG,EAAE,CAAC;EAC9BjY,MAAM,CAACkY,wBAAwB,GAAG,EAAE,CAAC;EACrClY,MAAM,CAACqZ,UAAU,GAAG,CAAC;EACrBrZ,MAAM,CAACsZ,oBAAoB,GAAG,CAAC;EAC/BtZ,MAAM,CAACiuL,cAAc,GAAG,CACpB;IAACl2I,MAAM,EAAE,GAAG;IAAEm2I,UAAU,EAAE;EAAK,CAAC,EAChC;IAACn2I,MAAM,EAAEjgC,YAAY;IAAEo2K,UAAU,EAAE;EAAO,CAAC,EAC3C;IAACn2I,MAAM,EAAE21I,cAAc;IAAEQ,UAAU,EAAE;EAAS,CAAC,EAC/C;IAACn2I,MAAM,EAAE81I,kBAAkB;IAAEK,UAAU,EAAE;EAAa,CAAC,EACvD;IAACn2I,MAAM,EAAE+1I,gBAAgB;IAAEI,UAAU,EAAE;EAAW,CAAC,CAAC;EAExDluL,MAAM,CAACm+C,SAAS,GAAG,EAAE;EACrBn+C,MAAM,CAACmuL,YAAY,GAAG,EAAE;EACxBnuL,MAAM,CAACouL,SAAS,GAAG,EAAE;EACrBpuL,MAAM,CAACquL,aAAa,GAAG,CAAC,CAAC;EACzBruL,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EACjEvY,MAAM,CAACqV,SAAS,GAAG,IAAI;EAEvBrV,MAAM,CAACsuL,UAAU,GAAG,IAAI;EACxBtuL,MAAM,CAACuuL,YAAY,GAAG,IAAI;EAE1BvuL,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACXmlL,oBAAoB,CAACsF,sBAAsB,CAAC,CAAC,CAC5CxqL,IAAI,CAAC,UAAUE,IAAI,EAAE;MAClB,IAAIuqL,eAAe,GAAGvuL,aAAa,CAACiN,YAAY;MAChD,IAAI9D,GAAG,GAAGnF,IAAI,CAACA,IAAI,CAACi6C,SAAS;MAC7Bn+C,MAAM,CAACmuL,YAAY,GAAG9kL,GAAG;MACzBvJ,OAAO,CAAC4M,OAAO,CAACrD,GAAG,EAAE,UAAUzJ,EAAE,EAAE;QAC/B,IAAGA,EAAE,CAAC8d,UAAU,KAAK+wK,eAAe,KAChC7uL,EAAE,CAAC8uL,QAAQ,KAAK,IAAI,IAAK9uL,EAAE,CAAC8uL,QAAQ,KAAK,IAAI,IAAI9uL,EAAE,CAAC8uL,QAAQ,KAAKD,eAAgB,CAAC,EAAC;UACnFzuL,MAAM,CAACm+C,SAAS,CAAC93C,IAAI,CAACzG,EAAE,CAAC;QAC7B;MACJ,CAAC,CAAC;MAEFI,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;MACnC,OAAOk+K,oBAAoB,CAACyF,aAAa,CAAC,CAAC;IAC/C,CAAC,CAAC,CACD3qL,IAAI,CAAC,UAASE,IAAI,EAAE;MACjB,IAAImF,GAAG,GAAGnF,IAAI,CAACA,IAAI,CAACkqL,SAAS;MAC7BpuL,MAAM,CAACouL,SAAS,GAAG/kL,GAAG;MACtBrJ,MAAM,CAACquL,aAAa,GAAGnqL,IAAI,CAACA,IAAI,CAACmqL,aAAa;IAClD,CAAC,CAAC,WACM,CAAC,YAAY;MACjBvqL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAEDrE,MAAM,CAACi2H,WAAW,GAAG,UAAU12D,UAAU,EAAE;IACvC,IAAI5e,IAAI,GAAG,CAAC,CAAC;IAEb,IAAI4e,UAAU,CAAC5e,IAAI,CAACu1E,SAAS,EAAE;MAC3Bv1E,IAAI,CAAC4wE,SAAS,GAAGhyD,UAAU,CAAC5e,IAAI,CAACu1E,SAAS;MAC1Cv1E,IAAI,CAAC8wE,SAAS,GAAGlyD,UAAU,CAAC5e,IAAI,CAAC7tC,OAAO,GAAG,MAAM,GAAG,KAAK;IAC7D;IAEAhP,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC6iH,QAAQ,CAACliE,IAAI,CAAC,WACb,CAAC,YAAY;MACjB78C,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAED,IAAMy1B,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACmhH,QAAQ,GAAGnhH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAACujH,UAAU,CAACvjH,MAAM,CAACmhH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAED9mF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C,SAASM,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAEDt5B,MAAM,CAACujH,UAAU,GAAG,UAAUnoF,IAAI,EAAE;IAChCp7B,MAAM,CAACmhH,QAAQ,GAAG/lF,IAAI;IACtBp7B,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;EACvC,CAAC;EAEDhL,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,UAASygH,OAAO,EAAE;IAC3Ch/G,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IAEvBlJ,MAAM,CAAC6iH,QAAQ,CAACC,OAAO,CAAC,WAAQ,CAAC,YAAW;MACxC9iH,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAMuqL,eAAe,GAAG9qL,CAAC,CAAC,wCAAwC,CAAC;MACnE,IAAM+qL,oBAAoB,GAAGD,eAAe,CAACx6H,WAAW,CAAC,CAAC;MAC1D,IAAM06H,gBAAgB,GAAGF,eAAe,CAACv9K,IAAI,CAAC,uBAAuB,CAAC,CAAC+iD,WAAW,CAAC,CAAC;MACpF,IAAM26H,yBAAyB,GAAGD,gBAAgB,GAAGD,oBAAoB;MACzE,IAAIE,yBAAyB,EAAE;QAC3Bj1J,yBAAyB,CAAC,CAAC;MAC/B;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;EAEF95B,MAAM,CAAC6iH,QAAQ,GAAG,UAAUC,OAAO,EAAE;IACjCziH,aAAa,CAAC0K,YAAY,CAAC,CAAC;IAC5B,IAAIiS,GAAG,GAAGksK,oBAAoB,CAAC8F,aAAa,CAAChvL,MAAM,CAACa,UAAU,EAAEb,MAAM,CAACmhH,QAAQ,EAAEnhH,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACyb,UAAU,EAAEqnG,OAAO,CAAC,CAC3H9+G,IAAI,CAAC,UAAUE,IAAI,EAAE;MAClB,IAAGlE,MAAM,CAACmhH,QAAQ,KAAK,CAAC,EAAC;QACrBnhH,MAAM,CAACguL,iBAAiB,GAAG,EAAE;MACjC;MAEAhuL,MAAM,CAACmhH,QAAQ,GAAGj9G,IAAI,CAACA,IAAI,CAACg/G,IAAI;MAChCljH,MAAM,CAACohH,eAAe,GAAGl9G,IAAI,CAACA,IAAI,CAACg/G,IAAI;MACvC9oF,QAAQ,CAACl2B,IAAI,CAACA,IAAI,CAAC60B,KAAK,CAAC;MAEzBj5B,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAAUjrD,EAAE,EAAE;QAC1CA,EAAE,CAAC4sD,IAAI,GAAG5sD,EAAE,CAACqvL,cAAc,GAAG5uL,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAACqvL,cAAc,CAAC,GAAG,EAAE;QAC3FrvL,EAAE,CAACsvL,YAAY,GAAGtvL,EAAE,CAACuvL,YAAY,GAAG9uL,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAACuvL,YAAY,CAAC,GAAG,EAAE;QAC/FvvL,EAAE,CAACsuL,UAAU,GAAGluL,MAAM,CAACovL,aAAa,CAACxvL,EAAE,CAACyD,MAAM,CAAC;QAC/CzD,EAAE,CAACyvL,OAAO,GAAGrvL,MAAM,CAACsvL,UAAU,CAAC1vL,EAAE,CAACsD,IAAI,EAAEtD,EAAE,CAACyD,MAAM,CAAC;QAClDzD,EAAE,CAAC2vL,OAAO,GAAGvvL,MAAM,CAACwvL,UAAU,CAAC5vL,EAAE,CAACsD,IAAI,EAAEtD,EAAE,CAACyD,MAAM,CAAC;QAClDzD,EAAE,CAAC6vL,mBAAmB,GAAG3rL,CAAC,CAACyX,IAAI,CAAC3b,EAAE,CAAC6vL,mBAAmB,CAAC;QAEvDzvL,MAAM,CAACguL,iBAAiB,CAAC3nL,IAAI,CAACzG,EAAE,CAAC;MACrC,CAAC,CAAC;IACN,CAAC,CAAC;IAEN,OAAOod,GAAG;EACd,CAAC;EAEDhd,MAAM,CAAC0I,MAAM,CAAC,YAAY,EACtB,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACmhH,QAAQ,GAAG,CAAC;MACnBnhH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC;EACJ,CACJ,CAAC;EAEDxK,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,YAAY;IAC1B+D,WAAW,CAAC,CAAC;EACjB,CAAC,CAAC;EAEFlF,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IAErC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B,CAAC,MACI;MACDrV,MAAM,CAACgL,UAAU,CAAC,uBAAuB,CAAC;IAC9C;IAEAxK,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAACs6B,MAAM,GAAG,UAAUh4B,KAAK,EAAE;IAC7BtC,MAAM,CAACmhH,QAAQ,GAAG,CAAC;IACnBnhH,MAAM,CAACohH,eAAe,GAAG,CAAC;IAC1BphH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;EACvC,CAAC;EAEDhL,MAAM,CAACujH,UAAU,GAAG,UAAUnoF,IAAI,EAAE;IAChCp7B,MAAM,CAACmhH,QAAQ,GAAG/lF,IAAI;IACtBp7B,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;EACvC,CAAC;EAEDhL,MAAM,CAACovL,aAAa,GAAG,UAASr3I,MAAM,EAAE;IACpC,QAAOA,MAAM;MACT,KAAK,OAAO;QACR,OAAO,OAAO;MAClB,KAAK,SAAS;QACV,OAAO,SAAS;MACpB,KAAK,SAAS;QACV,OAAO,SAAS;MACpB,KAAK,YAAY;QACb,OAAO,YAAY;MACvB,KAAK,WAAW;QACZ,OAAO,WAAW;MACtB,KAAK,mBAAmB;QACpB,OAAO,QAAQ;MACnB,KAAK,oBAAoB;QACrB,OAAO,WAAW;MACtB,KAAK,cAAc;QACf,OAAO,SAAS;MACpB,KAAK,gBAAgB;QACjB,OAAO,UAAU;MACrB,KAAK,+BAA+B;QAChC,OAAO,sBAAsB;MACjC,KAAK,oBAAoB;QACrB,OAAO,kBAAkB;MAC7B,KAAK,UAAU;QACX,OAAO,QAAQ;MACnB,KAAK,UAAU;QACX,OAAO,WAAW;IAC1B;IAEA,OAAOA,MAAM;EACjB,CAAC;EAED/3C,MAAM,CAACsvL,UAAU,GAAG,UAASI,QAAQ,EAAE33I,MAAM,EAAE;IAC3C,OAAO23I,QAAQ,KAAKjC,aAAa,IAC9B11I,MAAM,KAAK21I,cAAc;EAChC,CAAC;EAED1tL,MAAM,CAACwvL,UAAU,GAAG,UAASlhL,IAAI,EAAEypC,MAAM,EAAE;IACvC,OAAOzpC,IAAI,KAAKm/K,aAAa,KAAK11I,MAAM,KAAK21I,cAAc,IACpD31I,MAAM,KAAKjgC,YAAY,CAAE;EACpC,CAAC;;EAED;EACA9X,MAAM,CAAC2vL,aAAa,GAAG,UAASrhL,IAAI,EAAE;IAClC,IAAGA,IAAI,EAAE;MACLtO,MAAM,CAACmB,IAAI,GAAG,KAAK;MAEnB,IAAIw7K,EAAE,GAAG74K,CAAC,CAAC,iCAAiC,CAAC;MAC7C,IAAI64K,EAAE,CAACv2K,MAAM,GAAG,CAAC,EAAE;QACfu2K,EAAE,CAAC/sG,QAAQ,CAAC,QAAQ,CAAC;MACzB;MAEA,IAAGthE,IAAI,KAAK,UAAU,EAAE;QACpBrO,UAAU,CAAC+K,UAAU,CAAC,yBAAyB,EAAE;UAC7CmzC,SAAS,EAAEn+C,MAAM,CAACm+C;QACtB,CAAC,CAAC;MACN,CAAC,MAAM;QACHl+C,UAAU,CAAC+K,UAAU,CAAC,oBAAoB,EAAE;UACxCojL,SAAS,EAAEpuL,MAAM,CAACouL,SAAS;UAC3BC,aAAa,EAAEruL,MAAM,CAACquL,aAAa;UACnClwI,SAAS,EAAEn+C,MAAM,CAACmuL;QACtB,CAAC,CAAC;MACN;IACJ;EACJ,CAAC;EAEDnuL,MAAM,CAAC4vL,cAAc,GAAG,UAAU11K,GAAG,EAAE;IACnCla,MAAM,CAACmB,IAAI,GAAG,MAAM;IACpB,IAAG+Y,GAAG,CAAChX,IAAI,KAAKuqL,aAAa,EAAE;MAC3BxtL,UAAU,CAAC+K,UAAU,CAAC,0BAA0B,EAAE;QAC9CmzC,SAAS,EAAEn+C,MAAM,CAACm+C,SAAS;QAC3BjkC,GAAG,EAAEA;MACT,CAAC,CAAC;IACN,CAAC,MAAM;MACHja,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,EAAE;QACzCojL,SAAS,EAAEpuL,MAAM,CAACouL,SAAS;QAC3BC,aAAa,EAAEruL,MAAM,CAACquL,aAAa;QACnCn0K,GAAG,EAAEA;MACT,CAAC,CAAC;IACN;EACJ,CAAC;EAEDla,MAAM,CAAC6vL,WAAW,GAAG,UAAS31K,GAAG,EAAE;IAC/B,IAAIA,GAAG,CAACg0K,UAAU,IAAI,UAAU,EAAE;MAC9B,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC,CAAC,MAAM,IAAIh0K,GAAG,CAACg0K,UAAU,IAAI,SAAS,EAAE;MACpC,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC,CAAC,MAAM,IAAIh0K,GAAG,CAACg0K,UAAU,IAAI,WAAW,EAAE;MACtC,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC,CAAC,MAAM,IAAIh0K,GAAG,CAACg0K,UAAU,IAAI,QAAQ,EAAE;MACnC,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC,CAAC,MAAM,IAAIh0K,GAAG,CAACg0K,UAAU,IAAI,OAAO,EAAE;MAClC,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC,CAAC,MAAM,IAAIh0K,GAAG,CAACg0K,UAAU,IAAI,kBAAkB,EAAE;MAC7C,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC;EACJ,CAAC;EAEDjuL,UAAU,CAACoC,GAAG,CAAC,wBAAwB,EAAE,YAAW;IAChDrC,MAAM,CAACmhH,QAAQ,GAAG,CAAC;IACnBnhH,MAAM,CAACmB,IAAI,GAAG,YAAY;IAC1BnB,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IAEnC,IAAI6iB,cAAc,GAAG/pB,CAAC,CAAC,kCAAkC,CAAC;IAC1DzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC,C;;;;;;;;;;ACjTH/tB,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,sBAAsB,EACrD,CAAC,SAAS,EAAE,eAAe,EAAE,uBAAuB,EAAE,eAAe,EAAC,IAAI,EAAE,iBAAiB,EACzF,UAAU1iD,cAAc,EAAEJ,aAAa,EAAE+vB,qBAAqB,EAAElwB,aAAa,EAAES,EAAE,EAAE0vB,eAAe,EAAE;EAEhG,IAAI64J,oBAAoB,GAAG,CAAC,CAAC;;EAE7B;EACAA,oBAAoB,CAAC8F,aAAa,GAAG,UAAUnuL,UAAU,EAAEu6B,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAE;IACrF,IAAIryF,QAAQ,GAAGJ,eAAe;IAC9B,IAAIugD,QAAQ,GAAG1wE,aAAa,CAACiN,YAAY;IACzC,OAAOsjB,QAAQ,CAACq/J,qBAAqB,CAACjvL,UAAU,EAAEu6B,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAElyC,QAAQ,CAAC;EAC7F,CAAC;EAEDs4G,oBAAoB,CAAC6G,qBAAqB,GAAG,UAAUviI,UAAU,EAAE;IAC/D,IAAIjD,IAAI,GAAG;MACPiD,UAAU,EAAEA,UAAU;MACtBs1E,QAAQ,EAAE,6BAA6B;MACvCktD,YAAY,EAAE9vL,aAAa,CAACiN,YAAY;MACxC8iL,QAAQ,EAAE;IACd,CAAC;IAED,OAAO5/J,eAAe,CAAC6/J,iCAAiC,CAAC3lI,IAAI,CAAC,CACzDvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,IAAIA,GAAG,CAACnF,IAAI,IAAImF,GAAG,CAACnF,IAAI,CAACisL,kBAAkB,EAAE;QAChD;QACA,OAAO9vL,aAAa,CAACm6C,MAAM,CAAC0uI,oBAAoB,EAAE7/K,GAAG,CAACnF,IAAI,CAACisL,kBAAkB,CAAC,CACzEnsL,IAAI,CAAC,UAAUoX,GAAG,EAAE;UACjB/R,GAAG,CAACnF,IAAI,CAACk7F,QAAQ,GAAGhkF,GAAG;UACvB,OAAO/a,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,CAAC;QAC5C,CAAC,CAAC;MACV,CAAC,MACG,OAAOhJ,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,CAAC;IAChD,CAAC,CAAC;EACV,CAAC;EAED6/K,oBAAoB,CAACsF,sBAAsB,GAAG,YAAY;IACtD,IAAIjkI,IAAI,GAAG;MACPr4B,MAAM,EAAEhyB,aAAa,CAACmkC,WAAW;MACjCy+F,QAAQ,EAAE;IACd,CAAC;IAED,OAAOzyG,eAAe,CAAC6/J,iCAAiC,CAAC3lI,IAAI,CAAC;EAClE,CAAC;EAED2+H,oBAAoB,CAACkH,6BAA6B,GAAG,UAAU18J,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAE;IACjG,IAAIryF,QAAQ,GAAGJ,eAAe;IAE9B,OAAOI,QAAQ,CAAC2/J,6BAA6B,CAAC18J,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,CAAC;EAEvF,CAAC;EAEDomE,oBAAoB,CAACmH,mBAAmB,GAAG,UAAUC,IAAI,EAAE;IACvD,IAAI9zK,GAAG,GAAG,CAAC,CAAC;IACZA,GAAG,CAAC+zK,cAAc,GAAGD,IAAI,CAACE,cAAc;IACxCh0K,GAAG,CAACi0K,YAAY,GAAGH,IAAI,CAACI,YAAY;IACpCl0K,GAAG,CAACyyK,cAAc,GAAGqB,IAAI,CAAC9jI,IAAI,GAAGnsD,aAAa,CAACmyE,0BAA0B,CAAC89G,IAAI,CAAC9jI,IAAI,CAAC,GAAG,EAAE;IACzFhwC,GAAG,CAACm0K,aAAa,GAAGzwL,aAAa,CAAC+rB,YAAY;IAC9CzP,GAAG,CAAC2iC,OAAO,GAAG,EAAE;IAChB3iC,GAAG,CAACo0K,UAAU,GAAGN,IAAI,CAACpB,YAAY,GAAG7uL,aAAa,CAACmyE,0BAA0B,CAAC89G,IAAI,CAACpB,YAAY,CAAC,GAAG,EAAE;IAErGpvL,OAAO,CAAC4M,OAAO,CAAC4jL,IAAI,CAACpsL,IAAI,EAAE,UAAUtE,EAAE,EAAE;MACrC,IAAIixL,GAAG,GAAG,IAAI;MACd,IAAIjxL,EAAE,CAACwD,EAAE,CAACiM,OAAO,CAACzP,EAAE,CAACyc,SAAS,CAAC,KAAK,CAAC,EACjCw0K,GAAG,GAAGjxL,EAAE,CAACwD,EAAE;MAEf,IAAI0tL,GAAG,GAAG;QACN1tL,EAAE,EAAEytL,GAAG;QACPx0K,SAAS,EAAEzc,EAAE,CAACyc,SAAS;QACvBR,cAAc,EAAEjc,EAAE,CAACic,cAAc;QACjCG,iBAAiB,EAAEpc,EAAE,CAACoc,iBAAiB;QACvC+0K,gBAAgB,EAAEnxL,EAAE,CAACmxL,gBAAgB;QACrC53I,QAAQ,EAAEv5C,EAAE,CAACu5C,QAAQ;QACrB63I,eAAe,EAAEpxL,EAAE,CAACoxL;MACxB,CAAC;MACDx0K,GAAG,CAAC2iC,OAAO,CAAC94C,IAAI,CAACyqL,GAAG,CAAC;IAEzB,CAAC,CAAC;IAEF,IAAI,CAACR,IAAI,CAAC58J,MAAM,EAAE;MACdlX,GAAG,CAAC4Z,MAAM,GAAG,IAAI;MACjB;MACA,OAAO/F,eAAe,CAAC4gK,yBAAyB,CAACz0K,GAAG,CAAC;IACzD,CAAC,MACI;MACD;MACAA,GAAG,CAAC4Z,MAAM,GAAGk6J,IAAI,CAAC58J,MAAM;MACxB,OAAOrD,eAAe,CAAC6gK,wBAAwB,CAAC10K,GAAG,CAAC;IACxD;EACJ,CAAC;EAED0sK,oBAAoB,CAACiI,mBAAmB,GAAG,UAAUX,cAAc,EAAEE,YAAY,EAAEU,aAAa,EAAE;IAC9F,OAAO/gK,eAAe,CAACghK,4BAA4B,CAACb,cAAc,EAAEE,YAAY,EAAEU,aAAa,CAAC;EACpG,CAAC;EAEDlI,oBAAoB,CAACoI,6BAA6B,GAAG,UAAUC,UAAU,EAAE;IACvE,IAAIhnI,IAAI,GAAG;MACPgnI,UAAU,EAAEA,UAAU;MACtBzuD,QAAQ,EAAE,6BAA6B;MACvCt1E,UAAU,EAAEttD,aAAa,CAACiN;IAC9B,CAAC;IAED,OAAOkjB,eAAe,CAACmhK,4BAA4B,CAACjnI,IAAI,CAAC;EAC7D,CAAC;EAED2+H,oBAAoB,CAACyF,aAAa,GAAG,YAAY;IAC7C,IAAIpkI,IAAI,GAAG;MACPr4B,MAAM,EAAEhyB,aAAa,CAACmkC,WAAW;MACjCy+F,QAAQ,EAAE;IACd,CAAC;IAED,OAAOzyG,eAAe,CAACmhK,4BAA4B,CAACjnI,IAAI,CAAC;EAC7D,CAAC;EAED2+H,oBAAoB,CAACuI,wBAAwB,GAAG,UAAU/9J,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAE;IAC5F,IAAIryF,QAAQ,GAAGJ,eAAe;IAE9B,OAAOI,QAAQ,CAACghK,wBAAwB,CAAC/9J,MAAM,EAAExzB,aAAa,CAACiN,YAAY,EAAEiuB,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,CAAC;EAE9G,CAAC;EAEDomE,oBAAoB,CAACwI,gBAAgB,GAAG,UAAUh+J,MAAM,EAAE;IACtD,IAAIjD,QAAQ,GAAGJ,eAAe;IAE9B,OAAOI,QAAQ,CAACihK,gBAAgB,CAACh+J,MAAM,CAAC;EAC5C,CAAC;EAEDw1J,oBAAoB,CAACyI,OAAO,GAAG,UAASznL,IAAI,EAAEiiD,EAAE,EAAEK,IAAI,EAAE;IACpD,IAAI/7B,QAAQ,GAAGJ,eAAe;IAE9B,OAAOI,QAAQ,CAACmhK,eAAe,CAAC1nL,IAAI,EAAEiiD,EAAE,EAAEK,IAAI,CAAC;EACnD,CAAC;EAED08H,oBAAoB,CAAC2I,mBAAmB,GAAG,UAASvB,IAAI,EAAEwB,YAAY,EAAEzD,aAAa,EAAE;IACnF,IAAG,CAACyD,YAAY,EAAE;MACdA,YAAY,GAAG,CAAC,CAAC;IACrB;IAEA,IAAGA,YAAY,CAACP,UAAU,KAAKjB,IAAI,CAACiB,UAAU,EAAE;MAC5CO,YAAY,CAAC1pL,OAAO,GAAG,EAAE;MACzB0pL,YAAY,CAAChvL,KAAK,GAAG,EAAE;MACvBgvL,YAAY,CAACC,YAAY,GAAGzB,IAAI,CAAC0B,YAAY;MAC7CF,YAAY,CAACj0J,OAAO,GAAGyyJ,IAAI,CAACzyJ,OAAO;MACnCi0J,YAAY,CAACG,UAAU,GAAG3B,IAAI,CAAC2B,UAAU;MACzCH,YAAY,CAACI,cAAc,GAAG5B,IAAI,CAAC4B,cAAc;MACjDJ,YAAY,CAACK,KAAK,GAAG7B,IAAI,CAAC6B,KAAK;IACnC;IAEAL,YAAY,CAACM,UAAU,GAAG9B,IAAI,CAACiB,UAAU;IACzCO,YAAY,CAACO,QAAQ,GAAG/B,IAAI,CAACgC,YAAY;IACzCR,YAAY,CAACS,QAAQ,GAAGT,YAAY,CAACS,QAAQ,IAAIlE,aAAa,CAACmE,QAAQ;IACvEV,YAAY,CAACW,QAAQ,GAAGnC,IAAI,CAACoC,YAAY;IACzCZ,YAAY,CAAClB,UAAU,GAAGvwL,aAAa,CAACmyE,0BAA0B,CAAC89G,IAAI,CAAC9jI,IAAI,CAAC;IAC7EslI,YAAY,CAACC,YAAY,GAAGD,YAAY,CAACC,YAAY,IAAIzB,IAAI,CAAC0B,YAAY;IAC1EF,YAAY,CAACj0J,OAAO,GAAGi0J,YAAY,CAACj0J,OAAO,IAAIyyJ,IAAI,CAACzyJ,OAAO;IAC3Di0J,YAAY,CAACG,UAAU,GAAGH,YAAY,CAACG,UAAU,IAAI3B,IAAI,CAAC2B,UAAU;IACpEH,YAAY,CAACI,cAAc,GAAGJ,YAAY,CAACI,cAAc,IAAI5B,IAAI,CAAC4B,cAAc;IAChFJ,YAAY,CAACK,KAAK,GAAGL,YAAY,CAACK,KAAK,IAAI7B,IAAI,CAAC6B,KAAK;IACrDL,YAAY,CAACnB,aAAa,GAAGzwL,aAAa,CAAC+rB,YAAY;IAEvD,IAAImlC,KAAK,GAAG;MACRh7B,MAAM,EAAE07J,YAAY,GAAGA,YAAY,CAAC17J,MAAM,GAAG,IAAI;MACjDu8J,wBAAwB,EAAE,KAAK;MAC/BC,IAAI,EAAE,EAAE;MACRvvL,MAAM,EAAE,YAAY;MACpBwzB,KAAK,EAAE;IACX,CAAC;IAED/2B,OAAO,CAAC4M,OAAO,CAAC4jL,IAAI,CAACpsL,IAAI,EAAE,UAAUtE,EAAE,EAAE;MAErC,IAAGA,EAAE,CAAC4+B,QAAQ,IAAI5+B,EAAE,CAACizL,KAAK,IAAIjzL,EAAE,CAACizL,KAAK,CAACzsL,MAAM,GAAG,CAAC,EAAE;QAC/CtG,OAAO,CAAC4M,OAAO,CAAC9M,EAAE,CAACizL,KAAK,EAAE,UAASC,OAAO,EAAE;UACxC,IAAIA,OAAO,CAACz2K,SAAS,EAAC;YAClB,IAAIy0K,GAAG,GAAG;cACNz0K,SAAS,EAAEy2K,OAAO,CAACz2K,SAAS;cAC5BoH,GAAG,EAAEqvK,OAAO,CAACr4K,WAAW;cACxB/X,IAAI,EAAEowL,OAAO,CAACpwL,IAAI;cAClBwxB,QAAQ,EAAE4+J,OAAO,CAAC5+J,QAAQ;cAC1B6J,KAAK,EAAE+0J,OAAO,CAAC/0J,KAAK,IAAI+0J,OAAO,CAACC,IAAI;cACpCl3J,QAAQ,EAAE,CAAC;cACX6B,GAAG,EAAC,CAAC;cACLG,OAAO,EAAEi1J,OAAO,CAACj1J,OAAO,IAAIi0J,YAAY,CAACj0J,OAAO;cAChDo0J,UAAU,EAAEa,OAAO,CAACb,UAAU,IAAIH,YAAY,CAACG,UAAU;cACzDe,WAAW,EAAE,EAAE;cACfllL,OAAO,EAAEglL,OAAO,CAAChlL,OAAO;cACxBirB,KAAK,EAAE;YACX,CAAC;YAEDk6J,2BAA2B,CAACnC,GAAG,EAAEzC,aAAa,CAAC3jD,YAAY,EAAE2jD,aAAa,CAAC6E,cAAc,CAAC;YAE1F9hI,KAAK,CAACv6B,KAAK,CAACxwB,IAAI,CAACyqL,GAAG,CAAC;UACzB;QACJ,CAAC,CAAC;MACN,CAAC,MAAM;QACH,IAAIA,GAAG,GAAG;UACNz0K,SAAS,EAAEzc,EAAE,CAACyc,SAAS;UACvBoH,GAAG,EAAE7jB,EAAE,CAAC6a,WAAW;UACnB/X,IAAI,EAAE9C,EAAE,CAAC8C,IAAI;UACbwxB,QAAQ,EAAEt0B,EAAE,CAACs0B,QAAQ;UACrB6J,KAAK,EAAEn+B,EAAE,CAACm+B,KAAK;UACflC,QAAQ,EAAE,CAAC;UACX6B,GAAG,EAAC,CAAC;UACLG,OAAO,EAAEj+B,EAAE,CAACi+B,OAAO,IAAIi0J,YAAY,CAACj0J,OAAO;UAC3Co0J,UAAU,EAAEryL,EAAE,CAACqyL,UAAU,IAAIH,YAAY,CAACG,UAAU;UACpDe,WAAW,EAAE,EAAE;UACfllL,OAAO,EAAElO,EAAE,CAACkO,OAAO;UACnBirB,KAAK,EAAE;QACX,CAAC;QAEDk6J,2BAA2B,CAACnC,GAAG,EAAEzC,aAAa,CAAC3jD,YAAY,EAAE2jD,aAAa,CAAC6E,cAAc,CAAC;QAE1F9hI,KAAK,CAACv6B,KAAK,CAACxwB,IAAI,CAACyqL,GAAG,CAAC;MACzB;IACJ,CAAC,CAAC;IAEF,IAAI,CAACR,IAAI,CAAC58J,MAAM,EAAE;MACd,OAAOrD,eAAe,CAAC8iK,eAAe,CAACrB,YAAY,CAAC,CACnD9tL,IAAI,CAAC,UAASE,IAAI,EAAE;QACjBktD,KAAK,CAACh7B,MAAM,GAAGlyB,IAAI,CAACA,IAAI,CAACd,EAAE;QAC3B,IAAIktL,IAAI,CAAC70K,UAAU,KAAK,OAAO,IAAI60K,IAAI,CAAC8C,WAAW,KAAK,IAAI,EAAE;UAC1DhiI,KAAK,CAAC/tD,MAAM,GAAG,OAAO;QAC1B;QAEA,OAAOgtB,eAAe,CAACgjK,iBAAiB,CAACjiI,KAAK,CAAC;MACnD,CAAC,CAAC,CACDptD,IAAI,CAAC,UAASE,IAAI,EAAE;QACjB,OAAO,IAAI;MACf,CAAC,CAAC;IACN,CAAC,MAAM;MACH,OAAOmsB,eAAe,CAACijK,cAAc,CAACxB,YAAY,CAAC,CAClD9tL,IAAI,CAAC,UAASE,IAAI,EAAE;QACjBktD,KAAK,CAACh7B,MAAM,GAAGlyB,IAAI,CAACA,IAAI,CAACd,EAAE;QAC3B,OAAOitB,eAAe,CAACgjK,iBAAiB,CAACjiI,KAAK,CAAC;MACnD,CAAC,CAAC,CACDptD,IAAI,CAAC,UAASE,IAAI,EAAE;QACjB,OAAO,IAAI;MACf,CAAC,CAAC;IACN;EACJ,CAAC;EAEDglL,oBAAoB,CAACqK,YAAY,GAAG,UAAS7/J,MAAM,EAAE;IACjD,IAAIjD,QAAQ,GAAGJ,eAAe;IAE9B,OAAOI,QAAQ,CAAC+iK,kBAAkB,CAAC9/J,MAAM,EAAE,KAAK,CAAC;EACrD,CAAC;EAEDw1J,oBAAoB,CAACuK,YAAY,GAAG,UAAS//J,MAAM,EAAE;IACjD,IAAIjD,QAAQ,GAAGJ,eAAe;IAC9B,IAAGqD,MAAM,EAAE;MACP,OAAOjD,QAAQ,CAAC+iK,kBAAkB,CAAC9/J,MAAM,EAAE,IAAI,CAAC;IACpD,CAAC,MAAM;MACH,IAAInoB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;EACJ,CAAC;EAEDw9K,oBAAoB,CAACwK,2BAA2B,GAAG,UAAUlmI,UAAU,EAAE+jI,UAAU,EAAE;IACjF,OAAOlhK,eAAe,CAACsjK,uBAAuB,CAACnmI,UAAU,EAAE+jI,UAAU,CAAC;EAC1E,CAAC;EAED,IAAI0B,2BAA2B,GAAG,SAA9BA,2BAA2BA,CAAYW,MAAM,EAAElpD,YAAY,EAAEwoD,cAAc,EAAE;IAC7E,IAAIh/J,QAAQ,GAAG0/J,MAAM,CAAC1/J,QAAQ;IAC9B,IAAI6J,KAAK,GAAG61J,MAAM,CAAC71J,KAAK;IACxB,IAAIlC,QAAQ,GAAG+3J,MAAM,CAAC/3J,QAAQ;IAC9B,IAAI9C,KAAK,GAAGgF,KAAK,IAAI,GAAG,GAAGlC,QAAQ,CAAC,GAAG,GAAG;IAC1C,IAAIo2J,UAAU,GAAG2B,MAAM,CAAC3B,UAAU;IAClCl5J,KAAK,GAAG14B,aAAa,CAAC6uB,SAAS,CAAC6J,KAAK,EAAEm6J,cAAc,CAAC;IACtDn6J,KAAK,GAAG7E,QAAQ,GAAG6E,KAAK;IACxBA,KAAK,GAAG14B,aAAa,CAAC6uB,SAAS,CAAC6J,KAAK,EAAE,CAAC,CAAC;IACzC,IAAI2E,GAAG,GAAG,CAAC;IACX,IAAIu0J,UAAU,GAAG,CAAC,EACdv0J,GAAG,GAAG3E,KAAK,GAAGk5J,UAAU,GAAG,GAAG;IAClCv0J,GAAG,GAAGr9B,aAAa,CAAC6uB,SAAS,CAACwO,GAAG,EAAEgtG,YAAY,CAAC;IAChDkpD,MAAM,CAACl2J,GAAG,GAAGA,GAAG;IAChBk2J,MAAM,CAAC76J,KAAK,GAAGA,KAAK;EACxB,CAAC;EAEDmwJ,oBAAoB,CAAC2K,kBAAkB,GAAG,UAAUngK,MAAM,EAAE8wC,UAAU,EAAE;IACpE,OAAOn0C,eAAe,CAACwjK,kBAAkB,CAACngK,MAAM,EAAExzB,aAAa,CAAC+rB,YAAY,EAAEu4C,UAAU,CAAC;EAC7F,CAAC;EAED0kH,oBAAoB,CAAC4K,qBAAqB,GAAG,UAAUpgK,MAAM,EAAE8wC,UAAU,EAAE;IACvE,OAAOn0C,eAAe,CAACyjK,qBAAqB,CAACpgK,MAAM,EAAExzB,aAAa,CAAC+rB,YAAY,EAAEu4C,UAAU,CAAC;EAChG,CAAC;EAED0kH,oBAAoB,CAAC6K,sBAAsB,GAAG,UAAUrgK,MAAM,EAAExvB,IAAI,EAAE;IAClE,OAAOmsB,eAAe,CAAC0jK,sBAAsB,CAACrgK,MAAM,EAAExvB,IAAI,CAAC;EAC/D,CAAC;EAEDglL,oBAAoB,CAAC8K,0BAA0B,GAAG,YAAY;IAC1D,IAAIzpI,IAAI,GAAG;MACPu4E,QAAQ,EAAE;IACd,CAAC;IAED,OAAOzyG,eAAe,CAACmhK,4BAA4B,CAACjnI,IAAI,CAAC;EAC7D,CAAC;EAED,OAAO2+H,oBAAoB;AAC/B,CAAC,CAIJ,CAAC,C;;;;;;;;;;AC9SNppL,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,oCAAoC,EACrE,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,sBAAsB,EAC7E,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAC5D,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAqB,EACxD,UAAUC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAE/oB,cAAc,EAAEyoL,oBAAoB,EAC5E7oL,aAAa,EAAEG,QAAQ,EAAEN,aAAa,EAAEC,YAAY,EACpDQ,EAAE,EAAEgpB,KAAK,EAAErpB,QAAQ,EAAE8mE,IAAI,EAAE6sH,mBAAmB,EAAE;EAEhD,IAAI,CAACzqK,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACyb,UAAU,GAAG,EAAE;EACtBzb,MAAM,CAACiY,iBAAiB,GAAG,EAAE,CAAC;EAC9BjY,MAAM,CAACkY,wBAAwB,GAAG,EAAE,CAAC;EACrClY,MAAM,CAACqZ,UAAU,GAAG,CAAC;EAErBrZ,MAAM,CAACouL,SAAS,GAAG,EAAE;EACrBpuL,MAAM,CAACm+C,SAAS,GAAG,EAAE;EACrBn+C,MAAM,CAACquL,aAAa,GAAG,CAAC,CAAC;EACzBruL,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EACjEvY,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqY,gBAAgB,GAAG,IAAI;EAE9BrY,MAAM,CAACwY,YAAY,GAAG;IAClBtU,IAAI,EAAE;EACV,CAAC;EACDlE,MAAM,CAAC8xL,YAAY,GAAG,IAAI;EAE1B9xL,MAAM,CAACsuL,UAAU,GAAG,IAAI;EACxBtuL,MAAM,CAACuuL,YAAY,GAAG,IAAI;EAE1BvuL,MAAM,CAAC2Y,eAAe,GAAG,IAAI,CAAC,CAAC;EAC/B3Y,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;EAC1B5Y,MAAM,CAACghH,KAAK,GAAG;IAAE,QAAQ,EAAG3hH,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAI,GAAG,GAAG;EAAK,CAAC;EACpE;EACApC,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAC3DpC,MAAM,CAACk0L,MAAM,GAAG;IAAE,QAAQ,EAAE70L,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAE7DpC,MAAM,CAACT,MAAM,GAAGW,aAAa,CAACX,MAAM;EAEpCU,UAAU,CAACoC,GAAG,CAAC,oBAAoB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACxDlE,MAAM,CAACouL,SAAS,GAAGlqL,IAAI,CAACkqL,SAAS;IACjCpuL,MAAM,CAACquL,aAAa,GAAGnqL,IAAI,CAACmqL,aAAa;IACzCruL,MAAM,CAACm+C,SAAS,GAAGj6C,IAAI,CAACi6C,SAAS;IACjCn+C,MAAM,CAACm0L,SAAS,GAAG,IAAI;IACvBn0L,MAAM,CAACmtD,MAAM,CAAC,CAAC;IAEf9sD,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAY,CAAE,CAAC,CAAC;IACnDN,MAAM,CAACo0L,UAAU,CAAC,CAAC;IACnBp0L,MAAM,CAACq0L,eAAe,CAAC,CAAC;EAC5B,CAAC,CAAC;EAGFp0L,UAAU,CAACoC,GAAG,CAAC,qBAAqB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACzDlE,MAAM,CAACouL,SAAS,GAAGlqL,IAAI,CAACkqL,SAAS;IACjCpuL,MAAM,CAACquL,aAAa,GAAGnqL,IAAI,CAACmqL,aAAa;IACzCruL,MAAM,CAAC+sD,UAAU,GAAG7oD,IAAI,CAACgW,GAAG;IAC5Bla,MAAM,CAACm0L,SAAS,GAAG,IAAI;IACvBn0L,MAAM,CAAC4vL,cAAc,CAAC5vL,MAAM,CAAC+sD,UAAU,CAAC;IAExC1sD,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAY,CAAE,CAAC,CAAC;IACnDN,MAAM,CAACo0L,UAAU,CAAC,CAAC;EACvB,CAAC,CAAC;EAEFp0L,MAAM,CAACo0L,UAAU,GAAG,YAAY;IAC5B5zL,QAAQ,CAAC,YAAY;MACjB,IAAIR,MAAM,CAACqY,gBAAgB,EAAE;QACzBrY,MAAM,CAACqY,gBAAgB,GAAG,KAAK;QAC/BnT,WAAW,CAAC,CAAC;QACb;QACA7E,aAAa,CAAC0wD,aAAa,CAAC/wD,MAAM,CAACsY,UAAU,EAAE,iBAAiB,CAAC;MACrE;MAEAxU,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC+6K,YAAY,GAAG,UAAUx5J,CAAC,EAAE;IAC/BA,CAAC,CAACyU,cAAc,CAAC,CAAC;IAClBzU,CAAC,CAACwU,eAAe,CAAC,CAAC;IACnBjyB,CAAC,CAAC,iBAAiB,CAAC,CAACo0E,UAAU,CAAC,MAAM,CAAC;EAC3C,CAAC;EAED13E,QAAQ,CAAC,YAAY;IACjB,IAAIR,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B,CAAC,MACI;MACDrV,MAAM,CAACgL,UAAU,CAAC,uBAAuB,CAAC;IAC9C;EACJ,CAAC,CAAC;EAEFhL,MAAM,CAACwjH,MAAM,GAAG,YAAY;IACxBnjH,aAAa,CAAC09E,eAAe,CAAC,iBAAiB,CAAC;IAEhD,IAAI/9E,MAAM,CAACmB,IAAI,KAAK,KAAK,IACrBnB,MAAM,CAACmB,IAAI,KAAK,MAAM,IACtBnB,MAAM,CAACmB,IAAI,KAAK,SAAS,EAAE;MAC3BnB,MAAM,CAACmB,IAAI,GAAG,YAAY;IAC9B;IACAlB,UAAU,CAAC+K,UAAU,CAAC,wBAAwB,CAAC;IAC/C3K,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;EACvC,CAAC;EAEDN,MAAM,CAAC26B,aAAa,GAAG,UAAU25J,QAAQ,EAAE;IACvC,IAAIzmK,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAC9CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IACzC,IAAI,CAACymK,QAAQ,EAAE;MACX;IACJ;IAEA,IAAIt0L,MAAM,CAACsuL,UAAU,KAAK,MAAM,EAAE;MAC9BxqL,CAAC,CAACC,OAAO,CAAC,CAAC;MACXmlL,oBAAoB,CAACuK,YAAY,CAACzzL,MAAM,CAACuuL,YAAY,CAAC,CACjDvqL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;QACfxjH,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;MACrC,CAAC,CAAC,SACI,CAAC,UAAUpwL,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACvD,CAAC,CAAC;IACV,CAAC,MACI,IAAInE,MAAM,CAACsuL,UAAU,KAAK,MAAM,EAAE;MACnCxqL,CAAC,CAACC,OAAO,CAAC,CAAC;MACXmlL,oBAAoB,CAACqK,YAAY,CAACvzL,MAAM,CAACuuL,YAAY,CAAC,CACjDvqL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;QACfxjH,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;MACrC,CAAC,CAAC,SACI,CAAC,UAAUpwL,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACvD,CAAC,CAAC;IACV;EACJ,CAAC;EAEDnE,MAAM,CAACw0L,QAAQ,GAAG,UAAU1qL,IAAI,EAAE;IAC9B9J,MAAM,CAACsuL,UAAU,GAAG,MAAM;IAC1BtuL,MAAM,CAACuuL,YAAY,GAAGzkL,IAAI,CAACssB,MAAM,IAAItsB,IAAI,CAAC4pB,MAAM;IAChD,IAAI7F,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAC9CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACy0L,QAAQ,GAAG,UAAU3qL,IAAI,EAAE;IAC9B9J,MAAM,CAACsuL,UAAU,GAAG,MAAM;IAC1BtuL,MAAM,CAACuuL,YAAY,GAAGzkL,IAAI,CAACssB,MAAM,IAAItsB,IAAI,CAAC4pB,MAAM;IAChD,IAAI7F,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAC9CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACovL,aAAa,GAAG,UAAUr3I,MAAM,EAAE;IACrC,QAAQA,MAAM;MACV,KAAK,OAAO;QACR,OAAO,OAAO;MAClB,KAAK,SAAS;QACV,OAAO,SAAS;MACpB,KAAK,SAAS;QACV,OAAO,SAAS;MACpB,KAAK,YAAY;QACb,OAAO,YAAY;MACvB,KAAK,WAAW;QACZ,OAAO,WAAW;MACtB,KAAK,mBAAmB;QACpB,OAAO,QAAQ;MACnB,KAAK,oBAAoB;QACrB,OAAO,WAAW;MACtB,KAAK,cAAc;QACf,OAAO,SAAS;MACpB,KAAK,gBAAgB;QACjB,OAAO,UAAU;MACrB,KAAK,+BAA+B;QAChC,OAAO,sBAAsB;MACjC,KAAK,oBAAoB;QACrB,OAAO,kBAAkB;MAC7B,KAAK,UAAU;QACX,OAAO,QAAQ;MACnB,KAAK,UAAU;QACX,OAAO,WAAW;IAC1B;IAEA,OAAOA,MAAM;EACjB,CAAC;EAED/3C,MAAM,CAACsvL,UAAU,GAAG,UAAUI,QAAQ,EAAE33I,MAAM,EAAE28I,QAAQ,EAAE;IACtD,OAAOhF,QAAQ,KAAK,GAAG,KACf33I,MAAM,KAAK,SAAS,IAAIA,MAAM,KAAK,cAAc,CAAC,IAAI,CAAC28I,QAAQ;EAC3E,CAAC;EAED10L,MAAM,CAACwvL,UAAU,GAAG,UAAUlhL,IAAI,EAAEypC,MAAM,EAAE28I,QAAQ,EAAE;IAClD,OAAOpmL,IAAI,KAAK,GAAG,KAAKypC,MAAM,KAAK,SAAS,IACrCA,MAAM,KAAK,OAAO,IAAIA,MAAM,KAAK,cAAc,IAAIA,MAAM,KAAK,gBAAgB,IAAIA,MAAM,KAAK,UAAU,CAAC,IACxG,CAAC28I,QAAQ;EACpB,CAAC;;EAED;EACA10L,MAAM,CAACmtD,MAAM,GAAG,YAAY;IACxBntD,MAAM,CAAC8xL,YAAY,GAAG,IAAI;IAE1B,IAAIlhH,QAAQ,GAAG5wE,MAAM,CAACm+C,SAAS,CAACp4C,MAAM,CAAC,UAAUnG,EAAE,EAAE;MACjD,OAAOA,EAAE,CAAC8d,UAAU,KAAKxd,aAAa,CAACiN,YAAY;IACvD,CAAC,CAAC;IAEFnN,MAAM,CAACwY,YAAY,GAAG;MAClBiD,UAAU,EAAE,OAAO;MACnB81K,UAAU,EAAE,IAAI;MAChBe,YAAY,EAAE,IAAI;MAClB1hH,QAAQ,EAAE1wE,aAAa,CAACyqB,UAAU;MAClC+nK,YAAY,EAAE9hH,QAAQ,CAAC,CAAC,CAAC,CAAC03B,WAAW;MACrC97C,IAAI,EAAE,IAAI;MACVtoD,IAAI,EAAE,EAAE;MACRywL,WAAW,EAAE,EAAE;MACf7uB,gBAAgB,EAAE,IAAI;MACtBooB,UAAU,EAAEluL,MAAM,CAACovL,aAAa,CAAC,OAAO,CAAC;MACzCC,OAAO,EAAErvL,MAAM,CAACsvL,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;MAC/CC,OAAO,EAAE,KAAK;MACdrsL,IAAI,EAAE,GAAG;MACT8uL,YAAY,EAAE,CAAC;MACfoB,WAAW,EAAE;IACjB,CAAC;IACDpzL,MAAM,CAAC8xL,YAAY,GAAG,IAAI;IAC1B9xL,MAAM,CAACmB,IAAI,GAAG,KAAK;EACvB,CAAC;EAEDnB,MAAM,CAAC4vL,cAAc,GAAG,UAAU11K,GAAG,EAAE;IACnCla,MAAM,CAAC8xL,YAAY,GAAG,IAAI;IAC1B;IACAhuL,CAAC,CAACC,OAAO,CAAC,CAAC;IAEXmlL,oBAAoB,CAACwI,gBAAgB,CAACx3K,GAAG,CAACkc,MAAM,CAAC,CAC5CpyB,IAAI,CAAC,UAAUE,IAAI,EAAE;MAClBlE,MAAM,CAAC8xL,YAAY,GAAG5tL,IAAI,CAACA,IAAI;MAE/BlE,MAAM,CAACwY,YAAY,GAAG;QAClBiD,UAAU,EAAEzb,MAAM,CAAC8xL,YAAY,CAAC8C,WAAW,KAAK,OAAO,GAAG,OAAO,GAAG16K,GAAG,CAAC7W,MAAM;QAC9E8xE,MAAM,EAAEj7D,GAAG,CAACT,MAAM;QAClBia,MAAM,EAAExZ,GAAG,CAACkc,MAAM;QAClBw6C,QAAQ,EAAE12D,GAAG,CAAC26K,MAAM;QACpBroI,IAAI,EAAEtyC,GAAG,CAACsyC,IAAI;QACdzU,MAAM,EAAE79B,GAAG,CAAC7W,MAAM;QAClBkuL,UAAU,EAAEvxL,MAAM,CAAC8xL,YAAY,CAACM,UAAU;QAC1CE,YAAY,EAAEtyL,MAAM,CAAC8xL,YAAY,CAACO,QAAQ;QAC1CnuL,IAAI,EAAE,EAAE;QACRywL,WAAW,EAAE,EAAE;QACf7uB,gBAAgB,EAAE,CAAC5rJ,GAAG,CAAC7W,MAAM,KAAK,gBAAgB,IAAI6W,GAAG,CAAC7W,MAAM,KAAK,OAAO,IAAI6W,GAAG,CAAC7W,MAAM,KAAK,UAAU,IAClG6W,GAAG,CAAC7W,MAAM,KAAK,SAAS,IACxB6W,GAAG,CAAC7W,MAAM,KAAK,cAAc,KAAK,CAAC6W,GAAG,CAAC46K,QAAQ;QACtD5G,UAAU,EAAEluL,MAAM,CAACovL,aAAa,CAACl1K,GAAG,CAAC7W,MAAM,CAAC;QAC5CgsL,OAAO,EAAErvL,MAAM,CAACsvL,UAAU,CAAC,GAAG,EAAEp1K,GAAG,CAAC7W,MAAM,EAAE6W,GAAG,CAAC46K,QAAQ,CAAC;QACzDvF,OAAO,EAAEvvL,MAAM,CAACwvL,UAAU,CAAC,GAAG,EAAEt1K,GAAG,CAAC7W,MAAM,EAAE6W,GAAG,CAAC46K,QAAQ,CAAC;QACzD5xL,IAAI,EAAE,GAAG;QACT8uL,YAAY,EAAEhyL,MAAM,CAAC8xL,YAAY,CAACC,YAAY;QAC9Cl0J,OAAO,EAAE79B,MAAM,CAAC8xL,YAAY,CAACj0J,OAAO;QACpCq0J,cAAc,EAAElyL,MAAM,CAAC8xL,YAAY,CAACI,cAAc;QAClDC,KAAK,EAAEnyL,MAAM,CAAC8xL,YAAY,CAACK;MAC/B,CAAC;MACD,IAAIrrG,KAAK,GAAG9mF,MAAM,CAACquL,aAAa,CAACzjE,QAAQ,CAAC7kH,MAAM,CAAC,UAAU+D,IAAI,EAAE;QAC7D,OAAOA,IAAI,CAACw+F,WAAW,KAAKtoG,MAAM,CAAC8xL,YAAY,CAACj0J,OAAO;MAC3D,CAAC,CAAC;MACF,IAAIipD,KAAK,IAAIA,KAAK,CAAC1gF,MAAM,KAAK,CAAC,EAAE;QAC7BpG,MAAM,CAACwY,YAAY,CAACy5K,UAAU,GAAGjyL,MAAM,CAAC8xL,YAAY,CAACI,cAAc,KAAK,WAAW,GAC/EprG,KAAK,CAAC,CAAC,CAAC,CAAC74E,yBAAyB,GAAG64E,KAAK,CAAC,CAAC,CAAC,CAAC54E,yBAAyB;MAC/E;MAEAlO,MAAM,CAACmB,IAAI,GAAG,MAAM;MAEpBnB,MAAM,CAACq0L,eAAe,CAAC,CAAC;MAExB7zL,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC,CAAC,CAAC;IACN,CAAC,CAAC,WACM,CAAC,YAAY;MACjBV,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;EAEDrE,MAAM,CAACq0L,eAAe,GAAG,UAAUvxE,OAAO,EAAE;IACxC,IAAI,CAAC9iH,MAAM,CAACwY,YAAY,CAACkb,MAAM,EAAE;MAC7B,IAAInoB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA5H,CAAC,CAACC,OAAO,CAAC,CAAC;IACXmlL,oBAAoB,CAACuI,wBAAwB,CAACzxL,MAAM,CAACwY,YAAY,CAACkb,MAAM,EAAE,CAAC,EACvE,MAAM,EAAEovF,OAAO,CAAC,CACf9+G,IAAI,CAAC,UAAUE,IAAI,EAAE;MAClBlE,MAAM,CAACwY,YAAY,CAACtU,IAAI,GAAG,EAAE;MAC7BlE,MAAM,CAACwY,YAAY,CAACm8K,WAAW,GAAG,EAAE;MAEpC70L,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAAUjrD,EAAE,EAAE;QAC1CA,EAAE,CAAC+b,KAAK,GAAGgO,KAAK,CAACuE,OAAO,CAAC,CAAC;QAE1BluB,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;MACrC,CAAC,CAAC;MAEFkE,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI2Z,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOuS,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;EAEjCv0L,MAAM,CAAC+vL,qBAAqB,GAAG,UAAUwB,UAAU,EAAE;IACjDvxL,MAAM,CAACiY,iBAAiB,GAAG,EAAE;IAC7BjY,MAAM,CAACmY,wBAAwB,GAAG,EAAE;IACpCnY,MAAM,CAACqZ,UAAU,GAAG,CAAC;IAErB,OAAO6vK,oBAAoB,CAACoI,6BAA6B,CAACC,UAAU,CAAC,CAChEvtL,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACkY,wBAAwB,GAAG7O,GAAG,CAACnF,IAAI,CAACk7F,QAAQ;MACnDt/F,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,CAACk7F,QAAQ,EAAE,UAAUx/F,EAAE,EAAE;QAC7C,IAAIA,EAAE,CAAC4+B,QAAQ,IAAI5+B,EAAE,CAACizL,KAAK,IAAIjzL,EAAE,CAACizL,KAAK,CAACzsL,MAAM,GAAG,CAAC,EAAE;UAChDtG,OAAO,CAAC4M,OAAO,CAAC9M,EAAE,CAACizL,KAAK,EAAE,UAAU/oL,IAAI,EAAE;YACtCA,IAAI,CAACirL,WAAW,GAAG,IAAI;YACvB/0L,MAAM,CAACiY,iBAAiB,CAAC5R,IAAI,CAACyD,IAAI,CAAC;UACvC,CAAC,CAAC;QAEN,CAAC,MAAM;UACH9J,MAAM,CAACiY,iBAAiB,CAAC5R,IAAI,CAACzG,EAAE,CAAC;QACrC;MACJ,CAAC,CAAC;MAEFI,MAAM,CAACqZ,UAAU,GAAGhQ,GAAG,CAACnF,IAAI,CAACmV,UAAU;MAEvC,IAAI2E,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAACzL,MAAM,CAACiY,iBAAiB,CAAC;MAC3C,OAAO+F,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC;EACV,CAAC;EAED1L,MAAM,CAAC+Y,WAAW,GAAG,YAAY;IAC7B,IAAI/Y,MAAM,CAACu0L,mBAAmB,EAAE;MAC5BzwL,CAAC,CAACC,OAAO,CAAC,CAAC;MAEX,IAAI/D,MAAM,CAACwY,YAAY,CAAC+4K,UAAU,IAAI,IAAI,EAAE;QACxCpxL,YAAY,CAACiE,SAAS,CAAC,wBAAwB,CAAC;QAChDN,CAAC,CAACO,SAAS,CAAC,CAAC;QACb;MACJ;MAEArE,MAAM,CAAC+vL,qBAAqB,CAAC/vL,MAAM,CAACwY,YAAY,CAAC+4K,UAAU,CAAC,CACvDvtL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBrJ,MAAM,CAACu0L,mBAAmB,GAAG,KAAK;QAClCt0L,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EACzC;UACIwN,YAAY,EAAExY,MAAM,CAACwY,YAAY;UACjCP,iBAAiB,EAAEjY,MAAM,CAACiY,iBAAiB;UAC3CC,wBAAwB,EAAElY,MAAM,CAACkY,wBAAwB;UACzDY,sBAAsB,EAAE9Y,MAAM,CAACia;QACnC,CAAC,CAAC;MACV,CAAC,CAAC,WACM,CAAC,YAAY;QACjBnW,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACV,CAAC,MAAM;MACHpE,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EACzC;QACIwN,YAAY,EAAExY,MAAM,CAACwY,YAAY;QACjCP,iBAAiB,EAAEjY,MAAM,CAACiY,iBAAiB;QAC3CC,wBAAwB,EAAElY,MAAM,CAACkY,wBAAwB;QACzDY,sBAAsB,EAAE9Y,MAAM,CAACia;MACnC,CAAC,CAAC;IACV;EACJ,CAAC;EAEDja,MAAM,CAAC0I,MAAM,CAAC,yBAAyB,EACnC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB;MACA,IAAI,CAACD,QAAQ,EAAE;QACX3I,MAAM,CAACiY,iBAAiB,GAAG,EAAE;QAC7BjY,MAAM,CAACmY,wBAAwB,GAAG,EAAE;QACpCnY,MAAM,CAACqZ,UAAU,GAAG,CAAC;QACrB;MACJ;MAEAvV,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/D,MAAM,CAAC+vL,qBAAqB,CAAC/vL,MAAM,CAACwY,YAAY,CAAC+4K,UAAU,CAAC,CACvDvtL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAIrJ,MAAM,CAACm0L,SAAS,KAAK,KAAK,EAAE;UAC5Bn0L,MAAM,CAACwY,YAAY,CAACtU,IAAI,GAAG,EAAE;QACjC,CAAC,MAAM;UACHlE,MAAM,CAACm0L,SAAS,GAAG,KAAK;QAC5B;QACA,IAAItrE,KAAK,GAAG7oH,MAAM,CAACouL,SAAS,CAACroL,MAAM,CAAC,UAAUk8F,CAAC,EAAE;UAC7C,OAAOA,CAAC,CAACmwF,UAAU,KAAKpyL,MAAM,CAACwY,YAAY,CAAC+4K,UAAU;QAC1D,CAAC,CAAC;QACF,IAAIyD,gBAAgB,GAAGh1L,MAAM,CAACquL,aAAa,CAAC4G,YAAY;QACxD,IAAIpsE,KAAK,CAACziH,MAAM,KAAK,CAAC,EAAE;UACpBpG,MAAM,CAACwY,YAAY,CAAC85K,YAAY,GAAGzpE,KAAK,CAAC,CAAC,CAAC,CAACnmH,IAAI;UAChD1C,MAAM,CAACwY,YAAY,CAACw8K,gBAAgB,GAAGnsE,KAAK,CAAC,CAAC,CAAC,CAACvlH,QAAQ;QAC5D;QAEA,IAAItD,MAAM,CAACwY,YAAY,CAACw8K,gBAAgB,KAAKh1L,MAAM,CAACquL,aAAa,CAAC4G,YAAY,KACtE,CAACj1L,MAAM,CAAC8xL,YAAY,IAAI9xL,MAAM,CAAC8xL,YAAY,CAACM,UAAU,KAAKpyL,MAAM,CAACwY,YAAY,CAAC+4K,UAAU,CAAC,IAC3FvxL,MAAM,CAACwY,YAAY,CAACiD,UAAU,KAAK,OAAO,EAAE;UAC/C,OAAOytK,oBAAoB,CAACyI,OAAO,CAAC3xL,MAAM,CAACwY,YAAY,CAACw8K,gBAAgB,EACpEh1L,MAAM,CAACquL,aAAa,CAAC4G,YAAY,EAAE50L,aAAa,CAACkqB,eAAe,CAAC,IAAIkR,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACnG,CAAC,MAAM;UACH,IAAIlwB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAACzL,MAAM,CAAC8xL,YAAY,GAAG;YAAE5tL,IAAI,EAAE;cAAEgxL,IAAI,EAAEl1L,MAAM,CAAC8xL,YAAY,CAACC;YAAa;UAAE,CAAC,GAAG,IAAI,CAAC;UACnG,OAAOxmL,QAAQ,CAACG,OAAO;QAC3B;MACJ,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,IAAIA,IAAI,EAAE;UACNlE,MAAM,CAACwY,YAAY,CAACw5K,YAAY,GAAG9tL,IAAI,CAACA,IAAI,CAACgxL,IAAI;QACrD,CAAC,MAAM;UACHl1L,MAAM,CAACwY,YAAY,CAACw5K,YAAY,GAAG,CAAC;QACxC;QAEA,IAAInpE,KAAK,GAAG7oH,MAAM,CAACouL,SAAS,CAACroL,MAAM,CAAC,UAAUk8F,CAAC,EAAE;UAC7C,OAAOA,CAAC,CAACmwF,UAAU,KAAKpyL,MAAM,CAACwY,YAAY,CAAC+4K,UAAU;QAC1D,CAAC,CAAC;QACF,IAAI1oE,KAAK,CAACziH,MAAM,KAAK,CAAC,EAAE;UACpB,IAAI+uL,QAAQ,GAAGtsE,KAAK,CAAC,CAAC,CAAC;UACvB,IAAI,CAAC,CAAC7oH,MAAM,CAAC8xL,YAAY,IAAI9xL,MAAM,CAAC8xL,YAAY,CAACM,UAAU,KAAKpyL,MAAM,CAACwY,YAAY,CAAC+4K,UAAU,KACvFvxL,MAAM,CAACwY,YAAY,CAACiD,UAAU,KAAK,OAAO,EAAE;YAC/Czb,MAAM,CAACwY,YAAY,CAACqlB,OAAO,GAAGs3J,QAAQ,CAACC,WAAW;YAClDp1L,MAAM,CAACwY,YAAY,CAAC05K,cAAc,GAAGiD,QAAQ,CAAC98J,YAAY,GAAG,WAAW,GAAG,WAAW;YACtFr4B,MAAM,CAACwY,YAAY,CAAC25K,KAAK,GAAGgD,QAAQ,CAACE,eAAe;YACpDr1L,MAAM,CAACwY,YAAY,CAACy5K,UAAU,GAAGkD,QAAQ,CAAC98J,YAAY,GAAG88J,QAAQ,CAACG,mBAAmB,GAC/EH,QAAQ,CAACI,mBAAmB;UACtC;QACJ;MAEJ,CAAC,CAAC,WACM,CAAC,YAAY;QACjBzxL,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACV;EACJ,CACJ,CAAC;EAEDrE,MAAM,CAACia,kBAAkB,GAAG,UAAUC,GAAG,EAAEC,UAAU,EAAE3B,YAAY,EAAEI,cAAc,EAAgC;IAAA,IAA9B48K,oBAAoB,GAAArkL,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IAE7G,IAAI+I,GAAG,CAACskB,QAAQ,IAAI,CAACtkB,GAAG,CAAC66K,WAAW,EAAE;MAClC/0L,MAAM,CAACy1L,aAAa,CAACv7K,GAAG,CAAC;MACzB;IAAuB;IAG3B,IAAIwC,SAAS,GAAG,KAAK;IACrB5c,OAAO,CAAC4M,OAAO,CAAC8L,YAAY,CAACtU,IAAI,EAAE,UAAUtE,EAAE,EAAE;MAC7C,IAAIA,EAAE,CAACyc,SAAS,KAAKnC,GAAG,CAACmC,SAAS,EAAE;QAChCK,SAAS,GAAG,IAAI;QAEhB,IAAIvC,UAAU,KAAK,IAAI,EAAE;UACrBva,EAAE,CAACs0B,QAAQ,GAAGtb,cAAc,CAACgD,UAAU;QAC3C,CAAC,MACI;UACDhc,EAAE,CAACs0B,QAAQ,IAAI,CAAC;QACpB;QAEA,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEF,IAAI,CAACxX,SAAS,EAAE;MACZ,IAAIg5K,EAAE,GAAG;QACLtyL,EAAE,EAAE8W,GAAG,CAACy7K,WAAW,IAAIz7K,GAAG,CAACmC,SAAS;QACpCs5K,WAAW,EAAEz7K,GAAG,CAACy7K,WAAW;QAC5Bt5K,SAAS,EAAEnC,GAAG,CAACmC,SAAS;QACxB5B,WAAW,EAAEP,GAAG,CAACO,WAAW;QAC5B/X,IAAI,EAAEwX,GAAG,CAACxX,IAAI;QACdkzL,QAAQ,EAAE17K,GAAG,CAAC07K,QAAQ;QACtBC,aAAa,EAAE37K,GAAG,CAAC27K,aAAa;QAChC/5K,MAAM,EAAE5B,GAAG,CAAC4B,MAAM;QAClBG,SAAS,EAAE/B,GAAG,CAAC+B,SAAS;QACxBF,OAAO,EAAE7B,GAAG,CAAC6B,OAAO;QACpBmY,QAAQ,EAAE,CAAC;QACXM,aAAa,EAAEta,GAAG,CAACsa,aAAa;QAChCgK,QAAQ,EAAEtkB,GAAG,CAACskB,QAAQ;QACtBs3J,UAAU,EAAE57K,GAAG,CAAC47K,UAAU;QAC1Bx2J,OAAO,EAAEplB,GAAG,CAAColB,OAAO;QACpBC,OAAO,EAAErlB,GAAG,CAACqlB,OAAO;QACpBC,OAAO,EAAEtlB,GAAG,CAACslB,OAAO;QACpB7jB,KAAK,EAAEgO,KAAK,CAACuE,OAAO,CAAC,CAAC;QACtBirB,QAAQ,EAAE,EAAE;QACZpb,KAAK,EAAE7jB,GAAG,CAAC64K,IAAI;QACfl1J,OAAO,EAAE3jB,GAAG,CAAC2jB,OAAO;QACpBo0J,UAAU,EAAE/3K,GAAG,CAAC+3K,UAAU;QAC1Bp2J,QAAQ,EAAE,CAAC;QACXg3J,KAAK,EAAE;MACX,CAAC;MAED,IAAI14K,UAAU,KAAK,IAAI,EAAE;QACrBu7K,EAAE,CAACxhK,QAAQ,GAAGtb,cAAc,CAACgD,UAAU;MAC3C;MAEApD,YAAY,CAACtU,IAAI,CAACmC,IAAI,CAACqvL,EAAE,CAAC;MAE1B,IAAIF,oBAAoB,EAAE;QACtB,IAAI56K,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,6BAA6B,EAAE;UAAEoI,IAAI,EAAE8rL,EAAE,CAAChzL;QAAK,CAAC,CAAC;QACpFzC,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UAAC6P,OAAO,EAAED;QAAG,CAAC,CAAC;MAC1D;IACJ;EACJ,CAAC;EAED5a,MAAM,CAAC+1L,cAAc,GAAG,UAAU77K,GAAG,EAAE;IACnC,KAAK,IAAI1F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACkC,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACtD,IAAIxU,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACsQ,CAAC,CAAC,CAACpR,EAAE,KAAK8W,GAAG,CAAC9W,EAAE,EAAE;QAC3CpD,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACoL,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;QACrC;MACJ;IACJ;EACJ,CAAC;EAEDxU,MAAM,CAACwb,kBAAkB,GAAG,UAAUtB,GAAG,EAAE;IACvC,IAAIla,MAAM,CAACwY,YAAY,CAACiD,UAAU,KAAK,OAAO,EAAE;MAC5Czb,MAAM,CAACgb,kBAAkB,CAACd,GAAG,CAAC;MAC9Bla,MAAM,CAAC0b,mBAAmB,CAACxB,GAAG,CAACyB,KAAK,CAAC;IACzC;EACJ,CAAC;EAED3b,MAAM,CAACy1L,aAAa,GAAG,UAAUv7K,GAAG,EAAE;IAClC,IAAI87K,cAAc,GAAGh2L,MAAM,CAACkY,wBAAwB,CAACnS,MAAM,CAAC,UAAU+D,IAAI,EAAE;MAAE,OAAOA,IAAI,CAAC00B,QAAQ,KAAKtkB,GAAG,CAACskB,QAAQ;IAAE,CAAC,CAAC;IACvH,IAAIt6B,IAAI,GAAG;MACPquF,QAAQ,EAAEr4E,GAAG,CAACskB,QAAQ;MACtB4qJ,UAAU,EAAElvK,GAAG,CAAC47K,UAAU;MAC1B1L,gBAAgB,EAAElwK,GAAG,CAAC24K,KAAK,IAAI,EAAE;MACjC56K,iBAAiB,EAAE+9K,cAAc,CAAC,CAAC,CAAC,CAACnD,KAAK,IAAI,EAAE;MAChD9I,UAAU,EAAE/pL,MAAM,CAACwY,YAAY,CAACiD,UAAU,KAAK,OAAO;MACtDlU,OAAO,EAAE;QACL4jL,aAAa,EAAE6K,cAAc,CAAC,CAAC,CAAC,CAAC7K,aAAa;QAC9CE,aAAa,EAAE2K,cAAc,CAAC,CAAC,CAAC,CAAC3K,aAAa;QAC9CC,aAAa,EAAE0K,cAAc,CAAC,CAAC,CAAC,CAAC1K;MACrC;IACJ,CAAC;IACDrrL,UAAU,CAAC+K,UAAU,CAAC,wBAAwB,EAAE9G,IAAI,CAAC;EACzD,CAAC;EAEDlE,MAAM,CAACgb,kBAAkB,GAAG,UAAUd,GAAG,EAAE;IACvCla,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B9Y,OAAO,CAAC+F,IAAI,CAACqU,GAAG,EAAEla,MAAM,CAAC4Y,cAAc,CAAC;IACxC5Y,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC,CAAC5b,MAAM,CAAC4Y,cAAc,CAACsb,QAAQ,GAAGl0B,MAAM,CAAC4Y,cAAc,CAACsb,QAAQ,GAAG,CAAC;IACxGl0B,MAAM,CAAC4Y,cAAc,CAACiD,cAAc,GAAG,CAAC,CAAC3B,GAAG,CAAC2B,cAAc,GAAG3B,GAAG,CAAC2B,cAAc,GAAG3B,GAAG,CAAC4B,MAAM;IAC7F9b,MAAM,CAAC4Y,cAAc,CAACmD,OAAO,GAAG,CAAC,CAAC7B,GAAG,CAAC6B,OAAO,GAAG7B,GAAG,CAAC6B,OAAO,GAAG7B,GAAG,CAAC6B,OAAO;IACzE/b,MAAM,CAAC4Y,cAAc,CAACoD,iBAAiB,GAAG,CAAC,CAAC9B,GAAG,CAAC8B,iBAAiB,GAAG9B,GAAG,CAAC8B,iBAAiB,GAAG9B,GAAG,CAAC+B,SAAS;IACzGjc,MAAM,CAAC4Y,cAAc,CAACsD,UAAU,GAAG,IAAI;IACvClc,MAAM,CAAC4Y,cAAc,CAACuD,WAAW,GAAG,IAAI;IACxCnc,MAAM,CAAC4Y,cAAc,CAACwD,QAAQ,GAAG,IAAI;EACzC,CAAC;EAEDpc,MAAM,CAAC0b,mBAAmB,GAAG,UAAUY,IAAI,EAAE;IACzCtc,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,GAAGvV,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;IAC9Dpb,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC2Y,eAAe,CAAC9C,IAAI,CAAC,CAACyG,IAAI,GAAG,iBAAiB,GAAG,GAAG,GAAGA,IAAI,CAAC;IACvE,CAAC,CAAC;EACN,CAAC;;EAED;EACAtc,MAAM,CAACuc,WAAW,GAAG,UAAUC,GAAG,EAAEla,KAAK,EAAE;IAEvC9B,QAAQ,CAAC,YAAY;MAAER,MAAM,CAAC2Y,eAAe,CAAC7N,IAAI,CAAC,IAAI,CAAC;IAAE,CAAC,CAAC;IAE5D,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAY;QACjB,IAAIiZ,MAAM,CAACzZ,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,CAAC,IAAI8qF,GAAG,EAAE;UAC5CrgG,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAGnC,MAAM,CAACzZ,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,CAAC;QAC1E,CAAC,MACI;UACDvV,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC;QACxC;QACA5b,MAAM,CAACyc,mBAAmB,CAAC,CAAC;MAChC,CAAC,CAAC;IACN;EACJ,CAAC;EAEDzc,MAAM,CAACyc,mBAAmB,GAAG,YAAY;IACrC3c,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACwY,YAAY,CAACtU,IAAI,EAAE,UAAUtE,EAAE,EAAE;MACpD,IAAIA,EAAE,CAAC+b,KAAK,KAAK3b,MAAM,CAAC4Y,cAAc,CAAC+C,KAAK,EAAE;QAC1Ce,SAAS,GAAG,IAAI;QAChB9c,EAAE,CAACs0B,QAAQ,GAAGl0B,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;QAC9C,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;EACN,CAAC;EAED5b,MAAM,CAACi2L,WAAW,GAAG,YAAY;IAC7B51L,aAAa,CAAC09E,eAAe,CAAC,iBAAiB,CAAC;IAEhDj6E,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAOmlL,oBAAoB,CAAC2I,mBAAmB,CAAC7xL,MAAM,CAACwY,YAAY,EAAExY,MAAM,CAAC8xL,YAAY,EAAE9xL,MAAM,CAACquL,aAAa,CAAC,CAC1GrqL,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAI2U,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOuS,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MACfxjH,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;IACrC,CAAC,CAAC,SACI,CAAC,UAAUpwL,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACk2L,qBAAqB,GAAG,EAAE;EACjCl2L,MAAM,CAACm2L,kBAAkB,GAAG;IAAE5gL,KAAK,EAAE;EAAG,CAAC;EAEzCvV,MAAM,CAACo2L,0BAA0B,GAAG,UAAUl8K,GAAG,EAAE;IAC/Cla,MAAM,CAACk2L,qBAAqB,GAAGh8K,GAAG;IAClCla,MAAM,CAACm2L,kBAAkB,GAAG;MAAE5gL,KAAK,EAAE2E,GAAG,CAACpM;IAAQ,CAAC;IAClD,IAAI+f,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;IACzDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACq2L,0BAA0B,GAAG,UAAUxyI,MAAM,EAAE;IAClD,IAAIA,MAAM,KAAK,KAAK,EAAE;MAClB7jD,MAAM,CAACk2L,qBAAqB,CAACpoL,OAAO,GAAG9N,MAAM,CAACm2L,kBAAkB,CAAC5gL,KAAK;IAC1E;IAEA,IAAIsY,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;IACzDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;;EAED;EACA7tB,MAAM,CAACs2L,eAAe,GAAG,YAAY;IACjC,IAAI,CAACt2L,MAAM,CAACwY,YAAY,CAAC+4K,UAAU,EAAE;MACjCpxL,YAAY,CAACiE,SAAS,CAAC,wBAAwB,CAAC;MAChD;IACJ;IAEAN,CAAC,CAACC,OAAO,CAAC,CAAC;IACXmlL,oBAAoB,CAACwK,2BAA2B,CAACxzL,aAAa,CAACiN,YAAY,EACvEnN,MAAM,CAACwY,YAAY,CAAC+4K,UAAU,CAAC,CAC9BvtL,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,CAACnF,IAAI,CAACmV,UAAU,GAAG,CAAC,EAAE;QACzBrZ,MAAM,CAACwY,YAAY,CAACtU,IAAI,GAAG,EAAE;QAC7BpE,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,CAACk7F,QAAQ,EAAE,UAAUllF,GAAG,EAAE;UAE9C,IAAIw7K,EAAE,GAAG;YACLtyL,EAAE,EAAE8W,GAAG,CAACmC,SAAS;YACjBA,SAAS,EAAEnC,GAAG,CAACmC,SAAS;YACxB5B,WAAW,EAAEP,GAAG,CAACO,WAAW;YAC5B/X,IAAI,EAAEwX,GAAG,CAACxX,IAAI;YACdkzL,QAAQ,EAAE17K,GAAG,CAAC07K,QAAQ;YACtB35K,SAAS,EAAE/B,GAAG,CAAC+B,SAAS;YACxBF,OAAO,EAAE7B,GAAG,CAAC6B,OAAO;YACpBmY,QAAQ,EAAEha,GAAG,CAACga,QAAQ;YACtBM,aAAa,EAAEta,GAAG,CAACsa,aAAa;YAChCuJ,KAAK,EAAE7jB,GAAG,CAAC6jB,KAAK;YAChBS,QAAQ,EAAEtkB,GAAG,CAACskB,QAAQ;YACtBs3J,UAAU,EAAE57K,GAAG,CAAC47K,UAAU;YAC1Bx2J,OAAO,EAAEplB,GAAG,CAAColB,OAAO;YACpBC,OAAO,EAAErlB,GAAG,CAACqlB,OAAO;YACpBC,OAAO,EAAEtlB,GAAG,CAACslB,OAAO;YACpBqzJ,KAAK,EAAE34K,GAAG,CAAC24K,KAAK;YAChBl3K,KAAK,EAAEgO,KAAK,CAACuE,OAAO,CAAC,CAAC;YACtBpgB,OAAO,EAAE;UACb,CAAC;UAED9N,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACmC,IAAI,CAACqvL,EAAE,CAAC;QACrC,CAAC,CAAC;MACN,CAAC,MAAM;QACHv1L,YAAY,CAACiE,SAAS,CAAC,+BAA+B,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACnF;IAEJ,CAAC,CAAC,SACI,CAAC,UAAUD,GAAG,EAAE;MAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC,WACM,CAAC,YAAY;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;;EAED;EACArE,MAAM,CAACqC,GAAG,CAAC,gCAAgC,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAChEA,IAAI,CAAC2kH,KAAK,CAACn8G,OAAO,CAAC,UAAU5C,IAAI,EAAE;MAC/B9J,MAAM,CAACu2L,oBAAoB,CAACzsL,IAAI,EAAE5F,IAAI,CAAC6mL,QAAQ,CAAC;IACpD,CAAC,CAAC;EACN,CAAC,CAAC;EAEF/qL,MAAM,CAACw2L,SAAS,GAAG,EAAE;EACrBx2L,MAAM,CAACy2L,YAAY,GAAG,IAAI;EAC1Bz2L,MAAM,CAAC02L,aAAa,GAAG,CAAC,CAAC;EAEzB12L,MAAM,CAACyoE,WAAW,GAAG,UAAU4oC,MAAM,EAAE;IACnC,OAAOjqC,IAAI,CAACqB,WAAW,CAAC4oC,MAAM,CAAC;EACnC,CAAC;EACDrxG,MAAM,CAAC22L,eAAe,GAAG,UAAUx1L,IAAI,EAAE;IACrCnB,MAAM,CAACy2L,YAAY,GAAGt1L,IAAI;IAC1B,IAAInB,MAAM,CAACw2L,SAAS,IAAIx2L,MAAM,CAACw2L,SAAS,CAACpwL,MAAM,GAAG,CAAC,EAAE;MACjD,IAAIynB,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;MACzDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IAC5C,CAAC,MAAM;MACH/pB,CAAC,CAACC,OAAO,CAAC,CAAC;MACXmlL,oBAAoB,CAAC8K,0BAA0B,CAAC,CAAC,CAC5ChwL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBrJ,MAAM,CAACw2L,SAAS,GAAGntL,GAAG,CAACnF,IAAI,CAAC0yL,SAAS;QAErC,IAAI52L,MAAM,CAACw2L,SAAS,CAACpwL,MAAM,GAAG,CAAC,EAAE;UAC7BpG,MAAM,CAAC02L,aAAa,CAAC78F,QAAQ,GAAG75F,MAAM,CAACw2L,SAAS,CAAC,CAAC,CAAC,CAAC/xF,UAAU;QAClE;QACA,IAAI52E,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;QACzDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;QACxCrtB,QAAQ,CAAC,YAAY;UACjB0E,WAAW,CAAC,CAAC;UACbpB,CAAC,CAAC,QAAQ,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QAClC,CAAC,CAAC;QAEFV,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACvD,CAAC,CAAC;IACV;EACJ,CAAC;EAEDnE,MAAM,CAAC62L,qBAAqB,GAAG,UAAUC,IAAI,EAAE;IAC3C,IAAIjpK,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;IACzDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAEzC,IAAIipK,IAAI,EAAE;MACN,IAAI92L,MAAM,CAACy2L,YAAY,IAAI,OAAO,EAAE;QAChCz2L,MAAM,CAAC+2L,YAAY,CAAC,CAAC;MACzB,CAAC,MAAM;QACH/2L,MAAM,CAACg3L,aAAa,CAAC,CAAC;MAC1B;IACJ;EAEJ,CAAC;EAEDh3L,MAAM,CAACg3L,aAAa,GAAG,YAAY;IAC/BlzL,CAAC,CAACC,OAAO,CAAC,CAAC;IAEXmlL,oBAAoB,CAAC2K,kBAAkB,CAAC7zL,MAAM,CAACwY,YAAY,CAAC4d,MAAM,IAAIp2B,MAAM,CAACwY,YAAY,CAACkb,MAAM,EAAE1zB,MAAM,CAAC02L,aAAa,CAAC78F,QAAQ,CAAC,CAC3H71F,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIgF,GAAG,CAACnF,IAAI,CAACmtB,OAAO,EAAE;QAClB,IAAIhM,GAAG,GAAGhc,GAAG,CAACnF,IAAI,CAAC+yL,GAAG;QACtB,OAAOhD,mBAAmB,CAACjuH,YAAY,CAAC3gD,GAAG,EAAEhc,GAAG,CAACnF,IAAI,CAACgzL,QAAQ,EAAE,iBAAiB,CAAC;MACtF,CAAC,MAAM;QACH/2L,YAAY,CAACiE,SAAS,CAAC,wCAAwC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MAC5F;IAEJ,CAAC,CAAC,SACI,CAAC,UAAUD,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACm3L,UAAU,GAAG,CAAC,CAAC;EAEtBn3L,MAAM,CAAC+2L,YAAY,GAAG,YAAY;IAC9BjzL,CAAC,CAACC,OAAO,CAAC,CAAC;IACXmlL,oBAAoB,CAAC4K,qBAAqB,CAAC9zL,MAAM,CAACwY,YAAY,CAAC4d,MAAM,IAAIp2B,MAAM,CAACwY,YAAY,CAACkb,MAAM,EAAE1zB,MAAM,CAAC02L,aAAa,CAAC78F,QAAQ,CAAC,CAC9H71F,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MAEbrE,MAAM,CAACm3L,UAAU,GAAG9tL,GAAG,CAACnF,IAAI,CAACujB,MAAM;MACnCznB,MAAM,CAACm3L,UAAU,CAACC,QAAQ,GAAG/tL,GAAG,CAACnF,IAAI,CAACuyC,IAAI;MAE1C,IAAI5oB,cAAc,GAAG/pB,CAAC,CAAC,wBAAwB,CAAC;MAChDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IAC5C,CAAC,CAAC,SACI,CAAC,UAAU1pB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACyoE,WAAW,GAAG,UAAU4oC,MAAM,EAAE;IACnC,OAAOjqC,IAAI,CAACqB,WAAW,CAAC4oC,MAAM,CAAC;EACnC,CAAC;EAEDrxG,MAAM,CAACq3L,UAAU,GAAG,UAAUC,MAAM,EAAE;IAClC,IAAIA,MAAM,EAAE;MACRxzL,CAAC,CAACC,OAAO,CAAC,CAAC;MACXmlL,oBAAoB,CAAC6K,sBAAsB,CAAC/zL,MAAM,CAACwY,YAAY,CAAC4d,MAAM,IAAIp2B,MAAM,CAACwY,YAAY,CAACkb,MAAM,EAAE1zB,MAAM,CAACm3L,UAAU,CAAC,CACnHnzL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;QAEb,IAAIgF,GAAG,CAACnF,IAAI,CAACmtB,OAAO,EAAE;UAClB,IAAIxD,cAAc,GAAG/pB,CAAC,CAAC,wBAAwB,CAAC;UAChDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;QAC7C,CAAC,MAAM;UACH,IAAIxkB,GAAG,CAACnF,IAAI,CAACqJ,eAAe,KAAK,SAAS,EAAE;YACxCpN,YAAY,CAACiE,SAAS,CAACiF,GAAG,CAACnF,IAAI,CAACsJ,cAAc,IAAI,+CAA+C,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UAC9H;QACJ;MAEJ,CAAC,CAAC,SACI,CAAC,UAAUrJ,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACvD,CAAC,CAAC;IAEV,CAAC,MAAM;MACH,IAAI0pB,cAAc,GAAG/pB,CAAC,CAAC,wBAAwB,CAAC;MAChDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAC7C;EAEJ,CAAC;EAEA7tB,MAAM,CAACu2L,oBAAoB,GAAG,UAAUr8K,GAAG,EAAE6wK,QAAQ,EAAE;IACpD,IAAMwM,QAAQ,GAAGv3L,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACmN,IAAI,CAAC,UAAUrL,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACqW,SAAS,KAAKnC,GAAG,CAACmC,SAAS;IAAE,CAAC,CAAC;IACtG,IAAIk7K,QAAQ,EAAE;MACVA,QAAQ,CAACrjK,QAAQ,IAAIha,GAAG,CAACga,QAAQ;IACrC,CAAC,MAAM;MACH,IAAMsjK,MAAM,GAAG;QACXp0L,EAAE,EAAE8W,GAAG,CAACmC,SAAS;QACjBs5K,WAAW,EAAEz7K,GAAG,CAACy7K,WAAW;QAC5Bt5K,SAAS,EAAEnC,GAAG,CAACmC,SAAS;QACxB5B,WAAW,EAAEP,GAAG,CAACO,WAAW;QAC5B/X,IAAI,EAAEwX,GAAG,CAACxX,IAAI;QACd+0L,IAAI,EAAEv9K,GAAG,CAAC07K,QAAQ;QAClB95K,MAAM,EAAE5B,GAAG,CAAC4B,MAAM;QAClBG,SAAS,EAAE/B,GAAG,CAAC+B,SAAS;QACxBF,OAAO,EAAE7B,GAAG,CAAC6B,OAAO;QACpBmY,QAAQ,EAAEha,GAAG,CAACga,QAAQ;QACtBM,aAAa,EAAEta,GAAG,CAACsa,aAAa;QAChCgK,QAAQ,EAAEtkB,GAAG,CAACskB,QAAQ;QACtBs3J,UAAU,EAAE57K,GAAG,CAAC47K,UAAU;QAC1Bx2J,OAAO,EAAEplB,GAAG,CAAColB,OAAO;QACpBC,OAAO,EAAErlB,GAAG,CAACqlB,OAAO;QACpBC,OAAO,EAAEtlB,GAAG,CAACslB,OAAO;QACpB7jB,KAAK,EAAEgO,KAAK,CAACuE,OAAO,CAAC,CAAC;QACtBpgB,OAAO,EAAEi9K,QAAQ;QACjB8H,KAAK,EAAE,IAAI;QACX90J,KAAK,EAAE7jB,GAAG,CAAC64K,IAAI;QACfl1J,OAAO,EAAE3jB,GAAG,CAAC2jB,OAAO;QACpBo0J,UAAU,EAAE/3K,GAAG,CAAC+3K;MACpB,CAAC;MACDjyL,MAAM,CAACwY,YAAY,CAACtU,IAAI,GAAGlE,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACuN,MAAM,CAAC+lL,MAAM,CAAC;IACtE;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;AC90BX13L,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,qBAAqB,EAAE,CACxD,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,IAAI,EACJ,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,OAAO,EACP,UACIC,MAAM,EACNC,UAAU,EACVupB,YAAY,EACZ/oB,cAAc,EACdJ,aAAa,EACbG,QAAQ,EACRN,aAAa,EACbC,YAAY,EACZu8C,aAAa,EACb/7C,EAAE,EACFg8C,gBAAgB,EAChB/kC,YAAY,EACZC,YAAY,EACZ8R,KAAK,EACP;EACE,IAAI,CAACH,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACA;EACJ;EACApqB,MAAM,CAACmB,IAAI,GAAG,EAAE;EAEhBnB,MAAM,CAACyb,UAAU,GAAG,KAAK;EACzBzb,MAAM,CAAC03L,SAAS,GAAG,GAAG;EACtB13L,MAAM,CAACkhH,SAAS,GAAG,CAAC;EACpBlhH,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACmhH,QAAQ,GAAG,CAAC;EACnBnhH,MAAM,CAACohH,eAAe;EACtBphH,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EAExBlJ,MAAM,CAAC23L,gBAAgB,GAAG,CAAC;EAC3B33L,MAAM,CAAC43L,eAAe,GAAG,CAAC;EAC1B53L,MAAM,CAAC63L,sBAAsB;EAC7B73L,MAAM,CAAC83L,kBAAkB,GAAG,EAAE;EAC9B93L,MAAM,CAAC+3L,gBAAgB,GAAG,KAAK;EAC/B/3L,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EACjEvY,MAAM,CAACghH,KAAK,GAAG;IAAE7jG,MAAM,EAAE9d,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG;EAAK,CAAC;EAChEpC,MAAM,CAACmC,IAAI,GAAG;IAAEgb,MAAM,EAAE9d,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAEzDpC,MAAM,CAAC2c,UAAU,GAAG;IAChBq7K,wBAAwB,EAAE,KAAK;IAC/BC,qBAAqB,EAAE,KAAK;IAC5BC,mBAAmB,EAAE;EACzB,CAAC;EAEDl4L,MAAM,CAAC0I,MAAM,CAAC,qCAAqC,EAC/C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1BpI,QAAQ,CAAC,YAAW;MAChBH,aAAa,CAACw6E,oBAAoB,CAAC,WAAW,EAAC,qBAAqB,EAAElyE,QAAQ,CAAC;IACnF,CAAC,EAAC,GAAG,CAAC;EACV,CACJ,CAAC;EACD3I,MAAM,CAAC0I,MAAM,CAAC,kCAAkC,EAC5C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1BpI,QAAQ,CAAC,YAAW;MAChBH,aAAa,CAACw6E,oBAAoB,CAAC,QAAQ,EAAC,qBAAqB,EAAElyE,QAAQ,CAAC;IAChF,CAAC,EAAC,GAAG,CAAC;EACV,CACJ,CAAC;EACD3I,MAAM,CAAC0I,MAAM,CAAC,gCAAgC,EAC1C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1BpI,QAAQ,CAAC,YAAW;MAChBH,aAAa,CAACw6E,oBAAoB,CAAC,MAAM,EAAC,qBAAqB,EAAElyE,QAAQ,CAAC;IAC9E,CAAC,EAAC,GAAG,CAAC;EACV,CACJ,CAAC;EAED3I,MAAM,CAACuqB,eAAe,GAAGlqB,aAAa,CAACmqB,2BAA2B;EAElExqB,MAAM,CAACm4L,eAAe,GAAG,KAAK;EAC9Bn4L,MAAM,CAACo4L,iBAAiB,GAAG,YAAW;IAClC,IAAIp4L,MAAM,CAACm4L,eAAe,EAAE;IAE5Bn4L,MAAM,CAACm4L,eAAe,GAAG,IAAI;IAC7B33L,QAAQ,CAAC,YAAW;MAChB,IAAI8X,UAAU,GAAGtY,MAAM,CAACsY,UAAU;QAC9Bk0C,IAAI,GAAG1oD,CAAC,CAAC,4CAA4C,CAAC,CAACo0E,UAAU,CAAC;UAC9D0B,WAAW,EAAE,KAAK;UAClBnB,cAAc,EAAE,CAAC;UACjBngE,UAAU,EAAEA,UAAU;UACtBsgE,eAAe,EAAE,IAAI;UACrBK,UAAU,EAAE,SAAZA,UAAUA,CAAWC,KAAK,EAAE;YACxBlmB,UAAU,CAAC,YAAW;cAClB,IAAIqmB,UAAU,GAAGv1E,CAAC,CAACo1E,KAAK,CAAC,CACpBhB,UAAU,CAAC,QAAQ,CAAC,CACpB7mE,IAAI,CAAC,2BAA2B,CAAC;cACtCgoE,UAAU,CAACr4B,KAAK,CAAC,CAAC;cAClBl9C,CAAC,CAAC,UAAU,EAAE;gBACVoE,IAAI,EAAE,OAAO;gBACbsR,KAAK,EAAE,SAAPA,KAAKA,CAAA,EAAa;kBACd1V,CAAC,CAACo0E,UAAU,CAACqB,UAAU,CAACL,KAAK,CAAC;gBAClC;cACJ,CAAC,CAAC,CACGnV,QAAQ,CAACsV,UAAU,CAAC,CACpB/uB,QAAQ,CAAC,0EAA0E,CAAC;YAC7F,CAAC,EAAE,CAAC,CAAC;UACT;QACJ,CAAC,CAAC;IACV,CAAC,CAAC;EACN,CAAC;EAEDtqD,MAAM,CAAC8jH,aAAa,GAAG,YAAW;IAC9B,IAAIu0E,UAAU,GAAGr4L,MAAM,CAACs4L,cAAc,KACtB,CAACt4L,MAAM,CAACu4L,QAAQ,IAAIv4L,MAAM,CAACu4L,QAAQ,CAAC/xL,SAAS,CAAC,UAAAR,CAAC;MAAA,OAAIA,CAAC,CAACotF,OAAO,KAAKpzF,MAAM,CAACs4L,cAAc;IAAA,EAAC,KAAK,CAAC,CAAC,CAAC,GACrGt4L,MAAM,CAACs4L,cAAc,GACrB,CAAC,CAACt4L,MAAM,CAACu4L,QAAQ,IAAIv4L,MAAM,CAACu4L,QAAQ,CAACnyL,MAAM,GAAG,CAAC,GAAGpG,MAAM,CAACu4L,QAAQ,CAAC,CAAC,CAAC,CAACnlG,OAAO,GAAG,EAAE;IAE3FpzF,MAAM,CAACw4L,YAAY,GAAG;MAClBC,QAAQ,EAAE,IAAI;MACdC,UAAU,EAAE,KAAK;MACjB9uL,IAAI,EAAE,YAAY,GAAGknB,MAAM,CAAC,IAAI2K,IAAI,CAAC,CAAC,CAAC,CAACxS,MAAM,CAAC,IAAI,CAAC;MACpDmuD,UAAU,EAAE,EAAE;MACdD,MAAM,EAAE,EAAE;MACVE,IAAI,EAAE,EAAE;MACR+b,OAAO,EAAEilG,UAAU;MACnB54I,QAAQ,EAAE;IACd,CAAC;;IAED;IACA3/C,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACggD,OAAO,EAAE,UAASpgD,EAAE,EAAE;MACzC,IAAIA,EAAE,CAAC4K,EAAE,KAAKtK,aAAa,CAAC2qC,sBAAsB,EAAE;QAChD7qC,MAAM,CAACw4L,YAAY,CAAC/4I,QAAQ,GAAGv/C,aAAa,CAAC2qC,sBAAsB;QACnE,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEF,IAAI7qC,MAAM,CAACw4L,YAAY,CAAC/4I,QAAQ,EAEhCz/C,MAAM,CAAC24L,gBAAgB,GAAG,EAAE;IAC5B70L,CAAC,CAAC,WAAW,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;IACtBhJ,MAAM,CAAC44L,aAAa,GAAG,EAAE;IACzB90L,CAAC,CAAC,QAAQ,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;IACnBhJ,MAAM,CAAC64L,WAAW,GAAG,EAAE;IACvB/0L,CAAC,CAAC,MAAM,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;EACrB,CAAC;EAEDhJ,MAAM,CAAC4jH,WAAW,GAAG,UAAS1pG,GAAG,EAAE;IAC/Bla,MAAM,CAACw4L,YAAY,GAAG;MAClB9kK,MAAM,EAAExZ,GAAG,CAACkc,MAAM;MAClBqiK,QAAQ,EAAEv+K,GAAG,CAAC4+K,QAAQ;MACtBJ,UAAU,EAAEx+K,GAAG,CAAC6+K,qBAAqB;MACrCnvL,IAAI,EAAEsQ,GAAG,CAACxX,IAAI;MACd+8C,QAAQ,EAAEvlC,GAAG,CAACmjC,QAAQ;MACtB+1C,OAAO,EAAE,CAACl5E,GAAG,CAAC/W,OAAO,GAAG,EAAE,GAAG+W,GAAG,CAAC/W,OAAO;MACxCi0E,UAAU,EAAEl9D,GAAG,CAAC8+K,aAAa;MAC7B7hH,MAAM,EAAEj9D,GAAG,CAAC++K,SAAS;MACrB5hH,IAAI,EAAEn9D,GAAG,CAACg/K;IACd,CAAC;EACL,CAAC;EAEDl5L,MAAM,CAAC24L,gBAAgB,GAAG,EAAE;EAC5B34L,MAAM,CAAC44L,aAAa,GAAG,EAAE;EACzB54L,MAAM,CAAC64L,WAAW,GAAG,EAAE;EACvB74L,MAAM,CAACm5L,cAAc,GAAG,GAAG;EAC3Bn5L,MAAM,CAACo5L,gBAAgB,GAAG,EAAE;EAE5Bp5L,MAAM,CAACq5L,cAAc,GAAG,EAAE;EAC1Br5L,MAAM,CAACo3E,UAAU,GAAG,EAAE;EACtBp3E,MAAM,CAACm3E,MAAM,GAAG,EAAE;EAClBn3E,MAAM,CAACq3E,IAAI,GAAG,EAAE;EAChBr3E,MAAM,CAACggD,OAAO,GAAG,EAAE;EACnBhgD,MAAM,CAACu4L,QAAQ,GAAG,EAAE;EACpBv4L,MAAM,CAACs4L,cAAc,GAAG,IAAI;EAE5Bt4L,MAAM,CAACwpD,QAAQ,GAAG,YAAW;IACzBxpD,MAAM,CAACu4L,QAAQ,GAAG,EAAE;IACpBv4L,MAAM,CAACo3E,UAAU,GAAG,EAAE;IACtBp3E,MAAM,CAACm3E,MAAM,GAAG,EAAE;IAClBn3E,MAAM,CAACq3E,IAAI,GAAG,EAAE;IAChBr3E,MAAM,CAACggD,OAAO,GAAG,EAAE;IACnBhgD,MAAM,CAACkhH,SAAS,GAAG,CAAC;IACpBlhH,MAAM,CAACohH,eAAe,GAAG,CAAC;IAC1BphH,MAAM,CAACmhH,QAAQ,GAAG,CAAC;IAEnB,IAAIj+E,CAAC,GAAGwZ,aAAa,CAACozD,aAAa,CAAC5vG,aAAa,CAACmkC,WAAW,EAAE,IAAI,CAAC,CAACrgC,IAAI,CAAC,UAASE,IAAI,EAAE;MACrF;MACApE,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACg7C,OAAO,EAAE,UAASt/C,EAAE,EAAE;QACvCI,MAAM,CAACggD,OAAO,CAAC35C,IAAI,CAAC;UAChBuD,IAAI,EAAEhK,EAAE,CAAC8qB,UAAU;UACnBlgB,EAAE,EAAE5K,EAAE,CAAC6rC;QACX,CAAC,CAAC;MACN,CAAC,CAAC;MAEF,IAAIlgC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,IAAIsR,GAAG,GAAG2/B,gBAAgB,CAACylE,OAAO,CAAC,CAAC,CAACp+G,IAAI,CAAC,UAASE,IAAI,EAAE;MACrDlE,MAAM,CAACm3E,MAAM,GAAGjzE,IAAI,CAACA,IAAI,CAACizE,MAAM;MAChCn3E,MAAM,CAACo3E,UAAU,GAAGlzE,IAAI,CAACA,IAAI,CAACkzE,UAAU;MACxCp3E,MAAM,CAACq3E,IAAI,GAAGnzE,IAAI,CAACA,IAAI,CAACmzE,IAAI;MAC5Br3E,MAAM,CAACu4L,QAAQ,GAAGr0L,IAAI,CAACA,IAAI,CAACq0L,QAAQ;MACpCv4L,MAAM,CAACs4L,cAAc,GAAGp0L,IAAI,CAACA,IAAI,CAACo0L,cAAc;MAEhD,IAAIp0L,IAAI,CAACA,IAAI,CAACo0L,cAAc,EAAE;QAC1B,IAAIt4L,MAAM,CAACu4L,QAAQ,CAAC/xL,SAAS,CAAC,UAAAR,CAAC;UAAA,OAAIA,CAAC,CAACotF,OAAO,KAAKlvF,IAAI,CAACA,IAAI,CAACo0L,cAAc,CAACllG,OAAO;QAAA,EAAC,KAAK,CAAC,CAAC,EAAE;UACvFpzF,MAAM,CAACu4L,QAAQ,GAAG,CAACv4L,MAAM,CAACs4L,cAAc,CAAC,CAAC7mL,MAAM,CAACzR,MAAM,CAACu4L,QAAQ,CAAC;QACrE;MACJ;MAEA,IAAIv6K,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOuS,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC;IAEF,OAAO/K,EAAE,CAACgxB,GAAG,CAAC,CAACuR,CAAC,EAAElmB,GAAG,CAAC,CAAC;EAC3B,CAAC;EAED,IAAM8c,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACmhH,QAAQ,GAAGnhH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAACujH,UAAU,CAACvjH,MAAM,CAACmhH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAED9mF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C,SAASM,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3C,IAAIv6B,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAEAt5B,MAAM,CAACujH,UAAU,GAAG,UAASnoF,IAAI,EAAE;IAC/Bp7B,MAAM,CAACmhH,QAAQ,GAAG/lF,IAAI;IACtBp7B,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;EACvC,CAAC;EAEDhL,MAAM,CAAC6iH,QAAQ,GAAG,UAASC,OAAO,EAAE;IAChC,IAAI9lG,GAAG,GAAG2/B,gBAAgB,CAACo3E,iBAAiB,CAAC/zH,MAAM,CAACmhH,QAAQ,EAAEnhH,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACyb,UAAU,EAAEqnG,OAAO,CAAC,CAAC9+G,IAAI,CAAC,UAASE,IAAI,EAAE;MAC9H,IAAIlE,MAAM,CAACmhH,QAAQ,KAAK,CAAC,EAAE;QACvBnhH,MAAM,CAACq5L,cAAc,GAAG,EAAE;MAC9B;MAEAr5L,MAAM,CAACmhH,QAAQ,GAAGj9G,IAAI,CAACA,IAAI,CAACg/G,IAAI;MAChCljH,MAAM,CAACohH,eAAe,GAAGl9G,IAAI,CAACA,IAAI,CAACg/G,IAAI;MACvC9oF,QAAQ,CAACl2B,IAAI,CAACA,IAAI,CAAC60B,KAAK,CAAC;MAEzBj5B,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAASjrD,EAAE,EAAE;QACzC,IAAI8qD,GAAG,GAAGhzB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC05L,gBAAgB,CAAC;QACzC,IAAIzmG,SAAS,GAAG,KAAK;QACrB,IAAI,CAAC,CAACnoC,GAAG,CAAC0sB,UAAU,IAAI1sB,GAAG,CAAC0sB,UAAU,CAAChxE,MAAM,GAAG,CAAC,EAAE;UAC/CxG,EAAE,CAACw3E,UAAU,GAAG1sB,GAAG,CAAC0sB,UAAU,CAACziE,IAAI,CAAC,IAAI,CAAC;UACzC/U,EAAE,CAACo5L,aAAa,GAAGtuI,GAAG,CAAC0sB,UAAU;UACjCyb,SAAS,GAAG,IAAI;QACpB,CAAC,MAAMjzF,EAAE,CAACo5L,aAAa,GAAG,EAAE;QAE5B,IAAI,CAAC,CAACtuI,GAAG,CAACysB,MAAM,IAAIzsB,GAAG,CAACysB,MAAM,CAAC/wE,MAAM,GAAG,CAAC,EAAE;UACvCxG,EAAE,CAACu3E,MAAM,GAAGzsB,GAAG,CAACysB,MAAM,CAACxiE,IAAI,CAAC,IAAI,CAAC;UACjC/U,EAAE,CAACq5L,SAAS,GAAGvuI,GAAG,CAACysB,MAAM;UACzB0b,SAAS,GAAG,IAAI;QACpB,CAAC,MAAMjzF,EAAE,CAACq5L,SAAS,GAAG,EAAE;QAExB,IAAI,CAAC,CAACvuI,GAAG,CAAC2sB,IAAI,IAAI3sB,GAAG,CAAC2sB,IAAI,CAACjxE,MAAM,GAAG,CAAC,EAAE;UACnCxG,EAAE,CAACy3E,IAAI,GAAG3sB,GAAG,CAAC2sB,IAAI,CAAC1iE,IAAI,CAAC,IAAI,CAAC;UAC7B/U,EAAE,CAACs5L,OAAO,GAAGxuI,GAAG,CAAC2sB,IAAI;UACrBwb,SAAS,GAAG,IAAI;QACpB,CAAC,MAAMjzF,EAAE,CAACs5L,OAAO,GAAG,EAAE;QAEtBt5L,EAAE,CAAC0O,IAAI,GAAGukF,SAAS,GAAG,SAAS,GAAG,MAAM;QACxCjzF,EAAE,CAAC4sD,IAAI,GAAGnsD,aAAa,CAACkqB,eAAe,CAAC3qB,EAAE,CAACk1F,WAAW,EAAE,KAAK,CAAC;QAC9D90F,MAAM,CAACq5L,cAAc,CAAChzL,IAAI,CAACzG,EAAE,CAAC;MAClC,CAAC,CAAC;MAEF,IAAI2L,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOsR,GAAG;EACd,CAAC;EAEDlZ,CAAC,CAACC,OAAO,CAAC,CAAC;EAEX/D,MAAM,CAAC6rB,MAAM,GAAG,YAAW;IACvB;;IAEA;IACA;IACA;EAAA,CACH;EAED7rB,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,YAAW;IACpCyB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IAEvB,IAAIy3C,IAAI,GAAG,CAAC,CAAC;IACbA,IAAI,CAAC4wE,SAAS,GAAG,aAAa;IAC9B5wE,IAAI,CAAC8wE,SAAS,GAAG,MAAM;IAEvBzxH,MAAM,CAAC6iH,QAAQ,CAACliE,IAAI,CAAC,WAAQ,CAAC,YAAW;MACrC3gD,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC,CAAC;EAEFrE,MAAM,CAAC0I,MAAM,CAAC,WAAW,EAAE,UAASC,QAAQ,EAAEC,QAAQ,EAAE;IACpD,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB,QAAQD,QAAQ;QACZ,KAAK,GAAG;UACJ3I,MAAM,CAACyb,UAAU,GAAG,KAAK;UACzB;QACJ,KAAK,GAAG;UACJzb,MAAM,CAACyb,UAAU,GAAG,aAAa;UACjC;QACJ,KAAK,GAAG;UACJzb,MAAM,CAACyb,UAAU,GAAG,WAAW;UAC/B;QACJ,KAAK,GAAG;UACJzb,MAAM,CAACyb,UAAU,GAAG,QAAQ;UAC5B;MACR;MAEAzb,MAAM,CAACmhH,QAAQ,GAAG,CAAC;MACnBnhH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC;EACJ,CAAC,CAAC;EAEFhL,MAAM,CAACqY,gBAAgB,GAAG,IAAI;;EAE9B;EACA7X,QAAQ,CAAC,YAAW;IAChBR,MAAM,CAACmB,IAAI,GAAG,YAAY;IAE1B2C,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACwpD,QAAQ,CAAC,CAAC,WAAQ,CAAC,YAAY;MAClC1lD,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC,CAAC,CAAC;EAEN,CAAC,CAAC;EAEFxK,QAAQ,CAAC,YAAW;IAChB,IAAIR,MAAM,CAACqY,gBAAgB,EAAE;MACzBrY,MAAM,CAACqY,gBAAgB,GAAG,KAAK;MAC/BnT,WAAW,CAAC,CAAC;IACjB,CAAC,MAAM;MACHpB,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC;EACJ,CAAC,EAAE,CAAC,CAAC;EAELxE,MAAM,CAACmtD,MAAM,GAAG,YAAW;IACvBntD,MAAM,CAAC8jH,aAAa,CAAC,CAAC;IACtB9jH,MAAM,CAACmB,IAAI,GAAG,KAAK;IACnB,IAAIm2C,OAAO,GAAGxzC,CAAC,CAAC,qBAAqB,CAAC;IACtCzD,aAAa,CAAC8E,UAAU,CAACmyC,OAAO,EAAE,YAAW;MACzCpyC,WAAW,CAAC,CAAC;MACb1E,QAAQ,CAAC,YAAW;QAChBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAACwjH,MAAM,GAAG,YAAW;IACvB,IAAIxjH,MAAM,CAACmB,IAAI,IAAI,KAAK,IAAInB,MAAM,CAACmB,IAAI,IAAI,MAAM,EAAE;MAC/C,IAAIm2C,OAAO,GAAGxzC,CAAC,CAAC,qBAAqB,CAAC;MACtCzD,aAAa,CAAC+L,WAAW,CAACkrC,OAAO,CAAC;IACtC;IAEA,IAAIt3C,MAAM,CAACmB,IAAI,IAAI,SAAS,EAAE;MAC1B,IAAIm2C,OAAO,GAAGxzC,CAAC,CAAC,wBAAwB,CAAC;MACzCzD,aAAa,CAAC+L,WAAW,CAACkrC,OAAO,CAAC;IACtC;IAEA,IAAIt3C,MAAM,CAACmB,IAAI,IAAI,KAAK,IAAInB,MAAM,CAACmB,IAAI,IAAI,MAAM,IAAInB,MAAM,CAACmB,IAAI,IAAI,SAAS,EAAE;MAC3EnB,MAAM,CAACmB,IAAI,GAAG,YAAY;MAC1BnB,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC;EACJ,CAAC;EAEDhL,MAAM,CAACu5L,aAAa,GAAG,UAASr/K,GAAG,EAAE;IACjCla,MAAM,CAAC4jH,WAAW,CAAC1pG,GAAG,CAAC;IACvBla,MAAM,CAACmB,IAAI,GAAG,MAAM;IAEpB,IAAIm2C,OAAO,GAAGxzC,CAAC,CAAC,qBAAqB,CAAC;IACtCzD,aAAa,CAAC8E,UAAU,CAACmyC,OAAO,EAAE,YAAW;MACzCpyC,WAAW,CAAC,CAAC;MACb1E,QAAQ,CAAC,YAAW;QAChBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAACw5L,eAAe,GAAG,YAAW;IAChC,IAAIp0E,KAAK,GAAGplH,MAAM,CAACmB,IAAI,IAAI,KAAK;IAEhC2C,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CACX88I,UAAU,CAACz5L,MAAM,CAACw4L,YAAY,EAAEpzE,KAAK,CAAC,CACtCphH,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MAEf,IAAIxjH,MAAM,CAACq5L,cAAc,CAACjzL,MAAM,IAAIpG,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACmhH,QAAQ,EAAE;MAEzEnhH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC,CAAC,CAAC,SACI,CAAC,UAAS7G,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACg0H,eAAe,GAAG,UAAS95G,GAAG,EAAE;IACnCla,MAAM,CAACsuL,UAAU,GAAG,MAAM;IAC1BtuL,MAAM,CAACuuL,YAAY,GAAGr0K,GAAG;IAEzB,IAAIW,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,0BAA0B,CAAC,GAAG,OAAO,GAAG0Y,GAAG,CAACxX,IAAI,GAAG,OAAO,GAAGjC,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;IAE1InB,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,kBAAkB,CAAC,EACzEqZ,OACF,CAAC;EACL,CAAC;EAED7a,MAAM,CAAC26B,aAAa,GAAG,YAAW;IAC9B,IAAI36B,MAAM,CAACsuL,UAAU,IAAI,MAAM,EAAE;MAC7BxqL,CAAC,CAACC,OAAO,CAAC,CAAC;MACX44C,gBAAgB,CACXq3E,eAAe,CAACh0H,MAAM,CAACuuL,YAAY,CAACn4J,MAAM,CAAC,CAC3CpyB,IAAI,CAAC,YAAW;QACbF,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAIrE,MAAM,CAACq5L,cAAc,CAACjzL,MAAM,IAAI,CAAC,IAAIpG,MAAM,CAACmhH,QAAQ,GAAG,CAAC,EAAEnhH,MAAM,CAACmhH,QAAQ,EAAE;QAE/EnhH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;MACvC,CAAC,CAAC,SACI,CAAC,UAAS7G,GAAG,EAAE;QACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV,CAAC,MAAM,IAAInE,MAAM,CAACsuL,UAAU,IAAI,OAAO,EAAE;MACrCxqL,CAAC,CAACC,OAAO,CAAC,CAAC;MACX44C,gBAAgB,CACXs3E,cAAc,CAACj0H,MAAM,CAACuuL,YAAY,CAACn4J,MAAM,CAAC,CAC1CpyB,IAAI,CAAC,YAAW;QACbF,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAAC03L,SAAS,GAAG,GAAG,CAAC,CAAC;;QAExBl3L,QAAQ,CAAC,YAAW;UAChBsD,CAAC,CAAC,YAAY,CAAC,CAACU,OAAO,CAAC,QAAQ,CAAC;QACrC,CAAC,CAAC;MACN,CAAC,CAAC,SACI,CAAC,UAASL,GAAG,EAAE;QACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV,CAAC,MAAM,IAAInE,MAAM,CAACsuL,UAAU,IAAI,UAAU,EAAE;MACxCtuL,MAAM,CAACy0H,iBAAiB,CAAC,CAAC;IAC9B,CAAC,MAAM,IAAIz0H,MAAM,CAACsuL,UAAU,IAAI,QAAQ,EAAE;MACtCtuL,MAAM,CAAC20H,eAAe,CAAC,CAAC;IAC5B,CAAC,MAAM,IAAI30H,MAAM,CAACsuL,UAAU,IAAI,MAAM,EAAE;MACpCtuL,MAAM,CAAC40H,aAAa,CAAC,CAAC;IAC1B;EACJ,CAAC;EAED50H,MAAM,CAACi0H,cAAc,GAAG,UAAS/5G,GAAG,EAAE;IAClCla,MAAM,CAACsuL,UAAU,GAAG,OAAO;IAC3BtuL,MAAM,CAACuuL,YAAY,GAAGr0K,GAAG;IAEzB,IAAIW,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,yBAAyB,CAAC,GAAG,OAAO,GAAG0Y,GAAG,CAACxX,IAAI,GAAG,OAAO,GAAGjC,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;IAEzInB,aAAa,CAACq6B,gBAAgB,CAC1Bj6B,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC,EAC3CqZ,OAAO,EACPpa,cAAc,CAACe,SAAS,CAAC,IAAI,CACjC,CAAC;EACL,CAAC;;EAED;EACAxB,MAAM,CAACi2H,WAAW,GAAG,UAAS12D,UAAU,EAAE;IACtC,IAAI5e,IAAI,GAAG,CAAC,CAAC;IAEb,IAAI,CAAC,CAAC4e,UAAU,CAAC5e,IAAI,CAACu1E,SAAS,EAAE;MAC7Bv1E,IAAI,CAAC4wE,SAAS,GAAGhyD,UAAU,CAAC5e,IAAI,CAACu1E,SAAS;MAC1Cv1E,IAAI,CAAC8wE,SAAS,GAAGlyD,UAAU,CAAC5e,IAAI,CAAC7tC,OAAO,GAAG,MAAM,GAAG,KAAK;IAC7D;IAEAhP,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC6iH,QAAQ,CAACliE,IAAI,CAAC,WAAQ,CAAC,YAAW;MACrC78C,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAEDrE,MAAM,CAACujH,UAAU,GAAG,UAASnoF,IAAI,EAAE;IAC/Bp7B,MAAM,CAACmhH,QAAQ,GAAG/lF,IAAI;IACtBp7B,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;EACvC,CAAC;;EAED;EACAhL,MAAM,CAAC05L,kBAAkB,GAAG,UAAS1wL,GAAG,EAAE;IACtC,OAAO2zC,gBAAgB,CAAC2iD,UAAU,CAACt/F,MAAM,CAACo3E,UAAU,EAAEpuE,GAAG,EAAE,EAAE,CAAC;EAClE,CAAC;EAEDhJ,MAAM,CAAC25L,0BAA0B,GAAG,UAAS7vL,IAAI,EAAEC,KAAK,EAAEC,KAAK,EAAE1H,KAAK,EAAE;IACpEtC,MAAM,CAAC24L,gBAAgB,GAAG,EAAE;IAC5B70L,CAAC,CAAC,WAAW,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;IACtB2zC,gBAAgB,CAACi9I,cAAc,CAAC55L,MAAM,CAACo3E,UAAU,EAAErtE,KAAK,EAAE/J,MAAM,CAACw4L,YAAY,CAACphH,UAAU,CAAC;IACzF/2E,aAAa,CAAC0K,YAAY,CAAC,CAAC;EAChC,CAAC;EAED/K,MAAM,CAAC65L,0BAA0B,GAAG,UAASryH,CAAC,EAAE;IAC5C,OAAO,IAAI;EACf,CAAC;EAEDxnE,MAAM,CAAC85L,eAAe,GAAG,UAAS9wL,GAAG,EAAE;IACnC,OAAO2zC,gBAAgB,CAAC2iD,UAAU,CAACt/F,MAAM,CAACm3E,MAAM,EAAEnuE,GAAG,EAAE,EAAE,CAAC;EAC9D,CAAC;EAEDhJ,MAAM,CAAC+5L,uBAAuB,GAAG,UAASjwL,IAAI,EAAEC,KAAK,EAAEC,KAAK,EAAE1H,KAAK,EAAE;IACjEtC,MAAM,CAAC44L,aAAa,GAAG,EAAE;IACzB90L,CAAC,CAAC,QAAQ,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;IACnB2zC,gBAAgB,CAACi9I,cAAc,CAAC55L,MAAM,CAACm3E,MAAM,EAAEptE,KAAK,EAAE/J,MAAM,CAACw4L,YAAY,CAACrhH,MAAM,CAAC;IACjF92E,aAAa,CAAC0K,YAAY,CAAC,CAAC;EAChC,CAAC;EAED/K,MAAM,CAACg6L,uBAAuB,GAAG,UAASxyH,CAAC,EAAE;IACzC,OAAO,IAAI;EACf,CAAC;EAEDxnE,MAAM,CAACi6L,aAAa,GAAG,UAASjxL,GAAG,EAAE;IACjC,OAAO2zC,gBAAgB,CAAC2iD,UAAU,CAACt/F,MAAM,CAACq3E,IAAI,EAAEruE,GAAG,EAAE,EAAE,CAAC;EAC5D,CAAC;EAEDhJ,MAAM,CAACk6L,qBAAqB,GAAG,UAASpwL,IAAI,EAAEC,KAAK,EAAEC,KAAK,EAAE1H,KAAK,EAAE;IAC/DtC,MAAM,CAAC64L,WAAW,GAAG,EAAE;IACvB/0L,CAAC,CAAC,MAAM,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;IACjB2zC,gBAAgB,CAACi9I,cAAc,CAAC55L,MAAM,CAACq3E,IAAI,EAAEttE,KAAK,EAAE/J,MAAM,CAACw4L,YAAY,CAACnhH,IAAI,CAAC;IAC7Eh3E,aAAa,CAAC0K,YAAY,CAAC,CAAC;EAChC,CAAC;EAED/K,MAAM,CAACm6L,qBAAqB,GAAG,UAAS3yH,CAAC,EAAE;IACvC,OAAO,IAAI;EACf,CAAC;EAEDxnE,MAAM,CAACo6L,cAAc,GAAG,UAASh/K,GAAG,EAAEtR,IAAI,EAAE;IACxC6yC,gBAAgB,CAAC09I,mBAAmB,CAACj/K,GAAG,EAAEtR,IAAI,CAAC;EACnD,CAAC;;EAED;;EAEA9J,MAAM,CAACs6L,gBAAgB,GAAG;IACtBC,IAAI,EAAE,EAAE;IACRC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;IAClBrB,cAAc,EAAE,GAAG;IACnBt4L,UAAU,EAAE;EAChB,CAAC;EAEDb,MAAM,CAAC0I,MAAM,CAAC,iCAAiC,EAAE,UAASC,QAAQ,EAAEC,QAAQ,EAAE;IAC1E,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACs6L,gBAAgB,CAAClB,gBAAgB,GAAG,EAAE;MAC7Ct5L,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACs6L,gBAAgB,CAACC,IAAI,EAAE,UAAS36L,EAAE,EAAE;QACvD,IAAI+I,QAAQ,IAAI/I,EAAE,CAAC66L,KAAK,EAAE;UACtBz6L,MAAM,CAACs6L,gBAAgB,CAAClB,gBAAgB,GAAGx5L,EAAE,CAAC8C,IAAI;UAClD,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MAEF1C,MAAM,CAAC06L,yBAAyB,CAAC,CAAC;IACtC;EACJ,CAAC,CAAC;EAEF16L,MAAM,CAAC26L,uBAAuB,GAAG,UAASzgL,GAAG,EAAE;IAC3Cla,MAAM,CAACs6L,gBAAgB,CAACM,WAAW,GAAG1gL,GAAG;IACzCla,MAAM,CAACs6L,gBAAgB,CAAC1wL,IAAI,GAAGsQ,GAAG,CAACxX,IAAI;IACvC1C,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,GAAGxZ,GAAG,CAACkc,MAAM;IAC3Cp2B,MAAM,CAACs6L,gBAAgB,CAAC9sI,UAAU,GAAGtzC,GAAG,CAACwD,UAAU;IACnD1d,MAAM,CAACs6L,gBAAgB,CAACp+K,UAAU,GAAGhC,GAAG,CAAC6+K,qBAAqB,IAAI,IAAI;IACtE/4L,MAAM,CAACs6L,gBAAgB,CAACC,IAAI,GAAG,EAAE;IACjCv6L,MAAM,CAACs6L,gBAAgB,CAACnB,cAAc,GAAGj/K,GAAG,CAACwD,UAAU;IACvD1d,MAAM,CAACs6L,gBAAgB,CAACviJ,MAAM,GAAG79B,GAAG,CAAC7W,MAAM;IAC3CrD,MAAM,CAACs6L,gBAAgB,CAACz5L,UAAU,GAAG,EAAE;EAC3C,CAAC;EAEDb,MAAM,CAAC66L,oBAAoB,GAAG,UAAS3gL,GAAG,EAAE;IACxCla,MAAM,CAAC23L,gBAAgB,GAAG,CAAC;IAC3B33L,MAAM,CAAC43L,eAAe,GAAG,CAAC;IAC1B53L,MAAM,CAAC86L,iBAAiB,GAAG,CAAC;IAE5B96L,MAAM,CAAC26L,uBAAuB,CAACzgL,GAAG,CAAC;IAEnCla,MAAM,CAACmB,IAAI,GAAG,SAAS;IACvBnB,MAAM,CAACq0L,eAAe,CAAC,CAAC;IAExB,IAAI/8I,OAAO,GAAGxzC,CAAC,CAAC,wBAAwB,CAAC;IACzC9D,MAAM,CAACs6L,gBAAgB,CAACz5L,UAAU,GAAG,EAAE;IAEvCR,aAAa,CAAC8E,UAAU,CAACmyC,OAAO,EAAE,YAAW;MACzCjd,iBAAiB,CAAC0gK,gCAAgC,EAAEzjJ,OAAO,CAACjmC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvF,CAAC,CAAC;IAEFvN,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CACXq+I,eAAe,CAACh7L,MAAM,CAACs6L,gBAAgB,CAAC9sI,UAAU,CAAC,CACnDxpD,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBrJ,MAAM,CAACs6L,gBAAgB,CAACC,IAAI,GAAG,EAAE;MACjC,IAAIlxL,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAAE;QAC/BpG,MAAM,CAACs6L,gBAAgB,CAACC,IAAI,GAAGlxL,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACjDn+C,MAAM,CAACs6L,gBAAgB,CAACC,IAAI,CAACpsL,OAAO,CAAC;UACjCssL,KAAK,EAAEz6L,MAAM,CAACs6L,gBAAgB,CAAC9sI,UAAU;UACzCkhI,QAAQ,EAAE1uL,MAAM,CAACs6L,gBAAgB,CAAC9sI,UAAU;UAC5C9qD,IAAI,EAAE;QACV,CAAC,CAAC;MACN;MAEAoB,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,YAAW;MACdP,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;EAED,IAAM02L,gCAAgC,GAAG,SAAnCA,gCAAgCA,CAAA,EAAc;IAChD,IAAI,CAAC/6L,MAAM,CAAC+3L,gBAAgB,IAAI/3L,MAAM,CAAC43L,eAAe,GAAG53L,MAAM,CAAC86L,iBAAiB,EAAE;MAC/E96L,MAAM,CAACi7L,iBAAiB,CAACj7L,MAAM,CAAC43L,eAAe,GAAG,CAAC,CAAC;IACxD;EACJ,CAAC;EAED,SAASsD,eAAeA,CAAChvK,KAAK,EAAE;IAC5B,IAAIqO,IAAI,GAAGv6B,MAAM,CAAC83L,kBAAkB;IACpC93L,MAAM,CAAC86L,iBAAiB,GAAGjhK,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAClD,IAAIv6B,MAAM,CAAC86L,iBAAiB,KAAK,CAAC,EAAE;MAChC96L,MAAM,CAAC86L,iBAAiB,GAAG,CAAC;IAChC;EACJ;EAEA96L,MAAM,CAACi7L,iBAAiB,GAAG,UAAS7/J,IAAI,EAAE;IACtCp7B,MAAM,CAAC43L,eAAe,GAAGx8J,IAAI;IAC7Bp7B,MAAM,CAACq0L,eAAe,CAAC,CAAC;EAC5B,CAAC;EAEDr0L,MAAM,CAACq0L,eAAe,GAAG,UAAStN,SAAS,EAAE;IACzCjjL,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC+3L,gBAAgB,GAAG,IAAI;IAE9B,IAAI38J,IAAI,GAAGp7B,MAAM,CAAC43L,eAAe;IACjC,IAAIuD,WAAW,GAAGn7L,MAAM,CAAC83L,kBAAkB;IAE3C,IAAI/Q,SAAS,KAAK,IAAI,EAAE;MACpB3rJ,IAAI,GAAG,CAAC;MACR+/J,WAAW,GAAGn7L,MAAM,CAAC43L,eAAe,GAAG53L,MAAM,CAAC83L,kBAAkB;IACpE;IAEAn7I,gBAAgB,CACXu3E,aAAa,CAACl0H,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAAE0H,IAAI,EAAE+/J,WAAW,EAAE,CAAC,CAAC,EAAEn7L,MAAM,CAACs6L,gBAAgB,CAACz5L,UAAU,EAAE,IAAI,CAAC,CAC9GmD,IAAI,CAAC,UAASE,IAAI,EAAE;MACjB,IAAIk3B,IAAI,KAAK,CAAC,EAAE;QACZp7B,MAAM,CAACs6L,gBAAgB,CAACp2L,IAAI,GAAG,EAAE;MACrC;MAEA,IAAI6iL,SAAS,KAAK,IAAI,EAAE;QACpB/mL,MAAM,CAAC23L,gBAAgB,GAAGzzL,IAAI,CAACA,IAAI,CAAC60B,KAAK;QACzCmiK,eAAe,CAACh3L,IAAI,CAACA,IAAI,CAAC60B,KAAK,CAAC;MACpC,CAAC,MAAM;QACH/4B,MAAM,CAAC23L,gBAAgB,GAAGzzL,IAAI,CAACA,IAAI,CAAC60B,KAAK;QACzC/4B,MAAM,CAAC43L,eAAe,GAAG1zL,IAAI,CAACA,IAAI,CAACg/G,IAAI;QACvCljH,MAAM,CAAC63L,sBAAsB,GAAG3zL,IAAI,CAACA,IAAI,CAACg/G,IAAI;QAC9Cg4E,eAAe,CAACh3L,IAAI,CAACA,IAAI,CAAC60B,KAAK,CAAC;MACpC;MAEAj5B,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAASjrD,EAAE,EAAE;QACzCI,MAAM,CAACs6L,gBAAgB,CAACp2L,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;MACzC,CAAC,CAAC;IACN,CAAC,CAAC,WACM,CAAC,YAAW;MAChBkE,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAAC+3L,gBAAgB,GAAG,KAAK;IACnC,CAAC,CAAC;EACV,CAAC;EAED/3L,MAAM,CAACo7L,UAAU,GAAG,UAASlhL,GAAG,EAAE;IAC9B,IAAIla,MAAM,CAACyb,UAAU,IAAI,KAAK,EAAE;MAC5Bzb,MAAM,CAACi0H,cAAc,CAAC/5G,GAAG,CAAC;IAC9B,CAAC,MAAM;MACHla,MAAM,CAAC66L,oBAAoB,CAAC3gL,GAAG,CAAC;IACpC;EACJ,CAAC;EAEDla,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;EAC7BpZ,MAAM,CAACiY,iBAAiB,GAAG,EAAE;;EAE7B;EACAjY,MAAM,CAACq7L,eAAe,GAAG,UAAUjgL,GAAG,EAAE;IACpCpb,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;IAE7BtZ,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAAUxb,EAAE,EAAE;MAC/B,IAAI,CAAC,CAACA,EAAE,CAACge,UAAU,EAAEhe,EAAE,CAAC07L,WAAW,GAAG17L,EAAE,CAACge,UAAU;MACnD5d,MAAM,CAACoZ,iBAAiB,CAAC/S,IAAI,CAACzG,EAAE,CAAC;IACrC,CAAC,CAAC;IAEFI,MAAM,CAACiY,iBAAiB,GAAGjY,MAAM,CAACoZ,iBAAiB;EACvD,CAAC;;EAED;EACApZ,MAAM,CAACu7L,kBAAkB,GAAG,UAASh8H,UAAU,EAAE;IAC7C,IAAI5e,IAAI,GAAG,CAAC,CAAC;IACb,IAAI3gD,MAAM,CAACmB,IAAI,IAAI,SAAS,EAAE;IAE9B,IAAI,CAAC,CAACo+D,UAAU,CAAC5e,IAAI,CAACu1E,SAAS,EAAE;MAC7Bv1E,IAAI,CAAC4wE,SAAS,GAAGhyD,UAAU,CAAC5e,IAAI,CAACu1E,SAAS;MAC1Cv1E,IAAI,CAAC8wE,SAAS,GAAGlyD,UAAU,CAAC5e,IAAI,CAAC7tC,OAAO,GAAG,MAAM,GAAG,KAAK;IAC7D;IAEAhP,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACq0L,eAAe,CAAC1zI,IAAI,CAAC,WAAQ,CAAC,YAAW;MAC5C78C,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;;EAED;EACArE,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;EAC1B5Y,MAAM,CAACwb,kBAAkB,GAAG,UAAStB,GAAG,EAAE;IACtC,IAAIla,MAAM,CAACs6L,gBAAgB,CAACviJ,MAAM,IAAI,aAAa,EAAE;MACjD/3C,MAAM,CAACgb,kBAAkB,CAACd,GAAG,CAAC;MAC9B7Z,aAAa,CAAC8E,UAAU,CAAC,0BAA0B,EAAE,YAAW;QAC5DD,WAAW,CAAC,CAAC;MACjB,CAAC,CAAC;MACFlF,MAAM,CAACo4L,iBAAiB,CAAC,CAAC;IAC9B;EACJ,CAAC;EAEDp4L,MAAM,CAACgb,kBAAkB,GAAG,UAASd,GAAG,EAAE;IACtCla,MAAM,CAAC4Y,cAAc,GAAG9Y,OAAO,CAAC+F,IAAI,CAACqU,GAAG,CAAC;IACzCla,MAAM,CAAC4Y,cAAc,CAAC4iL,gBAAgB,GAAGx7L,MAAM,CAACs6L,gBAAgB,CAAC9sI,UAAU;IAC3ExtD,MAAM,CAAC4Y,cAAc,CAACsD,UAAU,GAAGlc,MAAM,CAACs6L,gBAAgB,CAACp+K,UAAU;IAErE,IAAIhC,GAAG,CAACwD,UAAU,EACd1d,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,GAAGxD,GAAG,CAACwD,UAAU,CAAC,KAElD1d,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,GAAG1d,MAAM,CAACs6L,gBAAgB,CAAC9sI,UAAU;IACrF;;IAEY,IAAI,CAAC,CAACxtD,MAAM,CAAC4Y,cAAc,CAACgF,UAAU,EAAE5d,MAAM,CAAC4Y,cAAc,CAAC0iL,WAAW,GAAGt7L,MAAM,CAAC4Y,cAAc,CAACgF,UAAU;IAE5G,IAAI5d,MAAM,CAAC4Y,cAAc,CAAC4b,aAAa,IAAI,MAAM,IAAIx0B,MAAM,CAAC4Y,cAAc,CAAC4b,aAAa,IAAI,MAAM,IAAIx0B,MAAM,CAAC4Y,cAAc,CAAC4b,aAAa,IAAI,IAAI,EAAE;MAC/I,IAAIx0B,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC,EAAE5b,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC;IAClF;IAEApb,QAAQ,CAAC,YAAW;MAChBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC2Y,eAAe,GAAG,IAAI,CAAC,CAAC;;EAE/B3Y,MAAM,CAAC0b,mBAAmB,GAAG,YAAW;IACpC1b,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,GAAGvV,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;IAC9Dpb,QAAQ,CAAC,YAAW;MAChBR,MAAM,CAAC2Y,eAAe,CAAC9C,IAAI,CAAC,iBAAiB,CAAC;IAClD,CAAC,CAAC;EACN,CAAC;;EAED;EACA7V,MAAM,CAACuc,WAAW,GAAG,UAASC,GAAG,EAAEla,KAAK,EAAE;IACtC9B,QAAQ,CAAC,YAAW;MAChBR,MAAM,CAAC2Y,eAAe,CAAC7N,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEF,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAW;QAChBR,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG5b,MAAM,CAAC4Y,cAAc,CAACrD,KAAK;MAClE,CAAC,CAAC;IACN,CAAC,MAAM,IAAI,OAAOiH,GAAG,IAAI,QAAQ,EAAE;MAC/B,IAAIA,GAAG,KAAK,OAAO,EAAE,CACrB;IACJ;EACJ,CAAC;EAEDxc,MAAM,CAACy7L,uBAAuB,GAAG,YAAW;IACxC33L,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX44C,gBAAgB,CACX8+I,uBAAuB,CACpBz7L,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAC9B1zB,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EACxBpD,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,EAChC5b,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,EAChC1d,MAAM,CAAC4Y,cAAc,CAACkF,OAAO,EAC7B9d,MAAM,CAAC4Y,cAAc,CAACgF,UAAU,EAChC5d,MAAM,CAAC4Y,cAAc,CAACyD,SAAS,EAC/Brc,MAAM,CAAC4Y,cAAc,CAAC8iL,YAC1B,CAAC,CACA13L,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACq0L,eAAe,CAAC,IAAI,CAAC;MAC5B,OAAOz8K,YAAY,CAACmD,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,SACI,CAAC,UAAS5W,GAAG,EAAE;MACjByT,YAAY,CAACkD,OAAO,CAAC,CAAC;MACtBhX,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;;EAED;EACAnE,MAAM,CAAC4Z,sBAAsB,GAAG,CAAC;EACjC5Z,MAAM,CAACiZ,SAAS,GAAG,IAAI;EACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;EACzBlZ,MAAM,CAAC0Y,gBAAgB,GAAG,KAAK;EAC/B1Y,MAAM,CAACyY,cAAc,GAAG,IAAI;EAC5BzY,MAAM,CAAC8Z,aAAa,GAAG,EAAE;EAEzB9Z,MAAM,CAACmZ,YAAY,GAAG,UAASzE,CAAC,EAAE;IAC9B1U,MAAM,CAAC8Z,aAAa,GAAGpF,CAAC;IACxB5Q,CAAC,CAAC,WAAW,CAAC,CAACkF,GAAG,CAAC0L,CAAC,CAAC;EACzB,CAAC;EAED1U,MAAM,CAAC+Z,YAAY,GAAG,YAAW;IAC7B/Z,MAAM,CAAC8Z,aAAa,GAAGhW,CAAC,CAAC,WAAW,CAAC,CAACkF,GAAG,CAAC,CAAC;IAC3C,OAAOhJ,MAAM,CAAC8Z,aAAa;EAC/B,CAAC;EAED9Z,MAAM,CAAC27L,aAAa,GAAG,IAAI;EAE3B37L,MAAM,CAAC+Y,WAAW,GAAG,YAAW;IAC5B/Y,MAAM,CAACiZ,SAAS,GAAG,IAAI;IACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;IACzBlZ,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B5Y,MAAM,CAACmZ,YAAY,CAAC,EAAE,CAAC;IACvBnZ,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;IAC7BpZ,MAAM,CAACiY,iBAAiB,GAAG,EAAE;IAC7BnU,CAAC,CAAC,kBAAkB,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;IAE7B3I,aAAa,CAAC8E,UAAU,CAAC,mBAAmB,EAAE,YAAW,CAAE,CAAC,CAAC;IAE7D,IAAInF,MAAM,CAAC27L,aAAa,EAAE;MACtB37L,MAAM,CAAC27L,aAAa,GAAG,KAAK;MAC5B,IAAI73L,CAAC,CAAC,0BAA0B,CAAC,CAACsC,MAAM,GAAG,CAAC,EAAE;QAC1CtC,CAAC,CAAC,0BAA0B,CAAC,CAAC8D,MAAM,CAAC,CAAC;MAC1C;IACJ;IAEA5H,MAAM,CAAC0Y,gBAAgB,GAAG,IAAI;IAC9Bb,YAAY,CAAC0B,SAAS,CAAC,CAAC;IACxB;;IAEA,IAAIvZ,MAAM,CAACyY,cAAc,EAAE;MACvBzY,MAAM,CAACyY,cAAc,GAAG,KAAK;MAC7B3U,CAAC,CAAC,mBAAmB,CAAC,CACjBuN,IAAI,CAAC,SAAS,CAAC,CACfmI,KAAK,CAAC,UAASR,GAAG,EAAE;QACjB,IAAItE,CAAC,GAAG+E,MAAM,CACV3V,CAAC,CAAC,IAAI,CAAC,CACF4V,MAAM,CAAC,CAAC,CACR/R,IAAI,CAAC,OAAO,CACrB,CAAC;QAEDnH,QAAQ,CAAC,YAAW;UAChBR,MAAM,CAAC4Z,sBAAsB,GAAGlF,CAAC;QACrC,CAAC,CAAC;MACN,CAAC,CAAC;IACV;IAEAlU,QAAQ,CAAC,YAAW;MAChBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;IACFxE,MAAM,CAACo4L,iBAAiB,CAAC,CAAC;EAC9B,CAAC;EAEDp4L,MAAM,CAACga,WAAW,GAAG,YAAW;IAC5B;IACAha,MAAM,CAAC0Y,gBAAgB,GAAG,KAAK;IAC/BrY,aAAa,CAAC+L,WAAW,CAAC,mBAAmB,CAAC;IAC9CpM,MAAM,CAACq0L,eAAe,CAAC,IAAI,CAAC;EAChC,CAAC;EAEDr0L,MAAM,CAAC06L,yBAAyB,GAAG,YAAW;IAC1C,IAAI,CAAC16L,MAAM,CAACs6L,gBAAgB,CAACnB,cAAc,EAAE;MACzCn5L,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,GAAG1d,MAAM,CAACs6L,gBAAgB,CAAC9sI,UAAU;MACrExtD,MAAM,CAAC4Y,cAAc,CAACgjL,YAAY,GAAG,EAAE;IAC3C,CAAC,MAAM;MACH57L,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,GAAG1d,MAAM,CAACs6L,gBAAgB,CAACnB,cAAc;MACzEn5L,MAAM,CAAC4Y,cAAc,CAACgjL,YAAY,GAAG57L,MAAM,CAACs6L,gBAAgB,CAACnB,cAAc,KAAKn5L,MAAM,CAACs6L,gBAAgB,CAAC9sI,UAAU,GAC9G,EAAE,GACFxtD,MAAM,CAACs6L,gBAAgB,CAAClB,gBAAgB;IAChD;EACJ,CAAC;EAEDp5L,MAAM,CAAC67L,aAAa,GAAG,YAAW;IAC9B77L,MAAM,CAACiZ,SAAS,GAAG,IAAI;IACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;IACzBlZ,MAAM,CAAC06L,yBAAyB,CAAC,CAAC;IAElC,IAAI16L,MAAM,CAAC4Z,sBAAsB,IAAI,CAAC,IAAI,CAAC,CAAC5Z,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EAAE;MAClEU,CAAC,CAACC,OAAO,CAAC,CAAC;MAEX,OAAO44C,gBAAgB,CAClB8+I,uBAAuB,CACpBz7L,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAC9B1zB,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EACxBpD,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,EAChC5b,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,EAChC1d,MAAM,CAAC4Y,cAAc,CAACkF,OAAO,EAC7B9d,MAAM,CAAC4Y,cAAc,CAACgF,UAAU,EAChC5d,MAAM,CAAC4Y,cAAc,CAACyD,SAAS,EAC/Brc,MAAM,CAAC4Y,cAAc,CAAC8iL,YAC1B,CAAC,CACA13L,IAAI,CAAC,UAASwL,CAAC,EAAE;QACd1L,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACkZ,WAAW,GAAG,UAAU,GAAGlZ,MAAM,CAAC4Y,cAAc,CAAC4B,OAAO,GAAG,4CAA4C,GAAGxa,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;QACjJ5b,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;QAC1B5Y,MAAM,CAACq0L,eAAe,CAAC,IAAI,CAAC;QAC5B,OAAOz8K,YAAY,CAACmD,QAAQ,CAAC,CAAC;MAClC,CAAC,CAAC,SACI,CAAC,UAAS5W,GAAG,EAAE;QACjByT,YAAY,CAACkD,OAAO,CAAC,CAAC;QACtBhX,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV,CAAC,MAAM,IAAInE,MAAM,CAAC4Z,sBAAsB,IAAI,CAAC,IAAI,CAAC,CAAC5Z,MAAM,CAAC+Z,YAAY,CAAC,CAAC,IAAI/Z,MAAM,CAAC+Z,YAAY,CAAC,CAAC,CAAC3T,MAAM,GAAG,CAAC,EAAE;MAC1G,IAAI01L,WAAW,GAAI97L,MAAM,CAAC+Z,YAAY,CAAC,CAAC;MAExC/Z,MAAM,CAACmZ,YAAY,CAAC,EAAE,CAAC;MACvB,IAAI2iL,WAAW,CAAC11L,MAAM,GAAG,CAAC,EAAE;QAExB,IAAIoW,GAAG,GAAGmgC,gBAAgB,CAACo/I,iBAAiB,CAAC/7L,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAAE1zB,MAAM,CAACs6L,gBAAgB,CAACnB,cAAc,EAAE2C,WAAW,CAAC;QAEjIh4L,CAAC,CAACC,OAAO,CAAC,CAAC;QAEXyY,GAAG,CAACxY,IAAI,CAAC,UAASC,IAAI,EAAC;UACnBH,CAAC,CAACO,SAAS,CAAC,CAAC;UAEb,IAAIJ,IAAI,IAAIA,IAAI,CAACC,IAAI,IAAID,IAAI,CAACC,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAE;YAC3C;YACA,IAAI41L,KAAK,GAAG/3L,IAAI,CAACC,IAAI,CAACyQ,IAAI,CAAC,IAAI,CAAC;YAChC3U,MAAM,CAACmZ,YAAY,CAAC6iL,KAAK,CAAC;YAE1Bh8L,MAAM,CAACiZ,SAAS,GACZ,gLAAgL;UACxL,CAAC,MAAM;YACHjZ,MAAM,CAACkZ,WAAW,GAAG,iHAAiH;UAC1I;QAEJ,CAAC,CAAC,SAAM,CAAC,UAAS/U,GAAG,EAAE;UACnBL,CAAC,CAACO,SAAS,CAAC,CAAC;UACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC/B,CAAC,CAAC;MACN;IACJ,CAAC,MAAM,IAAInE,MAAM,CAAC4Z,sBAAsB,IAAI,CAAC,EAAE;MAC3C9V,CAAC,CAACC,OAAO,CAAC,CAAC;MAEX,OAAO44C,gBAAgB,CAClBs/I,uBAAuB,CACpBj8L,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAC9B1zB,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EACxBpD,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,EAC3BvV,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,EAChC1d,MAAM,CAAC4Y,cAAc,CAACkF,OAAO,EAC7B9d,MAAM,CAAC4Y,cAAc,CAACgF,UAAU,EAChC5d,MAAM,CAAC4Y,cAAc,CAACyD,SAAS,EAC/Brc,MAAM,CAAC4Y,cAAc,CAAC8iL,YAC1B,CAAC,CACA13L,IAAI,CAAC,UAASwL,CAAC,EAAE;QACd1L,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACkZ,WAAW,GAAG,UAAU,GAAGlZ,MAAM,CAAC4Y,cAAc,CAAC4B,OAAO,GAAG,4CAA4C,GAAIxa,MAAM,CAAC4Y,cAAc,CAACrD,KAAM;QAC9IvV,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,GAAG,IAAI;QAC/B,OAAOwU,YAAY,CAACmD,QAAQ,CAAC,CAAC;MAClC,CAAC,CAAC,SACI,CAAC,UAAS5W,GAAG,EAAE;QACjByT,YAAY,CAACkD,OAAO,CAAC,CAAC;QACtBhX,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV;EACJ,CAAC;EAEDnE,MAAM,CAACk8L,iBAAiB,GAAG,UAASxhL,OAAO,EAAE;IACzC,OAAOiiC,gBAAgB,CAClBriB,MAAM,CAACt6B,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAAEhZ,OAAO,CAAC,CAC/C1W,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChB,IAAIA,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAACzkD,MAAM,IAAI,CAAC,EAAE;QAC3BpG,MAAM,CAACmZ,YAAY,CAACnZ,MAAM,CAAC+Z,YAAY,CAAC,CAAC,GAAGW,OAAO,GAAGO,MAAM,CAACC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;MACtF,CAAC,MAAM;QACJlb,MAAM,CAAC06L,yBAAyB,CAAC,CAAC;QAEjC,OAAO/9I,gBAAgB,CAClBs/I,uBAAuB,CACpBj8L,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAC9BrqB,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAAC,CAAC,CAAC,CAACznD,EAAE,EACnB,CAAC,EACDpD,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,EAChC1d,MAAM,CAAC4Y,cAAc,CAACkF,OAAO,EAC7B9d,MAAM,CAAC4Y,cAAc,CAACgF,UAAU,EAChC5d,MAAM,CAAC4Y,cAAc,CAACyD,SAC1B,CAAC,SACK,CAAC,UAASlY,GAAG,EAAE;UACjBnE,MAAM,CAACmZ,YAAY,CAACnZ,MAAM,CAAC+Z,YAAY,CAAC,CAAC,GAAGW,OAAO,GAAGO,MAAM,CAACC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtF,CAAC,CAAC;MACV;IACJ,CAAC,CAAC,SACI,CAAC,UAAS/W,GAAG,EAAE;MACjBnE,MAAM,CAACmZ,YAAY,CAACnZ,MAAM,CAAC+Z,YAAY,CAAC,CAAC,GAAGW,OAAO,GAAGO,MAAM,CAACC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC;EACV,CAAC;EAEDlb,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EAAE,UAASC,QAAQ,EAAEC,QAAQ,EAAE;IACjE,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACiZ,SAAS,GAAG,IAAI;MACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;MACzBlZ,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;MAC1B5Y,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;MAC7BpZ,MAAM,CAACiY,iBAAiB,GAAG,EAAE;MAE7B,QAAQtP,QAAQ;QACZ,KAAK,CAAC;UAAE;UACJ;QACJ,KAAK,CAAC;UACF;QACJ,KAAK,CAAC;UACF7E,CAAC,CAAC,kBAAkB,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;UAC7B;MACR;IACJ;EACJ,CAAC,CAAC;EAEFhJ,MAAM,CAACm8L,iBAAiB,GAAG,UAASjiL,GAAG,EAAE;IACrC;;IAEA,IAAIla,MAAM,CAAC4Z,sBAAsB,IAAI,CAAC,EAAE;MACpC;MACA9V,CAAC,CAACC,OAAO,CAAC,CAAC;MAEX,IAAImW,GAAG,CAACsa,aAAa,IAAI,MAAM,IAAI,CAAC,CAACta,GAAG,CAAC4D,OAAO,EAAE;QAC9C,OAAO6+B,gBAAgB,CAClBs/I,uBAAuB,CAACj8L,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAAExZ,GAAG,CAAC9W,EAAE,EAAE,CAAC,EAAEpD,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,EAAExD,GAAG,CAAC4D,OAAO,EAAE5D,GAAG,CAAC0D,UAAU,EAAE1D,GAAG,CAACmC,SAAS,CAAC,CAChJrY,IAAI,CAAC,UAASwL,CAAC,EAAE;UACd1L,CAAC,CAACO,SAAS,CAAC,CAAC;UACbrE,MAAM,CAACkZ,WAAW,GAAG,UAAU,GAAGgB,GAAG,CAACM,OAAO,GAAG,4CAA4C,IAAIN,GAAG,CAAC0B,UAAU,GAAG,CAAC,CAAC;UACnH,OAAOhE,YAAY,CAACmD,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,SACI,CAAC,UAAS5W,GAAG,EAAE;UACjByT,YAAY,CAACkD,OAAO,CAAC,CAAC;UACtBhX,CAAC,CAACO,SAAS,CAAC,CAAC;UACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC/B,CAAC,CAAC,WACM,CAAC,YAAW;UAChBnE,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;UAC7BpZ,MAAM,CAACiY,iBAAiB,GAAG,EAAE;QACjC,CAAC,CAAC;MACV,CAAC,MAAM;QACHnU,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACgb,kBAAkB,CAACd,GAAG,CAAC;QAC9B;QACAla,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;QAC7BpZ,MAAM,CAACiY,iBAAiB,GAAG,EAAE;QAC7BjY,MAAM,CAACkZ,WAAW,GAAG,sCAAsC;MAC/D;IACJ,CAAC,MAAM,IAAIlZ,MAAM,CAAC4Z,sBAAsB,IAAI,CAAC,EAAE;MAC3C5Z,MAAM,CAACiZ,SAAS,GAAG,IAAI;MACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;MACzBlZ,MAAM,CAACgb,kBAAkB,CAACd,GAAG,CAAC;MAC9Bla,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;MAC7BpZ,MAAM,CAACiY,iBAAiB,GAAG,EAAE;IACjC;EACJ,CAAC;EAEDjY,MAAM,CAACoa,WAAW,GAAG,UAAS9X,KAAK,EAAE;IACjC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpB,IAAIwJ,CAAC,GAAG5Q,CAAC,CAAC,kBAAkB,CAAC,CAACkF,GAAG,CAAC,CAAC;MACnC,IAAI,CAAC,CAAC0L,CAAC,IAAIA,CAAC,CAACtO,MAAM,GAAG,CAAC,EAAE;QACrBnG,UAAU,CAAC+K,UAAU,CAAC,cAAc,EAAE0J,CAAC,CAAC;MAC5C;IACJ;EACJ,CAAC;EAED1U,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,UAASC,KAAK,EAAEoY,OAAO,EAAE;IAChD1V,OAAO,CAACC,GAAG,CAAC,+BAA+B,CAAC;IAC7C;;IAEC,IAAIjF,MAAM,CAAC4Z,sBAAsB,IAAI,CAAC,IAAI5Z,MAAM,CAAC0Y,gBAAgB,EAAE;MAC/D1Y,MAAM,CAACiZ,SAAS,GAAG,IAAI;MACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;MACzBlZ,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;MAC1B5Y,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;MAC7BpZ,MAAM,CAACiY,iBAAiB,GAAG,EAAE;MAE7BnU,CAAC,CAACC,OAAO,CAAC,CAAC;MACX44C,gBAAgB,CAACriB,MAAM,CAACt6B,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAAEhZ,OAAO,CAAC,CAC3D1W,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAIA,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAACzkD,MAAM,KAAK,CAAC,EAAE;UAC5BtC,CAAC,CAACO,SAAS,CAAC,CAAC;UACb;UACA,IAAIuW,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,iDAAiD,CAAC;UACrFvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;YACnC6P,OAAO,EAAED,GAAG;YACZtM,IAAI,EAAE;UACV,CAAC,CAAC;UAEF,OAAOsJ,YAAY,CAACkD,OAAO,CAAC,CAAC;QACjC,CAAC,MAAM,IAAI9a,MAAM,CAAC4Z,sBAAsB,IAAI,CAAC,EAAE;UAC3C,IAAIvQ,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAACzkD,MAAM,GAAG,CAAC,IAAKiD,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAAC,CAAC,CAAC,IAAIxhD,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAAC,CAAC,CAAC,CAACr2B,aAAa,KAAK,MAAM,IACvCnrB,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAAC,CAAC,CAAC,CAAC/sC,OAAO,IACxBzU,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAAC,CAAC,CAAC,CAAC/sC,OAAO,CAACvG,WAAW,CAAC,CAAC,KAAKmD,OAAO,CAACnD,WAAW,CAAC,CAAE,EAAE;YACtHzT,CAAC,CAACO,SAAS,CAAC,CAAC;YACbrE,MAAM,CAACkZ,WAAW,GAAG,4DAA4D;YACjFlZ,MAAM,CAACq7L,eAAe,CAAChyL,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAAC;YACrC,OAAOjzC,YAAY,CAACkD,OAAO,CAAC,CAAC;UACjC,CAAC,MAAM;YACH9a,MAAM,CAACgb,kBAAkB,CAAC3R,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3C7qD,MAAM,CAAC06L,yBAAyB,CAAC,CAAC;YAElC,IAAI,CAAC16L,MAAM,CAAC4Y,cAAc,CAAC4b,aAAa,IAAI,MAAM,IAAI,CAAC,CAACx0B,MAAM,CAAC4Y,cAAc,CAACkF,OAAO,KACjF9d,MAAM,CAAC4Y,cAAc,CAACiD,cAAc,GAAG,CAAC,EAAE;cAC1C,OAAO8gC,gBAAgB,CAClBs/I,uBAAuB,CACpBj8L,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAC9B1zB,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EACxB,CAAC,EACDpD,MAAM,CAAC4Y,cAAc,CAAC8E,UAAU,EAChC1d,MAAM,CAAC4Y,cAAc,CAACkF,OAAO,EAC7B9d,MAAM,CAAC4Y,cAAc,CAACgF,UAAU,EAChC5d,MAAM,CAAC4Y,cAAc,CAACyD,SAC1B,CAAC,CACArY,IAAI,CAAC,UAASwL,CAAC,EAAE;gBACd1L,CAAC,CAACO,SAAS,CAAC,CAAC;gBACbrE,MAAM,CAACkZ,WAAW,GAAG,UAAU,GAAGwB,OAAO,GAAG,4CAA4C,IAAI1a,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC,CAAC;gBACjI5b,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,GAAG,IAAI;gBAC/B,OAAOwU,YAAY,CAACmD,QAAQ,CAAC,CAAC;cAClC,CAAC,CAAC,SACI,CAAC,UAAS5W,GAAG,EAAE;gBACjByT,YAAY,CAACkD,OAAO,CAAC,CAAC;gBACtBhX,CAAC,CAACO,SAAS,CAAC,CAAC;gBACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;cAC/B,CAAC,CAAC;YACV,CAAC,MAAM;cACH;cACAL,CAAC,CAACO,SAAS,CAAC,CAAC;cACbrE,MAAM,CAACkZ,WAAW,GAAG,sCAAsC;cAC3D,OAAOtB,YAAY,CAACkD,OAAO,CAAC,CAAC;YACjC;UACJ;QACJ,CAAC,MAAM;UACH;AAC5B;AACA;AACA;AACA;UACgChX,CAAC,CAACO,SAAS,CAAC,CAAC;UACbrE,MAAM,CAACkZ,WAAW,GAAG,4DAA4D;UACjFlZ,MAAM,CAACq7L,eAAe,CAAChyL,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,CAAC;UACrC,OAAOjzC,YAAY,CAACkD,OAAO,CAAC,CAAC;UACjC;QACJ;MACJ,CAAC,CAAC,SACI,CAAC,UAAS3W,GAAG,EAAE;QACjByT,YAAY,CAACkD,OAAO,CAAC,CAAC;QACtBhX,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV,CAAC,MAAM,IAAInE,MAAM,CAAC4Z,sBAAsB,IAAI,CAAC,IAAI5Z,MAAM,CAAC0Y,gBAAgB,EAAE;MACtElY,QAAQ,CAAC,YAAW;QAChB,IAAIkU,CAAC,GAAG1U,MAAM,CAAC+Z,YAAY,CAAC,CAAC;QAC7BjW,CAAC,CAAC,WAAW,CAAC,CACTsB,KAAK,CAAC,CAAC,CACP4D,GAAG,CAAC,EAAE,CAAC,CACPA,GAAG,CAAC0L,CAAC,CAAC;QACX1U,MAAM,CAACmZ,YAAY,CAACzE,CAAC,GAAGgG,OAAO,GAAGO,MAAM,CAACC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;MAClE,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;EAEFlb,MAAM,CAACy0H,iBAAiB,GAAG,YAAW;IAClC3wH,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI2wH,SAAS,GAAGr0H,aAAa,CAACmqB,2BAA2B,CAACxqB,MAAM,CAACs6L,gBAAgB,CAACM,WAAW,CAACpuI,IAAI,EAAE,uBAAuB,CAAC;IAE5H,OAAO7P,gBAAgB,CAClB83E,iBAAiB,CAACz0H,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,EAAEghG,SAAS,CAAC,CAC5D1wH,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MACf;MACAxjH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC,CAAC,CAAC,SACI,CAAC,UAAS7G,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC20H,eAAe,GAAG,YAAW;IAChC7wH,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAO44C,gBAAgB,CAClBg4E,eAAe,CAAC30H,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,CAAC,CAC/C1vB,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MACf;MACAxjH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC,CAAC,CAAC,SACI,CAAC,UAAS7G,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC40H,aAAa,GAAG,YAAW;IAC9B9wH,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAO44C,gBAAgB,CAClBi4E,aAAa,CAAC50H,MAAM,CAACs6L,gBAAgB,CAAC5mK,MAAM,CAAC,CAC7C1vB,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MACf;MACAxjH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC,CAAC,CAAC,SACI,CAAC,UAAS7G,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACo8L,wBAAwB,GAAG,YAAW;IACzCp8L,MAAM,CAACsuL,UAAU,GAAG,UAAU;IAC9B,IAAIzzK,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,4BAA4B,CAAC,GAAG,OAAO,GAAGxB,MAAM,CAACs6L,gBAAgB,CAAC1wL,IAAI,GAAG,OAAO,GAAEnJ,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;IAC/JnB,aAAa,CAACq6B,gBAAgB,CAC1Bj6B,cAAc,CAACe,SAAS,CAAC,oBAAoB,CAAC,EAC9CqZ,OAAO,EACPpa,cAAc,CAACe,SAAS,CAAC,UAAU,CACvC,CAAC;EACL,CAAC;EAEDxB,MAAM,CAACq8L,yBAAyB,GAAG,UAASniL,GAAG,EAAE;IAC7Cla,MAAM,CAAC26L,uBAAuB,CAACzgL,GAAG,CAAC;IACnCla,MAAM,CAACo8L,wBAAwB,CAAC,CAAC;EACrC,CAAC;EAEDp8L,MAAM,CAACs8L,uBAAuB,GAAG,UAASpiL,GAAG,EAAE;IAC3Cla,MAAM,CAAC26L,uBAAuB,CAACzgL,GAAG,CAAC;IACnCla,MAAM,CAACu8L,sBAAsB,CAAC,CAAC;EACnC,CAAC;EAEDv8L,MAAM,CAACw8L,qBAAqB,GAAG,UAAStiL,GAAG,EAAE;IACzCla,MAAM,CAAC26L,uBAAuB,CAACzgL,GAAG,CAAC;IACnCla,MAAM,CAACy8L,oBAAoB,CAAC,CAAC;EACjC,CAAC;EAEDz8L,MAAM,CAACu8L,sBAAsB,GAAG,YAAW;IACvCv8L,MAAM,CAACsuL,UAAU,GAAG,QAAQ;IAE5B,IAAIzzK,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,0BAA0B,CAAC,GAAG,OAAO,GAAGxB,MAAM,CAACs6L,gBAAgB,CAAC1wL,IAAI,GAAG,OAAO,GAAEnJ,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;IAE7JnB,aAAa,CAACq6B,gBAAgB,CAC1Bj6B,cAAc,CAACe,SAAS,CAAC,kBAAkB,CAAC,EAC5CqZ,OAAO,EACPpa,cAAc,CAACe,SAAS,CAAC,KAAK,CAClC,CAAC;EACL,CAAC;EAEDxB,MAAM,CAACy8L,oBAAoB,GAAG,YAAW;IACrCz8L,MAAM,CAACsuL,UAAU,GAAG,MAAM;IAE1B,IAAIzzK,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,wBAAwB,CAAC,GAAG,OAAO,GAAGxB,MAAM,CAACs6L,gBAAgB,CAAC1wL,IAAI,GAAG,OAAO,GAAGnJ,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;IAE5JnB,aAAa,CAACq6B,gBAAgB,CAC1Bj6B,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC,EAC1CqZ,OAAO,EACPpa,cAAc,CAACe,SAAS,CAAC,MAAM,CACnC,CAAC;EACL,CAAC;EAEDxB,MAAM,CAAC08L,mBAAmB,GAAG,YAAU;IACnC,IAAI/kI,KAAK,GAAG33D,MAAM,CAACiY,iBAAiB,CAAC,CAAC,CAAC;IAEvC,IAAI0kL,gBAAgB,GAAG;MACnBniL,OAAO,EAAGm9C,KAAK,CAACn9C,OAAO;MACvBsD,OAAO,EAAE,IAAI;MACbq7B,QAAQ,EAAE,IAAI;MACd3kB,aAAa,EAAEmjC,KAAK,CAACnjC,aAAa;MAClC5W,UAAU,EAAE,IAAI;MAChBxa,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;MACnB0uK,UAAU,EAAE,IAAI;MAChBl/K,UAAU,EAAE1d,MAAM,CAACs6L,gBAAgB,CAACnB,cAAc;MAClDyC,YAAY,EAAE57L,MAAM,CAACs6L,gBAAgB,CAAClB,gBAAgB;MACtD12L,IAAI,EAAEi1D,KAAK,CAACj1D,IAAI;MAChB+X,WAAW,EAAEk9C,KAAK,CAACl9C,WAAW;MAC9B4B,SAAS,EAAEs7C,KAAK,CAACt7C,SAAS;MAC1BwgL,QAAQ,EAAE,CAAC;MACXhhL,cAAc,EAAE,CAAC;MACjBD,UAAU,EAAE;IAChB,CAAC;IAED5b,MAAM,CAACm8L,iBAAiB,CAACQ,gBAAgB,CAAC;EAC9C,CAAC;AACL,CAAC,CACJ,CAAC,C;;;;;;;;;;ACxxCF78L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,kBAAkB,EACjD,CAAC,SAAS,EAAE,eAAe,EAAE,uBAAuB,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAC1F,UAAU1iD,cAAc,EAAEJ,aAAa,EAAE+vB,qBAAqB,EAAElwB,aAAa,EAAES,EAAE,EAAE0vB,eAAe,EAAE;EAEhG,IAAIssB,gBAAgB,GAAG,CAAC,CAAC;;EAEzB;EACAA,gBAAgB,CAACylE,OAAO,GAAG,YAAY;IACnC,IAAI3xF,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACmjG,gBAAgB,CAAC,CAAC;EACtC,CAAC;EAEDj3E,gBAAgB,CAACq+I,eAAe,GAAG,UAAUxtI,UAAU,EAAE;IACrD,IAAI/8B,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACmjG,gBAAgB,CAAC;MAAEpmE,UAAU,EAAEA;IAAW,CAAC,CAAC;EAChE,CAAC;EAED7Q,gBAAgB,CAACo3E,iBAAiB,GAAG,UAAU34F,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAE;IACzE,IAAIryF,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACsjG,iBAAiB,CAAC34F,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,CAAC;EACnE,CAAC;EAEDnmE,gBAAgB,CAAC2iD,UAAU,GAAG,UAAUlkF,GAAG,EAAElT,IAAI,EAAEmzB,KAAK,EAAE;IACtD,IAAI,CAACnzB,IAAI,IAAIA,IAAI,CAAC9B,MAAM,IAAI,CAAC,EACzB,OAAO1F,iBAAiB,CAACwD,IAAI;IAEjC,IAAI,CAACm3B,KAAK,EAAEA,KAAK,GAAG,EAAE;IAEtBnzB,IAAI,GAAGA,IAAI,CAACqP,WAAW,CAAC,CAAC;IACzB,IAAIgoF,OAAO,GAAG,CAAC;IACf,IAAIC,EAAE,GAAG,EAAE;IAEX,KAAK,IAAIhrF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,GAAG,CAAChV,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACjC,IAAI5U,EAAE,GAAGwb,GAAG,CAAC5G,CAAC,CAAC;MAEf,IAAI+qF,OAAO,IAAIlkE,KAAK,EAChB;MAEJ,IAAIokE,GAAG,GAAIF,OAAO,GAAGlkE,KAAK,IAAMz7B,EAAE,CAACgK,IAAI,CAAC2N,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACnH,IAAI,CAAC,IAAI,CAAE;MAEzE,IAAIu3F,GAAG,IAAI,IAAI,EAAE;QACbF,OAAO,EAAE;QAETC,EAAE,CAACn5F,IAAI,CAACzG,EAAE,CAACgK,IAAI,CAAC;MACpB;IACJ;IAEA,OAAO41F,EAAE;EACb,CAAC;EAED7iD,gBAAgB,CAACi9I,cAAc,GAAG,UAAUx+K,GAAG,EAAElT,IAAI,EAAEshE,GAAG,EAAE;IACxD,IAAIszH,MAAM,GAAG,IAAI;IAEjBh9L,OAAO,CAAC4M,OAAO,CAAC88D,GAAG,EAAE,UAAU/7D,CAAC,EAAE;MAC9B,IAAIA,CAAC,CAAC8J,WAAW,CAAC,CAAC,IAAIrP,IAAI,CAACqP,WAAW,CAAC,CAAC,EAAE;QACvCulL,MAAM,GAAG,KAAK;QACd,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEF,IAAIA,MAAM,EAAE;MACRtzH,GAAG,CAACnjE,IAAI,CAAC6B,IAAI,CAAC;IAClB;EACJ,CAAC;EAEDy0C,gBAAgB,CAAC09I,mBAAmB,GAAG,UAAUj/K,GAAG,EAAElT,IAAI,EAAE;IACxD,KAAK,IAAIsM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,GAAG,CAAChV,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACjC,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAC+C,WAAW,CAAC,CAAC,IAAIrP,IAAI,CAACqP,WAAW,CAAC,CAAC,EAAE;QAC5C6D,GAAG,CAAC9L,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;QAChB;MACJ;IACJ;EACJ,CAAC;EAEDmoC,gBAAgB,CAAC88I,UAAU,GAAG,UAAUv1L,IAAI,EAAEkhH,KAAK,EAAE;IACjD,IAAI30F,QAAQ,GAAGL,qBAAqB;IAEpC,IAAI1b,CAAC,GAAG;MACJgf,MAAM,EAAE,CAAC0xF,KAAK,GAAGlhH,IAAI,CAACwvB,MAAM,GAAG,IAAI;MACnC9pB,IAAI,EAAE1F,IAAI,CAAC0F,IAAI;MACfmzL,qBAAqB,EAAE74L,IAAI,CAACw0L,UAAU;MACtCD,QAAQ,EAAEv0L,IAAI,CAACu0L,QAAQ;MACvBh5I,QAAQ,EAAEv7C,IAAI,CAACu7C,QAAQ;MACvB2zC,OAAO,EAAElvF,IAAI,CAACkvF,OAAO;MACrBjlE,QAAQ,EAAEjuB,aAAa,CAAC+rB,YAAY;MACpCovB,gBAAgB,EAAE3jB,IAAI,CAACC,SAAS,CAAC;QAC7By/C,UAAU,EAAElzE,IAAI,CAACkzE,UAAU;QAC3BD,MAAM,EAAEjzE,IAAI,CAACizE,MAAM;QACnBE,IAAI,EAAEnzE,IAAI,CAACmzE;MACf,CAAC;IACL,CAAC;IAED,IAAI+tC,KAAK,EACL,OAAO30F,QAAQ,CAACojG,gBAAgB,CAACn/G,CAAC,CAAC,CAAC,KAEpC,OAAO+b,QAAQ,CAACqjG,eAAe,CAACp/G,CAAC,CAAC;EAC1C,CAAC;EAEDioC,gBAAgB,CAACq3E,eAAe,GAAG,UAAUtgG,MAAM,EAAE;IACjD,IAAIjD,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACujG,eAAe,CAACtgG,MAAM,CAAC;EAC3C,CAAC;EAEDipB,gBAAgB,CAACs3E,cAAc,GAAG,UAAUvgG,MAAM,EAAE;IAChD,IAAIjD,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACwjG,cAAc,CAACvgG,MAAM,CAAC;EAC1C,CAAC;EAEDipB,gBAAgB,CAACu3E,aAAa,GAAG,UAAUxgG,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAEynF,OAAO,EAAEjiH,UAAU,EAAEm8L,cAAc,EAAE;IACjG,IAAIvsK,QAAQ,GAAGL,qBAAqB;IACpC,IAAI,CAACvvB,UAAU,EACXA,UAAU,GAAG,IAAI;IAErB,OAAO4vB,QAAQ,CAACyjG,aAAa,CAACxgG,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAEynF,OAAO,EAAEjiH,UAAU,EAAEm8L,cAAc,KAAK,IAAI,GAAG,UAAU,GAAG,EAAE,CAAC,CAC7Gh5L,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,OAAOszC,gBAAgB,CAACsgJ,YAAY,CAAC5zL,GAAG,CAAC;IAC7C,CAAC,CAAC;EACV,CAAC;EAEDszC,gBAAgB,CAAC8+I,uBAAuB,GAAG,UAAU/nK,MAAM,EAAE2gG,MAAM,EAAE9+G,KAAK,EAAEi4C,UAAU,EAAE8mE,OAAO,EAAEC,UAAU,EAAEtoC,SAAS,EAAEuoC,YAAY,EAAE;IAClI,IAAI/jG,QAAQ,GAAGL,qBAAqB;IAEpC,IAAIo8B,IAAI,GAAGnsD,aAAa,CAACwyE,gCAAgC,CAAC0hD,UAAU,CAAC;IACrE,IAAI2oE,gBAAgB,GAAG78L,aAAa,CAACwyE,gCAAgC,CAAC2hD,YAAY,CAAC;IACnF,OAAO/jG,QAAQ,CAAC2jG,mBAAmB,CAAC1gG,MAAM,EAAE2gG,MAAM,EAAE,IAAI,EAAE9+G,KAAK,EAAEi4C,UAAU,EAAE8mE,OAAO,EAAE9nE,IAAI,EAAEy/B,SAAS,EAAEixG,gBAAgB,CAAC;EAC5H,CAAC;EAEDvgJ,gBAAgB,CAACs/I,uBAAuB,GAAG,UAAUvoK,MAAM,EAAE2gG,MAAM,EAAE8oE,QAAQ,EAAE3vI,UAAU,EAAE8mE,OAAO,EAAEC,UAAU,EAAEtoC,SAAS,EAAEuoC,YAAY,EAAE;IACrI,IAAI/jG,QAAQ,GAAGL,qBAAqB;IAEpC,IAAIo8B,IAAI,GAAGnsD,aAAa,CAACwyE,gCAAgC,CAAC0hD,UAAU,CAAC;IACrE,IAAI2oE,gBAAgB,GAAG78L,aAAa,CAACwyE,gCAAgC,CAAC2hD,YAAY,CAAC;IACnF,OAAO/jG,QAAQ,CAAC2jG,mBAAmB,CAAC1gG,MAAM,EAAE2gG,MAAM,EAAE,KAAK,EAAE8oE,QAAQ,EAAE3vI,UAAU,EAAE8mE,OAAO,EAAE9nE,IAAI,EAAEy/B,SAAS,EAAEixG,gBAAgB,CAAC;EAChI,CAAC;EAEDvgJ,gBAAgB,CAACriB,MAAM,GAAG,UAAU5G,MAAM,EAAExrB,IAAI,EAAE;IAC9C,IAAIuoB,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACyjG,aAAa,CAACxgG,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAExrB,IAAI,CAAC,CACnDlE,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,OAAOszC,gBAAgB,CAACsgJ,YAAY,CAAC5zL,GAAG,CAAC;IAC7C,CAAC,CAAC;EACV,CAAC;EAEDszC,gBAAgB,CAACsgJ,YAAY,GAAG,UAAU5zL,GAAG,EAAE;IAC3C,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC,CAACnC,GAAG,IAAI,CAAC,CAACA,GAAG,CAACnF,IAAI,IAAI,CAAC,CAACmF,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,EAAE;MACxC/qD,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,CAAC2mD,IAAI,EAAE,UAAUjrD,EAAE,EAAE;QACzC,IAAIA,EAAE,CAACge,UAAU,IAAI,IAAI,EAAE;UACvBhe,EAAE,CAACge,UAAU,GAAGvd,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAACge,UAAU,CAAC;QACxE;QACA,IAAIhe,EAAE,CAAC87L,YAAY,IAAI,IAAI,EAAE;UACzB97L,EAAE,CAAC87L,YAAY,GAAGr7L,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAAC87L,YAAY,CAAC;QAC5E;MACJ,CAAC,CAAC;IACN;IAEAnwL,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;IACrB,OAAOkC,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAEDixC,gBAAgB,CAAC83E,iBAAiB,GAAG,UAAU/gG,MAAM,EAAEghG,SAAS,EAAE;IAC9D,IAAIjkG,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACgkG,iBAAiB,CAAC/gG,MAAM,EAAEghG,SAAS,CAAC;EACxD,CAAC;EAED/3E,gBAAgB,CAACg4E,eAAe,GAAG,UAAUjhG,MAAM,EAAE;IACjD,IAAIjD,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACkkG,eAAe,CAACjhG,MAAM,CAAC;EAC3C,CAAC;EAEDipB,gBAAgB,CAACi4E,aAAa,GAAG,UAAUlhG,MAAM,EAAE;IAC/C,IAAIjD,QAAQ,GAAGL,qBAAqB;IAEpC,OAAOK,QAAQ,CAACmkG,aAAa,CAAClhG,MAAM,CAAC;EACzC,CAAC;;EAED;EACAipB,gBAAgB,CAACygJ,qBAAqB,GAAG,UAAUv8L,UAAU,EAAEu6B,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAE;IACzF,IAAIryF,QAAQ,GAAGJ,eAAe;IAE9B,OAAOI,QAAQ,CAAC2sK,qBAAqB,CAACv8L,UAAU,EAAEu6B,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,CAAC;EACnF,CAAC;EAEDnmE,gBAAgB,CAAC0gJ,wBAAwB,GAAG,YAAY;IACpD,IAAI9yI,IAAI,GAAG;MACPr4B,MAAM,EAAEhyB,aAAa,CAACmkC,WAAW;MACjCy+F,QAAQ,EAAE;IACd,CAAC;IAED,OAAOzyG,eAAe,CAAC0yG,8BAA8B,CAACx4E,IAAI,CAAC;EAC/D,CAAC;EAED5N,gBAAgB,CAACuB,uCAAuC,GAAG,YAAY;IACnE,IAAIqM,IAAI,GAAG;MACPr4B,MAAM,EAAEhyB,aAAa,CAACmkC,WAAW;MACjCy+F,QAAQ,EAAE;IACd,CAAC;IAED,OAAOzyG,eAAe,CAAC0yG,8BAA8B,CAACx4E,IAAI,CAAC;EAC/D,CAAC;EAED5N,gBAAgB,CAACuO,qCAAqC,GAAG,YAAY;IACjE,IAAIX,IAAI,GAAG;MACPr4B,MAAM,EAAEhyB,aAAa,CAACmkC,WAAW;MACjCy+F,QAAQ,EAAE;IACd,CAAC;IAED,OAAOzyG,eAAe,CAAC0yG,8BAA8B,CAACx4E,IAAI,CAAC;EAC/D,CAAC;EAED5N,gBAAgB,CAAC2gJ,wBAAwB,GAAG,UAAU5pK,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAE;IACxF,IAAIryF,QAAQ,GAAGJ,eAAe;IAE9B,OAAOI,QAAQ,CAAC6sK,wBAAwB,CAAC5pK,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,CAAC;EAElF,CAAC;EAEDnmE,gBAAgB,CAACozI,qBAAqB,GAAG,UAAUviI,UAAU,EAAE;IAC3D,IAAIjD,IAAI,GAAG;MACPiD,UAAU,EAAEA,UAAU;MACtBs1E,QAAQ,EAAE;IACd,CAAC;IAED,OAAOzyG,eAAe,CAAC0yG,8BAA8B,CAACx4E,IAAI,CAAC;EAC/D,CAAC;EAED5N,gBAAgB,CAAC0zI,mBAAmB,GAAG,UAAUC,IAAI,EAAE;IACnD,IAAI9zK,GAAG,GAAG,CAAC,CAAC;IACZA,GAAG,CAAC+zK,cAAc,GAAGD,IAAI,CAACE,cAAc;IACxCh0K,GAAG,CAACi0K,YAAY,GAAGH,IAAI,CAACI,YAAY;IACpCl0K,GAAG,CAACyyK,cAAc,GAAG5uL,aAAa,CAACmyE,0BAA0B,CAAC89G,IAAI,CAAC9jI,IAAI,CAAC;IACxEhwC,GAAG,CAACm0K,aAAa,GAAGzwL,aAAa,CAAC+rB,YAAY;IAC9CzP,GAAG,CAAC2iC,OAAO,GAAG,EAAE;IAEhBr/C,OAAO,CAAC4M,OAAO,CAAC4jL,IAAI,CAACpsL,IAAI,EAAE,UAAUtE,EAAE,EAAE;MACrC,IAAIixL,GAAG,GAAG,IAAI;MACd,IAAIjxL,EAAE,CAACwD,EAAE,CAACiM,OAAO,CAACzP,EAAE,CAACyc,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,EACvCw0K,GAAG,GAAGjxL,EAAE,CAACwD,EAAE;MACf,IAAI0tL,GAAG,GAAG;QACN1tL,EAAE,EAAEytL,GAAG;QACPx0K,SAAS,EAAEzc,EAAE,CAACyc,SAAS;QACvBR,cAAc,EAAEjc,EAAE,CAACic,cAAc;QACjCG,iBAAiB,EAAEpc,EAAE,CAACoc,iBAAiB;QACvC+0K,gBAAgB,EAAEnxL,EAAE,CAACmxL,gBAAgB;QACrCjzK,OAAO,EAAEle,EAAE,CAACke,OAAO;QACnBF,UAAU,EAAE,CAAC,CAAChe,EAAE,CAACge,UAAU,GAAGvd,aAAa,CAACmyE,0BAA0B,CAAC5yE,EAAE,CAAC4sD,IAAI,CAAC,GAAG;MACtF,CAAC;MAEDhwC,GAAG,CAAC2iC,OAAO,CAAC94C,IAAI,CAACyqL,GAAG,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,CAACR,IAAI,CAAC58J,MAAM,EAAE;MACdlX,GAAG,CAAC4Z,MAAM,GAAG,IAAI;MACjB;MACA,OAAO/F,eAAe,CAACktK,oBAAoB,CAAC/gL,GAAG,CAAC;IACpD,CAAC,MACI;MACD;MACAA,GAAG,CAAC4Z,MAAM,GAAGk6J,IAAI,CAAC58J,MAAM;MACxB,OAAOrD,eAAe,CAACmtK,mBAAmB,CAAChhL,GAAG,CAAC;IACnD;EAGJ,CAAC;EAEDmgC,gBAAgB,CAAC8gJ,iBAAiB,GAAG,UAAU/pK,MAAM,EAAE;IACnD,IAAIA,MAAM,EAAE;MACR,OAAOrD,eAAe,CAACqtK,mBAAmB,CAAChqK,MAAM,CAAC;IACtD,CAAC,MAAM;MACH,IAAInoB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;EACJ,CAAC;EAEDixC,gBAAgB,CAACghJ,qBAAqB,GAAG,UAAUjqK,MAAM,EAAE84B,IAAI,EAAEoxI,WAAW,EAAE;IAC1E,OAAOvtK,eAAe,CAACstK,qBAAqB,CAACjqK,MAAM,EAAE84B,IAAI,EAAEoxI,WAAW,CAAC;EAC3E,CAAC;EAEDjhJ,gBAAgB,CAACkhJ,iBAAiB,GAAG,UAAUnqK,MAAM,EAAE;IACnD,OAAOrD,eAAe,CAACwtK,iBAAiB,CAACnqK,MAAM,CAAC;EACpD,CAAC;EAEDipB,gBAAgB,CAACo/I,iBAAiB,GAAG,UAASroK,MAAM,EAAE85B,UAAU,EAAE00B,YAAY,EAAC;IAC3E,OAAO7xD,eAAe,CAACytK,0BAA0B,CAACpqK,MAAM,EAAE85B,UAAU,EAAE00B,YAAY,CAAC;EACvF,CAAC;EAED,OAAOvlC,gBAAgB;AAC3B,CAAC,CACJ,CAAC,C;;;;;;;;;;;ACxSN78C,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,yBAAyB,EAAE,CAC5D,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,IAAI,EACJ,cAAc,EACd,OAAO,EACP,UAASC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAE/oB,cAAc,EAAEk8C,gBAAgB,EAAEt8C,aAAa,EAAEG,QAAQ,EAAEN,aAAa,EAAEC,YAAY,EAAEyX,YAAY,EAAEjX,EAAE,EAAEkX,YAAY,EAAE8R,KAAK,EAAE;EACtK,IAAI,CAACH,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACA;EACJ;EAEApqB,MAAM,CAACa,UAAU,GAAG,EAAE;EACtBb,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACyb,UAAU,GAAG,OAAO;EAC3Bzb,MAAM,CAAC03L,SAAS,GAAG,GAAG;EACtB13L,MAAM,CAACkhH,SAAS,GAAG,CAAC;EACpBlhH,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACmhH,QAAQ,GAAG,CAAC;EACnBnhH,MAAM,CAACohH,eAAe;EACtBphH,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EACxBlJ,MAAM,CAAC+9L,aAAa,GAAG;IACnBC,kBAAkB,EAAE;EACxB,CAAC;EAEDh+L,MAAM,CAACi0D,SAAS,GAAG5zD,aAAa,CAACuxE,2BAA2B,CAAC,CAAC;EAC9D5xE,MAAM,CAACi0D,SAAS,CAACyd,GAAG,CAAC;IACjBz5D,iBAAiB,EAAE;EACvB,CAAC,CAAC;EAEFjY,MAAM,CAACqZ,UAAU,GAAG,CAAC;EACrBrZ,MAAM,CAACsZ,oBAAoB,GAAG,CAAC;EAC/BtZ,MAAM,CAACghH,KAAK,GAAG;IAAE7jG,MAAM,EAAE9d,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG;EAAK,CAAC;EAChEpC,MAAM,CAACmC,IAAI,GAAG;IAAEgb,MAAM,EAAE9d,MAAM,CAAC+C,WAAW,GAAG,IAAI,GAAG,GAAG,GAAG;EAAK,CAAC;;EAEhE;EACApC,MAAM,CAACi2H,WAAW,GAAG,UAAS12D,UAAU,EAAE;IACtC,IAAI5e,IAAI,GAAG,CAAC,CAAC;IAEb,IAAI,CAAC,CAAC4e,UAAU,CAAC5e,IAAI,CAACu1E,SAAS,EAAE;MAC7Bv1E,IAAI,CAAC4wE,SAAS,GAAGhyD,UAAU,CAAC5e,IAAI,CAACu1E,SAAS;MAC1Cv1E,IAAI,CAAC8wE,SAAS,GAAGlyD,UAAU,CAAC5e,IAAI,CAAC7tC,OAAO,GAAG,MAAM,GAAG,KAAK;IAC7D;IAEAhP,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC6iH,QAAQ,CAACliE,IAAI,CAAC,WAAQ,CAAC,YAAW;MACrC78C,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAED,IAAMy1B,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACmhH,QAAQ,GAAGnhH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAACujH,UAAU,CAACvjH,MAAM,CAACmhH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAED9mF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C,SAASM,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3C,IAAIv6B,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAEAt5B,MAAM,CAACujH,UAAU,GAAG,UAASnoF,IAAI,EAAE;IAC/Bp7B,MAAM,CAACmhH,QAAQ,GAAG/lF,IAAI;IACtBp7B,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;EACvC,CAAC;EAEDhL,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,UAASygH,OAAO,EAAE;IAC3Ch/G,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IAEvBlJ,MAAM,CAAC6iH,QAAQ,CAACC,OAAO,CAAC,WAAQ,CAAC,YAAW;MACxC9iH,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC,CAAC;EAEFrE,MAAM,CAAC6iH,QAAQ,GAAG,UAASC,OAAO,EAAE;IAChCziH,aAAa,CAAC0K,YAAY,CAAC,CAAC;IAC5B,IAAIiS,GAAG,GAAG2/B,gBAAgB,CAACygJ,qBAAqB,CACxCp9L,MAAM,CAACa,UAAU,EACjBb,MAAM,CAACmhH,QAAQ,EACfnhH,MAAM,CAACu5B,WAAW,EAClBv5B,MAAM,CAACyb,UAAU,EACjBqnG,OAAO,CAAC,CAAC9+G,IAAI,CAAC,UAASE,IAAI,EAAE;MAC7B,IAAIlE,MAAM,CAACmhH,QAAQ,KAAK,CAAC,EAAE;QACvBnhH,MAAM,CAAC+9L,aAAa,CAACC,kBAAkB,GAAG,EAAE;MAChD;MAEAh+L,MAAM,CAACkhH,SAAS,GAAGh9G,IAAI,CAACA,IAAI,CAAC60B,KAAK;MAClC/4B,MAAM,CAACmhH,QAAQ,GAAGj9G,IAAI,CAACA,IAAI,CAACg/G,IAAI;MAChC9oF,QAAQ,CAACl2B,IAAI,CAACA,IAAI,CAAC60B,KAAK,CAAC;MAE7Bj5B,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAASjrD,EAAE,EAAE;QACzCA,EAAE,CAAC4sD,IAAI,GAAG5sD,EAAE,CAACqvL,cAAc,GAAG5uL,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAACqvL,cAAc,CAAC,GAAG,EAAE;QAC3FrvL,EAAE,CAACq+L,WAAW,GAAGr+L,EAAE,CAACqvL,cAAc,GAAGrvL,EAAE,CAACqvL,cAAc,GAAG,EAAE;QAC3DrvL,EAAE,CAAC6vL,mBAAmB,GAAG3rL,CAAC,CAACyX,IAAI,CAAC3b,EAAE,CAAC6vL,mBAAmB,CAAC;QACvD7vL,EAAE,CAACs+L,iBAAiB,GAAGp6L,CAAC,CAACyX,IAAI,CAAC3b,EAAE,CAACs+L,iBAAiB,CAAC;QACnDl+L,MAAM,CAAC+9L,aAAa,CAACC,kBAAkB,CAAC33L,IAAI,CAACzG,EAAE,CAAC;MACpD,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,OAAOod,GAAG;EACd,CAAC;EAEDhd,MAAM,CAACm+C,SAAS,GAAG,EAAE;EACrBn+C,MAAM,CAACm+L,cAAc,GAAG,EAAE;EAE1Bn+L,MAAM,CAACo+L,iBAAiB,GAAG,UAAShzI,MAAM,EAAE;IACxCprD,MAAM,CAACm+L,cAAc,GAAGn+L,MAAM,CAACm+C,SAAS,CAACp4C,MAAM,CAAC,UAAS2O,CAAC,EAAE;MACxD,OAAOA,CAAC,CAACgJ,UAAU,IAAI1d,MAAM,CAACq+L,eAAe,CAAC7N,cAAc;IAChE,CAAC,CAAC;IAEF,IAAI,CAAC,CAACplI,MAAM,IAAI,CAAC,CAACprD,MAAM,CAACq+L,eAAe,CAAC7N,cAAc,EAAE;MACrD,IAAI9lI,GAAG,GAAG1qD,MAAM,CAACm+L,cAAc,CAACp4L,MAAM,CAAC,UAAS2O,CAAC,EAAE;QAC/C,OAAOA,CAAC,CAACgJ,UAAU,IAAI0tC,MAAM;MACjC,CAAC,CAAC;MACF,IAAI,CAAC,CAACV,GAAG,IAAIA,GAAG,CAACtkD,MAAM,GAAG,CAAC,EAAEpG,MAAM,CAACq+L,eAAe,CAAC3N,YAAY,GAAGtlI,MAAM,CAAC,KACrEprD,MAAM,CAACq+L,eAAe,CAAC3N,YAAY,GAAG,IAAI;IACnD,CAAC,MAAM,IAAI,CAAC,CAAC1wL,MAAM,CAACm+L,cAAc,IAAIn+L,MAAM,CAACm+L,cAAc,CAAC/3L,MAAM,GAAG,CAAC,IAAI,CAAC,CAACpG,MAAM,CAACq+L,eAAe,CAAC7N,cAAc,EAAE;MAC/G,IAAI,CAAC,CAACxwL,MAAM,CAACq+L,eAAe,CAAC3N,YAAY,EAAE;QACvC,IAAIhmI,GAAG,GAAG1qD,MAAM,CAACm+L,cAAc,CAACp4L,MAAM,CAAC,UAAS2O,CAAC,EAAE;UAC/C,OAAOA,CAAC,CAACgJ,UAAU,IAAI1d,MAAM,CAACq+L,eAAe,CAAC3N,YAAY;QAC9D,CAAC,CAAC;QACF,IAAIhmI,GAAG,CAACtkD,MAAM,IAAI,CAAC,EAAEpG,MAAM,CAACq+L,eAAe,CAAC3N,YAAY,GAAG1wL,MAAM,CAACm+L,cAAc,CAAC,CAAC,CAAC,CAACzgL,UAAU;MAClG,CAAC,MAAM1d,MAAM,CAACq+L,eAAe,CAAC3N,YAAY,GAAG1wL,MAAM,CAACm+L,cAAc,CAAC,CAAC,CAAC,CAACzgL,UAAU;IACpF,CAAC,MAAM;MACH1d,MAAM,CAACq+L,eAAe,CAAC3N,YAAY,GAAG,IAAI;IAC9C;IAEAlwL,QAAQ,CAAC,YAAW;MAChBsD,CAAC,CAAC,QAAQ,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IAClC,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC6rB,MAAM,GAAG,YAAW;IACvB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CACX0gJ,wBAAwB,CAAC,CAAC,CAC1Br5L,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBrJ,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;MACrCr6C,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,YAAW;MACdP,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;EAEDrE,MAAM,CAACoY,iBAAiB,GAAG,IAAI;EAE/BpY,MAAM,CAAC0I,MAAM,CAAC,WAAW,EAAE,UAASC,QAAQ,EAAEC,QAAQ,EAAE;IACpD,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB,QAAQD,QAAQ;QACZ,KAAK,GAAG;UACJ3I,MAAM,CAACyb,UAAU,GAAG,OAAO;UAC3B;QACJ,KAAK,GAAG;UACJzb,MAAM,CAACyb,UAAU,GAAG,WAAW;UAC/B;QACJ,KAAK,GAAG;UACJzb,MAAM,CAACyb,UAAU,GAAG,QAAQ;UAC5B;MACR;MAEAzb,MAAM,CAACmhH,QAAQ,GAAG,CAAC;MACnBnhH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC;EACJ,CAAC,CAAC;;EAEF;EACAxK,QAAQ,CAAC,YAAW;IAChBR,MAAM,CAACmB,IAAI,GAAG,YAAY;IAC1BnB,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACnC9F,WAAW,CAAC,CAAC;EACjB,CAAC,CAAC;EAEFlF,MAAM,CAACqY,gBAAgB,GAAG,IAAI;EAC9BrY,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EAEjEvY,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAS2W,GAAG,EAAE;IACpC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B,CAAC,MAAM;MACHrV,MAAM,CAACgL,UAAU,CAAC,uBAAuB,CAAC;IAC9C;EACJ,CAAC,CAAC;EAEFhL,MAAM,CAACs6B,MAAM,GAAG,UAASh4B,KAAK,EAAE;IAC5B,IAAI,CAACA,KAAK,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MAC9BlL,MAAM,CAACmhH,QAAQ,GAAG,CAAC;MACnBnhH,MAAM,CAACohH,eAAe,GAAG,CAAC;MAC1BphH,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC;EACJ,CAAC;EAEDhL,MAAM,CAACwjH,MAAM,GAAG,YAAW;IACvB,IAAIxjH,MAAM,CAACmB,IAAI,IAAI,KAAK,IAAInB,MAAM,CAACmB,IAAI,IAAI,MAAM,IAAInB,MAAM,CAACmB,IAAI,IAAI,SAAS,EAAE;MAC3EnB,MAAM,CAACmB,IAAI,GAAG,YAAY;IAC9B;IAEA,IAAIm9L,QAAQ,GAAGx6L,CAAC,CAAC,4BAA4B,CAAC;IAC9CzD,aAAa,CAAC+L,WAAW,CAACkyL,QAAQ,CAAC;IAEnCt+L,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;EACvC,CAAC;EAEDhL,MAAM,CAACq+L,eAAe,GAAG,CAAC,CAAC;EAE3Br+L,MAAM,CAACmtD,MAAM,GAAG,YAAW;IACvB,IAAIoxI,OAAO,GAAGv+L,MAAM,CAACm+C,SAAS,CAACp4C,MAAM,CAAC,UAAS2O,CAAC,EAAE;MAC9C,OAAOA,CAAC,CAAC82B,WAAW,IAAItrC,aAAa,CAACiN,YAAY;IACtD,CAAC,CAAC,CAAC,CAAC,CAAC;IAELnN,MAAM,CAACq+L,eAAe,GAAG;MACrB5iL,UAAU,EAAE,OAAO;MACnB+0K,cAAc,EAAE+N,OAAO,CAAC7gL,UAAU;MAClCgzK,YAAY,EAAE,IAAI;MAClBlkI,IAAI,EAAE,IAAI;MACVtoD,IAAI,EAAE,EAAE;MACRywL,WAAW,EAAE;IACjB,CAAC;IAED30L,MAAM,CAACo+L,iBAAiB,CAAC,IAAI,CAAC;IAC9Bp+L,MAAM,CAACmB,IAAI,GAAG,KAAK;IAEnB,IAAIm9L,QAAQ,GAAGx6L,CAAC,CAAC,4BAA4B,CAAC;IAC9CzD,aAAa,CAAC8E,UAAU,CAACm5L,QAAQ,CAAC;IAGlCt+L,MAAM,CAACw+L,gBAAgB,CAAC,CAAC;IACzBx+L,MAAM,CAACq0L,eAAe,CAAC,CAAC,CAAC,CAAC;EAC9B,CAAC;EAEDr0L,MAAM,CAACy+L,WAAW,GAAG,UAASvkL,GAAG,EAAE;IAC/B,IAAIqkL,OAAO,GAAGv+L,MAAM,CAACm+C,SAAS,CAACp4C,MAAM,CAAC,UAAS2O,CAAC,EAAE;MAC9C,OAAOA,CAAC,CAACgJ,UAAU,IAAIxD,GAAG,CAACq2K,cAAc;IAC7C,CAAC,CAAC,CAAC,CAAC,CAAC;IACL,IAAImO,KAAK,GAAG1+L,MAAM,CAACm+C,SAAS,CAACp4C,MAAM,CAAC,UAAS2O,CAAC,EAAE;MAC5C,OAAOA,CAAC,CAACgJ,UAAU,IAAIxD,GAAG,CAACu2K,YAAY;IAC3C,CAAC,CAAC,CAAC,CAAC,CAAC;IAELzwL,MAAM,CAACo+L,iBAAiB,CAAClkL,GAAG,CAACu2K,YAAY,CAAC;IAE1CzwL,MAAM,CAACq+L,eAAe,GAAG;MACrB5iL,UAAU,EAAEzb,MAAM,CAACyb,UAAU;MAC7B05D,MAAM,EAAEj7D,GAAG,CAACT,MAAM;MAClBia,MAAM,EAAExZ,GAAG,CAACkc,MAAM;MAClBo6J,cAAc,EAAEt2K,GAAG,CAACq2K,cAAc;MAClClG,gBAAgB,EAAE,CAAC,CAACkU,OAAO,GAAGA,OAAO,CAAC/jE,kBAAkB,GAAG,IAAI;MAC/Dk2D,YAAY,EAAEx2K,GAAG,CAACu2K,YAAY;MAC9BnG,cAAc,EAAE,CAAC,CAACoU,KAAK,GAAGA,KAAK,CAAClkE,kBAAkB,GAAG,IAAI;MACzDhuE,IAAI,EAAEtyC,GAAG,CAACsyC,IAAI;MACdzU,MAAM,EAAE79B,GAAG,CAAC7W,MAAM;MAClBa,IAAI,EAAE,EAAE;MACRywL,WAAW,EAAE;IACjB,CAAC;IAED30L,MAAM,CAACmB,IAAI,GAAG,MAAM;IAEpB,IAAIm9L,QAAQ,GAAGx6L,CAAC,CAAC,4BAA4B,CAAC;IAC9CzD,aAAa,CAAC8E,UAAU,CAACm5L,QAAQ,CAAC;IAElCt+L,MAAM,CAACq0L,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1Br0L,MAAM,CAACw+L,gBAAgB,CAAC,CAAC;EAC7B,CAAC;EAEDx+L,MAAM,CAACw+L,gBAAgB,GAAG,YAAW;IACjCh+L,QAAQ,CAAC,YAAW;MAChB,IAAIR,MAAM,CAACqY,gBAAgB,EAAE;QACzBrY,MAAM,CAACqY,gBAAgB,GAAG,KAAK;QAC/BnT,WAAW,CAAC,YAAW;UACnB,IAAItF,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC;UAChB,IAAIlE,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,KAAK,mBAAmB,IAAI5K,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,KAAK,iBAAiB,EAAE;YACpE;YACA1K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACm+C,SAAS,EAAE,UAAS8jD,CAAC,EAAE;cAC1C,IAAI/+D,CAAC,GACD,wBAAwB,GACxB++D,CAAC,CAACu4B,kBAAkB,GACpB,QAAQ,GACR,+CAA+C,IAC9C,CAAC,CAACv4B,CAAC,CAACw4B,eAAe,GAAGx4B,CAAC,CAACw4B,eAAe,GAAG,QAAQ,CAAC,GACpD,QAAQ;cACZ,IAAIC,EAAE,GAAG96H,EAAE,CAACyR,IAAI,CAAC,SAAS,GAAG4wF,CAAC,CAACvkF,UAAU,CAAC;cAE1Cg9G,EAAE,CAACj7G,IAAI,CAACyjB,CAAC,CAAC;YACd,CAAC,CAAC;UACN;QACJ,CAAC,CAAC;QAEF7iC,aAAa,CAAC0wD,aAAa,CAAC/wD,MAAM,CAACsY,UAAU,EAAE,UAAU,CAAC;MAC9D;MAEAxU,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC+vL,qBAAqB,GAAG,UAASviI,UAAU,EAAE;IAChDxtD,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,GAAG,EAAE;IAC7CjY,MAAM,CAACqZ,UAAU,GAAG,CAAC;IACrBrZ,MAAM,CAACsZ,oBAAoB,GAAG,CAAC;IAC/B,IAAI8B,GAAG,GAAG,EAAE;IACZ,OAAOuhC,gBAAgB,CAACozI,qBAAqB,CAACviI,UAAU,CAAC,CAACxpD,IAAI,CAAC,UAASqF,GAAG,EAAE;MACzEvJ,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,CAACk7F,QAAQ,EAAE,UAASx/F,EAAE,EAAE;QAC5C,IAAI,CAAC,CAACA,EAAE,CAACge,UAAU,EAAEhe,EAAE,CAAC07L,WAAW,GAAGj7L,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAACge,UAAU,CAAC;MAC9F,CAAC,CAAC;MAEF5d,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,GAAG5O,GAAG,CAACnF,IAAI,CAACk7F,QAAQ;MAC5Dp/F,MAAM,CAACqZ,UAAU,GAAGhQ,GAAG,CAACnF,IAAI,CAACmV,UAAU;MACvCrZ,MAAM,CAACsZ,oBAAoB,GAAGjQ,GAAG,CAACnF,IAAI,CAACy6L,gBAAgB;MAEvD,IAAI3gL,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOuS,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC;EACN,CAAC;EAED1L,MAAM,CAACq0L,eAAe,GAAG,UAASvxE,OAAO,EAAE;IACvC,IAAI,CAAC9iH,MAAM,CAACq+L,eAAe,CAAC3qK,MAAM,EAAE;MAChC,IAAInoB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA5H,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIiZ,GAAG,GAAG2/B,gBAAgB,CACrB2gJ,wBAAwB,CAACt9L,MAAM,CAACq+L,eAAe,CAAC3qK,MAAM,EAAE,CAAC,EAAE,MAAM,EAAEovF,OAAO,CAAC,CAC3E9+G,IAAI,CAAC,UAASE,IAAI,EAAE;MACjBlE,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,GAAG,EAAE;MAChClE,MAAM,CAACq+L,eAAe,CAAC1J,WAAW,GAAG,EAAE;MAEvC70L,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAASjrD,EAAE,EAAE;QACzC,IAAI,CAACA,EAAE,CAACge,UAAU,EAAEhe,EAAE,CAAC4sD,IAAI,GAAG,GAAG,CAAC,KAC7B5sD,EAAE,CAAC4sD,IAAI,GAAGnsD,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAACge,UAAU,CAAC;QACnEhe,EAAE,CAAC+b,KAAK,GAAGgO,KAAK,CAACuE,OAAO,CAAC,CAAC;QAE1BluB,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;MACxC,CAAC,CAAC;MAEFkE,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAI2Z,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOuS,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC,SACI,CAAC,UAASvH,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;IAEN,OAAO6Y,GAAG;EACd,CAAC;;EAED;EACAhd,MAAM,CAAC2Z,sBAAsB,GAAG,CAAC;EAEjC3Z,MAAM,CAAC4+L,eAAe,GAAG,YAAW;IAChC96L,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACo+L,iBAAiB,CAAC,IAAI,CAAC;IAC9B,OAAOp+L,MAAM,CACR+vL,qBAAqB,CAAC/vL,MAAM,CAACq+L,eAAe,CAAC7N,cAAc,CAAC,CAC5DxsL,IAAI,CAAC,UAASqF,GAAG,EAAE,CAAC,CAAC,CAAC,WACf,CAAC,YAAW;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;EAEDrE,MAAM,CAAC0I,MAAM,CAAC,gCAAgC,EAAE,UAASC,QAAQ,EAAEC,QAAQ,EAAE;IACzE,IAAID,QAAQ,KAAKC,QAAQ,IAAI,CAAC,CAACD,QAAQ,EAAE;MACrC;MACA3I,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,GAAG,EAAE;MAChC,OAAOlE,MAAM,CAAC4+L,eAAe,CAAC,CAAC;IACnC;EACJ,CAAC,CAAC;EAEF5+L,MAAM,CAACyY,cAAc,GAAG,IAAI;EAE5BzY,MAAM,CAACmZ,YAAY,GAAG,UAASzE,CAAC,EAAE;IAC9B1U,MAAM,CAAC8Z,aAAa,GAAGpF,CAAC;IACxB5Q,CAAC,CAAC,WAAW,CAAC,CAACkF,GAAG,CAAC0L,CAAC,CAAC;EACzB,CAAC;EAED1U,MAAM,CAAC+Z,YAAY,GAAG,YAAW;IAC7B/Z,MAAM,CAAC8Z,aAAa,GAAGhW,CAAC,CAAC,WAAW,CAAC,CAACkF,GAAG,CAAC,CAAC;IAC3C,OAAOhJ,MAAM,CAAC8Z,aAAa;EAC/B,CAAC;EAED9Z,MAAM,CAAC0Y,gBAAgB,GAAG,KAAK;EAE/B1Y,MAAM,CAAC+Y,WAAW,GAAG,YAAW;IAC5B/Y,MAAM,CAACiZ,SAAS,GAAG,IAAI;IACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;IACzBlZ,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B5Y,MAAM,CAACmZ,YAAY,CAAC,EAAE,CAAC;IACvBnZ,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;IAC7BpZ,MAAM,CAACmY,wBAAwB,GAAG,EAAE;;IAEpC;IACA,IAAInY,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,CAAC7R,MAAM,IAAI,CAAC,IAAIpG,MAAM,CAACqZ,UAAU,IAAI,CAAC,EAAE;MAChFhZ,aAAa,CAACq6B,gBAAgB,CAAC,EAAE,EAAEj6B,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC,EAAEf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;MAC9J;IACJ;IACA,IAAIxB,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,CAAC7R,MAAM,IAAI,CAAC,IAAIpG,MAAM,CAACsZ,oBAAoB,GAAG,CAAC,EAAE;MACzFjZ,aAAa,CAACq6B,gBAAgB,CAC1B,EAAE,EACFj6B,cAAc,CAACe,SAAS,CAAC,0EAA0E,CAAC,EACpGf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,EAC9B,IAAI,EACJ,KACJ,CAAC;MACD;IACJ;IACA;IAAA,KACK,IAAIxB,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,CAAC7R,MAAM,GAAG,CAAC,IAAIpG,MAAM,CAACsZ,oBAAoB,GAAG,CAAC,EAAE;MAC7FjZ,aAAa,CAACq6B,gBAAgB,CAC1B,EAAE,EACFj6B,cAAc,CAACe,SAAS,CAAC,gFAAgF,CAAC,EAC1Gf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,EAC9B,IAAI,EACJ,KACJ,CAAC;IACL;IAEAnB,aAAa,CAAC8E,UAAU,CAAC,sBAAsB,EAAE,YAAW;MACxD,IAAInF,MAAM,CAACoY,iBAAiB,EAAE;QAC1BtU,CAAC,CAAC,qCAAqC,CAAC,CAAC+R,IAAI,CAAC,CAAC;MACnD;MACA7V,MAAM,CAAC0Y,gBAAgB,GAAG,IAAI;IAClC,CAAC,CAAC;IAEFb,YAAY,CAAC0B,SAAS,CAAC,CAAC;IACxB;;IAEA,IAAIvZ,MAAM,CAACyY,cAAc,EAAE;MACvBzY,MAAM,CAACyY,cAAc,GAAG,KAAK;MAC7B3U,CAAC,CAAC,sBAAsB,CAAC,CACpBuN,IAAI,CAAC,SAAS,CAAC,CACfmI,KAAK,CAAC,UAASR,GAAG,EAAE;QACjB,IAAItE,CAAC,GAAG+E,MAAM,CACV3V,CAAC,CAAC,IAAI,CAAC,CACF4V,MAAM,CAAC,CAAC,CACR/R,IAAI,CAAC,OAAO,CACrB,CAAC;QAEDnH,QAAQ,CAAC,YAAW;UAChBR,MAAM,CAAC2Z,sBAAsB,GAAGjF,CAAC;QACrC,CAAC,CAAC;MACN,CAAC,CAAC;IACV;IAEAlU,QAAQ,CAAC,YAAW;MAChBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;IAEFxE,MAAM,CAAC4Z,sBAAsB,GAAG,CAAC;IACjC5Z,MAAM,CAAC6Z,aAAa,CAAC,CAAC;EAC1B,CAAC;EAED7Z,MAAM,CAACga,WAAW,GAAG,YAAW;IAC5Bha,MAAM,CAAC0Y,gBAAgB,GAAG,KAAK;IAC/B;IACArY,aAAa,CAAC+L,WAAW,CAAC,sBAAsB,CAAC;IACjDtI,CAAC,CAAC,kBAAkB,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;EACjC,CAAC;EAEDhJ,MAAM,CAACia,kBAAkB,GAAG,UAAUC,GAAG,EAAEC,UAAU,EAAE;IACnD,IAAIuC,SAAS,GAAG,KAAK;IACrB,IAAI9B,GAAG,GAAG,EAAE;IACZ9a,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,EAAE,UAAUtE,EAAE,EAAE;MACvD,IAAIA,EAAE,CAACyc,SAAS,IAAInC,GAAG,CAACmC,SAAS,IAAIzc,EAAE,CAACke,OAAO,IAAI5D,GAAG,CAAC4D,OAAO,IAAIle,EAAE,CAACge,UAAU,IAAI1D,GAAG,CAAC0D,UAAU,EAAE;QAC/FlB,SAAS,GAAG,IAAI;QAChB,IAAIvC,UAAU,KAAK,IAAI,EAAE;UACrBva,EAAE,CAACmxL,gBAAgB,GAAG/wL,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;QAC1D,CAAC,MAAM;UACHhc,EAAE,CAACmxL,gBAAgB,GAAGpsK,UAAU,CAAC/kB,EAAE,CAACmxL,gBAAgB,CAAC,GAAG,CAAC;QAC7D;QAEAn2K,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,wCAAwC,EAAE;UAAEoI,IAAI,EAAEsQ,GAAG,CAACxX;QAAK,CAAC,CAAC;QAE5F,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEF,IAAI,CAACga,SAAS,EAAE;MACZ,IAAIg5K,EAAE,GAAG;QACLtyL,EAAE,EAAE8W,GAAG,CAACmC,SAAS,GAAG,GAAG,GAAGnC,GAAG,CAAC4D,OAAO,GAAG,GAAG,GAAG5D,GAAG,CAAC0D,UAAU;QAC5DvB,SAAS,EAAEnC,GAAG,CAACmC,SAAS;QACxB5B,WAAW,EAAEP,GAAG,CAACO,WAAW;QAC5B/X,IAAI,EAAEwX,GAAG,CAACxX,IAAI;QACd+0L,IAAI,EAAEv9K,GAAG,CAAC27K,aAAa;QACvB/3K,OAAO,EAAE5D,GAAG,CAAC4D,OAAO;QACpBF,UAAU,EAAE1D,GAAG,CAAC0D,UAAU;QAC1B/B,cAAc,EAAE3B,GAAG,CAAC4B,MAAM;QAC1BE,iBAAiB,EAAE9B,GAAG,CAAC+B,SAAS;QAChC80K,gBAAgB,EAAE,CAAC;QACnBv8J,aAAa,EAAEta,GAAG,CAACsa,aAAa;QAChCg4B,IAAI,EAAE,CAAC,CAACtyC,GAAG,CAAC0D,UAAU,GAAGvd,aAAa,CAACkyE,uBAAuB,CAACr4D,GAAG,CAAC0D,UAAU,CAAC,GAAG,EAAE;QACnFjC,KAAK,EAAEgO,KAAK,CAACuE,OAAO,CAAC;MACzB,CAAC;MAED,IAAI/T,UAAU,KAAK,IAAI,EAAE;QACrBu7K,EAAE,CAAC3E,gBAAgB,GAAG/wL,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;MAC1D;MAEA5b,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,CAACmC,IAAI,CAACqvL,EAAE,CAAC;MACpC96K,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,6BAA6B,EAAE;QAAEoI,IAAI,EAAEsQ,GAAG,CAACxX;MAAK,CAAC,CAAC;IACrF;IAEAzC,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;MACnC6P,OAAO,EAAED;IACb,CAAC,CAAC;EACN,CAAC;EAED5a,MAAM,CAAC6+L,kBAAkB,GAAG,UAAS3kL,GAAG,EAAE;IACtC,KAAK,IAAI1F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,CAACkC,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACzD,IAAIxU,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,CAACsQ,CAAC,CAAC,CAACpR,EAAE,IAAI8W,GAAG,CAAC9W,EAAE,EAAE;QAC7CpD,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,CAACoL,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;QACxC;MACJ;IACJ;EACJ,CAAC;;EAED;EACAxU,MAAM,CAACs6L,gBAAgB,GAAG;IACtBE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG;EACrB,CAAC;EAEDx6L,MAAM,CAAC2Y,eAAe,GAAG,IAAI,CAAC,CAAC;EAC/B3Y,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;EAE1B5Y,MAAM,CAACwb,kBAAkB,GAAG,UAAStB,GAAG,EAAE;IACtC,IAAIla,MAAM,CAACq+L,eAAe,CAAC5iL,UAAU,KAAK,OAAO,EAAE;MAC/C;IACJ;IACAzb,MAAM,CAACgb,kBAAkB,CAACd,GAAG,CAAC;IAC9Bla,MAAM,CAAC0b,mBAAmB,CAACxB,GAAG,CAACyB,KAAK,CAAC;EACzC,CAAC;EAED3b,MAAM,CAACgb,kBAAkB,GAAG,UAASd,GAAG,EAAE;IACtCla,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B9Y,OAAO,CAAC+F,IAAI,CAACqU,GAAG,EAAEla,MAAM,CAAC4Y,cAAc,CAAC;IACxC5Y,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC,CAAC5b,MAAM,CAAC4Y,cAAc,CAACm4K,gBAAgB,GAAG/wL,MAAM,CAAC4Y,cAAc,CAACm4K,gBAAgB,GAAG,CAAC;IACxH/wL,MAAM,CAAC4Y,cAAc,CAACiD,cAAc,GAAG,CAAC,CAAC3B,GAAG,CAAC2B,cAAc,GAAG3B,GAAG,CAAC2B,cAAc,GAAG3B,GAAG,CAAC4B,MAAM;IAC7F9b,MAAM,CAAC4Y,cAAc,CAACsD,UAAU,GAAG,IAAI;IACvClc,MAAM,CAAC4Y,cAAc,CAACuD,WAAW,GAAG,IAAI;IACxCnc,MAAM,CAAC4Y,cAAc,CAACwD,QAAQ,GAAG,IAAI;IACrC,IAAI,CAACpc,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EAAE;MAC3BpD,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,GAAG8W,GAAG,CAACmC,SAAS,GAAG,GAAG,GAAGnC,GAAG,CAAC4D,OAAO,GAAG,GAAG,GAAG5D,GAAG,CAAC0D,UAAU;IACvF;IAEA,IAAI,CAAC5d,MAAM,CAAC4Y,cAAc,CAACgF,UAAU,EAAE5d,MAAM,CAAC4Y,cAAc,CAAC4zC,IAAI,GAAG,GAAG,CAAC,KACnExsD,MAAM,CAAC4Y,cAAc,CAAC4zC,IAAI,GAAGnsD,aAAa,CAACkyE,uBAAuB,CAACvyE,MAAM,CAAC4Y,cAAc,CAACgF,UAAU,CAAC;IAEzG,IAAI5d,MAAM,CAAC4Y,cAAc,CAAC4b,aAAa,IAAI,MAAM,IAAIx0B,MAAM,CAAC4Y,cAAc,CAAC4b,aAAa,IAAI,MAAM,IAAIx0B,MAAM,CAAC4Y,cAAc,CAAC4b,aAAa,IAAI,IAAI,EAAE;MAC/I,IAAIx0B,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC,EAAE5b,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC;IAClF;EACJ,CAAC;EAED5b,MAAM,CAAC0b,mBAAmB,GAAG,UAASY,IAAI,EAAE;IACxCtc,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,GAAGvV,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;IAC9Dpb,QAAQ,CAAC,YAAW;MAChBR,MAAM,CAAC2Y,eAAe,CAAC9C,IAAI,CAAC,CAACyG,IAAI,GAAG,iBAAiB,GAAG,GAAG,GAAGA,IAAI,CAAC;IACvE,CAAC,CAAC;EACN,CAAC;;EAED;EACAtc,MAAM,CAACuc,WAAW,GAAG,UAASC,GAAG,EAAEla,KAAK,EAAE;IACtC9B,QAAQ,CAAC,YAAW;MAChBR,MAAM,CAAC2Y,eAAe,CAAC7N,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEF,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAW;QAChBR,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG5b,MAAM,CAAC4Y,cAAc,CAACrD,KAAK;QAC9DvV,MAAM,CAACyc,mBAAmB,CAAC,CAAC;MAChC,CAAC,CAAC;IACN,CAAC,MAAM,IAAI,OAAOD,GAAG,IAAI,QAAQ,EAAE;MAC/B,IAAIA,GAAG,KAAK,OAAO,EAAE,CACrB;IACJ;;IAEA;IACA;EACJ,CAAC;EAEDxc,MAAM,CAACyc,mBAAmB,GAAG,YAAW;IACpC3c,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACq+L,eAAe,CAACn6L,IAAI,EAAE,UAAStE,EAAE,EAAE;MACtD,IAAIA,EAAE,CAACwD,EAAE,IAAIpD,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EAAE;QACnCsZ,SAAS,GAAG,IAAI;QAChB9c,EAAE,CAACmxL,gBAAgB,GAAG/wL,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;QACtD,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;EACN,CAAC;EAED5b,MAAM,CAACqwL,mBAAmB,GAAG,UAASyO,aAAa,EAAE;IACjDh7L,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAO44C,gBAAgB,CAClB0zI,mBAAmB,CAACrwL,MAAM,CAACq+L,eAAe,CAAC,CAC3Cr6L,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChB,IAAIy1L,aAAa,EAAE;QACf,OAAOniJ,gBAAgB,CAACghJ,qBAAqB,CAACt0L,GAAG,CAACnF,IAAI,CAACsG,EAAE,CAAC;MAC9D,CAAC,MAAM;QACH,IAAIwT,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;QACvB,OAAOuS,SAAS,CAACtS,OAAO;MAC5B;IACJ,CAAC,CAAC,CACD1H,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,SACI,CAAC,UAASr/G,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACsuL,UAAU,GAAG,IAAI;EACxBtuL,MAAM,CAACuuL,YAAY,GAAG,IAAI;EAE1BvuL,MAAM,CAAC26B,aAAa,GAAG,YAAW;IAC9B,IAAI36B,MAAM,CAACsuL,UAAU,IAAI,MAAM,EAAE;MAC7BxqL,CAAC,CAACC,OAAO,CAAC,CAAC;MACX44C,gBAAgB,CACX8gJ,iBAAiB,CAACz9L,MAAM,CAACuuL,YAAY,CAAC,CACtCvqL,IAAI,CAAC,UAASqF,GAAG,EAAE;QAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MACnB,CAAC,CAAC,SACI,CAAC,UAASr/G,GAAG,EAAE;QACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACvD,CAAC,CAAC;IACV,CAAC,MAAM,IAAInE,MAAM,CAACsuL,UAAU,IAAI,MAAM,EAAE;MACpCxqL,CAAC,CAACC,OAAO,CAAC,CAAC;MACX44C,gBAAgB,CACXkhJ,iBAAiB,CAAC79L,MAAM,CAACuuL,YAAY,CAAC,CACtCvqL,IAAI,CAAC,UAASqF,GAAG,EAAE;QAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MACnB,CAAC,CAAC,SACI,CAAC,UAASr/G,GAAG,EAAE;QACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACvD,CAAC,CAAC;IACV;EACJ,CAAC;EAEDnE,MAAM,CAACy9L,iBAAiB,GAAG,UAAS/pK,MAAM,EAAE;IACxC1zB,MAAM,CAACsuL,UAAU,GAAG,MAAM;IAC1BtuL,MAAM,CAACuuL,YAAY,GAAG76J,MAAM;IAC5BrzB,aAAa,CAACq6B,gBAAgB,CAC1Bj6B,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC,EAC/Cf,cAAc,CAACe,SAAS,CAAC,6GAA6G,CAAC,EACvIf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CACjC,CAAC;EACL,CAAC;EAEDxB,MAAM,CAAC29L,qBAAqB,GAAG,UAASjqK,MAAM,EAAE;IAC5C5vB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CACXghJ,qBAAqB,CAACjqK,MAAM,CAAC,CAC7B1vB,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,SACI,CAAC,UAASr/G,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC69L,iBAAiB,GAAG,UAASnqK,MAAM,EAAE;IACxC1zB,MAAM,CAACsuL,UAAU,GAAG,MAAM;IAC1BtuL,MAAM,CAACuuL,YAAY,GAAG76J,MAAM;IAC5BrzB,aAAa,CAACq6B,gBAAgB,CAC1Bj6B,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC,EAC/Cf,cAAc,CAACe,SAAS,CAAC,4GAA4G,CAAC,EACtIf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CACjC,CAAC;EACL,CAAC;EAEDxB,MAAM,CAAC6Y,gBAAgB,GAAG,EAAE;EAE5B7Y,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EAAE,UAASC,QAAQ,EAAEC,QAAQ,EAAE;IACjE,IAAID,QAAQ,IAAIC,QAAQ,EAAE;MACtB5I,MAAM,CAAC6Z,aAAa,CAAC,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEF7Z,MAAM,CAAC6Z,aAAa,GAAG,YAAW;IAC9B7Z,MAAM,CAACiZ,SAAS,GAAG,IAAI;IACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;IACzBlZ,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B5Y,MAAM,CAAC6Y,gBAAgB,GAAG,EAAE;EAChC,CAAC;EAED7Y,MAAM,CAACqa,UAAU,GAAG,UAAS7N,CAAC,EAAE8N,CAAC,EAAE;IAC/B,IAAI9N,CAAC,IAAI,IAAI,IAAI,OAAOA,CAAC,IAAI,QAAQ,EAAE,OAAO,KAAK;IACnD,IAAI8N,CAAC,IAAI,IAAI,IAAI,OAAOA,CAAC,IAAI,QAAQ,EAAE,OAAO,KAAK;IAEnD,OAAO9N,CAAC,CAAC+K,WAAW,CAAC,CAAC,IAAI+C,CAAC,CAAC/C,WAAW,CAAC,CAAC;EAC7C,CAAC;EAEDvX,MAAM,CAACua,iBAAiB,GAAG,UAASrS,IAAI,EAAE;IACtC,OAAOlI,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,CAAClS,MAAM,CAAC,UAASnG,EAAE,EAAE;MAChE,OAAOI,MAAM,CAACqa,UAAU,CAACza,EAAE,CAAC4a,OAAO,EAAEtS,IAAI,CAAC,IAAIlI,MAAM,CAACqa,UAAU,CAACza,EAAE,CAAC6a,WAAW,EAAEvS,IAAI,CAAC,IAAIlI,MAAM,CAACqa,UAAU,CAACza,EAAE,CAACke,OAAO,EAAE5V,IAAI,CAAC;IAChI,CAAC,CAAC;EACN,CAAC;EAEDlI,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,UAASC,KAAK,EAAEoY,OAAO,EAAE;IAChD,IAAI1a,MAAM,CAAC2Z,sBAAsB,IAAI,CAAC,IAAI3Z,MAAM,CAAC2Z,sBAAsB,IAAI,CAAC,IAAI3Z,MAAM,CAAC0Y,gBAAgB,EAAE;MACrG1Y,MAAM,CAAC6Z,aAAa,CAAC,CAAC;MAEtB/V,CAAC,CAACC,OAAO,CAAC,CAAC;MACX,IAAI4W,IAAI,GAAG3a,MAAM,CAACua,iBAAiB,CAACG,OAAO,CAAC;MAC5C1a,MAAM,CAAC6Y,gBAAgB,GAAG/Y,OAAO,CAAC+F,IAAI,CAAC8U,IAAI,CAAC;MAC5C3a,MAAM,CAACgL,UAAU,CAAC,kBAAkB,CAAC;MACrClH,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAIsW,IAAI,CAACvU,MAAM,IAAI,CAAC,EAAE;QAClB;QACA,IAAIwU,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,iDAAiD,CAAC;QACrFvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UACnC6P,OAAO,EAAED,GAAG;UACZtM,IAAI,EAAE;QACV,CAAC,CAAC;QAEF,OAAOsJ,YAAY,CAACkD,OAAO,CAAC,CAAC;MACjC,CAAC,MAAM,IAAI9a,MAAM,CAAC2Z,sBAAsB,IAAI,CAAC,EAAE;QAC3C,IAAIgB,IAAI,CAACvU,MAAM,GAAG,CAAC,EAAE;UACjBpG,MAAM,CAACkZ,WAAW,GAAG,4DAA4D;UACjF,OAAOtB,YAAY,CAACkD,OAAO,CAAC,CAAC;QACjC,CAAC,MAAM;UACH9a,MAAM,CAACkZ,WAAW,GAAG,UAAU,GAAGwB,OAAO,GAAG,iBAAiB;UAC7D1a,MAAM,CAACia,kBAAkB,CAACU,IAAI,CAAC,CAAC,CAAC,CAAC;UAClC,OAAO/C,YAAY,CAACmD,QAAQ,CAAC,CAAC;QAClC;MACJ,CAAC,MAAM,IAAI/a,MAAM,CAAC2Z,sBAAsB,IAAI,CAAC,EAAE;QAC3C,IAAIgB,IAAI,CAACvU,MAAM,GAAG,CAAC,EAAE;UACjBpG,MAAM,CAACkZ,WAAW,GAAG,4DAA4D;UACjF,OAAOtB,YAAY,CAACkD,OAAO,CAAC,CAAC;QACjC,CAAC,MAAM;UACH9a,MAAM,CAACkZ,WAAW,GAAG,UAAU,GAAGwB,OAAO,GAAG,iBAAiB;UAC7D1a,MAAM,CAACgb,kBAAkB,CAACL,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC;MACJ;IACJ,CAAC,MAAM,IAAI3a,MAAM,CAAC2Z,sBAAsB,IAAI,CAAC,IAAI3Z,MAAM,CAAC0Y,gBAAgB,EAAE;MACtElY,QAAQ,CAAC,YAAW;QAChB,IAAIkU,CAAC,GAAG1U,MAAM,CAAC+Z,YAAY,CAAC,CAAC;QAC7BjW,CAAC,CAAC,WAAW,CAAC,CACTsB,KAAK,CAAC,CAAC,CACP4D,GAAG,CAAC,EAAE,CAAC,CACPA,GAAG,CAAC0L,CAAC,CAAC;QACX1U,MAAM,CAACmZ,YAAY,CAACzE,CAAC,GAAGgG,OAAO,GAAGO,MAAM,CAACC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;MAClE,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;EAEFlb,MAAM,CAACmb,iBAAiB,GAAG,YAAW;IAClC,IAAInb,MAAM,CAAC2Z,sBAAsB,IAAI,CAAC,IAAI3Z,MAAM,CAAC0Y,gBAAgB,IAAI,CAAC,CAAC1Y,MAAM,CAAC+Z,YAAY,CAAC,CAAC,IAAI/Z,MAAM,CAAC+Z,YAAY,CAAC,CAAC,CAAC3T,MAAM,GAAG,CAAC,EAAE;MAC9H,IAAIgV,GAAG,GAAGpb,MAAM,CAAC+Z,YAAY,CAAC,CAAC,CAACsB,KAAK,CAACJ,MAAM,CAACC,YAAY,CAAC,EAAE,CAAC,CAAC;MAE9Dlb,MAAM,CAACmZ,YAAY,CAAC,EAAE,CAAC;MACvB,IAAIiC,GAAG,CAAChV,MAAM,GAAG,CAAC,EAAE;QAChBtC,CAAC,CAACC,OAAO,CAAC,CAAC;QAEXjE,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAASE,EAAE,EAAE;UAC9BA,EAAE,GAAGA,EAAE,CAACC,IAAI,CAAC,CAAC;UACd,IAAI,CAAC,CAACD,EAAE,EAAE;YACN,IAAIX,IAAI,GAAG3a,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,CAAClS,MAAM,CAAC,UAASnG,EAAE,EAAE;cACpE,IAAG,CAACA,EAAE,CAAC4a,OAAO,IAAI,CAACc,EAAE,EACjB,OAAO,KAAK;cAChB,OAAO1b,EAAE,CAAC4a,OAAO,CAACjD,WAAW,CAAC,CAAC,IAAI+D,EAAE,CAAC/D,WAAW,CAAC,CAAC;YACvD,CAAC,CAAC;YACF,IAAIoD,IAAI,CAACvU,MAAM,IAAI,CAAC,EAAE;cAClBpG,MAAM,CAACmZ,YAAY,CAACnZ,MAAM,CAAC+Z,YAAY,CAAC,CAAC,GAAGuB,EAAE,GAAGL,MAAM,CAACC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC,MAAM;cACHlb,MAAM,CAACia,kBAAkB,CAACU,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC;UACJ;QACJ,CAAC,CAAC;QAEF7W,CAAC,CAACO,SAAS,CAAC,CAAC;QAEb,IAAI,CAAC,CAACrE,MAAM,CAAC+Z,YAAY,CAAC,CAAC,EAAE;UACzB;UACA/Z,MAAM,CAACiZ,SAAS,GACZ,gLAAgL;UACpL,OAAOrB,YAAY,CAACkD,OAAO,CAAC,CAAC;QACjC,CAAC,MAAM;UACH9a,MAAM,CAACkZ,WAAW,GAAG,iHAAiH;UACtI,OAAOtB,YAAY,CAACmD,QAAQ,CAAC,CAAC;QAClC;MACJ;MAEA/a,MAAM,CAAC6Z,aAAa,CAAC,CAAC;IAC1B;EACJ,CAAC;EAED7Z,MAAM,CAACoa,WAAW,GAAG,UAAS9X,KAAK,EAAE;IACjC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpB,IAAIwJ,CAAC,GAAG5Q,CAAC,CAAC,kBAAkB,CAAC,CAACkF,GAAG,CAAC,CAAC;MACnC,IAAI,CAAC,CAAC0L,CAAC,IAAIA,CAAC,CAACtO,MAAM,GAAG,CAAC,EAAE;QACrBnG,UAAU,CAAC+K,UAAU,CAAC,cAAc,EAAE0J,CAAC,CAAC;MAC5C;IACJ;EACJ,CAAC;;EAKO;EACA1U,MAAM,CAACsB,uBAAuB,GAAGpB,aAAa,CAACoB,uBAAuB;EACtEtB,MAAM,CAACuB,iBAAiB,GAAGd,cAAc,CAACe,SAAS,CAAC,4CAA4C,EAAE;IAAEC,GAAG,EAAE;EAAE,CAAC,CAAC;EAC7GzB,MAAM,CAACyI,gBAAgB,GAAG,KAAK;EAC/BzI,MAAM,CAAC2c,UAAU,GAAG;IAChBlU,gBAAgB,EAAE;EACtB,CAAC;EACDzI,MAAM,CAAC4c,gCAAgC,GAAG,KAAK;EAC/C5c,MAAM,CAAC6c,eAAe,GAAG,IAAI;EAC7B7c,MAAM,CAAC+F,MAAM,GAAG,CAAC,CAAC;EAClB/F,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG,IAAI;EAEvC9c,MAAM,CAAC0I,MAAM,CAAC,6BAA6B,EACvC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B5I,MAAM,CAAC+c,iCAAiC,CAAC,CAAC;IAC1C,IAAIpU,QAAQ,EAAE;MACVnI,QAAQ,CAAC,YAAW;QAChBH,aAAa,CAACwI,kBAAkB,CAAC,GAAG,GAAG/E,CAAC,CAAC,qBAAqB,CAAC,CAAC6D,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,mCAAmC,CAAC;MACjI,CAAC,EAAC,GAAG,CAAC;IACV;EACJ,CACJ,CAAC;EAGD3H,MAAM,CAAC+c,iCAAiC,GAAG,YAAY;IAC/C,IAAI/c,MAAM,CAAC4c,gCAAgC,IAAI5c,MAAM,CAACyI,gBAAgB,EAAE;MACpEjI,QAAQ,CAAC,YAAY;QACjB,IAAIwc,GAAG,GAAGlZ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAACmZ,qBAAqB,CAAC,CAAC;QAC7D,IAAID,GAAG,CAACE,KAAK,GAAG,CAAC,IAAIF,GAAG,CAACG,MAAM,GAAG,CAAC,EAAE;UACjCnY,OAAO,CAACC,GAAG,CAAC,OAAO,GAAG+X,GAAG,CAACE,KAAK,GAAG,GAAG,GAAGF,GAAG,CAACG,MAAM,CAAC;UACnDrZ,CAAC,CAAC,iBAAiB,CAAC,CAACsZ,GAAG,CAAC,MAAM,EAAEJ,GAAG,CAACK,IAAI,CAAC;UAC1CvZ,CAAC,CAAC,iBAAiB,CAAC,CAACsZ,GAAG,CAAC,KAAK,EAAEJ,GAAG,CAACM,MAAM,GAAG,EAAE,CAAC;UAChDxZ,CAAC,CAAC,iBAAiB,CAAC,CAAC+R,IAAI,CAAC,CAAC;QAC/B,CAAC,MAEG/R,CAAC,CAAC,iBAAiB,CAAC,CAACgH,IAAI,CAAC,CAAC;MAEnC,CAAC,CAAC;IACN,CAAC,MAEGhH,CAAC,CAAC,iBAAiB,CAAC,CAACgH,IAAI,CAAC,CAAC;EACnC,CAAC;EAGL9K,MAAM,CAAC++L,cAAc,GAAG,UAAU/1L,GAAG,EAAE;IAC/BhJ,MAAM,CAACud,UAAU,GAAG,MAAM;IAC1Bvd,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG9T,GAAG;IAEtC,IAAIjD,MAAM,GAAG/F,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG9c,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,CAACvF,WAAW,CAAC,CAAC,GAAG,EAAE;IACnG,IAAIiG,QAAQ,GAAGxd,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,CAAClS,MAAM,CAAC,UAAS+D,IAAI,EAAE;MAC1E,OAAO,CAAC/D,MAAM,IAAK+D,IAAI,CAACpH,IAAI,IAAIoH,IAAI,CAACpH,IAAI,CAAC6U,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,IAC3E+D,IAAI,CAAC2Q,WAAW,IAAI3Q,IAAI,CAAC2Q,WAAW,CAAClD,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,IAC1E+D,IAAI,CAAC0Q,OAAO,IAAI1Q,IAAI,CAAC0Q,OAAO,CAACjD,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE;IAC1E,CAAC,CAAC;IACF,IAAIsD,GAAG,GAAGmU,QAAQ,CAACpX,MAAM,GAAG,CAAC,GAAGoX,QAAQ,CAAC9T,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG8T,QAAQ;IAE/Dxd,MAAM,CAAC4c,gCAAgC,GAAG,CAAC,CAACvT,GAAG,IAAIA,GAAG,CAACjD,MAAM,GAAG,CAAC;IACjEpG,MAAM,CAAC+c,iCAAiC,CAAC,CAAC;IAE1C,OAAO1T,GAAG;EACd,CAAC;EAELrJ,MAAM,CAAC2J,kBAAkB,GAAG,UAAUX,GAAG,EAAE;IACnC,OAAO,CAAC,CAACA,GAAG,GAAGA,GAAG,CAACY,IAAI,GAAG,IAAI;EAClC,CAAC;EAEL5J,MAAM,CAAC6J,kBAAkB,GAAG,UAAUC,IAAI,EAAEC,KAAK,EAAEC,KAAK,EAAE1H,KAAK,EAAE;IAC7D;IACAtC,MAAM,CAAC6c,eAAe,GAAG9S,KAAK,CAACsS,SAAS;IACxCrc,MAAM,CAACyd,gBAAgB,GAAG1T,KAAK,CAAC2T,UAAU;IAC1C1d,MAAM,CAAC2d,gBAAgB,GAAG5T,KAAK,CAAC6T,UAAU;IAC1C5d,MAAM,CAAC6d,aAAa,GAAG9T,KAAK,CAAC+T,OAAO;IACpC9d,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAGhT,IAAI,CAACpH,IAAI;IAC5C1C,MAAM,CAAC+d,cAAc,CAAC,CAAC;EAC3B,CAAC;EAED/d,MAAM,CAACiL,YAAY,GAAG,UAAU3I,KAAK,EAAE;IACnC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpBlL,MAAM,CAAC6c,eAAe,GAAG,IAAI;MAC7B7c,MAAM,CAAC+d,cAAc,CAAC,CAAC;IAC3B;EACJ,CAAC;EAED/d,MAAM,CAAC+d,cAAc,GAAG,YAAY;IAC5B,IAAI7d,aAAa,CAAC2L,QAAQ,EACtBhB,QAAQ,CAACC,IAAI,CAAC,CAAC;IAEnBhH,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIgC,MAAM,GAAG/F,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG9c,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,CAACvF,WAAW,CAAC,CAAC,GAAG,EAAE;IACnG,IAAIiG,QAAQ,GAAGxd,MAAM,CAACi0D,SAAS,CAACzc,GAAG,CAAC,CAAC,CAACv/B,iBAAiB,CAAClS,MAAM,CAAC,UAAS+D,IAAI,EAAE;MAC1E,OAAQ9J,MAAM,CAAC6c,eAAe,IAAI/S,IAAI,CAACuS,SAAS,KAAKrc,MAAM,CAAC6c,eAAe,IAC1E,CAAC7c,MAAM,CAAC6c,eAAe,KAAK,CAAC9W,MAAM,IAChC+D,IAAI,CAACpH,IAAI,IAAIoH,IAAI,CAACpH,IAAI,CAAC6U,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,IAC5D+D,IAAI,CAAC2Q,WAAW,IAAI3Q,IAAI,CAAC2Q,WAAW,CAAClD,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,IAC1E+D,IAAI,CAAC0Q,OAAO,IAAI1Q,IAAI,CAAC0Q,OAAO,CAACjD,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,CAAE;IAC5E,CAAC,CAAC;IAEF,IAAIyX,QAAQ,CAACpX,MAAM,GAAG,CAAC,KAAKpG,MAAM,CAAC6d,aAAa,IAAI7d,MAAM,CAACyd,gBAAgB,IAAIzd,MAAM,CAAC2d,gBAAgB,CAAC,EAAE;MACrGH,QAAQ,GAAGA,QAAQ,CAACzX,MAAM,CAAC,UAAU+D,IAAI,EAAE;QACvC,OAAO,CAAC,CAAC9J,MAAM,CAAC6d,aAAa,IAAI7d,MAAM,CAAC6d,aAAa,KAAK/T,IAAI,CAACgU,OAAO,MAC7D,CAAC9d,MAAM,CAACyd,gBAAgB,IAAIzd,MAAM,CAACyd,gBAAgB,KAAK3T,IAAI,CAAC4T,UAAU,CAAC,KACxE,CAAC1d,MAAM,CAAC2d,gBAAgB,IAAI3d,MAAM,CAAC2d,gBAAgB,KAAK7T,IAAI,CAAC8T,UAAU,CAAC;MACrF,CAAC,CAAC;IACN;IAEA,IAAGJ,QAAQ,CAACpX,MAAM,KAAK,CAAC,EAAE;MACtBpG,MAAM,CAACia,kBAAkB,CAACuD,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1C;IACAxd,MAAM,CAACmY,wBAAwB,GAAGqF,QAAQ;IAE1C,IAAIQ,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;IACvB3H,CAAC,CAACO,SAAS,CAAC,CAAC;IACb,OAAO2Z,SAAS,CAACtS,OAAO;EAC5B,CAAC;EAEL1L,MAAM,CAACie,wBAAwB,GAAG,YAAY;IACtCje,MAAM,CAAC6c,eAAe,GAAG,IAAI;IAC7B7c,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG,IAAI;IACvC9c,MAAM,CAACmY,wBAAwB,GAAG,EAAE;EACxC,CAAC;AACjB,CAAC,CACJ,CAAC,C;;;;;;;;;;ACz7BFrY,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,oCAAoC,EACrE,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,sBAAsB,EAC7E,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAC5D,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAC7E,UAAUC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAE/oB,cAAc,EAAEyoL,oBAAoB,EAC5E7oL,aAAa,EAAEG,QAAQ,EAAEN,aAAa,EAAEC,YAAY,EACpDyX,YAAY,EAAEjX,EAAE,EAAEkX,YAAY,EAAE8R,KAAK,EAAEgzB,gBAAgB,EAAEr8C,QAAQ,EAAE;EAEnE,IAAI,CAACkpB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEA,IAAMqjK,aAAa,GAAG,IAAI;EAC1B,IAAM31K,YAAY,GAAG,OAAO;EAC5B,IAAM41K,cAAc,GAAG,SAAS;EAChC,IAAMC,cAAc,GAAG,SAAS;EAChC,IAAMC,iBAAiB,GAAG,YAAY;EACtC,IAAMC,kBAAkB,GAAG,aAAa;EACxC,IAAMC,gBAAgB,GAAG,WAAW;EACpC,IAAMC,aAAa,GAAG,QAAQ;EAE9B/tL,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACyb,UAAU,GAAG,EAAE;EACtBzb,MAAM,CAACiY,iBAAiB,GAAG,EAAE,CAAC;EAC9BjY,MAAM,CAACkY,wBAAwB,GAAG,EAAE,CAAC;EACrClY,MAAM,CAACqZ,UAAU,GAAG,CAAC;EAErBrZ,MAAM,CAACm+C,SAAS,GAAG,EAAE;EACrBn+C,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EACjEvY,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqY,gBAAgB,GAAG,IAAI;EAE9BrY,MAAM,CAACwY,YAAY,GAAG;IAClBtU,IAAI,EAAE;EACV,CAAC;EAEDlE,MAAM,CAACsuL,UAAU,GAAG,IAAI;EACxBtuL,MAAM,CAACuuL,YAAY,GAAG,IAAI;EAE1BvuL,MAAM,CAAC2Y,eAAe,GAAG,IAAI,CAAC,CAAC;EAC/B3Y,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;EAC1B5Y,MAAM,CAACghH,KAAK,GAAG;IAAE,QAAQ,EAAG3hH,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAI,GAAG,GAAG;EAAK,CAAC;EACpEpC,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAE3DpC,MAAM,CAACT,MAAM,GAAGW,aAAa,CAACX,MAAM;EAEpCU,UAAU,CAACoC,GAAG,CAAC,yBAAyB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC7DlE,MAAM,CAACm+C,SAAS,GAAGj6C,IAAI,CAACi6C,SAAS;IACjCn+C,MAAM,CAACmtD,MAAM,CAAC,CAAC;IAEf9sD,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAY,CAAE,CAAC,CAAC;IACnDN,MAAM,CAACo0L,UAAU,CAAC,CAAC;IACnB/zL,aAAa,CAAC0wD,aAAa,CAAC/wD,MAAM,CAACsY,UAAU,EAAE,UAAU,CAAC;IAC1DtY,MAAM,CAACm0L,SAAS,GAAG,IAAI;IAEvBn0L,MAAM,CAACq0L,eAAe,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEFp0L,UAAU,CAACoC,GAAG,CAAC,0BAA0B,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC9DlE,MAAM,CAACm+C,SAAS,GAAGj6C,IAAI,CAACi6C,SAAS;IACjCn+C,MAAM,CAAC+sD,UAAU,GAAG7oD,IAAI,CAACgW,GAAG;IAC5Bla,MAAM,CAAC4vL,cAAc,CAAC5vL,MAAM,CAAC+sD,UAAU,CAAC;IAExC1sD,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAY,CAAE,CAAC,CAAC;IACnDN,MAAM,CAACo0L,UAAU,CAAC,CAAC;IACnB/zL,aAAa,CAAC0wD,aAAa,CAAC/wD,MAAM,CAACsY,UAAU,EAAE,UAAU,CAAC;IAC1DtY,MAAM,CAACm0L,SAAS,GAAG,IAAI;IAEvBn0L,MAAM,CAACq0L,eAAe,CAAC,CAAC;EAC5B,CAAC,CAAC;EAEF7zL,QAAQ,CAAC,YAAY;IACjB,IAAIR,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B,CAAC,MACI;MACDrV,MAAM,CAACgL,UAAU,CAAC,uBAAuB,CAAC;IAC9C;EACJ,CAAC,CAAC;EAEFhL,MAAM,CAACo0L,UAAU,GAAG,YAAY;IAC5B5zL,QAAQ,CAAC,YAAY;MACjB,IAAIR,MAAM,CAACqY,gBAAgB,EAAE;QACzBrY,MAAM,CAACqY,gBAAgB,GAAG,KAAK;QAC/BnT,WAAW,CAAC,YAAY;UACpB,IAAItF,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC;UAChB,IAAIlE,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,KAAK,mBAAmB,EAAE;YAClC;YACA1K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACm+C,SAAS,EAAE,UAAU8jD,CAAC,EAAE;cAC3C,IAAI/+D,CAAC,GAAG,wBAAwB,GAAG++D,CAAC,CAAC+8F,WAAW,GAAG,QAAQ,GACvD,+CAA+C,IAAI/8F,CAAC,CAACw4B,eAAe,GAAGx4B,CAAC,CAACw4B,eAAe,GAAG,QAAQ,CAAC,GACpG,QAAQ;cACZ,IAAIC,EAAE,GAAG96H,EAAE,CAACyR,IAAI,CAAC,SAAS,GAAG4wF,CAAC,CAACvkF,UAAU,CAAC;cAE1Cg9G,EAAE,CAACj7G,IAAI,CAACyjB,CAAC,CAAC;YACd,CAAC,CAAC;UACN;QACJ,CAAC,CAAC;QAEF7iC,aAAa,CAAC0wD,aAAa,CAAC/wD,MAAM,CAACsY,UAAU,EAAE,UAAU,CAAC;QAC1DjY,aAAa,CAAC0wD,aAAa,CAAC/wD,MAAM,CAACsY,UAAU,EAAE,YAAY,CAAC;MAChE;MAEAxU,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAACwjH,MAAM,GAAG,YAAY;IACxBnjH,aAAa,CAAC09E,eAAe,CAAC,YAAY,CAAC;IAE3C,IAAI/9E,MAAM,CAACmB,IAAI,KAAK,KAAK,IACrBnB,MAAM,CAACmB,IAAI,KAAK,MAAM,IACtBnB,MAAM,CAACmB,IAAI,KAAK,SAAS,EAAE;MAC3BnB,MAAM,CAACmB,IAAI,GAAG,YAAY;MAE1Bd,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACvC;IAEAL,UAAU,CAAC+K,UAAU,CAAC,wBAAwB,CAAC;EACnD,CAAC;EAEDhL,MAAM,CAAC26B,aAAa,GAAG,YAAY;IAC/B,IAAI36B,MAAM,CAACsuL,UAAU,KAAK,MAAM,EAAE;MAC9BxqL,CAAC,CAACC,OAAO,CAAC,CAAC;MACX44C,gBAAgB,CAAC8gJ,iBAAiB,CAACz9L,MAAM,CAACuuL,YAAY,CAAC,CAClDvqL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;QACfxjH,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;MACrC,CAAC,CAAC,SACI,CAAC,UAAUpwL,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACvD,CAAC,CAAC;IACV,CAAC,MACI,IAAInE,MAAM,CAACsuL,UAAU,KAAK,MAAM,EAAE;MACnCxqL,CAAC,CAACC,OAAO,CAAC,CAAC;MACX44C,gBAAgB,CAACkhJ,iBAAiB,CAAC79L,MAAM,CAACuuL,YAAY,CAAC,CAClDvqL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;QACfxjH,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;MACrC,CAAC,CAAC,SACI,CAAC,UAAUpwL,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACvD,CAAC,CAAC;IACV;EACJ,CAAC;EAEDnE,MAAM,CAACw0L,QAAQ,GAAG,UAAU1qL,IAAI,EAAE;IAC9B,IAAIA,IAAI,CAAC5G,IAAI,KAAKuqL,aAAa,EAAE;MAC7BztL,MAAM,CAACsuL,UAAU,GAAG,MAAM;MAC1BtuL,MAAM,CAACuuL,YAAY,GAAGzkL,IAAI,CAACssB,MAAM,IAAItsB,IAAI,CAAC4pB,MAAM;MAChDrzB,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC,GAAG,GAAG,IAAIsI,IAAI,CAAC2P,MAAM,IAAI3P,IAAI,CAACqrE,MAAM,IAAI,EAAE,CAAC,EACrH10E,cAAc,CAACe,SAAS,CAAC,6GAA6G,CAAC,EACvIf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC;EAEJ,CAAC;EAEDxB,MAAM,CAACy0L,QAAQ,GAAG,UAAU3qL,IAAI,EAAE;IAC9B,IAAIA,IAAI,CAAC5G,IAAI,KAAKuqL,aAAa,EAAE;MAC7BztL,MAAM,CAACsuL,UAAU,GAAG,MAAM;MAC1BtuL,MAAM,CAACuuL,YAAY,GAAGzkL,IAAI,CAACssB,MAAM,IAAItsB,IAAI,CAAC4pB,MAAM;MAChDrzB,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC,GAAG,GAAG,IAAIsI,IAAI,CAAC2P,MAAM,IAAI3P,IAAI,CAACqrE,MAAM,IAAI,EAAE,CAAC,EACrH10E,cAAc,CAACe,SAAS,CAAC,4GAA4G,CAAC,EACtIf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC;EAEJ,CAAC;EAEDxB,MAAM,CAAC29L,qBAAqB,GAAG,UAAUzjL,GAAG,EAAE;IAC1C,IAAIA,GAAG,CAACuB,UAAU,KAAKmyK,iBAAiB,EAAE;MACtC;IACJ;IAEA,IAAIphI,IAAI,GAAGnsD,aAAa,CAACmyE,0BAA0B,CAACt4D,GAAG,CAACsyC,IAAI,CAAC;IAC7D,IAAI,CAACA,IAAI,IAAIA,IAAI,KAAK,cAAc,EAAE;MAClCrsD,YAAY,CAACiE,SAAS,CAAC,8BAA8B,CAAC;MACtD;IACJ;IAEA,IAAIw5L,WAAW,GAAG,EAAE;IACpB,IAAI,CAAC,CAAC1jL,GAAG,CAAC+kL,OAAO,EAAE;MACfn/L,OAAO,CAAC4M,OAAO,CAACwN,GAAG,CAAChW,IAAI,EAAE,UAAUtE,EAAE,EAAE;QACpC,IAAIixL,GAAG,GAAG,IAAI;QACd,IAAIjxL,EAAE,CAACwD,EAAE,CAACiM,OAAO,CAACzP,EAAE,CAACyc,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,EACvCw0K,GAAG,GAAGjxL,EAAE,CAACwD,EAAE;QACf,IAAI0tL,GAAG,GAAG;UACN1tL,EAAE,EAAEytL,GAAG;UACPx0K,SAAS,EAAEzc,EAAE,CAACyc,SAAS;UACvByB,OAAO,EAAEle,EAAE,CAACke,OAAO;UACnBF,UAAU,EAAEhe,EAAE,CAACge,UAAU;UACzBF,UAAU,EAAExD,GAAG,CAACw2K,YAAY;UAC5BwO,gBAAgB,EAAEt/L,EAAE,CAACs/L,gBAAgB;UACrCC,YAAY,EAAEv/L,EAAE,CAACu/L;QACrB,CAAC;QAEDvB,WAAW,CAACv3L,IAAI,CAACyqL,GAAG,CAAC;MACzB,CAAC,CAAC;IACN;IAEAhtL,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CAACghJ,qBAAqB,CAACzjL,GAAG,CAACwZ,MAAM,EAAE84B,IAAI,EAAEoxI,WAAW,CAAC,CAChE55L,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MACfxjH,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;IACrC,CAAC,CAAC,SACI,CAAC,UAAUpwL,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACovL,aAAa,GAAG,UAAUr3I,MAAM,EAAE;IACrC,QAAQA,MAAM;MACV,KAAK,OAAO;QACR,OAAO,OAAO;MAClB,KAAK,SAAS;QACV,OAAO,SAAS;MACpB,KAAK,SAAS;QACV,OAAO,SAAS;MACpB,KAAK,YAAY;QACb,OAAO,YAAY;MACvB,KAAK,WAAW;QACZ,OAAO,WAAW;MACtB,KAAK,mBAAmB;QACpB,OAAO,QAAQ;MACnB,KAAK,oBAAoB;QACrB,OAAO,WAAW;MACtB,KAAK,cAAc;QACf,OAAO,SAAS;MACpB,KAAK,gBAAgB;QACjB,OAAO,UAAU;MACrB,KAAK,+BAA+B;QAChC,OAAO,sBAAsB;MACjC,KAAK,oBAAoB;QACrB,OAAO,kBAAkB;MAC7B,KAAK,UAAU;QACX,OAAO,QAAQ;MACnB,KAAK,UAAU;QACX,OAAO,WAAW;IAC1B;IAEA,OAAOA,MAAM;EACjB,CAAC;EAED/3C,MAAM,CAACsvL,UAAU,GAAG,UAAUI,QAAQ,EAAE33I,MAAM,EAAE;IAC5C,OAAO23I,QAAQ,KAAKjC,aAAa,IAC1B11I,MAAM,KAAK21I,cAAc;EACpC,CAAC;EAED1tL,MAAM,CAACwvL,UAAU,GAAG,UAAUlhL,IAAI,EAAEypC,MAAM,EAAE;IACxC,OAAOzpC,IAAI,KAAKm/K,aAAa,KAAK11I,MAAM,KAAK21I,cAAc,IACpD31I,MAAM,KAAKjgC,YAAY,CAAC;EACnC,CAAC;;EAED;EACA9X,MAAM,CAACmtD,MAAM,GAAG,YAAY;IACxB,IAAIoxI,OAAO,GAAGv+L,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,GAAGpG,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAEtEn+C,MAAM,CAACwY,YAAY,GAAG;MAClBiD,UAAU,EAAE3D,YAAY;MACxB04K,cAAc,EAAE+N,OAAO,GAAGA,OAAO,CAAC7gL,UAAU,GAAG,IAAI;MACnD2sK,gBAAgB,EAAEkU,OAAO,GAAGA,OAAO,CAACS,WAAW,GAAG,IAAI;MACtDtO,YAAY,EAAExwL,aAAa,CAACiN,YAAY;MACxCm9K,cAAc,EAAEpqL,aAAa,CAACyqB,UAAU;MACxC6hC,IAAI,EAAE,IAAI;MACV0iI,YAAY,EAAE,IAAI;MAClBhrL,IAAI,EAAE,EAAE;MACRywL,WAAW,EAAE,EAAE;MACf7uB,gBAAgB,EAAE,IAAI;MACtBooB,UAAU,EAAEluL,MAAM,CAACovL,aAAa,CAACt3K,YAAY,CAAC;MAC9Cu3K,OAAO,EAAErvL,MAAM,CAACsvL,UAAU,CAAC7B,aAAa,EAAE31K,YAAY,CAAC;MACvDy3K,OAAO,EAAE,KAAK;MACdrsL,IAAI,EAAEuqL;IACV,CAAC;IAEDztL,MAAM,CAACmB,IAAI,GAAG,KAAK;EACvB,CAAC;EAEDnB,MAAM,CAAC4vL,cAAc,GAAG,UAAU11K,GAAG,EAAE;IAEnC,IAAIqkL,OAAO,GAAGv+L,MAAM,CAACm+C,SAAS,CAACp4C,MAAM,CAAC,UAAU2O,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACgJ,UAAU,KAAKxD,GAAG,CAACklL,mBAAmB;IAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,IAAIV,KAAK,GAAGx+L,aAAa,CAACyqB,UAAU;IAEpC3qB,MAAM,CAACwY,YAAY,GAAG;MAClBiD,UAAU,EAAEvB,GAAG,CAAC7W,MAAM;MACtB8xE,MAAM,EAAEj7D,GAAG,CAACT,MAAM;MAClBia,MAAM,EAAExZ,GAAG,CAACkc,MAAM;MAClBo6J,cAAc,EAAEt2K,GAAG,CAACq2K,cAAc;MAClC8O,mBAAmB,EAAEnlL,GAAG,CAACklL,mBAAmB;MAC5C/U,gBAAgB,EAAE,CAAC,CAACkU,OAAO,GAAGA,OAAO,CAACS,WAAW,GAAG,IAAI;MACxDtO,YAAY,EAAEx2K,GAAG,CAACu2K,YAAY;MAC9BnG,cAAc,EAAEoU,KAAK;MACrBlyI,IAAI,EAAEtyC,GAAG,CAACsyC,IAAI;MACd0iI,YAAY,EAAEh1K,GAAG,CAACg1K,YAAY;MAC9Bn3I,MAAM,EAAE79B,GAAG,CAAC7W,MAAM;MAClBa,IAAI,EAAE,EAAE;MACRywL,WAAW,EAAE,EAAE;MACf7uB,gBAAgB,EAAE5rJ,GAAG,CAAC7W,MAAM,KAAKyU,YAAY,IAAIoC,GAAG,CAAC7W,MAAM,KAAKqqL,cAAc,IACvExzK,GAAG,CAAC7W,MAAM,KAAKsqL,cAAc;MACpCO,UAAU,EAAEluL,MAAM,CAACovL,aAAa,CAACl1K,GAAG,CAAC7W,MAAM,CAAC;MAC5CgsL,OAAO,EAAErvL,MAAM,CAACsvL,UAAU,CAAC7B,aAAa,EAAEvzK,GAAG,CAAC7W,MAAM,CAAC;MACrDksL,OAAO,EAAEvvL,MAAM,CAACwvL,UAAU,CAAC/B,aAAa,EAAEvzK,GAAG,CAAC7W,MAAM,CAAC;MACrDH,IAAI,EAAEuqL,aAAa;MACnBwR,OAAO,EAAE/kL,GAAG,CAAColL;IACjB,CAAC;IAEDt/L,MAAM,CAACmB,IAAI,GAAG,MAAM;EACxB,CAAC;EAEDnB,MAAM,CAACq0L,eAAe,GAAG,UAAUvxE,OAAO,EAAE;IACxC,IAAI,CAAC9iH,MAAM,CAACwY,YAAY,CAACkb,MAAM,EAAE;MAC7B,IAAInoB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA5H,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIiZ,GAAG,GAAGksK,oBAAoB,CAACkH,6BAA6B,CAACpwL,MAAM,CAACwY,YAAY,CAACkb,MAAM,EAAE,CAAC,EACtF,MAAM,EAAEovF,OAAO,CAAC,CACf9+G,IAAI,CAAC,UAAUE,IAAI,EAAE;MAClBlE,MAAM,CAACwY,YAAY,CAACtU,IAAI,GAAG,EAAE;MAC7BlE,MAAM,CAACwY,YAAY,CAACm8K,WAAW,GAAG,EAAE;MAEpC70L,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAAUjrD,EAAE,EAAE;QAC1CA,EAAE,CAAC+b,KAAK,GAAGgO,KAAK,CAACuE,OAAO,CAAC,CAAC;QAC1BtuB,EAAE,CAACs/L,gBAAgB,GAAG,CAAC,CAACt/L,EAAE,CAACs/L,gBAAgB,GAAGt/L,EAAE,CAACs/L,gBAAgB,GAAGt/L,EAAE,CAACmxL,gBAAgB;QAEvF/wL,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;MACrC,CAAC,CAAC;MAEFkE,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI2Z,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOuS,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;IAEN,OAAO6Y,GAAG;EACd,CAAC;EAEDhd,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;EAEjCv0L,MAAM,CAAC+vL,qBAAqB,GAAG,UAAUviI,UAAU,EAAE3sD,UAAU,EAAE;IAC7Db,MAAM,CAACiY,iBAAiB,GAAG,EAAE;IAC7BjY,MAAM,CAACmY,wBAAwB,GAAG,EAAE;IACpCnY,MAAM,CAACqZ,UAAU,GAAG,CAAC;IAErB,OAAO6vK,oBAAoB,CAAC6G,qBAAqB,CAACviI,UAAU,CAAC,CACxDxpD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACkY,wBAAwB,GAAG7O,GAAG,CAACnF,IAAI,CAACk7F,QAAQ;MACnDt/F,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,CAACk7F,QAAQ,EAAE,UAAUx/F,EAAE,EAAE;QAC7C,IAAIA,EAAE,CAAC4+B,QAAQ,IAAI5+B,EAAE,CAACizL,KAAK,IAAIjzL,EAAE,CAACizL,KAAK,CAACzsL,MAAM,GAAG,CAAC,EAAE;UAChDtG,OAAO,CAAC4M,OAAO,CAAC9M,EAAE,CAACizL,KAAK,EAAE,UAAU/oL,IAAI,EAAE;YACtCA,IAAI,CAACirL,WAAW,GAAG,IAAI;YACvB/0L,MAAM,CAACiY,iBAAiB,CAAC5R,IAAI,CAACyD,IAAI,CAAC;UACvC,CAAC,CAAC;QAEN,CAAC,MAAM;UACH9J,MAAM,CAACiY,iBAAiB,CAAC5R,IAAI,CAACzG,EAAE,CAAC;QACrC;MACJ,CAAC,CAAC;MAEFI,MAAM,CAACqZ,UAAU,GAAGhQ,GAAG,CAACnF,IAAI,CAACmV,UAAU;MAEvC,IAAI2E,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAACzL,MAAM,CAACiY,iBAAiB,CAAC;MAC3C,OAAO+F,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC;EACV,CAAC;EAED1L,MAAM,CAAC+Y,WAAW,GAAG,YAAY;IAC7B,IAAI/Y,MAAM,CAACu0L,mBAAmB,EAAE;MAC5BzwL,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/D,MAAM,CAAC+vL,qBAAqB,CAAC/vL,MAAM,CAACwY,YAAY,CAACg4K,cAAc,CAAC,CAC3DxsL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBrJ,MAAM,CAACu0L,mBAAmB,GAAG,KAAK;QAClCt0L,UAAU,CAAC+K,UAAU,CAAC,4BAA4B,EAC9C;UACIwN,YAAY,EAAExY,MAAM,CAACwY,YAAY;UACjCP,iBAAiB,EAAEjY,MAAM,CAACiY,iBAAiB;UAC3CC,wBAAwB,EAAElY,MAAM,CAACkY,wBAAwB;UACzDY,sBAAsB,EAAE9Y,MAAM,CAACia;QACnC,CAAC,CAAC;MACV,CAAC,CAAC,WACM,CAAC,YAAY;QACjBnW,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACV,CAAC,MAAM;MACHpE,UAAU,CAAC+K,UAAU,CAAC,4BAA4B,EAC9C;QACIwN,YAAY,EAAExY,MAAM,CAACwY,YAAY;QACjCP,iBAAiB,EAAEjY,MAAM,CAACiY,iBAAiB;QAC3CC,wBAAwB,EAAElY,MAAM,CAACkY,wBAAwB;QACzDY,sBAAsB,EAAE9Y,MAAM,CAACia;MACnC,CAAC,CAAC;IACV;EACJ,CAAC;EAEDja,MAAM,CAAC0I,MAAM,CAAC,6BAA6B,EACvC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB;MACA9E,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/D,MAAM,CAAC+vL,qBAAqB,CAAC/vL,MAAM,CAACwY,YAAY,CAACg4K,cAAc,CAAC,CAC3DxsL,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAIrJ,MAAM,CAACm0L,SAAS,KAAK,KAAK,EAAE;UAC5Bn0L,MAAM,CAACwY,YAAY,CAACtU,IAAI,GAAG,EAAE;QACjC,CAAC,MAAM;UACHlE,MAAM,CAACm0L,SAAS,GAAG,KAAK;QAC5B;QACA,IAAItrE,KAAK,GAAG7oH,MAAM,CAACm+C,SAAS,CAACp4C,MAAM,CAAC,UAAUk8F,CAAC,EAAE;UAC7C,OAAOA,CAAC,CAACvkF,UAAU,KAAK1d,MAAM,CAACwY,YAAY,CAACg4K,cAAc;QAC9D,CAAC,CAAC;QACF,IAAI3nE,KAAK,CAACziH,MAAM,KAAK,CAAC,EAAE;UACpBpG,MAAM,CAACwY,YAAY,CAAC6xK,gBAAgB,GAAGxhE,KAAK,CAAC,CAAC,CAAC,CAACm2E,WAAW;QAC/D;MACJ,CAAC,CAAC,WACM,CAAC,YAAY;QACjBl7L,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACV;EACJ,CACJ,CAAC;EAEDrE,MAAM,CAACia,kBAAkB,GAAG,UAAUC,GAAG,EAAEC,UAAU,EAAE3B,YAAY,EAAEI,cAAc,EAAgC;IAAA,IAA9B48K,oBAAoB,GAAArkL,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IAC7G,IAAI+I,GAAG,CAACskB,QAAQ,IAAI,CAACtkB,GAAG,CAAC66K,WAAW,EAAE;MAClC/0L,MAAM,CAACy1L,aAAa,CAACv7K,GAAG,CAAC;MACzB;IACJ;IAEA,IAAIwC,SAAS,GAAG,KAAK;IACrB5c,OAAO,CAAC4M,OAAO,CAAC8L,YAAY,CAACtU,IAAI,EAAE,UAAUtE,EAAE,EAAE;MAC7C,IAAIA,EAAE,CAACyc,SAAS,KAAKnC,GAAG,CAACmC,SAAS,EAAE;QAChCK,SAAS,GAAG,IAAI;QAEhB,IAAIvC,UAAU,KAAK,IAAI,EAAE;UACrBva,EAAE,CAACoxL,eAAe,GAAGp4K,cAAc,CAACgD,UAAU;QAClD,CAAC,MACI;UACDhc,EAAE,CAACoxL,eAAe,IAAI,CAAC;QAC3B;QAEA,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEF,IAAI,CAACt0K,SAAS,EAAE;MACZ,IAAIg5K,EAAE,GAAG;QACLtyL,EAAE,EAAE8W,GAAG,CAACmC,SAAS;QACjBA,SAAS,EAAEnC,GAAG,CAACmC,SAAS;QACxB5B,WAAW,EAAEP,GAAG,CAACO,WAAW;QAC5B/X,IAAI,EAAEwX,GAAG,CAACxX,IAAI;QACd+0L,IAAI,EAAEv9K,GAAG,CAAC07K,QAAQ;QAClB/5K,cAAc,EAAE3B,GAAG,CAAC4B,MAAM;QAC1BE,iBAAiB,EAAE9B,GAAG,CAAC+B,SAAS;QAChCF,OAAO,EAAE7B,GAAG,CAAC6B,OAAO;QACpBi1K,eAAe,EAAE,CAAC;QAClBx8J,aAAa,EAAEta,GAAG,CAACsa,aAAa;QAChCgK,QAAQ,EAAEtkB,GAAG,CAACskB,QAAQ;QACtBs3J,UAAU,EAAE57K,GAAG,CAAC47K,UAAU;QAC1Bx2J,OAAO,EAAEplB,GAAG,CAAColB,OAAO;QACpBC,OAAO,EAAErlB,GAAG,CAACqlB,OAAO;QACpBC,OAAO,EAAEtlB,GAAG,CAACslB,OAAO;QACpB7jB,KAAK,EAAEgO,KAAK,CAACuE,OAAO,CAAC,CAAC;QACtBirB,QAAQ,EAAE,EAAE;QACZ05I,KAAK,EAAE;MACX,CAAC;MAED,IAAI14K,UAAU,KAAK,IAAI,EAAE;QACrBu7K,EAAE,CAAC3E,gBAAgB,GAAGn4K,cAAc,CAACgD,UAAU;MACnD;MAEApD,YAAY,CAACtU,IAAI,CAACmC,IAAI,CAACqvL,EAAE,CAAC;MAE1B,IAAIF,oBAAoB,EAAE;QACtB,IAAI56K,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,6BAA6B,EAAE;UAAEoI,IAAI,EAAE8rL,EAAE,CAAChzL;QAAK,CAAC,CAAC;QACpFzC,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UAAC6P,OAAO,EAAED;QAAG,CAAC,CAAC;MAC1D;IACJ;EACJ,CAAC;EAED5a,MAAM,CAAC6+L,kBAAkB,GAAG,UAAU3kL,GAAG,EAAE;IACvC,KAAK,IAAI1F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACkC,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACtD,IAAIxU,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACsQ,CAAC,CAAC,CAACpR,EAAE,KAAK8W,GAAG,CAAC9W,EAAE,EAAE;QAC3CpD,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACoL,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;QACrC;MACJ;IACJ;EACJ,CAAC;EAEDxU,MAAM,CAACwb,kBAAkB,GAAG,UAAUtB,GAAG,EAAE5L,IAAI,EAAE;IAC7C,IAAKtO,MAAM,CAACwY,YAAY,CAACiD,UAAU,KAAK3D,YAAY,IAAIxJ,IAAI,KAAK,SAAS,IAAMtO,MAAM,CAACwY,YAAY,CAACiD,UAAU,KAAKmyK,iBAAiB,IAAIt/K,IAAI,KAAK,UAAW,EAAE;MAC1JtO,MAAM,CAACgb,kBAAkB,CAACd,GAAG,EAAE5L,IAAI,CAAC;MACpCtO,MAAM,CAAC0b,mBAAmB,CAACxB,GAAG,CAACyB,KAAK,CAAC;IACzC;EACJ,CAAC;EAED3b,MAAM,CAACy1L,aAAa,GAAG,UAAUv7K,GAAG,EAAE;IAClC,IAAI87K,cAAc,GAAGh2L,MAAM,CAACkY,wBAAwB,CAACnS,MAAM,CAAC,UAAU+D,IAAI,EAAE;MAAE,OAAOA,IAAI,CAAC00B,QAAQ,KAAKtkB,GAAG,CAACskB,QAAQ;IAAE,CAAC,CAAC;IACvH,IAAIt6B,IAAI,GAAG;MACPquF,QAAQ,EAAEr4E,GAAG,CAACskB,QAAQ;MACtB4qJ,UAAU,EAAElvK,GAAG,CAAC47K,UAAU;MAC1B1L,gBAAgB,EAAElwK,GAAG,CAAC24K,KAAK,IAAI,EAAE;MACjC56K,iBAAiB,EAAE+9K,cAAc,CAAC,CAAC,CAAC,CAACnD,KAAK,IAAI,EAAE;MAChD9I,UAAU,EAAE/pL,MAAM,CAACwY,YAAY,CAACiD,UAAU,KAAK3D,YAAY;MAC3DvQ,OAAO,EAAE;QACL4jL,aAAa,EAAE6K,cAAc,CAAC,CAAC,CAAC,CAAC7K,aAAa;QAC9CE,aAAa,EAAE2K,cAAc,CAAC,CAAC,CAAC,CAAC3K,aAAa;QAC9CC,aAAa,EAAE0K,cAAc,CAAC,CAAC,CAAC,CAAC1K;MACrC,CAAC;MACDjB,gBAAgB,EAAErqL,MAAM,CAACwY,YAAY,CAAC6xK,gBAAgB;MACtDC,cAAc,EAAEtqL,MAAM,CAACwY,YAAY,CAAC8xK;IACxC,CAAC;IACDrqL,UAAU,CAAC+K,UAAU,CAAC,wBAAwB,EAAE9G,IAAI,CAAC;EACzD,CAAC;EAEDlE,MAAM,CAACgb,kBAAkB,GAAG,UAAUd,GAAG,EAAE5L,IAAI,EAAE;IAC7CtO,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B9Y,OAAO,CAAC+F,IAAI,CAACqU,GAAG,EAAEla,MAAM,CAAC4Y,cAAc,CAAC;IACxC,IAAGtK,IAAI,KAAK,SAAS,EAAE;MACnBtO,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC,CAAC5b,MAAM,CAAC4Y,cAAc,CAACo4K,eAAe,GAAGhxL,MAAM,CAAC4Y,cAAc,CAACo4K,eAAe,GAAG,CAAC;IAC1H,CAAC,MACI;MACDhxL,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC,CAAC5b,MAAM,CAAC4Y,cAAc,CAACsmL,gBAAgB,GAAGl/L,MAAM,CAAC4Y,cAAc,CAACsmL,gBAAgB,GAAG,CAAC;IAC5H;IACAl/L,MAAM,CAAC4Y,cAAc,CAACiD,cAAc,GAAG,CAAC,CAAC3B,GAAG,CAAC2B,cAAc,GAAG3B,GAAG,CAAC2B,cAAc,GAAG3B,GAAG,CAAC4B,MAAM;IAC7F9b,MAAM,CAAC4Y,cAAc,CAACmD,OAAO,GAAG,CAAC,CAAC7B,GAAG,CAAC6B,OAAO,GAAG7B,GAAG,CAAC6B,OAAO,GAAG7B,GAAG,CAAC6B,OAAO;IACzE/b,MAAM,CAAC4Y,cAAc,CAACoD,iBAAiB,GAAG,CAAC,CAAC9B,GAAG,CAAC8B,iBAAiB,GAAG9B,GAAG,CAAC8B,iBAAiB,GAAG9B,GAAG,CAAC+B,SAAS;IACzGjc,MAAM,CAAC4Y,cAAc,CAACsD,UAAU,GAAG,IAAI;IACvClc,MAAM,CAAC4Y,cAAc,CAACuD,WAAW,GAAG,IAAI;IACxCnc,MAAM,CAAC4Y,cAAc,CAACwD,QAAQ,GAAG,IAAI;IACrC,IAAI,CAACpc,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EAAE;MAC3BpD,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,GAAG8W,GAAG,CAACmC,SAAS;IAC5C;IACArc,MAAM,CAAC4Y,cAAc,CAAC1V,IAAI,GAAGoL,IAAI;EACrC,CAAC;EAEDtO,MAAM,CAAC0b,mBAAmB,GAAG,UAAUY,IAAI,EAAE;IACzCtc,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,GAAGvV,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;IAC9Dpb,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC2Y,eAAe,CAAC9C,IAAI,CAAC,CAACyG,IAAI,GAAG,iBAAiB,GAAG,GAAG,GAAGA,IAAI,CAAC;IACvE,CAAC,CAAC;EACN,CAAC;;EAED;EACAtc,MAAM,CAACuc,WAAW,GAAG,UAAUC,GAAG,EAAEla,KAAK,EAAE;IAEvC9B,QAAQ,CAAC,YAAY;MAAER,MAAM,CAAC2Y,eAAe,CAAC7N,IAAI,CAAC,IAAI,CAAC;IAAE,CAAC,CAAC;IAE5D,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAY;QACjB,IAAIiZ,MAAM,CAACzZ,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,CAAC,IAAI8qF,GAAG,EAAE;UAC5CrgG,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAGnC,MAAM,CAACzZ,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,CAAC;QAC1E,CAAC,MACI;UACDvV,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC;QACxC;QACA5b,MAAM,CAACyc,mBAAmB,CAAC,CAAC;MAChC,CAAC,CAAC;IACN;EACJ,CAAC;EAEDzc,MAAM,CAACyc,mBAAmB,GAAG,YAAY;IACrC3c,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACwY,YAAY,CAACtU,IAAI,EAAE,UAAUtE,EAAE,EAAE;MACpD,IAAIA,EAAE,CAACwD,EAAE,KAAKpD,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EAAE;QACpCsZ,SAAS,GAAG,IAAI;QAChB,IAAG1c,MAAM,CAAC4Y,cAAc,CAAC1V,IAAI,KAAK,SAAS,EAAE;UACzCtD,EAAE,CAACoxL,eAAe,GAAGhxL,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;QACzD,CAAC,MACI;UACDhc,EAAE,CAACs/L,gBAAgB,GAAGl/L,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;QAC1D;QACA,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;EACN,CAAC;EAED5b,MAAM,CAACqwL,mBAAmB,GAAG,YAAY;IACrCvsL,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAOmlL,oBAAoB,CAACmH,mBAAmB,CAACrwL,MAAM,CAACwY,YAAY,CAAC,CAC/DxU,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAI2U,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOuS,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACwjH,MAAM,CAAC,CAAC;MACfxjH,MAAM,CAACu0L,mBAAmB,GAAG,IAAI;IACrC,CAAC,CAAC,SACI,CAAC,UAAUpwL,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACk2L,qBAAqB,GAAG,EAAE;EACjCl2L,MAAM,CAACm2L,kBAAkB,GAAG;IAAE5gL,KAAK,EAAE;EAAG,CAAC;EAEzCvV,MAAM,CAACo2L,0BAA0B,GAAG,UAAUl8K,GAAG,EAAE;IAC/Cla,MAAM,CAACk2L,qBAAqB,GAAGh8K,GAAG;IAClCla,MAAM,CAACm2L,kBAAkB,GAAG;MAAE5gL,KAAK,EAAE2E,GAAG,CAACi/B;IAAS,CAAC;IACnD,IAAItrB,cAAc,GAAG/pB,CAAC,CAAC,yBAAyB,CAAC;IACjDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACq2L,0BAA0B,GAAG,UAAUxyI,MAAM,EAAE;IAClD,IAAIA,MAAM,KAAK,KAAK,EAChB7jD,MAAM,CAACk2L,qBAAqB,CAAC/8I,QAAQ,GAAGn5C,MAAM,CAACm2L,kBAAkB,CAAC5gL,KAAK;IAE3E,IAAIsY,cAAc,GAAG/pB,CAAC,CAAC,yBAAyB,CAAC;IACjDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;;EAED;EACA7tB,MAAM,CAACu/L,cAAc,GAAG,YAAY;IAChC,IAAI1xK,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;IAClDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACw/L,eAAe,GAAG,UAAUC,MAAM,EAAEC,SAAS,EAAE;IAClD,IAAI/tK,GAAG,GAAG,CAAC8tK,MAAM;IACjB,IAAI,CAACC,SAAS,EACV1/L,MAAM,CAACs2L,eAAe,CAAC3kK,GAAG,CAAC,CAAC,KAC3B;MACD,IAAI9D,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;MAClDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAC7C;EACJ,CAAC;EAED7tB,MAAM,CAACs2L,eAAe,GAAG,UAAUlF,aAAa,EAAE;IAC9CttL,CAAC,CAACC,OAAO,CAAC,CAAC;IACXmlL,oBAAoB,CAACiI,mBAAmB,CAACnxL,MAAM,CAACwY,YAAY,CAACg4K,cAAc,EACvExwL,MAAM,CAACwY,YAAY,CAACk4K,YAAY,EAAEU,aAAa,CAAC,CAC/CptL,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,CAACnF,IAAI,CAACmV,UAAU,GAAG,CAAC,EAAE;QACzBrZ,MAAM,CAACwY,YAAY,CAACtU,IAAI,GAAG,EAAE;QAC7BpE,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,CAACk7F,QAAQ,EAAE,UAAUllF,GAAG,EAAE;UAE9C,IAAGA,GAAG,CAACskB,QAAQ,IAAItkB,GAAG,CAAC24K,KAAK,IAAI34K,GAAG,CAAC24K,KAAK,CAACzsL,MAAM,GAAG,CAAC,EAAE;YAClDtG,OAAO,CAAC4M,OAAO,CAACwN,GAAG,CAAC24K,KAAK,EAAE,UAASC,OAAO,EAAE;cACzC,IAAIhC,GAAG,GAAG;gBACN1tL,EAAE,EAAE0vL,OAAO,CAACz2K,SAAS;gBACrBA,SAAS,EAAEy2K,OAAO,CAACz2K,SAAS;gBAC5B5B,WAAW,EAAEq4K,OAAO,CAACr4K,WAAW;gBAChC/X,IAAI,EAAEowL,OAAO,CAACpwL,IAAI;gBAClB+0L,IAAI,EAAE3E,OAAO,CAAC8C,QAAQ;gBACtB/5K,cAAc,EAAEi3K,OAAO,CAACh3K,MAAM;gBAC9BE,iBAAiB,EAAE82K,OAAO,CAAC72K,SAAS;gBACpCF,OAAO,EAAE+2K,OAAO,CAAC/2K,OAAO;gBACxBi1K,eAAe,EAAE8B,OAAO,CAAC9B,eAAe;gBACxCx8J,aAAa,EAAEs+J,OAAO,CAACt+J,aAAa;gBACpCgK,QAAQ,EAAEs0J,OAAO,CAACt0J,QAAQ;gBAC1Bs3J,UAAU,EAAEhD,OAAO,CAACgD,UAAU;gBAC9Bx2J,OAAO,EAAEwzJ,OAAO,CAACxzJ,OAAO;gBACxBC,OAAO,EAAEuzJ,OAAO,CAACvzJ,OAAO;gBACxBC,OAAO,EAAEszJ,OAAO,CAACtzJ,OAAO;gBACxBqzJ,KAAK,EAAE,IAAI;gBACXl3K,KAAK,EAAEgO,KAAK,CAACuE,OAAO,CAAC,CAAC;gBACtBirB,QAAQ,EAAE;cACd,CAAC;cAEDn5C,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACmC,IAAI,CAACyqL,GAAG,CAAC;YACtC,CAAC,CAAC;UACN,CAAC,MAAM;YACH,IAAI4E,EAAE,GAAG;cACLtyL,EAAE,EAAE8W,GAAG,CAACmC,SAAS;cACjBA,SAAS,EAAEnC,GAAG,CAACmC,SAAS;cACxB5B,WAAW,EAAEP,GAAG,CAACO,WAAW;cAC5B/X,IAAI,EAAEwX,GAAG,CAACxX,IAAI;cACd+0L,IAAI,EAAEv9K,GAAG,CAAC07K,QAAQ;cAClB/5K,cAAc,EAAE3B,GAAG,CAAC4B,MAAM;cAC1BE,iBAAiB,EAAE9B,GAAG,CAAC+B,SAAS;cAChCF,OAAO,EAAE7B,GAAG,CAAC6B,OAAO;cACpBi1K,eAAe,EAAE92K,GAAG,CAAC82K,eAAe;cACpCx8J,aAAa,EAAEta,GAAG,CAACsa,aAAa;cAChCgK,QAAQ,EAAEtkB,GAAG,CAACskB,QAAQ;cACtBs3J,UAAU,EAAE57K,GAAG,CAAC47K,UAAU;cAC1Bx2J,OAAO,EAAEplB,GAAG,CAAColB,OAAO;cACpBC,OAAO,EAAErlB,GAAG,CAACqlB,OAAO;cACpBC,OAAO,EAAEtlB,GAAG,CAACslB,OAAO;cACpBqzJ,KAAK,EAAE,IAAI;cACXl3K,KAAK,EAAEgO,KAAK,CAACuE,OAAO,CAAC,CAAC;cACtBirB,QAAQ,EAAE;YACd,CAAC;YAEDn5C,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACmC,IAAI,CAACqvL,EAAE,CAAC;UACrC;QACJ,CAAC,CAAC;MACN,CAAC,MAAM;QACHv1L,YAAY,CAACiE,SAAS,CAAC,+BAA+B,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACnF;IAEJ,CAAC,CAAC,SACI,CAAC,UAAUD,GAAG,EAAE;MAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC,WACM,CAAC,YAAY;MACjB,IAAI0pB,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;MAClDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;MAEzC/pB,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;;EAED;EACArE,MAAM,CAACqC,GAAG,CAAC,wBAAwB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACxDA,IAAI,CAAC2kH,KAAK,CAACn8G,OAAO,CAAC,UAAU5C,IAAI,EAAE;MAC/B9J,MAAM,CAACu2L,oBAAoB,CAACzsL,IAAI,EAAE5F,IAAI,CAAC6mL,QAAQ,CAAC;IACpD,CAAC,CAAC;EACN,CAAC,CAAC;EAEF/qL,MAAM,CAACu2L,oBAAoB,GAAG,UAAUr8K,GAAG,EAAE6wK,QAAQ,EAAE;IACnD,IAAMwM,QAAQ,GAAGv3L,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACmN,IAAI,CAAC,UAAUrL,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACqW,SAAS,KAAKnC,GAAG,CAACmC,SAAS;IAAE,CAAC,CAAC;IACtG,IAAIk7K,QAAQ,EAAE;MACVA,QAAQ,CAACvG,eAAe,IAAI92K,GAAG,CAAC82K,eAAe;IACnD,CAAC,MAAM;MACH,IAAMwG,MAAM,GAAG;QACXp0L,EAAE,EAAE8W,GAAG,CAACmC,SAAS;QACjBA,SAAS,EAAEnC,GAAG,CAACmC,SAAS;QACxB5B,WAAW,EAAEP,GAAG,CAACO,WAAW;QAC5B/X,IAAI,EAAEwX,GAAG,CAACxX,IAAI;QACd+0L,IAAI,EAAEv9K,GAAG,CAAC07K,QAAQ;QAClB/5K,cAAc,EAAE3B,GAAG,CAAC4B,MAAM;QAC1BE,iBAAiB,EAAE9B,GAAG,CAAC+B,SAAS;QAChCF,OAAO,EAAE7B,GAAG,CAAC6B,OAAO;QACpBi1K,eAAe,EAAE92K,GAAG,CAAC82K,eAAe;QACpCx8J,aAAa,EAAEta,GAAG,CAACsa,aAAa;QAChCgK,QAAQ,EAAEtkB,GAAG,CAACskB,QAAQ;QACtBs3J,UAAU,EAAE57K,GAAG,CAAC47K,UAAU;QAC1Bx2J,OAAO,EAAEplB,GAAG,CAAColB,OAAO;QACpBC,OAAO,EAAErlB,GAAG,CAACqlB,OAAO;QACpBC,OAAO,EAAEtlB,GAAG,CAACslB,OAAO;QACpB7jB,KAAK,EAAEgO,KAAK,CAACuE,OAAO,CAAC,CAAC;QACtBirB,QAAQ,EAAE4xI,QAAQ;QAClB8H,KAAK,EAAE;MACX,CAAC;MACD7yL,MAAM,CAACwY,YAAY,CAACtU,IAAI,GAAGlE,MAAM,CAACwY,YAAY,CAACtU,IAAI,CAACuN,MAAM,CAAC+lL,MAAM,CAAC;IACtE;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;AChvBX13L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,sBAAsB,EACrD,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAExG,UAAUle,EAAE,EAAET,aAAa,EAAEO,cAAc,EAAE4vB,eAAe,EAAEhwB,aAAa,EAAEG,QAAQ,EAAEmpB,KAAK,EAAEG,OAAO,EAAE;EAEnG,IAAI,CAACiwE,KAAK,GAAGz6F,kBAAkB,CAACqgM,mBAAmB;EACnD,IAAI,CAACxlG,WAAW,GAAG,IAAI;EACvB,IAAI,CAACjvE,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;EAE1D,IAAI,CAACw0K,aAAa,GAAG,YAAY;IAC7B,OAAO;MACH,mBAAmB,EAAE,IAAI,CAAC7lG,KAAK;MAC/B,qBAAqB,EAAE,UAAU;MACjC,wBAAwB,EAAEz6F,kBAAkB,CAACqjF,UAAU;MACvD,kBAAkB,EAAE,aAAa;MACjC,uBAAuB,EAAEziF,aAAa,CAAC8pC,eAAe;MACtD,wBAAwB,EAAE9pC,aAAa,CAACgqC,gBAAgB;MACxD,0BAA0B,EAAEhqC,aAAa,CAACkqC,kBAAkB;MAC5D,eAAe,EAAEzgB,KAAK,CAACuE,OAAO,CAAC,CAAC;MAChC,gBAAgB,EAAE5uB,kBAAkB,CAAC2oC,aAAa,IAAI,OAAO,GAAG,IAAI,GAAG,KAAK;MAC5E,cAAc,EAAE;IACpB,CAAC;EACL,CAAC;EAED,IAAI,CAACuzD,MAAM,GAAG,UAAU1E,QAAQ,EAAE;IAC9B,IAAIxzE,IAAI,GAAG,IAAI;IACf,IAAIu8K,MAAM,GAAG/oG,QAAQ,CAAChqD,YAAY;IAElC,IAAI,CAAC+yJ,MAAM,EAAE;MACT,IAAIt0L,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACqb,MAAM,CAAC,oBAAoB,CAAC;MACrC,OAAOrb,QAAQ,CAACG,OAAO;IAC3B;;IAEA;IACA,OAAO2kB,eAAe,CAACyvK,cAAc,CAAC,IAAI,CAACF,aAAa,CAAC,CAAC,EAAEC,MAAM,EAAE,IAAI,CAAC,CACxE77L,IAAI,CAAC,UAAUE,IAAI,EAAE;MAElB,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,EACD,UAAUxH,IAAI,EAAE;MAAE;MACd,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB,IAAItH,IAAI,CAAC6zC,MAAM,IAAI,GAAG,IAAI7zC,IAAI,CAAC6zC,MAAM,IAAI,GAAG;QAAE;QAC9C;UACIxsC,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;QAC3B,CAAC,MACI;QACDF,QAAQ,CAACqb,MAAM,CAAC1iB,IAAI,CAAC;MACzB;MACA,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CACA,CAAC,CACA1H,IAAI,CAAC,UAAU+7L,cAAc,EAAE;MAC5B,IAAI,CAACA,cAAc,EAAE;QACjB,IAAIx0L,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtB,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,MAEG,OAAO2kB,eAAe,CAAC2vK,gBAAgB,CAAC18K,IAAI,CAACs8K,aAAa,CAAC,CAAC,EAAEC,MAAM,EAAE,IAAI,CAAC;IACnF,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACr8I,IAAI,GAAG,UAAUtV,KAAK,EAAE4oD,QAAQ,EAAE;IACnC,IAAI,CAAC5oD,KAAK,EAAE;MACR,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI4X,IAAI,GAAG,IAAI;IACf;IACA,IAAIu8K,MAAM,GAAG/oG,QAAQ,CAAChqD,YAAY;IAClC,IAAImzJ,UAAU,GAAGnpG,QAAQ,CAACopG,aAAa;IACvC,IAAIC,cAAc,GAAGrpG,QAAQ,CAACspG,iBAAiB;IAE/C,OAAO98K,IAAI,CAACk4E,MAAM,CAAC1E,QAAQ,CAAC,CACnB9yF,IAAI,CAAC,UAAU8yL,IAAI,EAAE;MAClB,OAAOzmK,eAAe,CAACgwK,gBAAgB,CAAC/8K,IAAI,CAACs8K,aAAa,CAAC,CAAC,EAAEC,MAAM,EAAEI,UAAU,EAAEE,cAAc,EAAE,IAAI,CAAC;IAC3G,CAAC,CAAC;EACd,CAAC;EAED,IAAI,CAAC18J,WAAW,GAAG,UAAUl8B,OAAO,EAAE;IAClC,IAAIuvF,QAAQ,GAAG52F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IACrD,IAAIjsB,IAAI,GAAG,IAAI;IAEf,OAAO+M,eAAe,CAACiwK,iBAAiB,CAAC,IAAI,CAACV,aAAa,CAAC,CAAC,EAAE9oG,QAAQ,CAAChqD,YAAY,EAAEvlC,OAAO,CAACkd,MAAM,EAAEld,OAAO,CAAC+wB,WAAW,CAAC,CACzHt0B,IAAI,CAAC,UAAUq5F,eAAe,EAAE;MAC7Br4F,OAAO,CAACC,GAAG,CAAC,4BAA4B,GAAGo4F,eAAe,CAAChoC,MAAM,CAACulE,OAAO,CAAC,eAAe,CAAC,GAC9E,WAAW,GAAGljG,IAAI,CAAC2T,KAAK,CAACgyD,eAAe,CAAChoC,MAAM,CAACnxD,IAAI,CAAC,CAACq8L,iBAAiB,GACvE,kBAAkB,GAAGljG,eAAe,CAACn5F,IAAI,CAACo0G,aAAa,GACvD,wBAAwB,GAAGjb,eAAe,CAACn5F,IAAI,CAACsoH,UAAU,CAACg0E,mBAAmB,CAAC;MAG3F,IAAIj1L,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB;;MAEA,IAAI6xF,eAAe,CAACn5F,IAAI,CAACu8L,UAAU,EAAE;QAEjC;QACA,IAAIpjG,eAAe,CAACn5F,IAAI,CAACsoH,UAAU,CAACg0E,mBAAmB,IAAI,CAAC,IACxD77K,UAAU,CAAC04E,eAAe,CAACn5F,IAAI,CAACwpH,cAAc,CAAC,GAAG/oG,UAAU,CAACpd,OAAO,CAACkd,MAAM,CAAC,EAAE;UAC9E;UACA,IAAImxB,GAAG,GAAGn1C,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,GAAGnB,aAAa,CAAC60E,aAAa,CAACmoB,eAAe,CAACn5F,IAAI,CAACwpH,cAAc,EAAEpqG,IAAI,CAAC4H,eAAe,CAAC,GAAG,GAAG,GAAGzqB,cAAc,CAACe,SAAS,CAAC,kEAAkE,CAAC;UAC9O67F,eAAe,CAACn5F,IAAI,CAACgpK,eAAe,GAAG,IAAI;UAE3C7sK,aAAa,CAACowE,cAAc,CAAC;YAAEiwH,KAAK,EAAE,EAAE;YAAEjqJ,IAAI,EAAEb;UAAI,CAAC,EAAE,YAAY;YAC/DrqC,QAAQ,CAACE,OAAO,CAAC4xF,eAAe,CAAC;UACrC,CAAC,CAAC;QACN,CAAC,MACI;UACD9xF,QAAQ,CAACE,OAAO,CAAC4xF,eAAe,CAAC;QACrC;QAEA,IAAI9yC,IAAI,GAAGh/C,QAAQ,CAACG,OAAO;QAC3B,IAAI,CAAC,CAAC2xF,eAAe,CAACn5F,IAAI,CAACy8L,SAAS,EAAE;UAClC;UACAp2I,IAAI,GAAGA,IAAI,CAACvmD,IAAI,CAAC,UAAUq5F,eAAe,EAAE;YACxC,OAAOhtE,eAAe,CAACmkI,QAAQ,CAAC,sBAAsB,EAAEn3D,eAAe,CAACn5F,IAAI,CAACy8L,SAAS,CAAC;UAC3F,CAAC,CAAC,CACD38L,IAAI,CAAC,UAAUqF,GAAG,EAAE;YACjBg0F,eAAe,CAACn5F,IAAI,CAAC0pH,cAAc,GAAGvkH,GAAG,CAACnF,IAAI;YAC9C,IAAIiqK,SAAS,GAAGxtK,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAC1B2iK,SAAS,CAAC1iK,OAAO,CAAC4xF,eAAe,CAAC;YAClC,OAAO8wE,SAAS,CAACziK,OAAO;UAC5B,CAAC,CAAC;QACN;QAEA6+C,IAAI,GAAGA,IAAI,CAACvmD,IAAI,CAAC,UAAUq5F,eAAe,EAAE;UACxCA,eAAe,CAACn5F,IAAI,CAACusB,QAAQ,GAAG,sBAAsB;UACtD,IAAI8tJ,SAAS,GAAG59K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAC1B,IAAIvH,IAAI,GAAG;YACPwjB,MAAM,EAAE,IAAI;YACZoc,QAAQ,EAAE;cACNE,mBAAmB,EAAEs5D,eAAe,CAACn5F,IAAI,CAACo0G,aAAa;cACvDva,mBAAmB,EAAEV,eAAe,CAACn5F;YACzC;UACJ,CAAC;UAED,IAAIm5F,eAAe,CAACn5F,IAAI,CAACgpK,eAAe,KAAK,IAAI,EAAE;YAC/CjpK,IAAI,CAAC28L,iBAAiB,GAAGvjG,eAAe,CAACn5F,IAAI,CAACwpH,cAAc;UAChE;UAEA6wD,SAAS,CAAC9yK,OAAO,CAACxH,IAAI,CAAC;UAEvB,OAAOs6K,SAAS,CAAC7yK,OAAO;QAC5B,CAAC,CAAC;QAEF,OAAO6+C,IAAI;MACf,CAAC,MACI;QACD,IAAIlhD,GAAG,GAAG;UACNoe,MAAM,EAAE,KAAK;UACboc,QAAQ,EAAE;YACNC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC,GAAG67F,eAAe,CAACn5F,IAAI,CAAC28L,UAAU,GAAG,MAAM,GAAGxjG,eAAe,CAACn5F,IAAI,CAACsoH,UAAU,CAACs0E;UAC/I;QACJ,CAAC;;QAED;QACA;QACA,IAAIzjG,eAAe,CAACn5F,IAAI,CAACsoH,UAAU,CAACg0E,mBAAmB,IAAI,EAAE,EAAE;UAC3Dn3L,GAAG,CAACqxB,gBAAgB,GAAG,IAAI;UAC3BrxB,GAAG,CAACg0F,eAAe,GAAGA,eAAe,CAACn5F,IAAI;UAC1CmF,GAAG,CAACw6B,QAAQ,CAACC,gBAAgB,GAAGrjC,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC,GAAG67F,eAAe,CAACn5F,IAAI,CAAC28L,UAAU,GAAG,OAAO,GAAGxjG,eAAe,CAACn5F,IAAI,CAACsoH,UAAU,CAACs0E,sBAAsB;QACpL;QAEAv1L,QAAQ,CAACqb,MAAM,CAACvd,GAAG,CAAC;QACpB,OAAOkC,QAAQ,CAACG,OAAO;MAC3B;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC02B,MAAM,GAAG,UAAUxiC,EAAE,EAAEq+F,SAAS,EAAE12F,OAAO,EAAE;IAC5C,IAAI+b,IAAI,GAAG,IAAI;IACf,IAAIwzE,QAAQ,GAAG52F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;;IAErD;IACA,IAAIwxJ,SAAS,GAAGnhM,EAAE,CAACm+F,mBAAmB,CAACijG,MAAM,CAAC3vL,IAAI,CAAC,UAAArL,CAAC;MAAA,OAAIA,CAAC,CAACi7L,GAAG,IAAIj7L,CAAC,CAACi7L,GAAG,KAAK,QAAQ;IAAA,EAAC;IAEpF,IAAI,CAACF,SAAS,EAAE;MAAE;MACdA,SAAS,GAAGnhM,EAAE,CAACm+F,mBAAmB,CAACijG,MAAM,CAAC3vL,IAAI,CAAC,UAAArL,CAAC;QAAA,OAAIA,CAAC,CAACi7L,GAAG,IAAIj7L,CAAC,CAACi7L,GAAG,KAAK,UAAU;MAAA,EAAC;IACtF;IAEA,IAAI,CAACF,SAAS,EAAE;MACZ,IAAIx1L,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACqb,MAAM,CAAC;QACZa,MAAM,EAAE,KAAK;QACboc,QAAQ,EAAE;UACNC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,4CAA4C,CAAC,GAAG5B,EAAE,CAAC04G;QAClG;MACJ,CAAC,CAAC;MAEF,OAAO/sG,QAAQ,CAACG,OAAO;IAC3B;IAEA,OAAO2kB,eAAe,CAAC6wK,mBAAmB,CAACH,SAAS,CAACzqJ,IAAI,EAAE,IAAI,CAACspJ,aAAa,CAAC,CAAC,EAAE9oG,QAAQ,CAAChqD,YAAY,EAAEmxD,SAAS,EAAE12F,OAAO,CAAC+wB,WAAW,CAAC,CAC9Ht0B,IAAI,CAAC,UAAUq5F,eAAe,EAAE;MAC7B,IAAI9xF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzBxG,OAAO,CAACC,GAAG,CAAC,4BAA4B,GAAGo4F,eAAe,CAAChoC,MAAM,CAACulE,OAAO,CAAC,eAAe,CAAC,GAC9E,WAAW,GAAG38B,SAAS,GACvB,kBAAkB,GAAGZ,eAAe,CAACn5F,IAAI,CAACo0G,aAAa,GACvD,wBAAwB,GAAGjb,eAAe,CAACn5F,IAAI,CAACsoH,UAAU,CAACg0E,mBAAmB,CAAC;MAG3F,IAAInjG,eAAe,CAACn5F,IAAI,CAACu8L,UAAU,EAAE;QAEjCl1L,QAAQ,CAACE,OAAO,CAAC4xF,eAAe,CAAC;QAEjC,IAAI,CAAC,CAACA,eAAe,CAACn5F,IAAI,CAACy8L,SAAS,EAAE;UAClC;UACAp1L,QAAQ,CAACG,OAAO,GAAGH,QAAQ,CAACG,OAAO,CAAC1H,IAAI,CAAC,UAAUq5F,eAAe,EAAE;YAChE,OAAOhtE,eAAe,CAACmkI,QAAQ,CAAC,sBAAsB,EAAEn3D,eAAe,CAACn5F,IAAI,CAACy8L,SAAS,CAAC;UAC3F,CAAC,CAAC,CACD38L,IAAI,CAAC,UAAUqF,GAAG,EAAE;YACjBg0F,eAAe,CAACn5F,IAAI,CAAC0pH,cAAc,GAAGvkH,GAAG,CAACnF,IAAI;YAC9C,IAAIiqK,SAAS,GAAGxtK,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAC1B2iK,SAAS,CAAC1iK,OAAO,CAAC4xF,eAAe,CAAC;YAClC,OAAO8wE,SAAS,CAACziK,OAAO;UAC5B,CAAC,CAAC;QACN;QAEAH,QAAQ,CAACG,OAAO,GAAGH,QAAQ,CAACG,OAAO,CAAC1H,IAAI,CAAC,UAAUq5F,eAAe,EAAE;UAChEA,eAAe,CAACn5F,IAAI,CAACusB,QAAQ,GAAG,sBAAsB;UACtD,IAAI8tJ,SAAS,GAAG59K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAE1B+yK,SAAS,CAAC9yK,OAAO,CAAC;YACdgc,MAAM,EAAE,IAAI;YACZhD,MAAM,EAAEw5E,SAAS;YACjBl6D,mBAAmB,EAAEs5D,eAAe,CAACn5F,IAAI,CAACo0G,aAAa;YACvDva,mBAAmB,EAAEV,eAAe,CAACn5F;UACzC,CAAC,CAAC;UAEF,OAAOq6K,SAAS,CAAC7yK,OAAO;QAC5B,CAAC,CAAC;;QAEF;QACA;QACA;QACA;QACA;QACA;MACJ,CAAC,MACI;QACDH,QAAQ,CAACE,OAAO,CACZ;UACIgZ,MAAM,EAAEw5E,SAAS;UACjBx2E,MAAM,EAAE,KAAK;UACb4lJ,WAAW,EAAE,IAAI;UACjB1b,OAAO,EAAE/xJ,EAAE,CAACm+F,mBAAmB,CAAC4uB,aAAa;UAC7C+kC,QAAQ,EAAE9xJ,EAAE,CAACm+F,mBAAmB,CAAC8uB,QAAQ;UACzChyG,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC,GAAG67F,eAAe,CAACn5F,IAAI,CAAC28L,UAAU,GAAG,MAAM,GAAGxjG,eAAe,CAACn5F,IAAI,CAACsoH,UAAU,CAACs0E;UAClI;QACJ,CAAC,CAAC,CAAC,CAAC;MACZ;MAEA,OAAOv1L,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACd,CAAC;AACL,CAAC,CAEJ,CAAC,C;;;;;;;;;;;ACvQN5L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,oBAAoB,EACnD,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAEpF,UAAUle,EAAE,EAAET,aAAa,EAAEO,cAAc,EAAE4vB,eAAe,EAAEhwB,aAAa,EAAEG,QAAQ,EAAE;EACnF,IAAI,CAACu5F,KAAK,GAAGz6F,kBAAkB,CAAC6hM,iBAAiB;EACjD,IAAI,CAAClnG,SAAS,GAAG,IAAI,CAAC,CAAC;;EAEvB,IAAI,CAACC,eAAe,GAAG,CAAC,CAAC;EACzB,IAAI,CAACknG,OAAO,GAAG,IAAI;EACnB,IAAI,CAACjnG,WAAW,GAAG,IAAI;EAEvB,IAAI,CAACK,OAAO,GAAG,YAAY;IACvB,OAAOt6F,aAAa,CAAC2pC,cAAc,GAAG,GAAG,GAAG3pC,aAAa,CAAC2sC,cAAc;EAC5E,CAAC;EAED,IAAI,CAAC2W,IAAI,GAAG,UAAUtV,KAAK,EAAE;IACzB,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAIkJ,CAAC,GAAGrV,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,qBAAqB,CAAC;IAC1D,IAAI,CAACgyD,eAAe,GAAGxiE,IAAI,CAAC2T,KAAK,CAAC32B,CAAC,CAAC;IAEpC,IAAI,IAAI,CAACwlF,eAAe,IAAI,IAAI,EAC5B,IAAI,CAACA,eAAe,GAAG,CAAC,CAAC;IAE7B,IAAIpD,QAAQ,GAAG52F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;;IAErE;IACgB;IACA8xJ,kBAAkB,GAAG,CAACnhM,aAAa,CAAC4lC,QAAQ,GACtB,2BAA2B,GAC3B,yCAAyC,CAAC,CAAC;;IAEjE;IACA,IAAI,CAACs7J,OAAO,GAAG,IAAIE,IAAI,CAACC,OAAO,CAAC,IAAI,CAACxnG,KAAK,EACtC;MACIynG,gBAAgB,EAAE,cAAc;MAChCC,cAAc,EAAE,UAAU;MAC1BC,iBAAiB,EAAEpiM,kBAAkB,CAACqjF;IAC1C,CAAC,CAAC;IAEN,IAAIz0C,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAACgsD,eAAe,CAAC,IAAI,CAACM,OAAO,CAAC,CAAC,CAAC,EAAE;MAC1DjvF,QAAQ,CAACE,OAAO,CAAC,IAAI,CAACyuF,eAAe,CAAC,IAAI,CAACM,OAAO,CAAC,CAAC,CAAC,CAAC;MACtD,OAAOjvF,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI4X,IAAI,GAAG,IAAI;IACf,IAAIq+K,aAAa,GAAG,IAAI,CAAClmI,OAAO,CAAClwD,QAAQ,CAACG,OAAO,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE;MAC9D+b,MAAM,EAAE,KAAK;MACb8lJ,iBAAiB,EAAE,IAAI;MACvB1pI,QAAQ,EAAE;QACNC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,6BAA6B;MAC5E;IACJ,CAAC,CAAC;IACF,IAAI,CAAC4/L,OAAO,CAACQ,YAAY,CAAC1hM,aAAa,CAAC2pC,cAAc,EAAE3pC,aAAa,CAAC2sC,cAAc,EAChF,UAAUhJ,QAAQ,EAAE;MAChB,IAAIA,QAAQ,CAACkU,MAAM,IAAI,SAAS,EAAE;QAC9Bz0B,IAAI,CAAC42E,eAAe,CAAC52E,IAAI,CAACk3E,OAAO,CAAC,CAAC,CAAC,GAAG32D,QAAQ,CAACg+J,cAAc;QAC9DxiM,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,qBAAqB,EAAEC,IAAI,CAACC,SAAS,CAACrU,IAAI,CAAC42E,eAAe,CAAC,CAAC;QAExF3uF,QAAQ,CAACE,OAAO,CAACo4B,QAAQ,CAACg+J,cAAc,CAAC;MAC7C,CAAC,MACI,IAAIh+J,QAAQ,CAACkU,MAAM,IAAI,SAAS,EAAE;QACnCxsC,QAAQ,CAACqb,MAAM,CAAC;UACZa,MAAM,EAAE,KAAK;UACb8lJ,iBAAiB,EAAE,IAAI;UACvB1pI,QAAQ,EAAE;YACNC,gBAAgB,EAAED,QAAQ,CAAChpB;UAC/B;QACJ,CAAC,CAAC;MACN,CAAC,MAEG,OAAO,CAAC;IAChB,CAAC,CAAC;IAEN,OAAO8mL,aAAa;EACxB,CAAC;EAED,IAAI,CAAC/lG,YAAY,GAAG,EAAE;EACtB,IAAI,CAACC,eAAe,GAAG,KAAK;EAC5B,IAAI,CAACC,WAAW,GAAG,KAAK;EACxB,IAAI,CAACC,kBAAkB,GAAG,YAAY;IAClC,IAAIz4E,IAAI,GAAG,IAAI;IACf,IAAI,CAAC,IAAI,CAACu4E,eAAe,EAAE;MAEvB,IAAI,CAAC1B,WAAW,CAAC6B,sBAAsB,GAAG,qBAAqB;MAC/D,IAAI,CAAC7B,WAAW,CAAC8B,mBAAmB,GAAG,IAAI,CAACL,YAAY;MACxD,IAAI,CAAC,IAAI,CAACE,WAAW,EAAE;QACnB,IAAI,CAAC3B,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;UACvCtyF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;UACxC+T,KAAK,EAAE;QACX,CAAC,CAAC;MACN,CAAC,MACI;QACD,IAAI,CAAC4kF,WAAW,CAAC+B,sBAAsB,GAAG,EAAE;MAChD;MAEA,IAAI,CAAC/B,WAAW,CAACgC,cAAc,GAAG,UAAUC,IAAI,EAAE;QAC9Cp3F,OAAO,CAACC,GAAG,CAAC,uBAAuB,CAAC;QACrC;QACCqe,IAAI,CAAC+4E,wBAAwB,CAAC,CAAC;QAC/B,OAAO,IAAI;MACf,CAAC;MAED77F,QAAQ,CAAC,YAAY;QACjB,IAAI,CAACq7F,eAAe,GAAG,IAAI;QAC3Bx7F,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC;MAChD,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAACm3F,kBAAkB,GAAG,UAAUpuD,KAAK,EAAE;IACvC,IAAI,IAAI,CAAC2tD,eAAe,IAAI3tD,KAAK,EAAE;MAC/B1tC,QAAQ,CAAC,YAAY;QACjBH,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;QAC7C,IAAI,CAACyvF,eAAe,GAAG,KAAK;MAChC,CAAC,CAAC;IAEN;EACJ,CAAC;EAED,IAAI,CAACpgC,OAAO,GAAG,UAACqmI,IAAI,EAAEroJ,IAAI,EAAEqW,EAAE,EAAK;IAC/B,IAAIxM,KAAK;IACT,OAAO5xB,OAAO,CAACqwK,IAAI,CAAC,CAChBD,IAAI,EACJ,IAAIpwK,OAAO,CAAC,UAACswK,EAAE,EAAEC,GAAG;MAAA,OAAK3+I,KAAK,GAAG0P,UAAU,CAACivI,GAAG,EAAExoJ,IAAI,EAAEqW,EAAE,CAAC;IAAA,EAAC,CAC9D,CAAC,WAAQ,CAAC;MAAA,OAAMkpD,YAAY,CAAC11D,KAAK,CAAC;IAAA,EAAC;EACzC,CAAC;EAED,IAAI,CAACi5C,YAAY,GAAG,KAAK;EACzB,IAAI,CAACC,YAAY,GAAG,IAAI;EACxB,IAAI,CAACC,YAAY,GAAG,IAAI;EAExB,IAAI,CAACh5D,WAAW,GAAG,UAAUl8B,OAAO,EAAE;IAClC,IAAI,CAACu0F,WAAW,GAAG,KAAK;IACxB,IAAIx4E,IAAI,GAAG,IAAI;IACf,IAAI,CAACi5E,YAAY,GAAG,KAAK;IACzB,IAAI,CAACV,eAAe,GAAG,KAAK;IAE5B,IAAI/E,QAAQ,GAAG52F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAErD,IAAIotD,EAAE,GAAGh8F,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEnB,IAAIsrF,QAAQ,CAAC8oF,0BAA0B,KAAK,IAAI,IAC5C,CAAC1/K,aAAa,CAACimC,mCAAmC,EAAE;MACpDw2D,EAAE,CAAC/1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,+LAA+L;MACrO,CAAC,CAAC;MACF,OAAOm7F,EAAE,CAACjxF,OAAO;IACrB;IAEAixF,EAAE,CAAClxF,OAAO,CAAC,IAAI,CAAC;IAEhB,IAAI+yF,YAAY,GAAG7B,EAAE,CAACjxF,OAAO;IAE7B,IAAIH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI60C,GAAG,GAAG/8B,IAAI,CAAC42E,eAAe,CAAC52E,IAAI,CAACk3E,OAAO,CAAC,CAAC,CAAC;IAE9Cl3E,IAAI,CAACs4E,YAAY,GAAG,EAAE;IACtBt4E,IAAI,CAACy4E,kBAAkB,CAAC,CAAC;IAEzBz4E,IAAI,CAAC89K,OAAO,CAACc,gBAAgB,CAAC;MAC1Bz9K,MAAM,EAAEoV,IAAI,CAACkpB,KAAK,CAACx7C,OAAO,CAACkd,MAAM,GAAG,GAAG,CAAC,CAACuD,QAAQ,CAAC,CAAC;MACnDm6K,iBAAiB,EAAErrG,QAAQ,CAAC8oF,0BAA0B,KAAK,IAAI;MAC/DwiB,GAAG,EAAEliM,aAAa,CAAC2pC,cAAc;MACjCw4J,GAAG,EAAEniM,aAAa,CAAC2sC,cAAc;MACjCg1J,cAAc,EAAExhJ;IACpB,CAAC,EACD;MACIiiJ,qBAAqB,EAAE,SAAvBA,qBAAqBA,CAAYznL,OAAO,EAAE;QACtCyI,IAAI,CAACs4E,YAAY,GAAG/gF,OAAO;QAC3B;QACIra,QAAQ,CAAC,YAAY;UACjB8iB,IAAI,CAAC62E,WAAW,CAAC8B,mBAAmB,GAAGphF,OAAO;QAClD,CAAC,CAAC;QACN;MAEJ,CAAC;MACD0nL,gBAAgB,EAAE,SAAlBA,gBAAgBA,CAAYC,QAAQ,EAAEC,cAAc,EAAE;QAClDz9L,OAAO,CAACC,GAAG,CAACu9L,QAAQ,CAACt6L,IAAI,CAAC;QAC1Bob,IAAI,CAACg5E,kBAAkB,CAAC,CAAC;QACzB,IAAI,CAACh5E,IAAI,CAACi5E,YAAY,EAAE;UAAE;UACtBj5E,IAAI,CAACi5E,YAAY,GAAG,IAAI;UACxBv3F,OAAO,CAACC,GAAG,CAAC,cAAc,CAAC;UAC3Bqe,IAAI,CAACk5E,YAAY,GAAGgmG,QAAQ;UAC5Bl/K,IAAI,CAACm5E,YAAY,GAAGgmG,cAAc;UAElCjkG,YAAY,GAAGA,YAAY,CAACx6F,IAAI,CAAC,UAAUqF,GAAG,EAAE;YAC5C,IAAIq5L,EAAE,GAAG/hM,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACnB;YACA;;YAEA8X,IAAI,CAAC62E,WAAW,CAAC6B,sBAAsB,GAAG,qBAAqB;YAC/D14E,IAAI,CAAC62E,WAAW,CAAC8B,mBAAmB,GAAG34E,IAAI,CAACk5E,YAAY,CAACt0F,IAAI;YAC7Dob,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,GAAG,EAAE;YAC5C54E,IAAI,CAAC62E,WAAW,CAACgC,cAAc,GAAG,UAAUC,IAAI,EAAE;cAC9Cp3F,OAAO,CAACC,GAAG,CAAC,uCAAuC,CAAC;cACpD,IAAIqe,IAAI,CAACk5E,YAAY,CAACmmG,cAAc,KAAK,IAAI,IAAIvmG,IAAI,IAAI,KAAK,EAAE;gBAC5D94E,IAAI,CAACw4E,WAAW,GAAG,IAAI;cAC3B;cACAx4E,IAAI,CAACy4E,kBAAkB,CAAC,CAAC;cACzBz4E,IAAI,CAACm5E,YAAY,CAACL,IAAI,CAAC;cACvBsmG,EAAE,CAACj3L,OAAO,CAAC2wF,IAAI,CAAC;cAChB94E,IAAI,CAACi5E,YAAY,GAAG,KAAK;cACzB,OAAO,IAAI;YACf,CAAC;YAED,IAAI,CAACj5E,IAAI,CAACk5E,YAAY,IAAI,CAACl5E,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,IAAI+b,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,CAACnB,MAAM,KAAK,CAAC,EAAE;cAC5Fkd,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;gBACvCtyF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;gBACpC+T,KAAK,EAAE;cACX,CAAC,CAAC;YACN;YAEAzV,OAAO,CAAC4M,OAAO,CAAC4W,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,EAAE,UAAUoqE,CAAC,EAAE;cACpDruD,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,CAAC71F,IAAI,CAAC;gBACzCkP,KAAK,EAAEo8D,CAAC;gBACR/nE,IAAI,EAAE+nE;cACV,CAAC,CAAC;YACN,CAAC,CAAC;YAEFnxE,QAAQ,CAAC,YAAY;cACjBH,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAClD,CAAC,CAAC;YAEF,OAAOu9L,EAAE,CAACh3L,OAAO;UACrB,CAAC,CAAC;QACN,CAAC,MACI,IAAI82L,QAAQ,CAAC3vC,OAAO,KAAK,IAAI,EAAE;UAChC;UACAvvI,IAAI,CAACk5E,YAAY,GAAGgmG,QAAQ;UAC5Bl/K,IAAI,CAACm5E,YAAY,GAAGgmG,cAAc;UAElCn/K,IAAI,CAAC62E,WAAW,CAAC8B,mBAAmB,GAAGumG,QAAQ,CAACt6L,IAAI;UACpDob,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,GAAG,EAAE;UAE5C,IAAI,CAAC54E,IAAI,CAACk5E,YAAY,IAAI,CAACl5E,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,IAAI+b,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,CAACnB,MAAM,KAAK,CAAC,EAAE;YAC5Fkd,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;cACvCtyF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;cACpC+T,KAAK,EAAE;YACX,CAAC,CAAC;UACN;UAEAzV,OAAO,CAAC4M,OAAO,CAAC81L,QAAQ,CAACj7L,OAAO,EAAE,UAAUoqE,CAAC,EAAE;YAC3CruD,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,CAAC71F,IAAI,CAAC;cACzCkP,KAAK,EAAEo8D,CAAC;cACR/nE,IAAI,EAAE+nE;YACV,CAAC,CAAC;UACN,CAAC,CAAC;QACN;MACJ,CAAC;MACD6/E,eAAe,EAAE,SAAjBA,eAAeA,CAAY53D,OAAO,EAAE;QAChC;QACA;QACA;QACA;QACAryF,OAAO,CAACk2F,eAAe,GAAG7D,OAAO,CAAC6D,eAAe;MACrD,CAAC;MACDmlG,2BAA2B,EAAE,SAA7BA,2BAA2BA,CAAYvlG,eAAe,EAAE;QACpD/5E,IAAI,CAACg5E,kBAAkB,CAAC,IAAI,CAAC;QAC7B,IAAIh5E,IAAI,CAACi5E,YAAY,EAAE;UACnBj5E,IAAI,CAACi5E,YAAY,GAAG,KAAK;UACzBj5E,IAAI,CAAC62E,WAAW,CAACgC,cAAc,CAAC,IAAI,CAAC;QACzC;QAEA,IAAIkB,eAAe,CAAC51E,MAAM,IAAI,UAAU,EAAE;UACtC;UACA;UACA;UACA;UACA;UACA;;UAEA,IAAI,CAAC,CAAClgB,OAAO,CAACk2F,eAAe,EACzBJ,eAAe,CAACI,eAAe,GAAGl2F,OAAO,CAACk2F,eAAe;UAE7De,YAAY,CAACx6F,IAAI,CAAC,UAAUqF,GAAG,EAAE;YAC7Bia,IAAI,CAACg5E,kBAAkB,CAAC,IAAI,CAAC;YAC7B/wF,QAAQ,CAACE,OAAO,CAAC;cACbgc,MAAM,EAAE,IAAI;cACZoc,QAAQ,EAAE;gBACNE,mBAAmB,EAAEs5D,eAAe,CAACib,aAAa;gBAClDva,mBAAmB,EAAEV;cACzB;YACJ,CAAC,CAAC;UACN,CAAC,CAAC;QACN,CAAC,MACI,IAAIA,eAAe,CAAC51E,MAAM,IAAI,UAAU,IAAI41E,eAAe,CAAC51E,MAAM,IAAI,UAAU,IAC7E41E,eAAe,CAAC51E,MAAM,IAAI,WAAW,IAAI41E,eAAe,CAAC51E,MAAM,IAAI,aAAa,EAAE;UAClFlc,QAAQ,CAACqb,MAAM,CACf;YACIa,MAAM,EAAE,KAAK;YACb8lJ,iBAAiB,EAAE,IAAI;YACvB1pI,QAAQ,EAAE;cACNC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC,GAAG67F,eAAe,CAAC51E;YACpF;UACJ,CAAC,CAAC;QACV,CAAC,MACI;UACDlc,QAAQ,CAACqb,MAAM,CACX;YACIa,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC,GAAG67F,eAAe,CAAC51E;YACpF;YACA;UACJ,CAAC,CAAC;QACV;MACJ;IACJ,CAAC,CAAC;IAEF,OAAOlc,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC02B,MAAM,GAAG,UAAUxiC,EAAE,EAAEq+F,SAAS,EAAE12F,OAAO,EAAE;IAC5CzD,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIuf,IAAI,GAAG,IAAI;IACf,IAAI,CAACi5E,YAAY,GAAG,KAAK;IACzB,IAAI,CAACV,eAAe,GAAG,KAAK;IAE5B,IAAI/E,QAAQ,GAAG52F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAErD,IAAIotD,EAAE,GAAGh8F,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACnB,IAAIsrF,QAAQ,CAAC8oF,0BAA0B,KAAK,IAAI,IAC5C,CAAC1/K,aAAa,CAACimC,mCAAmC,EAAE;MACpDw2D,EAAE,CAAC/1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,+LAA+L;MACrO,CAAC,CAAC;MACF,OAAOm7F,EAAE,CAACjxF,OAAO;IACrB;IAEAixF,EAAE,CAAClxF,OAAO,CAAC,IAAI,CAAC;IAChB,IAAI+yF,YAAY,GAAG7B,EAAE,CAACjxF,OAAO;IAE7B,IAAIH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI60C,GAAG,GAAG/8B,IAAI,CAAC42E,eAAe,CAAC52E,IAAI,CAACk3E,OAAO,CAAC,CAAC,CAAC;IAE9Cl3E,IAAI,CAACs4E,YAAY,GAAG,EAAE;IACtBt4E,IAAI,CAACy4E,kBAAkB,CAAC,CAAC;IAEzBz4E,IAAI,CAAC89K,OAAO,CAACyB,cAAc,CAAC;MACxBp+K,MAAM,EAAEoV,IAAI,CAACkpB,KAAK,CAACk7C,SAAS,GAAG,GAAG,CAAC,CAACj2E,QAAQ,CAAC,CAAC;MAC9Cm6K,iBAAiB,EAAErrG,QAAQ,CAAC8oF,0BAA0B,KAAK,IAAI;MAC/DwiB,GAAG,EAAEliM,aAAa,CAAC2pC,cAAc;MACjCw4J,GAAG,EAAEniM,aAAa,CAAC2sC,cAAc;MACjCg1J,cAAc,EAAExhJ;IACpB,CAAC,EACD;MACIiiJ,qBAAqB,EAAE,SAAvBA,qBAAqBA,CAAYznL,OAAO,EAAE;QACtCyI,IAAI,CAACs4E,YAAY,GAAG/gF,OAAO;QAC3ByI,IAAI,CAAC62E,WAAW,CAAC8B,mBAAmB,GAAGphF,OAAO;MAClD,CAAC;MACD0nL,gBAAgB,EAAE,SAAlBA,gBAAgBA,CAAYC,QAAQ,EAAEC,cAAc,EAAE;QAClDn/K,IAAI,CAACg5E,kBAAkB,CAAC,CAAC;QAEzB,IAAI,CAACh5E,IAAI,CAACi5E,YAAY,EAAE;UACpBj5E,IAAI,CAACi5E,YAAY,GAAG,IAAI;UACxBj5E,IAAI,CAACk5E,YAAY,GAAGgmG,QAAQ;UAC5Bl/K,IAAI,CAACm5E,YAAY,GAAGgmG,cAAc;UAElCjkG,YAAY,GAAGA,YAAY,CAACx6F,IAAI,CAAC,UAAUqF,GAAG,EAAE;YAC5C,IAAIq5L,EAAE,GAAG/hM,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAEnB8X,IAAI,CAAC62E,WAAW,CAAC6B,sBAAsB,GAAG14E,IAAI,CAACk5E,YAAY,CAACq2D,OAAO,IAAI,IAAI,GAAGpyJ,cAAc,CAACe,SAAS,CAAC,4BAA4B,CAAC,GAAGf,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;YACtL8hB,IAAI,CAAC62E,WAAW,CAAC8B,mBAAmB,GAAG34E,IAAI,CAACk5E,YAAY,CAACt0F,IAAI;YAC7Dob,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,GAAG,EAAE;YAE5C,IAAI,CAAC54E,IAAI,CAACk5E,YAAY,IAAI,CAACl5E,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,IAAI+b,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,CAACnB,MAAM,KAAK,CAAC,EAAE;cAC5Fkd,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;gBACvCtyF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;gBACpC+T,KAAK,EAAE;cACX,CAAC,CAAC;YACN;YAEAzV,OAAO,CAAC4M,OAAO,CAAC4W,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,EAAE,UAAUoqE,CAAC,EAAE;cACpDruD,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,CAAC71F,IAAI,CAAC;gBACzCkP,KAAK,EAAEo8D,CAAC;gBACR/nE,IAAI,EAAE+nE;cACV,CAAC,CAAC;YACN,CAAC,CAAC;YAEFruD,IAAI,CAAC62E,WAAW,CAACgC,cAAc,GAAG,UAAUC,IAAI,EAAE;cAC9C,IAAI94E,IAAI,CAACk5E,YAAY,CAACmmG,cAAc,KAAK,IAAI,IAAIvmG,IAAI,IAAI,KAAK,EAAE;gBAC5D94E,IAAI,CAACw4E,WAAW,GAAG,IAAI;cAC3B;cACAx4E,IAAI,CAACy4E,kBAAkB,CAAC,CAAC;cACzBz4E,IAAI,CAACm5E,YAAY,CAACL,IAAI,CAAC;cACvBsmG,EAAE,CAACj3L,OAAO,CAAC2wF,IAAI,CAAC;cAChB94E,IAAI,CAACi5E,YAAY,GAAG,KAAK;cACzB,OAAO,IAAI;YACf,CAAC;YAED/7F,QAAQ,CAAC,YAAY;cAAEH,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAAmB,CAAC,CAAC;YAE1F,OAAOu9L,EAAE,CAACh3L,OAAO;UACrB,CAAC,CAAC;QACN,CAAC,MAAM,IAAI82L,QAAQ,CAAC3vC,OAAO,KAAK,IAAI,EAAE;UAClCvvI,IAAI,CAACk5E,YAAY,GAAGgmG,QAAQ;UAC5Bl/K,IAAI,CAACm5E,YAAY,GAAGgmG,cAAc;UAElCn/K,IAAI,CAAC62E,WAAW,CAAC6B,sBAAsB,GAAG14E,IAAI,CAACk5E,YAAY,CAACq2D,OAAO,IAAI,IAAI,GAAGpyJ,cAAc,CAACe,SAAS,CAAC,4BAA4B,CAAC,GAAGf,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;UACtL8hB,IAAI,CAAC62E,WAAW,CAAC8B,mBAAmB,GAAG34E,IAAI,CAACk5E,YAAY,CAACt0F,IAAI;UAC7Dob,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,GAAG,EAAE;UAE5C,IAAI,CAAC54E,IAAI,CAACk5E,YAAY,IAAI,CAACl5E,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,IAAI+b,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,CAACnB,MAAM,KAAK,CAAC,EAAE;YAC5Fkd,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;cACvCtyF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;cACpC+T,KAAK,EAAE;YACX,CAAC,CAAC;UACN;UAEAzV,OAAO,CAAC4M,OAAO,CAAC4W,IAAI,CAACk5E,YAAY,CAACj1F,OAAO,EAAE,UAAUoqE,CAAC,EAAE;YACpDruD,IAAI,CAAC62E,WAAW,CAAC+B,sBAAsB,CAAC71F,IAAI,CAAC;cACzCkP,KAAK,EAAEo8D,CAAC;cACR/nE,IAAI,EAAE+nE;YACV,CAAC,CAAC;UACN,CAAC,CAAC;QACN;MACJ,CAAC;MACD6/E,eAAe,EAAE,SAAjBA,eAAeA,CAAY53D,OAAO,EAAE;QAChC,IAAI,CAAC,CAACryF,OAAO,EACTA,OAAO,CAACk2F,eAAe,GAAG7D,OAAO,CAAC6D,eAAe;;QAErD;QACA;QACA;QACA;MACJ,CAAC;MACDmlG,2BAA2B,EAAE,SAA7BA,2BAA2BA,CAAYvlG,eAAe,EAAE;QACpD/5E,IAAI,CAACg5E,kBAAkB,CAAC,IAAI,CAAC;QAC7B,IAAIh5E,IAAI,CAACi5E,YAAY,EAAE;UACnBj5E,IAAI,CAACi5E,YAAY,GAAG,KAAK;UACzBj5E,IAAI,CAAC62E,WAAW,CAACgC,cAAc,CAAC,IAAI,CAAC;QACzC;QAEA,IAAIkB,eAAe,CAAC51E,MAAM,IAAI,UAAU,EAAE;UAEtC;UACA;UACA;UACA;UACA;UACA;;UAEA+2E,YAAY,GAAGA,YAAY,CAACx6F,IAAI,CAAC,UAAUqF,GAAG,EAAE;YAC5Cia,IAAI,CAACg5E,kBAAkB,CAAC,IAAI,CAAC;YAC7Be,eAAe,CAAC5sE,QAAQ,GAAG,oBAAoB;YAE/CllB,QAAQ,CAACE,OAAO,CAAC;cACbgc,MAAM,EAAE,IAAI;cACZhD,MAAM,EAAEw5E,SAAS;cACjBl6D,mBAAmB,EAAEs5D,eAAe,CAACib,aAAa;cAClDva,mBAAmB,EAAEV;YACzB,CAAC,CAAC;UACN,CAAC,CAAC;QACN,CAAC,MACI,IAAGA,eAAe,CAAC51E,MAAM,IAAI,aAAa,EAAC;UAC5Clc,QAAQ,CAACqb,MAAM,CACX;YACIa,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC,GAAG67F,eAAe,CAAC51E;YACpF;YACA;UACJ,CAAC,CAAC;QACV,CAAC,MACI;UACD+2E,YAAY,GAAGA,YAAY,CAACx6F,IAAI,CAAC,UAAUqF,GAAG,EAAE;YAE5CkC,QAAQ,CAACE,OAAO,CACZ;cACIgZ,MAAM,EAAEw5E,SAAS;cACjBx2E,MAAM,EAAE,KAAK;cACb4lJ,WAAW,EAAE,IAAI;cACjB1b,OAAO,EAAG/xJ,EAAE,CAACm+F,mBAAmB,CAAC+kG,SAAS;cAC1CpxC,QAAQ,EAAE9xJ,EAAE,CAACm+F,mBAAmB,CAAC2zD;YACrC,CAAC,CAAC,CAAC,CAAC;UACZ,CAAC,CAAC;QACN;MACJ;IACJ,CAAC,CAAC;IAEF,OAAOnmJ,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC2wF,wBAAwB,GAAG,YAAY;IACxC,IAAIvF,QAAQ,GAAG52F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAErD,IAAIvxB,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAE1B,IAAI,CAAC,CAAC,IAAI,CAAC41L,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAAC/kG,wBAAwB,CAAC,CAAC;MACvC,IAAI,CAACJ,mBAAmB,GAAG,2BAA2B;IAC1D;IACAj+E,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;IAEvB,OAAOuS,SAAS,CAACtS,OAAO;EAC5B,CAAC;AAEL,CAAC,CAEJ,CAAC,C;;;;;;;;;;;;;;;;;ACtfkB;AAET,SAAS6lE,WAAWA,CAACrtE,IAAI,EAAE;EACtC,IAAM8+L,OAAO,GAAG5kH,IAAI,CAACl6E,IAAI,CAAC;EAC1B;EACA,IAAM++L,OAAO,GAAGxkH,UAAU,CAACv0E,IAAI,CAAC84L,OAAO,EAAE,UAASh9L,CAAC,EAAE;IAAC,OAAOA,CAAC,CAACu4E,UAAU,CAAC,CAAC,CAAC;EAAC,CAAC,CAAC;EAE/E,IAAM/3D,MAAM,GAAGu8K,oDAAY,CAACE,OAAO,EAC/B;IAAE92I,EAAE,EAAE;EAAS,CAAC,CAAC;EAErB,IAAM1R,QAAQ,GAAG/iB,IAAI,CAAC2T,KAAK,CAAC7kB,MAAM,CAAC;EAEnC,OAAOi0B,QAAQ;AACnB;AAEO,SAASv1B,SAASA,CAAChhB,IAAI,EAAE;EAC5B,IAAM8+L,OAAO,GAAG5kH,IAAI,CAACl6E,IAAI,CAAC;EAC1B;EACA,IAAM++L,OAAO,GAAGxkH,UAAU,CAACv0E,IAAI,CAAC84L,OAAO,EAAE,UAASh9L,CAAC,EAAE;IAAC,OAAOA,CAAC,CAACu4E,UAAU,CAAC,CAAC,CAAC;EAAC,CAAC,CAAC;EAE/E,IAAM/3D,MAAM,GAAGu8K,oDAAY,CAACE,OAAO,EAC/B;IAAE92I,EAAE,EAAE;EAAS,CAAC,CAAC;EAErB,OAAO3lC,MAAM;AACjB,C;;;;;;;;;;ACxBA1mB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,0BAA0B,EAC3D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,uBAAuB,EAAE,cAAc,EAC7G,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAC1D,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEoU,qBAAqB,EAAEzU,YAAY,EACxGypB,SAAS,EAAE8yB,aAAa,EAAEx8C,aAAa,EAAEG,aAAa,EAAE;EAEhD;EACAJ,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAAC2xC;EAA4B,CAAC,CAAC,CAAC,CAAC;;EAErG,IAAI,CAAC1oB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACZ;EACQ;EAAC;EAEDpqB,MAAM,CAACgW,OAAO,GAAG;IACbqnC,QAAQ,EAAE,GAAG;IACbi1E,QAAQ,EAAE;EACd,CAAC;EACDtyH,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAC3DpC,MAAM,CAACq5B,YAAY,GAAG,CAAC;EACvBr5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACw5B,YAAY,GAAG,IAAI;EAC1Bx5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;;EAExB;EACAlJ,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAACqvG,eAAe,GAAG,CAAC,CAAC;EAC3BrvG,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,GAAG,EAAE;EAEnC,SAASmjJ,eAAeA,CAAA,EAAG;IACvB;IACA,IAAIC,QAAQ,GAAGljM,aAAa,CAACskC,IAAI,IAAI,EAAE;IACvC4+J,QAAQ,GAAGA,QAAQ,CAACzjL,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAEvC,IAAI0jL,KAAK,GAAG,CACZ;MACI/wE,QAAQ,EAAE,SAAS;MAAEI,YAAY,EAAE;IACvC,CAAC,CAAC;IAEF,QAAQ0wE,QAAQ;MACZ,KAAK,eAAe;MACpB,KAAK,SAAS;QACVC,KAAK,CAACh9L,IAAI,CAAC;UACPisH,QAAQ,EAAE,SAAS;UACnBI,YAAY,EAAE;QAClB,CAAC,CAAC;QACF;IACR;IAEA,OAAO2wE,KAAK;EAChB;EAEArjM,MAAM,CAACqvG,eAAe,CAACg0F,KAAK,GAAGF,eAAe,CAAC,CAAC;EAEhDnjM,MAAM,CAACsjM,qBAAqB,GAAGpjM,aAAa,CAAC6kC,qBAAqB;EAElE,SAAS8qE,WAAWA,CAAA,EAAG;IACnB,OAAOnzD,aAAa,CAACozD,aAAa,CAAC5vG,aAAa,CAACmkC,WAAW,CAAC,CAACrgC,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC/EjE,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,GAAG,EAAE;MACnCl8C,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACi7C,OAAO,EAAE,UAAUh5C,GAAG,EAAEtG,EAAE,EAAE;QACpCI,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,CAAC35C,IAAI,CAAC;UAAEqkB,UAAU,EAAE9qB,EAAE,CAAC8qB,UAAU;UAAE2yB,QAAQ,EAAEz9C,EAAE,CAAC4rC;QAAY,CAAC,CAAC;MAChG,CAAC,CAAC;MAEF,IAAIxrC,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,CAAC55C,MAAM,IAAI,CAAC,EAAE;QAC5CpG,MAAM,CAACgW,OAAO,CAACqnC,QAAQ,GAAGr9C,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,CAAC,CAAC,CAAC,CAAC3C,QAAQ;MACxE;MAEA78C,QAAQ,CAAC,YAAW;QAChB0E,WAAW,CAAC,CAAC;MACjB,CAAC,CAAC;IACN,CAAC,EACD,UAAUf,GAAG,EAAE;MACXhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN;EAEA,IAAM21B,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAe;IAC1C,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACq5B,YAAY,GAAGr5B,MAAM,CAACs5B,UAAU,EAAE;MAC9Dx1B,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;MACvBlJ,MAAM,CAACq5B,YAAY,EAAE;MAErBzkB,qBAAqB,CAACu9G,WAAW,CAC7BnyH,MAAM,CAACq5B,YAAY,EACnBr5B,MAAM,CAACu5B,WAAW,EAClBv5B,MAAM,CAACgW,OACX,CAAC,CAAChS,IAAI,CAAC,UAAUC,IAAI,EAAE;QACnBH,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACghJ,KAAK,EAAE,UAAU/+I,GAAG,EAAEtG,EAAE,EAAE;UAClC,IAAI,CAACI,MAAM,CAACkE,IAAI,CAAC6B,MAAM,CAAC,UAAUo0B,GAAG,EAAE;YACnC,OAAOA,GAAG,CAAC04F,MAAM,KAAKjzH,EAAE,CAACizH,MAAM;UACnC,CAAC,CAAC,CAACzsH,MAAM,GAAG,CAAC,EAAE;YACXpG,MAAM,CAACkE,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;UACxB;QACJ,CAAC,CAAC;QAEFw6B,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;QACpB/4B,MAAM,CAACkJ,SAAS,GAAG,KAAK;QACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,EACD,UAAUF,GAAG,EAAE;QACXnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;QACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACN;EACJ,CAAC;EAEDk2B,iBAAiB,CAACP,yBAAyB,CAAC;;EAE5C;EACA95B,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8rG,WAAW,CAAC,CAAC,CAAC7rG,IAAI,CAAC,YAAW;MAC1B4Q,qBAAqB,CAACu9G,WAAW,CAACnyH,MAAM,CAACq5B,YAAY,EAAEr5B,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAAC+F,MAAM,CAAC,CAAC/B,IAAI,CAAC,UAAUC,IAAI,EAAE;QACvGjE,MAAM,CAACkE,IAAI,GAAGD,IAAI,CAACghJ,KAAK;QACxB7qH,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;QACpBj1B,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbrE,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;MAC7B,CAAC,EACD,UAAU1oB,GAAG,EAAE;QACXL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV,CAAC,CAAC;IAEFnE,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;EAC7B,CAAC;EAED7sB,MAAM,CAACs6B,MAAM,GAAG,YAAY;IACxBx2B,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACq5B,YAAY,GAAG,CAAC;IACvBzkB,qBAAqB,CAACu9G,WAAW,CAACnyH,MAAM,CAACq5B,YAAY,EAAEr5B,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACgW,OAAO,CAAC,CAAChS,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC5G,IAAIA,IAAI,CAAC80B,KAAK,EAAE;QACZ/4B,MAAM,CAACkE,IAAI,GAAGD,IAAI,CAACghJ,KAAK;QACxB7qH,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;QACpBj1B,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,MACI;QACDrE,MAAM,CAACkE,IAAI,GAAG,EAAE;QAChBk2B,QAAQ,CAAC,CAAC,CAAC;QACXt2B,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB;IACJ,CAAC,EACD,UAASF,GAAG,EAAE;MACVL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAGD,SAASi2B,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAEDt5B,MAAM,CAACujH,UAAU,GAAG,UAAUg3C,UAAU,EAAE;IACtC,IAAIA,UAAU,GAAG,CAAC,IAAIA,UAAU,IAAIv6J,MAAM,CAACs5B,UAAU,EAAE;MACnDt5B,MAAM,CAACq5B,YAAY,GAAGkhI,UAAU;MAChCv6J,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB;EACJ,CAAC;EAGDt6B,MAAM,CAACujM,UAAU,GAAG,YAAY;IAC5BvjM,MAAM,CAACwjM,UAAU,GAAG,CAAC,CAAC;IACtBxjM,MAAM,CAACwjM,UAAU,CAAC3wE,MAAM,GAAG,IAAI;IAC/B7yH,MAAM,CAACwjM,UAAU,CAAC1sK,QAAQ,GAAG,IAAI;IACjC92B,MAAM,CAACwjM,UAAU,CAAC9gM,IAAI,GAAG,IAAI;IAC7B,IAAI1C,MAAM,CAACsjM,qBAAqB,KAAK,IAAI,EAAE;MACvC,IAAGtjM,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,IAAIhgD,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,CAAC55C,MAAM,GAAC,CAAC,EAAE;QAC1EpG,MAAM,CAACwjM,UAAU,CAACh4J,WAAW,GAAGxrC,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,CAAC,CAAC,CAAC,CAAC3C,QAAQ;QAC1E,OAAO,KAAK;MAChB;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA78C,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;IACF+oB,iBAAiB,CAAC,CAAC;EACvB,CAAC;EAGDvtB,MAAM,CAACyjM,WAAW,GAAG,UAAUhxE,IAAI,EAAE;IACjCzyH,MAAM,CAACwjM,UAAU,GAAG,CAAC,CAAC;IACtB1jM,OAAO,CAAC+F,IAAI,CAAC4sH,IAAI,EAAEzyH,MAAM,CAACwjM,UAAU,CAAC;IAErC,IAAGxjM,MAAM,CAACwjM,UAAU,CAACE,WAAW,IAAI1jM,MAAM,CAACwjM,UAAU,CAACE,WAAW,CAACt9L,MAAM,KAAK,CAAC,EAAE;MAC5E,IAAIsvB,KAAK,GAAG11B,MAAM,CAACqvG,eAAe,CAACrvD,OAAO,CAACj6C,MAAM,CAAC,UAAS4rE,CAAC,EAAC;QAAE,OAAOA,CAAC,CAACjnD,UAAU,IAAI1qB,MAAM,CAACwjM,UAAU,CAACE,WAAW,CAAC,CAAC,CAAC;MAAE,CAAC,CAAC;MAC1H,IAAGhuK,KAAK,CAACtvB,MAAM,GAAC,CAAC,EACjBpG,MAAM,CAACwjM,UAAU,CAACh4J,WAAW,GAAG9V,KAAK,CAAC,CAAC,CAAC,CAAC2nB,QAAQ;IACrD;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA78C,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;IACF+oB,iBAAiB,CAACzpB,CAAC,CAAC,OAAO,CAAC,CAAC;EACjC,CAAC;EAGD9D,MAAM,CAAC2jM,QAAQ,GAAG,YAAY;IAC1B7/L,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAI/D,MAAM,CAACwjM,UAAU,CAAC3wE,MAAM,KAAK,IAAI,EAAE;MACnCj+G,qBAAqB,CAAC49G,aAAa,CAACxyH,MAAM,CAACwjM,UAAU,CAAC,CAACx/L,IAAI,CAAC,UAASC,IAAI,EAAE;QACvEjE,MAAM,CAACs6B,MAAM,CAAC,CAAC;QACft6B,MAAM,CAACiM,YAAY,CAAC,CAAC;MACzB,CAAC,EAAE,UAAS9H,GAAG,EAAE;QACbnE,MAAM,CAACiM,YAAY,CAAC,CAAC;QACrB9L,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACN,CAAC,MAAM;MACHuQ,qBAAqB,CAACg+G,aAAa,CAAC5yH,MAAM,CAACwjM,UAAU,CAAC,CAACx/L,IAAI,CAAC,UAAUC,IAAI,EAAE;QACxEjE,MAAM,CAACs6B,MAAM,CAAC,CAAC;QACft6B,MAAM,CAACiM,YAAY,CAAC,CAAC;MACzB,CAAC,EAAE,UAAU9H,GAAG,EAAE;QACdnE,MAAM,CAACiM,YAAY,CAAC,CAAC;QACrB9L,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACN;EACJ,CAAC;EAGD,SAASkpB,iBAAiBA,CAACm2F,aAAa,EAAE;IACtC,IAAI71F,cAAc,GAAG/pB,CAAC,CAAC,gBAAgB,CAAC;IAExCzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAY;MACjD,IAAG,CAAC3tB,aAAa,CAAC2L,QAAQ,EAAC;QACvB,IAAG63G,aAAa,EAAE;UACdA,aAAa,CAACt+G,KAAK,CAAC,CAAC;QACzB,CAAC,MACI;UACDtB,CAAC,CAAC,WAAW,CAAC,CAACsB,KAAK,CAAC,CAAC;QAC1B;MACJ;MAEApF,MAAM,CAAC4jM,YAAY,CAAC7+L,YAAY,CAAC,CAAC;IACtC,CAAC,CAAC;EAEN;EAEA/E,MAAM,CAACiM,YAAY,GAAG,YAAY;IAC9B,IAAI4hB,cAAc,GAAG/pB,CAAC,CAAC,gBAAgB,CAAC;IACxCzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC6jM,uBAAuB,GAAG,YAAY;IACzC,IAAIh2K,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAC9CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAAC8jM,uBAAuB,GAAG,YAAY;IACzC,IAAIj2K,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAC9CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAGD,SAASk2K,oBAAoBA,CAAA,EAAG;IAC5B,IAAIl2K,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C;EAEA7tB,MAAM,CAACgkM,oBAAoB,GAAG,YAAW;IACrC,IAAIn2K,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACikM,YAAY,GAAG,CAAC,CAAC;EAExBjkM,MAAM,CAACkkM,aAAa,GAAG,UAAUzxE,IAAI,EAAE0xE,GAAG,EAAE;IACxC,IAAI,CAACA,GAAG,EAAE;MACNnkM,MAAM,CAACikM,YAAY,GAAGxxE,IAAI;MAC1BsxE,oBAAoB,CAAC,CAAC;IAC1B,CAAC,MAAM;MACH/jM,MAAM,CAACgkM,oBAAoB,CAAC,CAAC;MAC7BlgM,CAAC,CAACC,OAAO,CAAC,CAAC;MACX6Q,qBAAqB,CAACk+G,aAAa,CAACL,IAAI,CAACI,MAAM,CAAC,CAAC7uH,IAAI,CAAC,YAAY;QAC9DhE,MAAM,CAACs6B,MAAM,CAAC,CAAC;MACnB,CAAC,EAAE,UAAUn2B,GAAG,EAAE;QACdhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACN;EACJ,CAAC;EAEDrE,MAAM,CAAC+yH,YAAY,GAAG,YAAY;IAC9B,IAAI/yH,MAAM,CAACwjM,UAAU,CAAC3wE,MAAM,IAAI,IAAI,EAAE;MAClCj+G,qBAAqB,CAACm+G,YAAY,CAAC/yH,MAAM,CAACwjM,UAAU,CAAC3wE,MAAM,CAAC,CAAC7uH,IAAI,CAAC,YAAY;QAC1EhE,MAAM,CAACiM,YAAY,CAAC,CAAC;QACrBjM,MAAM,CAAC8jM,uBAAuB,CAAC,CAAC;QAChC9jM,MAAM,CAACs6B,MAAM,CAAC,CAAC;MACnB,CAAC,EAAE,UAAUn2B,GAAG,EAAE;QACdhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACN;EACJ,CAAC;EAEDrE,MAAM,CAACizH,cAAc,GAAG,YAAY;IAChC,IAAIjzH,MAAM,CAACwjM,UAAU,CAAC3wE,MAAM,IAAI,IAAI,EAAE;MAClCj+G,qBAAqB,CAACq+G,cAAc,CAACjzH,MAAM,CAACwjM,UAAU,CAAC3wE,MAAM,CAAC,CAAC7uH,IAAI,CAAC,YAAY;QAC5EhE,MAAM,CAACiM,YAAY,CAAC,CAAC;QACrBjM,MAAM,CAAC8jM,uBAAuB,CAAC,CAAC;QAChC9jM,MAAM,CAACs6B,MAAM,CAAC,CAAC;MACnB,CAAC,EAAE,UAAUn2B,GAAG,EAAE;QACdhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACN;EACJ,CAAC;EAEDrE,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC5sB,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;EACxC,CAAC;EAGDhL,MAAM,CAAC07C,YAAY,GAAG,UAAUp5C,KAAK,EAAE1C,EAAE,EAAE;IACvCkE,CAAC,CAAC,SAAS,GAAGlE,EAAE,GAAC,IAAI,CAAC,CAAC+7C,QAAQ,CAAC,QAAQ,CAAC;IACzC,OAAO,KAAK;EAChB,CAAC;EAGD37C,MAAM,CAACokM,gBAAgB,GAAG,UAAU/1L,IAAI,EAAE;IACtC,IAAK,CAACA,IAAI,CAAC8f,QAAQ,CAACpiB,QAAQ,IAAIsC,IAAI,CAAC8f,QAAQ,CAACvd,MAAM,IAAM,CAACvC,IAAI,CAAC8f,QAAQ,CAACpiB,QAAQ,IAAIsC,IAAI,CAAC8f,QAAQ,CAAC/nB,MAAM,GAAG,CAAE,EAC1G,OAAO,4BAA4B,CAAC,KACnC,IACD,CAACiI,IAAI,CAAC8f,QAAQ,CAACpiB,QAAQ,IAAIsC,IAAI,CAAC8f,QAAQ,CAACtd,MAAM,CAACC,QAAQ,IAAIzC,IAAI,CAAC8f,QAAQ,CAACtd,MAAM,CAACnG,KAAK,MACrF2D,IAAI,CAAC8f,QAAQ,CAACvd,MAAM,IAAIvC,IAAI,CAAC8f,QAAQ,CAAC/nB,MAAM,GAAG,CAAC,CAAC,EAAE;MACpD,IAAI,CAACtC,CAAC,CAAC,WAAW,CAAC,CAACsf,EAAE,CAAC,QAAQ,CAAC,EAC5B,OAAO,0BAA0B;IACzC,CAAC,MAAM,OAAO,EAAE;EACpB,CAAC;EAEDpjB,MAAM,CAAC6P,iBAAiB,GAAG,UAAUxB,IAAI,EAAE;IACvC,IAAI,CAACA,IAAI,CAACuC,MAAM,EAAE;MACd5Q,MAAM,CAACiM,YAAY,CAAC,CAAC;IACzB,CAAC,MACDzL,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,4BAA4B,CAAC;IACvD,CAAC,CAAC;EACN,CAAC;EAEDhL,MAAM,CAACqC,GAAG,CAAC,8BAA8B,EAAE,YAAY;IACnDrC,MAAM,CAACiM,YAAY,CAAC,CAAC;EACzB,CAAC,CAAC;EAEFjM,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACq5B,YAAY,GAAG,CAAC;MACvBr5B,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB;EACJ,CAAC,CAAC;EAENt6B,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACq5B,YAAY,GAAG,CAAC;MACvBr5B,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB;EACJ,CAAC,CAAC;AAEV,CAAC,CAAC,CAAC,C;;;;;;;;;;AC5XPx6B,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,uBAAuB,EAAE,CACxD,IAAI,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAChI,UAAUle,EAAE,EAAET,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAEqmB,SAAS,EAAEpmB,eAAe,EAAEzU,aAAa,EAAE0U,UAAU,EAAE;EAExH;EACA,IAAI,CAACo9G,WAAW,GAAG,UAAU/2F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAE;IAC/C,IAAIo8G,eAAe,GAAGlyH,aAAa,CAACiuB,QAAQ;IAC5C,IAAI7iB,EAAE,GAAG8kB,qBAAqB,CAAC+hG,WAAW,CAACC,eAAe,EAAEh3F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,CAAC,CAAChS,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAClG,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACknH,aAAa,GAAG,UAAUC,IAAI,EAAE;IAEjC,IAAInnH,EAAE,GAAG8kB,qBAAqB,CAACoiG,aAAa,CAACC,IAAI,CAAC,CAACzuH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACsnH,aAAa,GAAG,UAAUH,IAAI,EAAE;IAEjC,IAAInnH,EAAE,GAAG8kB,qBAAqB,CAACwiG,aAAa,CAACH,IAAI,CAAC,CAACzuH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACwnH,aAAa,GAAG,UAAU1vH,EAAE,EAAE;IAE/B,IAAIkI,EAAE,GAAG8kB,qBAAqB,CAAC0iG,aAAa,CAAC1vH,EAAE,CAAC,CAACY,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACynH,YAAY,GAAG,UAAU3vH,EAAE,EAAE;IAE9B,IAAIkI,EAAE,GAAG8kB,qBAAqB,CAAC2iG,YAAY,CAAC3vH,EAAE,CAAC,CAACY,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAChE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAAC2nH,cAAc,GAAG,UAAU7vH,EAAE,EAAE;IAEhC,IAAIkI,EAAE,GAAG8kB,qBAAqB,CAAC6iG,cAAc,CAAC7vH,EAAE,CAAC,CAACY,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAClE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAAC4K,yBAAyB,GAAG,UAAUklB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAE;IAC7D;IACA,IAAIya,QAAQ,GAAIvwB,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,GAAIxnB,qBAAqB,GAChFlwB,aAAa,CAACmB,QAAQ,GAAG+uB,qBAAqB,GAC1ClwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAC5DD,eAAe;IAE3B,IAAIijC,eAAe,GAAI53C,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,GAAI,KAAK,GAAG13C,aAAa,CAACmB,QAAQ;IAEpG,IAAIiK,EAAE,GAAGmlB,QAAQ,CAACva,yBAAyB,CAACklB,IAAI,EAAEC,KAAK,EAAEn7B,aAAa,CAACiN,YAAY,EAAE6I,OAAO,CAAC,CACxFhS,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC,SAAM,CAAC,UAAUvH,GAAG,EAAE;MACpB,IAAI,CAAC2zC,eAAe,EAChB,MAAM3zC,GAAG;MAEb,IAAIA,GAAG,CAAC4zC,MAAM,KAAK,CAAC,CAAC,EACjB,MAAM5zC,GAAG,CAAC,KACT;QACD,IAAIssB,QAAQ,GAAGvwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;QACjG,OAAO4b,QAAQ,CAACva,yBAAyB,CAACklB,IAAI,EAAEC,KAAK,EAAEn7B,aAAa,CAACiN,YAAY,EAAE6I,OAAO,CAAC,CACtFhS,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;UAC1B,OAAOqH,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACV;IACJ,CAAC,CAAC;IAEN,OAAOJ,EAAE;EACb,CAAC;;EAED;EACA,IAAI,CAAC+4L,UAAU,GAAG,KAAK;EAEvB,IAAI,CAAC9xE,0BAA0B,GAAG,UAAUrkF,KAAK,EAAEsL,OAAO,EAAE;IACxD,IAAI,IAAI,CAAC6qJ,UAAU,EAAE;MACjB,OAAOhkM,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C;IAEA,IAAI50B,IAAI,GAAG,IAAI;IACf,IAAIhY,EAAE;IACN,IAAImlB,QAAQ,GAAGvwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;IAEjG,IAAI3U,aAAa,CAACX,MAAM,IAAIW,aAAa,CAACmB,QAAQ,EAAE;MAChDiK,EAAE,GAAGmlB,QAAQ,CAACojE,2BAA2B,CAAC3lD,KAAK,CAAC,CAAClqC,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjE,IAAIA,GAAG,EAAE;UACL,OAAOonB,QAAQ,CAACqjE,0BAA0B,CAACt6C,OAAO,KAAK,IAAI,GAAG,KAAK,GAAGtL,KAAK,CAAC,CACvElqC,IAAI,CAAC,UAAUuhB,IAAI,EAAE;YAClB,OAAO6K,qBAAqB,CAACmiG,0BAA0B,CAAChtG,IAAI,CAAC;UACjE,CAAC,CAAC,CACDvhB,IAAI,CAAC,UAAUC,IAAI,EAAE;YAClB,IAAI,CAACA,IAAI,CAACC,IAAI,IAAID,IAAI,CAACC,IAAI,CAACq2C,aAAa,EACzC,OAAOl6C,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;;YAE1C;;YAEA;YACA;;YAEA;;YAEA,OAAO73C,aAAa,CAACm6C,MAAM,CAACl3B,IAAI,EAAErf,IAAI,CAACC,IAAI,CAACiS,mBAAmB,CAAC,CAC/DnS,IAAI,CAAC,UAASy2C,QAAQ,EAAE;cACrB,IAAIv2C,IAAI,GAAG;gBACPqhB,IAAI,EAAEthB,IAAI,CAACC,IAAI,CAACogM,uBAAuB;gBACvClpL,GAAG,EAAEnR,KAAK,CAAC0wC,OAAO,CAACF,QAAQ,CAAC,GAAGA,QAAQ,GAAG;cAC9C,CAAC;cAED,OAAOhqB,QAAQ,CAACijE,0BAA0B,CAACxvF,IAAI,CAAC;YACpD,CAAC,CAAC;;YAEF;YACA;YACA;YACA;YACA;;YAEA;UACJ,CAAC,CAAC;QACV;QAEA,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;QACvB,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAIH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;MACvBH,EAAE,GAAGC,QAAQ,CAACG,OAAO;IACzB;IAEA,OAAOJ,EAAE,CAACtH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC1Bia,IAAI,CAAC+gL,UAAU,GAAG,KAAK;MACvB,OAAOhkM,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,CAAC;IAC5C,CAAC,CAAC,SAAM,CAAC,UAAUlF,GAAG,EAAE;MACpBmf,IAAI,CAAC+gL,UAAU,GAAG,KAAK;MACvB,OAAOhkM,aAAa,CAAC83C,aAAa,CAACh0C,GAAG,CAAC;IAC3C,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACg3B,aAAa,GAAG,IAAI;EACzB,IAAI,CAACopK,kCAAkC,GAAG,YAAY;IAElD,IAAI,CAAC,IAAI,CAACppK,aAAa,EAAE;MACrB,IAAI,CAACA,aAAa,GAAGD,SAAS,CAAC,UAAUgI,CAAC,EAAE;QACxC,IAAIhjC,aAAa,CAACmB,QAAQ,EAAE;UACxB;UACA,IAAIg2C,QAAQ,GAAGv3C,OAAO,CAACw3C,OAAO,CAAC,MAAM,CAAC,CAACD,QAAQ,CAAC,CAAC;UACjD,IAAIE,EAAE,GAAGF,QAAQ,CAACG,GAAG,CAAC,uBAAuB,CAAC;UAE9C,IAAIjsC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;UACtBF,QAAQ,CAACG,OAAO,CAAC1H,IAAI,CAAC,YAAY;YAAEF,CAAC,CAACC,OAAO,CAAC,CAAC;UAAE,CAAC,CAAC,CAC9CC,IAAI,CAAC,YAAY;YAAEuzC,EAAE,CAACg7E,0BAA0B,CAAC,KAAK,CAAC;UAAC,CAAC,CAAC,WACnD,CAAC,YAAY;YAAEzuH,CAAC,CAACO,SAAS,CAAC,CAAC;UAAE,CAAC,CAAC;UAC5C,OAAOkH,QAAQ,CAACG,OAAO;QAC3B;MACJ,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IACjB;IAEA,IAAIH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACtMP5L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,UAAUle,EAAE,EAAEwkB,KAAK,EAAEjlB,aAAa,EAAEixD,OAAO,EAAE;EAEjJ,IAAIiuC,QAAQ,GAAG,CAAC,CAAC;EACjBA,QAAQ,CAACl7F,IAAI,GAAG,EAAE;EAClBk7F,QAAQ,CAAColG,QAAQ,GAAG,EAAE;EAEtB,IAAI,CAAClqK,MAAM,GAAG,UAAU5f,OAAO,EAAExS,IAAI,EAAE0hH,YAAY,EAAEF,QAAQ,EAAEz9B,SAAS,EAAE;IACtE/jF,IAAI,GAAGA,IAAI,KAAK,IAAI,GAAGA,IAAI,CAACyX,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAGzX,IAAI;;IAEnD;IACA,IAAImzB,KAAK,GAAG,QAAQ,CAAC,CAAC;IACtB,IAAI+qC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvD6vE,MAAM,EAAE;QACJgY,uBAAuB,EAAE/vH,aAAa,CAAC2qC,sBAAsB;QAC7DrwB,OAAO,EAAEE,OAAO;QAChB61G,KAAK,EAAEl1F,KAAK;QACZ34B,IAAI,EAAEwF,IAAI;QACVkkF,MAAM,EAAElkF,IAAI;QACZuS,WAAW,EAAEvS,IAAI;QACjB6hH,kBAAkB,EAAEH,YAAY;QAChCI,UAAU,EAAEN,QAAQ;QACpBrtG,SAAS,EAAE4vE;MACf;IACJ,CAAC,CAAC;IACF7lB,GAAG,GAAGA,GAAG,CAACpiE,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC3Bm7F,QAAQ,CAACl7F,IAAI,GAAG,EAAE;MAClBk7F,QAAQ,CAAColG,QAAQ,GAAG,EAAE;MACtB1gM,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACC,IAAI,CAAC8hH,QAAQ,EAAE,UAAU9/G,GAAG,EAAE4D,IAAI,EAAE;QAE5CA,IAAI,CAACqkF,WAAW,GAAGrkF,IAAI,CAAC26L,wBAAwB;QAChD36L,IAAI,CAACukF,WAAW,GAAGvkF,IAAI,CAAC46L,wBAAwB;QAChD56L,IAAI,CAACykF,WAAW,GAAGzkF,IAAI,CAAC66L,wBAAwB;QAChD76L,IAAI,CAACsiF,MAAM,GAAGtiF,IAAI,CAACuiF,iBAAiB;QACpCviF,IAAI,CAAC00B,QAAQ,GAAG10B,IAAI,CAAC86L,eAAe;QACpC96L,IAAI,CAACu1B,SAAS,GAAGv1B,IAAI,CAAC+6L,aAAa;QACnC/6L,IAAI,CAACq1B,OAAO,GAAGr1B,IAAI,CAAC0Q,OAAO;QAC3B1Q,IAAI,CAACo1B,GAAG,GAAGp1B,IAAI,CAAC2Q,WAAW;QAE3B,IAAI3Q,IAAI,CAAC4zB,GAAG,EAAE;UACV,IAAIwwD,GAAG,GAAG;YACNtwD,MAAM,EAAE9zB,IAAI,CAAC4zB,GAAG,CAAC61D,MAAM;YACvB91D,yBAAyB,EAAE3zB,IAAI,CAAC4zB,GAAG,CAACxvB,yBAAyB;YAC7DyvB,yBAAyB,EAAE7zB,IAAI,CAAC4zB,GAAG,CAACzvB;UACxC,CAAC;UAEDnE,IAAI,CAACi1B,KAAK,GAAGrH,IAAI,CAACC,SAAS,CAACu2D,GAAG,CAAC;QACpC,CAAC,MAAM;UACHpkF,IAAI,CAACi1B,KAAK,GAAG,MAAM;QACvB;QACA,IAAIj1B,IAAI,CAAC86L,eAAe,EAAE;UAEtB,IAAIE,MAAM,GAAG,IAAI;UACjBhhM,CAAC,CAACmC,IAAI,CAACm5F,QAAQ,CAAColG,QAAQ,EAAE,UAAUt+L,GAAG,EAAEtG,EAAE,EAAE;YACzC,IAAIA,EAAE,CAAC4+B,QAAQ,KAAK10B,IAAI,CAAC86L,eAAe,EAAE;cACtCE,MAAM,GAAGllM,EAAE;cACX,OAAO,KAAK;YAChB;UACJ,CAAC,CAAC;UACF,IAAIklM,MAAM,EAAE;YACRA,MAAM,CAACrjM,GAAG,EAAE;UAChB,CAAC,MAAM;YACHqjM,MAAM,GAAG;cACLtmK,QAAQ,EAAE10B,IAAI,CAAC86L,eAAe;cAC9Bx4G,MAAM,EAAEtiF,IAAI,CAACuiF,iBAAiB;cAC9B3pF,IAAI,EAAEoH,IAAI,CAACuiF,iBAAiB;cAC5B5qF,GAAG,EAAE,CAAC;cACN6zD,QAAQ,EAAE,CAAC;cACXj5C,SAAS,EAAEvS,IAAI,CAAC86L,eAAe;cAC/Bn2G,aAAa,EAAE3kF,IAAI,CAAC2kF,aAAa;cACjCs2G,eAAe,EAAEj7L,IAAI,CAACi7L;YAC1B,CAAC;YAED,IAAI,CAAC,CAACj7L,IAAI,CAACqkF,WAAW,EAAE;cACpB22G,MAAM,CAAC32G,WAAW,GAAGrkF,IAAI,CAACqkF,WAAW;YACzC;YAEA,IAAI,CAAC,CAACrkF,IAAI,CAACukF,WAAW,EAAE;cACpBy2G,MAAM,CAACz2G,WAAW,GAAGvkF,IAAI,CAACukF,WAAW;YACzC;YAEA,IAAI,CAAC,CAACvkF,IAAI,CAACykF,WAAW,EAAE;cACpBu2G,MAAM,CAACv2G,WAAW,GAAGzkF,IAAI,CAACykF,WAAW;YACzC;YAEA6Q,QAAQ,CAAColG,QAAQ,CAACn+L,IAAI,CAACy+L,MAAM,CAAC;UAClC;QACJ;QACAh7L,IAAI,CAACwrD,QAAQ,GAAG,CAAC;QACjB8pC,QAAQ,CAACl7F,IAAI,CAACmC,IAAI,CAACyD,IAAI,CAAC;MAE5B,CAAC,CAAC;MAEFs1F,QAAQ,CAAC4lG,cAAc,GAAG/gM,IAAI,CAACC,IAAI,CAAC8hH,QAAQ,CAAC5/G,MAAM,KAAKi1B,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC;IACF,OAAO+qC,GAAG;EACd,CAAC;EAED,IAAI,CAAC6rB,aAAa,GAAG,UAAU72D,IAAI,EAAEwY,QAAQ,EAAEq4C,SAAS,EAAE;IACtD,IAAI1gF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItH,IAAI,GAAG,CAAC,CAAC;IACbA,IAAI,CAACk3B,IAAI,GAAGA,IAAI;IAChBl3B,IAAI,CAACA,IAAI,GAAG,EAAE;IAEd,IAAI,CAAC+nF,SAAS,EAAE;MACZ,IAAIg5G,GAAG,GAAG,CAAC,CAAC;MAEZnhM,CAAC,CAACmC,IAAI,CAACm5F,QAAQ,CAAColG,QAAQ,EAAE,UAAUt+L,GAAG,EAAE4D,IAAI,EAAE;QAC3C,IAAIA,IAAI,CAACrI,GAAG,IAAI,CAAC,EACbwjM,GAAG,CAACn7L,IAAI,CAAC00B,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QAAA,KAE3Bt6B,IAAI,CAACA,IAAI,CAACmC,IAAI,CAACyD,IAAI,CAAC;MAC5B,CAAC,CAAC;MAEFhG,CAAC,CAACmC,IAAI,CAACm5F,QAAQ,CAACl7F,IAAI,EAAE,UAAUgC,GAAG,EAAE4D,IAAI,EAAE;QACvC,IAAI,CAACA,IAAI,CAAC86L,eAAe,EAAE;UACvB1gM,IAAI,CAACA,IAAI,CAACmC,IAAI,CAACyD,IAAI,CAAC;QACxB,CAAC,MAAM,IAAIm7L,GAAG,CAACn7L,IAAI,CAAC86L,eAAe,CAAC,KAAK,IAAI,EAAE;UAC3C1gM,IAAI,CAACA,IAAI,CAACmC,IAAI,CAACyD,IAAI,CAAC,CAAC,CAAC;QAC1B;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACHhG,CAAC,CAACmC,IAAI,CAACm5F,QAAQ,CAACl7F,IAAI,EAAE,UAAUgC,GAAG,EAAE4D,IAAI,EAAE;QACvC5F,IAAI,CAACA,IAAI,CAACmC,IAAI,CAACyD,IAAI,CAAC;MACxB,CAAC,CAAC;IACN;IAEA5F,IAAI,CAACA,IAAI,GAAGitD,OAAO,CAACjtD,IAAI,CAACA,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;IAC7CA,IAAI,CAACA,IAAI,GAAGA,IAAI,CAACA,IAAI,CAACwF,KAAK,CAAC0xB,IAAI,GAAGwY,QAAQ,EAAEA,QAAQ,IAAIxY,IAAI,GAAG,CAAC,CAAC,CAAC;IACnE7vB,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IACtB,OAAOqH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC4mF,YAAY,GAAG,UAAUC,QAAQ,EAAE;IACpC,IAAIhnF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItH,IAAI,GAAG,EAAE;IACbJ,CAAC,CAACmC,IAAI,CAACm5F,QAAQ,CAACl7F,IAAI,EAAE,UAAUgC,GAAG,EAAE4D,IAAI,EAAE;MACvC,IAAIA,IAAI,CAAC86L,eAAe,KAAKryG,QAAQ,EAAE;QACnCruF,IAAI,CAACmC,IAAI,CAACyD,IAAI,CAAC;MACnB;IACJ,CAAC,CAAC;IACFs1F,QAAQ,CAAC8lG,UAAU,GAAGhhM,IAAI;IAC1BqH,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IACtB,OAAOqH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACinF,mBAAmB,GAAG,UAAUv3D,IAAI,EAAEwY,QAAQ,EAAE;IACjD,IAAIroC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItH,IAAI,GAAG,CAAC,CAAC;IACbA,IAAI,CAACk3B,IAAI,GAAGA,IAAI;IAChBl3B,IAAI,CAACA,IAAI,GAAGitD,OAAO,CAACiuC,QAAQ,CAAC8lG,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC;IACvDhhM,IAAI,CAACA,IAAI,GAAGA,IAAI,CAACA,IAAI,CAACwF,KAAK,CAAC0xB,IAAI,GAAGwY,QAAQ,EAAEA,QAAQ,IAAIxY,IAAI,GAAG,CAAC,CAAC,CAAC;IACnE7vB,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IACtB,OAAOqH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACgmF,cAAc,GAAG,YAAY;IAC9B,IAAInmF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAIpF,MAAM,GAAGg5F,QAAQ,CAAColG,QAAQ,CAACp+L,MAAM;IACrCtC,CAAC,CAACmC,IAAI,CAACm5F,QAAQ,CAACl7F,IAAI,EAAE,UAAUgC,GAAG,EAAE4D,IAAI,EAAE;MACvC,IAAI,CAACA,IAAI,CAAC86L,eAAe,EAAE;QACvBx+L,MAAM,EAAE;MACZ;IACJ,CAAC,CAAC;IACFmF,QAAQ,CAACE,OAAO,CAACrF,MAAM,CAAC;IACxB,OAAOmF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC+mF,oBAAoB,GAAG,YAAY;IACpC,IAAIlnF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC2zF,QAAQ,CAAC8lG,UAAU,CAAC9+L,MAAM,CAAC;IAC5C,OAAOmF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACmlF,cAAc,GAAG,UAAU5E,SAAS,EAAE;IACvC,IAAI1gF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI46D,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvD6vE,MAAM,EAAE;QACJgY,uBAAuB,EAAE/vH,aAAa,CAAC2qC,sBAAsB;QAC7DxuB,SAAS,EAAE4vE;MACf;IACJ,CAAC,CAAC;IACF7lB,GAAG,GAAGA,GAAG,CAACpiE,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC3BH,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACC,IAAI,CAAC8hH,QAAQ,EAAE,UAAU9/G,GAAG,EAAE4D,IAAI,EAAE;QAC5CA,IAAI,CAACqkF,WAAW,GAAGrkF,IAAI,CAAC26L,wBAAwB;QAChD36L,IAAI,CAACukF,WAAW,GAAGvkF,IAAI,CAAC46L,wBAAwB;QAChD56L,IAAI,CAACykF,WAAW,GAAGzkF,IAAI,CAAC66L,wBAAwB;QAChD76L,IAAI,CAACsiF,MAAM,GAAGtiF,IAAI,CAAC86L,eAAe;QAClC96L,IAAI,CAAC00B,QAAQ,GAAG10B,IAAI,CAACuiF,iBAAiB;QACtCviF,IAAI,CAACu1B,SAAS,GAAGv1B,IAAI,CAAC+6L,aAAa;QACnC/6L,IAAI,CAACq1B,OAAO,GAAGr1B,IAAI,CAAC0Q,OAAO;QAC3B1Q,IAAI,CAACo1B,GAAG,GAAGp1B,IAAI,CAAC2Q,WAAW;QAC3B3Q,IAAI,CAAC41B,WAAW,GAAG51B,IAAI,CAAC41B,WAAW;QAEnC,IAAI51B,IAAI,CAAC4zB,GAAG,EAAE;UACV,IAAIwwD,GAAG,GAAG;YACNtwD,MAAM,EAAE9zB,IAAI,CAAC4zB,GAAG,CAAC61D,MAAM;YACvB91D,yBAAyB,EAAE3zB,IAAI,CAAC4zB,GAAG,CAACxvB,yBAAyB;YAC7DyvB,yBAAyB,EAAE7zB,IAAI,CAAC4zB,GAAG,CAACzvB;UACxC,CAAC;UAEDnE,IAAI,CAACi1B,KAAK,GAAGrH,IAAI,CAACC,SAAS,CAACu2D,GAAG,CAAC;QACpC,CAAC,MAAM;UACHpkF,IAAI,CAACi1B,KAAK,GAAG,MAAM;QACvB;QACA,IAAI76B,IAAI,GAAG,CAAC4F,IAAI,CAAC;QACjByB,QAAQ,CAACE,OAAO,CAAC;UACbvH,IAAI,EAAEA;QACV,CAAC,CAAC;MACN,CAAC,CAAC;IAEN,CAAC,CAAC;IACF,OAAOqH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACm5F,YAAY,GAAG,UAAUzhG,EAAE,EAAEmtB,UAAU,EAAEpC,QAAQ,EAAEtiB,QAAQ,EAAE;IAC9D,IAAIu6D,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE;QACF2sH,IAAI,EAAE;UACFztH,EAAE,EAAEA,EAAE;UACNwtB,UAAU,EAAEL,UAAU;UACtBS,mBAAmB,EAAE7C,QAAQ;UAC7BkgG,QAAQ,EAAExiH;QACd;MACJ;IACJ,CAAC,CAAC;IAEF,OAAOu6D,GAAG;EACd,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;;EAEA,IAAI,CAACr6C,sBAAsB,GAAG,UAAUwE,UAAU,EAAEpC,QAAQ,EAAEhtB,IAAI,EAAEmvB,eAAe,EAAE;IACjF,IAAI2nF,MAAM,GAAG;MACTrnF,UAAU,EAAEL,UAAU;MACtBuG,QAAQ,EAAE3I,QAAQ;MAClBkgG,QAAQ,EAAE,CAACnuH,aAAa,CAACX;IAC7B,CAAC;IAED,IAAI+wB,eAAe,EACf2nF,MAAM,CAACtnF,eAAe,GAAGL,eAAe;IAE5C,IAAInvB,IAAI,EACJ82G,MAAM,CAACktF,IAAI,GAAGhkM,IAAI;IAEtB,IAAIilE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,mBAAmB;MACtD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IACF7xC,GAAG,GAAGA,GAAG,CAACpiE,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC3B,OAAO,CAACA,IAAI,CAACC,IAAI,CAACkhM,QAAQ,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAOh/H,GAAG;EACd,CAAC;EAED,IAAI,CAAC4/B,mBAAmB,GAAG,UAAUz1E,UAAU,EAAEpC,QAAQ,EAAE;IACvD,IAAIi4C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,mBAAmB;MACtD6vE,MAAM,EAAE;QACJrnF,UAAU,EAAEL,UAAU;QACtBuG,QAAQ,EAAE3I,QAAQ;QAClBtiB,QAAQ,EAAE,CAAC3L,aAAa,CAACX,MAAM;QAC/B6uH,QAAQ,EAAE;MACd;IACJ,CAAC,CAAC;IACFhoD,GAAG,GAAGA,GAAG,CAACpiE,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC3B,OAAO,CAACA,IAAI,CAACC,IAAI,CAACkhM,QAAQ,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAOh/H,GAAG;EACd,CAAC;EAED,IAAI,CAACi/H,SAAS,GAAG,YAAY;IACzB,IAAIj/H,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAE;IACT,CAAC,CAAC;IACF+gD,GAAG,GAAGA,GAAG,CAACpiE,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC3B;MACA,OAAOA,IAAI,CAACC,IAAI;IACpB,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAGD,IAAI,CAACz5C,gBAAgB,GAAG,UAAU2D,eAAe,EAAE;IAC/C,IAAI81C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvD6vE,MAAM,EAAE;QACJtnF,eAAe,EAAEL;MACrB;IACJ,CAAC,CAAC;IACF81C,GAAG,GAAGA,GAAG,CAACpiE,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC3B,OAAOA,IAAI,CAACC,IAAI,CAACg8H,aAAa;IAClC,CAAC,CAAC;IAEF,OAAO95D,GAAG;EACd,CAAC;EAED,IAAI,CAACk/H,WAAW,GAAG,UAAUC,WAAW,EAAEC,UAAU,EAAE;IAClD,IAAIp/H,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB;MACpDlkC,IAAI,EAAE;QACF49F,QAAQ,EAAEyjG,WAAW;QACrBE,UAAU,EAAED;MAChB;IACJ,CAAC,CAAC;IAEF,OAAOp/H,GAAG;EACd,CAAC;EAED,IAAI,CAAC6iH,YAAY,GAAG,UAAUF,mBAAmB,EAAE2c,aAAa,EAAE1wC,mBAAmB,EAAE2wC,uBAAuB,EAAE/3K,MAAM,EAClHg4K,YAAY,EAAEnnD,aAAa,EAAEz8G,QAAQ,EAAE;IACvC,IAAIokC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE;QACFynC,mBAAmB,EAAEo9I,mBAAmB;QACxC8c,aAAa,EAAEH,aAAa;QAC5Bl5D,mBAAmB,EAAEwoB,mBAAmB;QACxC8wC,uBAAuB,EAAEH,uBAAuB;QAChD5zD,aAAa,EAAE0M,aAAa;QAC5BsnD,YAAY,EAAEH,YAAY;QAC1BpjK,QAAQ,EAAER,QAAQ;QAClB/W,MAAM,EAAE2C;MACZ;IACJ,CAAC,CAAC;IAEF,OAAOw4C,GAAG;EACd,CAAC;EAED,IAAI,CAACwyE,sBAAsB,GAAG,UAAUC,UAAU,EAAE;IAEhD,IAAIzyE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,yBAAyB;MAC5D6vE,MAAM,EAAE4gC;IACZ,CAAC,CAAC;IAEF,OAAOzyE,GAAG;EACd,CAAC;EAED,IAAI,CAACg3H,qBAAqB,GAAG,UAAUv8L,UAAU,EAAEu6B,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAE;IAC7E,IAAI18C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB;MACnD6vE,MAAM,EAAE;QACJiL,IAAI,EAAE9nF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBm1F,KAAK,EAAEl1F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bh4B,MAAM,EAAE00C,MAAM;QACdiuJ,YAAY,EAAEnlM,UAAU,GAAGA,UAAU,GAAG,IAAI;QAC5CywH,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG;MAC5E;IACJ,CAAC,CAAC;IAEF,OAAOrrD,GAAG;EACd,CAAC;EAED,IAAI,CAAC28D,8BAA8B,GAAG,UAAU9qB,MAAM,EAAE;IACpD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACk3H,wBAAwB,GAAG,UAAU5pK,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAEynF,OAAO,EAAE;IACpE,IAAI18C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1D6vE,MAAM,EAAE;QACJ7hF,MAAM,EAAE1C,MAAM;QACdwvF,IAAI,EAAE9nF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBm1F,KAAK,EAAEl1F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bi2F,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG;MAC5E;IACJ,CAAC,CAAC;IAEF,OAAOrrD,GAAG;EACd,CAAC;EAED,IAAI,CAACm3H,oBAAoB,GAAG,UAAUr5L,IAAI,EAAE;IACxC,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1DlkC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAACo3H,mBAAmB,GAAG,UAAUt5L,IAAI,EAAE;IACvC,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1DlkC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAACs3H,mBAAmB,GAAG,UAAUhqK,MAAM,EAAE;IACzC,IAAI0yC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,QAAQ;MAChBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB;MACnD6vE,MAAM,EAAE;QACJ7hF,MAAM,EAAE1C;MACZ;IACJ,CAAC,CAAC;IAEF,OAAO0yC,GAAG;EACd,CAAC;EAED,IAAI,CAACu3H,qBAAqB,GAAG,UAAUjqK,MAAM,EAAE84B,IAAI,EAAEoxI,WAAW,EAAE;IAC9D,IAAIx3H,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB;MACnD6vE,MAAM,EAAE;QACJ7hF,MAAM,EAAE1C,MAAM;QACdvyB,IAAI,EAAE,UAAU;QAChB8kM,cAAc,EAAEz5I;MACpB,CAAC;MACDtoD,IAAI,EAAE05L;IACV,CAAC,CAAC;IAEF,OAAOx3H,GAAG;EACd,CAAC;EAED,IAAI,CAACy3H,iBAAiB,GAAG,UAAUnqK,MAAM,EAAE;IACvC,IAAI0yC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB;MACnD6vE,MAAM,EAAE;QACJ7hF,MAAM,EAAE1C,MAAM;QACdvyB,IAAI,EAAE;MACV;IACJ,CAAC,CAAC;IAEF,OAAOilE,GAAG;EACd,CAAC;EAED,IAAI,CAAC68C,eAAe,GAAG,UAAU1wB,QAAQ,EAAEn3D,IAAI,EAAEC,KAAK,EAAE4wD,SAAS,EAAE/jF,IAAI,EAAE46G,OAAO,EAAE;IAC9E56G,IAAI,GAAGA,IAAI,KAAK,EAAE,GAAGA,IAAI,CAACyX,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAGzX,IAAI;IACjD,IAAIk+D,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1D6vE,MAAM,EAAE;QACJz5E,QAAQ,EAAE+zD,QAAQ,GAAGA,QAAQ,GAAG,IAAI;QACpC2zG,IAAI,EAAE,EAAE;QACRhjF,IAAI,EAAE9nF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBm1F,KAAK,EAAEl1F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bhf,SAAS,EAAE4vE,SAAS;QACpBqlC,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG,IAAI;QAC5EvvC,YAAY,EAAEh6E,IAAI;QAClBmgH,uBAAuB,EAAEnoH,aAAa,CAAC2qC;MAC3C;IACJ,CAAC,CAAC;IACF7lC,OAAO,CAACC,GAAG,CAACmhE,GAAG,CAAC;IAChB,OAAOA,GAAG;EACd,CAAC;EAED,IAAI,CAAC+hD,cAAc,GAAG,UAAU59D,IAAI,EAAE;IAClC,IAAIh/C,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI46D,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvD6vE,MAAM,EAAE1tD;IACZ,CAAC,CAAC;IAEFh/C,QAAQ,CAACE,OAAO,CAAC26D,GAAG,CAAC;IACrB,OAAO76D,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC48G,cAAc,GAAG,UAAUlF,OAAO,EAAE;IACrCp+G,OAAO,CAACC,GAAG,CAACm+G,OAAO,CAAC;IAEpB,IAAIzsF,OAAO,GAAG72B,OAAO,CAAC2P,MAAM,CAAC,CAAC,CAAC,EAAE2zG,OAAO,EAAE;MAAEutE,aAAa,EAAEzwL,aAAa,CAAC+rB;IAAa,CAAC,CAAC;IACxF,IAAIm6C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1DlkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAChB,OAAO;IAChC,CAAC,CAAC;IACF3xB,OAAO,CAACC,GAAG,CAACmhE,GAAG,CAAC;IAEhB,OAAOA,GAAG;EACd,CAAC;EAED,IAAI,CAACmiD,aAAa,GAAG,UAAUnF,OAAO,EAAE;IACpCp+G,OAAO,CAACC,GAAG,CAACm+G,OAAO,CAAC;IAEpB,IAAIzsF,OAAO,GAAG72B,OAAO,CAAC2P,MAAM,CAAC,CAAC,CAAC,EAAE2zG,OAAO,EAAE;MAAEutE,aAAa,EAAEzwL,aAAa,CAAC+rB;IAAa,CAAC,CAAC;IACxF,IAAIm6C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1DlkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAChB,OAAO;IAChC,CAAC,CAAC;IACF3xB,OAAO,CAACC,GAAG,CAACmhE,GAAG,CAAC;IAEhB,OAAOA,GAAG;EACd,CAAC;EAED,IAAI,CAACw8C,YAAY,GAAG,UAAUwF,OAAO,EAAEllH,IAAI,EAAER,IAAI,EAAEyjM,YAAY,EAAE;IAC7DnhM,OAAO,CAACC,GAAG,CAACmjH,OAAO,EAAEllH,IAAI,EAAER,IAAI,EAAEyjM,YAAY,CAAC;IAE9C,IAAI//H,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjD6vE,MAAM,EAAE;QACJmQ,OAAO,EAAEA,OAAO,GAAGA,OAAO,GAAG,IAAI;QACjCllH,IAAI,EAAEA,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBR,IAAI,EAAEA,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxByjM,YAAY,EAAEA,YAAY,GAAGA,YAAY,GAAG;MAChD;IACJ,CAAC,CAAC;IACFnhM,OAAO,CAACC,GAAG,CAACmhE,GAAG,CAAC;IAEhB,OAAOA,GAAG;EACd,CAAC;EAED,IAAI,CAAC05H,cAAc,GAAG,UAAUllE,OAAO,EAAEilE,MAAM,EAAEuG,YAAY,EAAE;IAC3DphM,OAAO,CAACC,GAAG,CAAC,4BAA4B,GAAG21H,OAAO,CAAC,eAAe,CAAC,GAAG,WAAW,GAAGilE,MAAM,CAAC;IAE3F,IAAIuG,YAAY,EAAE;MACd,OAAOxrE,OAAO,CAAC,cAAc,CAAC;MAE9Bx0D,GAAG,GAAGjhD,KAAK,CAAC;QACRiB,MAAM,EAAE,KAAK;QACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;QAClD6vE,MAAM,EAAE;UACJouF,UAAU,EAAE1wI,kBAAkB,CAACz1D,aAAa,CAACoxC,gBAAgB,CAAC,CAAC,GAAG,SAAS,GAAGuuJ,MAAM;QACxF,CAAC;QACDjlE,OAAO,EAAE;UACL,wBAAwB,EAAEjlE,kBAAkB,CAACj+B,IAAI,CAACC,SAAS,CAACijG,OAAO,CAAC;QACxE;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAIx0D,GAAG,GAAGjhD,KAAK,CAAC;QACZiB,MAAM,EAAE,KAAK;QACbf,GAAG,EAAEnlB,aAAa,CAACoxC,gBAAgB,CAAC,CAAC,GAAG,SAAS;QAAE;QACnDspF,OAAO,EAAEA;MACb,CAAC,CAAC;IACN;IAEA,OAAOx0D,GAAG;EACd,CAAC;EAED,IAAI,CAAC45H,gBAAgB,GAAG,UAAUplE,OAAO,EAAEilE,MAAM,EAAEuG,YAAY,EAAE;IAC7DphM,OAAO,CAACC,GAAG,CAAC,8BAA8B,GAAG21H,OAAO,CAAC,eAAe,CAAC,GAAG,WAAW,GAAGilE,MAAM,CAAC;IAE7F,IAAIuG,YAAY,EAAE;MACd,OAAOxrE,OAAO,CAAC,cAAc,CAAC;MAE9Bx0D,GAAG,GAAGjhD,KAAK,CAAC;QACRiB,MAAM,EAAE,QAAQ;QAChBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;QAClD6vE,MAAM,EAAE;UACJouF,UAAU,EAAE1wI,kBAAkB,CAACz1D,aAAa,CAACoxC,gBAAgB,CAAC,CAAC,GAAG,SAAS,GAAGuuJ,MAAM;QACxF,CAAC;QACDjlE,OAAO,EAAE;UACL,wBAAwB,EAAEjlE,kBAAkB,CAACj+B,IAAI,CAACC,SAAS,CAACijG,OAAO,CAAC;QACxE;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAIx0D,GAAG,GAAGjhD,KAAK,CAAC;QACZiB,MAAM,EAAE,QAAQ;QAChBf,GAAG,EAAEnlB,aAAa,CAACoxC,gBAAgB,CAAC,CAAC,GAAG,SAAS,GAAGuuJ,MAAM;QAAE;QAC5DjlE,OAAO,EAAEA;MACb,CAAC,CAAC;IACN;IAEA,OAAOx0D,GAAG;EACd,CAAC;EAED,IAAI,CAACi6H,gBAAgB,GAAG,UAAUzlE,OAAO,EAAEilE,MAAM,EAAEI,UAAU,EAAEE,cAAc,EAAEiG,YAAY,EAAE;IAEzFphM,OAAO,CAACC,GAAG,CAAC,8BAA8B,GAAG21H,OAAO,CAAC,eAAe,CAAC,GAAG,WAAW,GAAGilE,MAAM,CAAC;IAE7F,IAAIuG,YAAY,EAAE;MACd,OAAOxrE,OAAO,CAAC,cAAc,CAAC;MAE9Bx0D,GAAG,GAAGjhD,KAAK,CAAC;QACRiB,MAAM,EAAE,MAAM;QACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;QAClD6vE,MAAM,EAAE;UACJouF,UAAU,EAAE1wI,kBAAkB,CAACz1D,aAAa,CAACoxC,gBAAgB,CAAC,CAAC,GAAG,SAAS;QAC/E,CAAC;QACDspF,OAAO,EAAE;UACL,wBAAwB,EAAEjlE,kBAAkB,CAACj+B,IAAI,CAACC,SAAS,CAACijG,OAAO,CAAC;QACxE,CAAC;QACD12H,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;UACjB2uK,MAAM,EAAEzG,MAAM;UACdvzE,UAAU,EAAE2zE,UAAU;UACtBE,cAAc,EAAEA;QACpB,CAAC;MACL,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAI/5H,GAAG,GAAGjhD,KAAK,CAAC;QACZiB,MAAM,EAAE,MAAM;QACdf,GAAG,EAAEnlB,aAAa,CAACoxC,gBAAgB,CAAC,CAAC;QACrCptC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;UACjB2uK,MAAM,EAAEzG,MAAM;UACdvzE,UAAU,EAAE2zE,UAAU;UACtBE,cAAc,EAAEA;QACpB,CAAC,CAAC;QACFvlE,OAAO,EAAEA;MACb,CAAC,CAAC;IACN;IAEA,OAAOx0D,GAAG;EACd,CAAC;EAED,IAAI,CAACk6H,iBAAiB,GAAG,UAAU1lE,OAAO,EAAEilE,MAAM,EAAE58J,GAAG,EAAEkkG,WAAW,EAAE;IAClE,IAAI/gE,GAAG;IACPphE,OAAO,CAACC,GAAG,CAAC,4BAA4B,GAAG21H,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,GAAG33F,GAAG,GAAG,IAAI,CAAC;IAC3F;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACAmjC,GAAG,GAAGjhD,KAAK,CAAC;MACRiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACmxC,YAAY,CAAC,CAAC,GAAG,OAAO;MAC3CupF,OAAO,EAAEA,OAAO;MAChB12H,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;QACjB2uK,MAAM,EAAEzG,MAAM;QACdU,iBAAiB,EAAEt9J,GAAG;QACtBsjK,YAAY,EAAEp/D,WAAW;QACzBl/F,aAAa,EAAE;UACXu+J,UAAU,EAAE,IAAI;UAChBC,qBAAqB,EAAE;QAC3B;MACJ,CAAC;IACL,CAAC,CAAC;IACF;;IAEA,OAAOrgI,GAAG;EACd,CAAC;EAED,IAAI,CAAC86H,mBAAmB,GAAG,UAAU77K,GAAG,EAAEu1G,OAAO,EAAEilE,MAAM,EAAE58J,GAAG,EAAEkkG,WAAW,EAAE;IACzE,IAAI/gE,GAAG;IACPphE,OAAO,CAACC,GAAG,CAAC,2BAA2B,GAAG21H,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,GAAG33F,GAAG,GAAG,IAAI,GAAG5d,GAAG,CAAC;IAEhG+gD,GAAG,GAAGjhD,KAAK,CAAC;MACRiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEA,GAAG;MACRu1G,OAAO,EAAEA,OAAO;MAChB12H,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;QACjB2uK,MAAM,EAAEzG,MAAM;QACdU,iBAAiB,EAAEt9J,GAAG;QACtBsjK,YAAY,EAAEp/D,WAAW;QACzBl/F,aAAa,EAAE;UACXw+J,qBAAqB,EAAE;QAC3B;MACJ,CAAC;IACL,CAAC,CAAC;IAEF,OAAOrgI,GAAG;EACd,CAAC;EAED,IAAI,CAACgwD,qBAAqB,GAAG,UAAUne,MAAM,EAAE;IAC3C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,sBAAsB;MACzD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACmwD,0BAA0B,GAAG,UAAUmwE,eAAe,EAAE;IAEzD,IAAItgI,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,6BAA6B;MAChE6vE,MAAM,EAAE;QACJpjB,eAAe,EAAE6xG;MACrB;IACJ,CAAC,CAAC;IAEF,OAAOtgI,GAAG;EACd,CAAC;EAED,IAAI,CAACouF,QAAQ,GAAG,UAAUn6E,aAAa,EAAEn2E,IAAI,EAAE;IAE3C,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,WAAW;MAC9ClkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;QACjB0iD,aAAa,EAAEA,aAAa;QAC5Bn2E,IAAI,EAAEA;MACV,CAAC;IACL,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAACm3D,sBAAsB,GAAG,UAAUtlB,MAAM,EAAE;IAC5C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,2BAA2B;MAC9D6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACk1D,mBAAmB,GAAG,UAAUrjB,MAAM,EAAE;IAEzC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACo1D,sBAAsB,GAAG,UAAUvjB,MAAM,EAAE;IAC5C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACm1D,wBAAwB,GAAG,UAAUtjB,MAAM,EAAE;IAC9C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC48D,mBAAmB,GAAG,UAAU/qB,MAAM,EAAE;IACzC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC68D,sBAAsB,GAAG,UAAUhrB,MAAM,EAAE;IAC5C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC88D,wBAAwB,GAAG,UAAUjrB,MAAM,EAAE;IAC9C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACy0D,mBAAmB,GAAG,UAAU5iB,MAAM,EAAE;IACzC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC60D,sBAAsB,GAAG,UAAUhjB,MAAM,EAAE;IAC5C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC40D,wBAAwB,GAAG,UAAU/iB,MAAM,EAAE;IAC9C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC04D,gBAAgB,GAAG,UAAU7mB,MAAM,EAAE;IACtC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC44D,mBAAmB,GAAG,UAAU/mB,MAAM,EAAE;IACzC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC24D,qBAAqB,GAAG,UAAU9mB,MAAM,EAAE;IAC3C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC+8D,eAAe,GAAG,UAAUlrB,MAAM,EAAE;IACrC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC09D,kBAAkB,GAAG,UAAU7rB,MAAM,EAAE;IACxC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC29D,oBAAoB,GAAG,UAAU9rB,MAAM,EAAE;IAC1C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACkyD,kBAAkB,GAAG,UAAUrgB,MAAM,EAAE;IACxC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB;MACpD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACqzD,qBAAqB,GAAG,UAAUxhB,MAAM,EAAE;IAC3C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB;MACpDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACmzD,uBAAuB,GAAG,UAAUthB,MAAM,EAAE;IAC7C,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB;MACpDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACm4D,4BAA4B,GAAG,UAAUtmB,MAAM,EAAE;IAClD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB;MACpD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACq4D,+BAA+B,GAAG,UAAUxmB,MAAM,EAAE;IACrD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB;MACpDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACo4D,iCAAiC,GAAG,UAAUvmB,MAAM,EAAE;IACvD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB;MACpDlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAGD,IAAI,CAAC+3D,+BAA+B,GAAG,UAAUlmB,MAAM,EAAE;IACrD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,2BAA2B;MAC9DlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC83D,iCAAiC,GAAG,UAAUjmB,MAAM,EAAE;IACvD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,2BAA2B;MAC9DlkC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC0zE,0BAA0B,GAAG,UAAU6sD,aAAa,EAAE;IACvD,IAAIvgI,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjDlkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;QACjBm9F,UAAU,EAAE,uBAAuB;QACnCI,aAAa,EAAEyxE;MACnB,CAAC;IACL,CAAC,CAAC;IAEF,OAAOvgI,GAAG;EACd,CAAC;EAED,IAAI,CAACk0G,qBAAqB,GAAG,UAAUjT,YAAY,EAAE;IACjD,IAAIjhG,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjDlkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;QACjBm9F,UAAU,EAAE,aAAa;QACzBI,aAAa,EAAE,CAACmyC,YAAY;MAChC,CAAC;IACL,CAAC,CAAC;IAEF,OAAOjhG,GAAG;EACd,CAAC;EAED,IAAI,CAAC0pH,qBAAqB,GAAG,UAAUjvL,UAAU,EAAEu6B,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAE+qE,OAAO,EAAE6lE,UAAU,EAAE;IACzF,IAAIviH,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,wBAAwB;MAC3D6vE,MAAM,EAAE;QACJ2uF,UAAU,EAAEje,UAAU;QACtBzlE,IAAI,EAAE9nF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBm1F,KAAK,EAAEl1F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bh4B,MAAM,EAAE00C,MAAM,IAAIA,MAAM,KAAK,GAAG,GAAGA,MAAM,GAAG,IAAI;QAChDiuJ,YAAY,EAAEnlM,UAAU,GAAGA,UAAU,GAAG,IAAI;QAC5CywH,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG;MAC5E;IACJ,CAAC,CAAC;IAEF,OAAOrrD,GAAG;EACd,CAAC;EAED,IAAI,CAAC8pH,iCAAiC,GAAG,UAAUj4E,MAAM,EAAE;IACvD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,yBAAyB;MAC5D6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACgqH,6BAA6B,GAAG,UAAU18J,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAEynF,OAAO,EAAE;IACzE,IAAI18C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,4BAA4B;MAC/D6vE,MAAM,EAAE;QACJ7hF,MAAM,EAAE1C,MAAM;QACdwvF,IAAI,EAAE9nF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBm1F,KAAK,EAAEl1F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bi2F,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG;MAC5E;IACJ,CAAC,CAAC;IAEF,OAAOrrD,GAAG;EACd,CAAC;EAED,IAAI,CAAC6qH,yBAAyB,GAAG,UAAU/sL,IAAI,EAAE;IAC7C,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,4BAA4B;MAC/DlkC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAAC8qH,wBAAwB,GAAG,UAAUhtL,IAAI,EAAE;IAC5C,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,4BAA4B;MAC/DlkC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAACirH,4BAA4B,GAAG,UAAUb,cAAc,EAAEE,YAAY,EAAEU,aAAa,EAAE;IACvF,IAAIhrH,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1D6vE,MAAM,EAAE;QACJu4E,cAAc,EAAEA,cAAc;QAC9BE,YAAY,EAAEA,YAAY;QAC1BU,aAAa,EAAEA;MACnB;IACJ,CAAC,CAAC;IAEF,OAAOhrH,GAAG;EACd,CAAC;EAED,IAAI,CAACorH,4BAA4B,GAAG,UAAUv5E,MAAM,EAAE;IAClD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1D6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACsrH,gBAAgB,GAAG,UAAUh+J,MAAM,EAAE;IACtC,IAAI0yC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1D6vE,MAAM,EAAE;QACJvkF,MAAM,EAAEA;MACZ;IACJ,CAAC,CAAC;IAEF,OAAO0yC,GAAG;EACd,CAAC;EAED,IAAI,CAACqrH,wBAAwB,GAAG,UAAU/9J,MAAM,EAAE85B,UAAU,EAAEpyB,IAAI,EAAEC,KAAK,EAAEynF,OAAO,EAAE;IAChF,IAAI18C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,0BAA0B;MAC7D6vE,MAAM,EAAE;QACJ7hF,MAAM,EAAE1C,MAAM;QACdhW,UAAU,EAAE8vC,UAAU;QACtB01D,IAAI,EAAE9nF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBm1F,KAAK,EAAEl1F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bi2F,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG;MAC5E;IACJ,CAAC,CAAC;IAEF,OAAOrrD,GAAG;EACd,CAAC;EAED,IAAI,CAACwrH,eAAe,GAAG,UAAU1nL,IAAI,EAAEiiD,EAAE,EAAEK,IAAI,EAAE;IAC7C,IAAI4Z,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,aAAa;MAChD6vE,MAAM,EAAE;QACJ/tG,IAAI,EAAEA,IAAI;QACViiD,EAAE,EAAEA,EAAE;QACNK,IAAI,EAAEA;MACV;IACJ,CAAC,CAAC;IAEF,OAAO4Z,GAAG;EACd,CAAC;EAED,IAAI,CAAC+sH,eAAe,GAAG,UAAUjvL,IAAI,EAAE;IACnC,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACmnC,OAAO,GAAG,mCAAmC;MAChEnjC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAACktH,cAAc,GAAG,UAAUpvL,IAAI,EAAE;IAClC,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACmnC,OAAO,GAAG,mCAAmC;MAChEnjC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAACitH,iBAAiB,GAAG,UAAUnvL,IAAI,EAAE;IACrC,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACmnC,OAAO,GAAG,gCAAgC;MAC7DnjC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAACotH,kBAAkB,GAAG,UAAUhpL,EAAE,EAAEq8L,MAAM,EAAE;IAC5C,IAAIzgI,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,QAAQ;MAChBf,GAAG,EAAEnlB,aAAa,CAACmnC,OAAO,GAAG,yCAAyC,GAAGw/J,MAAM;MAC/E3iM,IAAI,EAAE;QACFd,EAAE,EAAEoH;MACR;IACJ,CAAC,CAAC;IAEF,OAAO47D,GAAG;EACd,CAAC;EAED,IAAI,CAACytH,kBAAkB,GAAG,UAAUrpL,EAAE,EAAEioH,IAAI,EAAEjuD,UAAU,EAAE;IACtD,IAAI4B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,wBAAwB;MAC3D6vE,MAAM,EAAE;QACJ7hF,MAAM,EAAE5rB,EAAE;QACVs8L,IAAI,EAAEr0E,IAAI;QACVhuB,UAAU,EAAEjgC;MAChB;IACJ,CAAC,CAAC;IAEF,OAAO4B,GAAG;EACd,CAAC;EAED,IAAI,CAAC0tH,qBAAqB,GAAG,UAAUtpL,EAAE,EAAEioH,IAAI,EAAEjuD,UAAU,EAAE;IACzD,IAAI4B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,wBAAwB;MAC3D6vE,MAAM,EAAE;QACJ7hF,MAAM,EAAE5rB,EAAE;QACVs8L,IAAI,EAAEr0E,IAAI;QACVhuB,UAAU,EAAEjgC;MAChB;IACJ,CAAC,CAAC;IAEF,OAAO4B,GAAG;EACd,CAAC;EAED,IAAI,CAAC2tH,sBAAsB,GAAG,UAAUgT,MAAM,EAAE7iM,IAAI,EAAE;IAClD,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gCAAgC,GAAG2+J,MAAM;MAC5E7iM,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAACutH,uBAAuB,GAAG,UAAUnmI,UAAU,EAAE+jI,UAAU,EAAE;IAC7D,IAAInrH,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAE;QACJzqD,UAAU,EAAEA,UAAU;QACtB+jI,UAAU,EAAEA;MAChB;IACJ,CAAC,CAAC;IAEF,OAAOnrH,GAAG;EACd,CAAC;EAED,IAAI,CAACm1E,cAAc,GAAG,YAAY;IAC9B,IAAIn1E,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG;IACvC,CAAC,CAAC;IAEF,OAAOg+B,GAAG;EACd,CAAC;EAED,IAAI,CAAC03H,0BAA0B,GAAG,UAAUpqK,MAAM,EAAE85B,UAAU,EAAE00B,YAAY,EAAE;IAC1E,IAAI9b,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,mBAAmB;MACtDlkC,IAAI,EAAE;QACFkyB,MAAM,EAAE1C,MAAM;QACdhW,UAAU,EAAE8vC,UAAU;QACtBw4I,YAAY,EAAE9jH;MAClB;IACJ,CAAC,CAAC;IAEF,OAAO9b,GAAG;EACd,CAAC;EAGD,IAAI,CAACq6E,kBAAkB,GAAG,UAAUx8E,OAAO,EAAE91C,QAAQ,EAAEuyH,KAAK,EAAE;IAC1D,IAAIt6E,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAE;QACJh0C,OAAO,EAAEA,OAAO;QAChB91C,QAAQ,EAAEA;MACd,CAAC;MACDjqB,IAAI,EAAE;QACFw8I,KAAK,EAAEA;MACX;IACJ,CAAC,CAAC;IAEF,OAAOt6E,GAAG;EACd,CAAC;EAED,IAAI,CAACu6E,gBAAgB,GAAG,UAAUC,YAAY,EAAE;IAC5C,IAAIx6E,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,QAAQ;MAChBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAE;QACJ2oC,YAAY,EAAEA;MAClB;IACJ,CAAC,CAAC;IAEF,OAAOx6E,GAAG;EACd,CAAC;;EAED;EACA,IAAI,CAACzb,cAAc,GAAG,UAAUstD,MAAM,EAAE;IACpC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC4gI,YAAY,GAAG,UAAU/uF,MAAM,EAAE;IAClC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAEA;IACZ,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC6gI,gCAAgC,GAAG,UAAUlmD,UAAU,EAAE;IAC1D,IAAI36E,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAE;QACJ8oC,UAAU,EAAEA;MAChB;IACJ,CAAC,CAAC;IAEF,OAAO36E,GAAG;EACd,CAAC;EAED,IAAI,CAAC8gI,aAAa,GAAG,UAAUjvF,MAAM,EAAE;IACnC,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gEAAgE,GAACloC,aAAa,CAAC2qC,sBAAsB;MACxI3mC,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC+gI,cAAc,GAAG,UAAUC,UAAU,EAAEnvF,MAAM,EAAE;IAChD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAE;QACJmvF,UAAU,EAAEA;MAChB,CAAC;MACDljM,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAACihI,cAAc,GAAG,UAAUD,UAAU,EAAEnvF,MAAM,EAAE;IAChD,IAAI7xC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAE;QACJmvF,UAAU,EAAEA;MAChB,CAAC;MACDljM,IAAI,EAAE+zG;IACV,CAAC,CAAC;IAEF,OAAO7xC,GAAG;EACd,CAAC;EAED,IAAI,CAAC3Y,wBAAwB,GAAG,UAAU65I,cAAc,EAAE95I,UAAU,EAAEzV,MAAM,EAAE;IAC1E,IAAIquB,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxD6vE,MAAM,EAAE;QACJqvF,cAAc,EAAEA,cAAc;QAC9B95I,UAAU,EAAEA,UAAU;QACtB+5I,SAAS,EAAExvJ;MACf;IACJ,CAAC,CAAC;IAEF,OAAOquB,GAAG;EACd,CAAC;EAED,IAAI,CAAC46E,oBAAoB,GAAG,UAAUD,UAAU,EAAE;IAC9C,IAAI36E,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,WAAW;MAC9C6vE,MAAM,EAAE;QACJ3gF,UAAU,EAAEypH;MAChB;IACJ,CAAC,CAAC;IAEF,OAAO36E,GAAG;EACd,CAAC;EAED,IAAI,CAACqzF,QAAQ,GAAG,UAAUx1F,OAAO,EAAE;IAC/B,IAAImC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,QAAQ;MAChBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,WAAW;MAC9C6vE,MAAM,EAAE;QACJ70G,EAAE,EAAE6gE;MACR;IACJ,CAAC,CAAC;IAEF,OAAOmC,GAAG;EACd,CAAC;EAED,IAAI,CAACw0B,uBAAuB,GAAG,UAAUF,uBAAuB,EAAEC,qBAAqB,EAAEpwD,cAAc,EAAEE,cAAc,EAAE;IAErH,OAAOtlB,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEq1E,uBAAuB;MAC5Bx2F,IAAI,EAAE;QACFsjM,QAAQ,EAAEj9J,cAAc;QACxBhY,QAAQ,EAAEkY,cAAc;QACxBg9J,QAAQ,EAAE9sG;MACd,CAAC;MACDigC,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC8sE,MAAM,EAAE;MACZ;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACxsG,uBAAuB,GAAG,UAAUH,eAAe,EAAE4sG,oBAAoB,EAAEpjK,OAAO,EAAEy2D,UAAU,EAAEC,KAAK,EAAE50D,WAAW,EAAE;IAErH,OAAOlhB,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAE01E,eAAe;MACpB72F,IAAI,EAAE;QACF22F,MAAM,EAAE8sG,oBAAoB;QAC5BpjK,OAAO,EAAEA,OAAO;QAChBy2D,UAAU,EAAEA,UAAU;QACtBC,KAAK,EAAEA,KAAK;QACZ50D,WAAW,EAAEA;MACjB,CAAC;MACDu0F,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC8sE,MAAM,EAAE;MACZ;IACJ,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAACtqG,sBAAsB,GAAG,UAAUN,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,EAAEt4E,MAAM,EAAE0iH,WAAW,EAAElqC,cAAc,EAAED,kBAAkB,EAAE;IAEvJ,IAAM4qG,GAAG,MAAAn2L,MAAA,CAAMqrF,qBAAqB,EAAArrF,MAAA,CAAG0rF,aAAa,EAAA1rF,MAAA,CAAGsrF,WAAW,CAAE;IACpE,IAAM8qG,iBAAiB,MAAAp2L,MAAA,CAAMvR,aAAa,CAAC4nM,eAAe,OAAAr2L,MAAA,CAAIvR,aAAa,CAAC+rB,YAAY,CAAE;IAE1F,OAAO9G,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEuiL,GAAG;MACR1jM,IAAI,EAAE;QACF,SAAS,EACT;UACI6jM,QAAQ,EAAE,IAAI;UACdC,OAAO,EAAE,GAAG;UACZC,WAAW,EAAExjL,MAAM;UACnByjL,MAAM,EAAE/gE,WAAW;UACnBghE,YAAY,EAAEjoM,aAAa,CAACqD,QAAQ;UACpC6kM,UAAU,EAAEnrG,cAAc;UAC1BorG,gBAAgB,EAAErrG,kBAAkB;UACpCsrG,WAAW,EAAE,IAAI;UACjBC,oBAAoB,EACpB;YACIC,GAAG,EAAEX,iBAAiB;YACtBY,GAAG,EAAEhkL;UACT;QACJ;MACJ,CAAC;MACDm2G,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,SAAS,GAAGz/B;MACjC;IACJ,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAACwD,4BAA4B,GAAG,UAAU7B,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,EAAE;IAEpG,IAAM6qG,GAAG,MAAAn2L,MAAA,CAAMqrF,qBAAqB,EAAArrF,MAAA,CAAG0rF,aAAa,EAAA1rF,MAAA,CAAGsrF,WAAW,CAAE;IAEpE,OAAO53E,KAAK,CAAC;MACTiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEuiL,GAAG;MACRhtE,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,SAAS,GAAGz/B;MACjC;IACJ,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAACsD,mCAAmC,GAAG,UAAU3B,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,EAAE;IAE3G,IAAM6qG,GAAG,GAAG9qG,qBAAqB,GAAGK,aAAa,GAAGJ,WAAW;IAE/D,OAAO53E,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEuiL,GAAG;MACR1jM,IAAI,EAAE;QACF,SAAS,EACT;UACIwkM,GAAG,EAAE;QACT;MACJ,CAAC;MACD9tE,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,SAAS,GAAGz/B;MACjC;IACJ,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAACmD,4BAA4B,GAAG,UAAUxB,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,EAAEt4E,MAAM,EAAE0iH,WAAW,EAAElqC,cAAc,EAAED,kBAAkB,EAAEkB,GAAG,EAAE;IAElK,IAAM0pG,GAAG,GAAG9qG,qBAAqB,GAAGK,aAAa,GAAGJ,WAAW;IAC/D,IAAM8qG,iBAAiB,MAAAp2L,MAAA,CAAMvR,aAAa,CAAC4nM,eAAe,OAAAr2L,MAAA,CAAIvR,aAAa,CAAC+rB,YAAY,CAAE;IAE1F,OAAO9G,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEuiL,GAAG;MACR1jM,IAAI,EAAE;QACF,SAAS,EACT;UACI6jM,QAAQ,EAAE,IAAI;UACdC,OAAO,EAAE,GAAG;UACZC,WAAW,EAAExjL,MAAM;UACnByjL,MAAM,EAAE/gE,WAAW;UACnBghE,YAAY,EAAEjoM,aAAa,CAACqD,QAAQ;UACpC6kM,UAAU,EAAEnrG,cAAc;UAC1BorG,gBAAgB,EAAErrG,kBAAkB;UACpC2rG,GAAG,EAAE,IAAI;UACTJ,oBAAoB,EAAE;YAClBnqG,GAAG,EAAEF,GAAG;YACRsqG,GAAG,EAAEX,iBAAiB;YACtBY,GAAG,EAAEhkL;UACT;QACJ;MACJ,CAAC;MACDm2G,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,SAAS,GAAGz/B;MACjC;IACJ,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAAC2D,yBAAyB,GAAG,UAAUhC,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,EAAEE,cAAc,EAAED,kBAAkB,EAAE;IAErI,IAAM4qG,GAAG,GAAG9qG,qBAAqB,GAAGK,aAAa,GAAGJ,WAAW;IAE/D,OAAO53E,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEuiL,GAAG;MACR1jM,IAAI,EAAE;QACF,SAAS,EACT;UACI6jM,QAAQ,EAAE,IAAI;UACdO,WAAW,EAAE,IAAI;UACjBF,UAAU,EAAEnrG,cAAc;UAC1BorG,gBAAgB,EAAErrG,kBAAkB;UACpC4rG,WAAW,EAAE;QACjB;MACJ,CAAC;MACDhuE,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,SAAS,GAAGz/B;MACjC;IACJ,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAAC6D,yBAAyB,GAAG,UAAUlC,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE;IAEpF,IAAMysG,GAAG,MAAAn2L,MAAA,CAAMqrF,qBAAqB,EAAArrF,MAAA,CAAG0rF,aAAa,wBAAqB;IAEzE,OAAOh4E,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEuiL,GAAG;MACR1jM,IAAI,EAAE;QACF,SAAS,EACT;UACI6jM,QAAQ,EAAE,IAAI;UACdc,UAAU,EAAE;QAChB;MACJ,CAAC;MACDjuE,OAAO,EAAE;QACL,cAAc,EAAE,kBAAkB;QAClC,eAAe,EAAE,SAAS,GAAGz/B;MACjC;IACJ,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;ACziDH;AACU;AACV,OAAO,IAAU;AACjB;AACA;AACA;AACA,wBAAwB,mBAAO,CAAC,4JAA6E,eAAe;AAC5H;AACA;AACA,UAAU,UAAU;AACpB,UAAU,UAAU;AACpB,UAAU,UAAU;AACpB;AACA,UAAU,UAAU;AACpB,UAAU;AACV,UAAU,iBAAiB;AAC3B;AACA,QAAQ,UAAU;AAClB;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,E;;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,qC;;;;;;;;;;;;;;;;;;;;;ACR8B;AACA;AAC9B,gCAAgC;AACoB;AACI;AACV;AAEmK;AAOjN;IAAA;IAg7CA,CAAC;IA/6CU,uCAAe,GAAtB,UAAuB,IAAU,EAAE,YAA2B;QAC1D,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAM,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzF,gHAAgH;QAChH,4CAA4C;QAE5C,wFAAwF;QACxF,iBAAiB;QACjB,IAAI;QAEJ,IAAI,YAAY,CAAC,aAAa,KAAK,IAAI,IAAI,YAAY,CAAC,iBAAiB,KAAK,IAAI,IAAI,WAAW,EAAE;YAC/F,IAAI,GAAG,CAAC,CAAC,CAAC;SACb;QAED,IAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvG,IAAI,EAAE,EAAE;YACJ,IAAI,CAAC,EAAE,CAAC,SAAS,KAAK,kDAAc,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,KAAK,kDAAc,CAAC,KAAK,CAAC;gBACpF,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC;gBAC/C,OAAO,CAAC,CAAC;SAChB;QAED,IAAM,CAAC,GAAG,uBAAuB,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,CAAC;IACb,CAAC;IAEM,+CAAuB,GAA9B,UAA+B,kBAAsC;QACjE,kBAAkB,CAAC,UAAU,GAAG,CAAC,CAAC;QAClC,kBAAkB,CAAC,gBAAgB,GAAG,CAAC,CAAC;QACxC,kBAAkB,CAAC,iBAAiB,GAAG,CAAC,CAAC;QACzC,kBAAkB,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC3C,kBAAkB,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC3C,kBAAkB,CAAC,0BAA0B,GAAG,CAAC,CAAC;QAClD,kBAAkB,CAAC,YAAY,GAAG,EAAE,CAAC;QACrC,kBAAkB,CAAC,cAAc,GAAG,IAAI,KAAK,EAAqB,CAAC;IACvE,CAAC;IAAA,CAAC;IAEK,4CAAoB,GAA3B,UAA4B,UAAgB,EAAE,YAA2B;QACrE,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,YAAY,CAAC,aAAa,KAAK,IAAI;YACnC,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACrD,MAAM,GAAG,YAAY,CAAC,gBAAgB,CAAC;SAC1C;aACI;YACD,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAG;gBAC3B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;gBACrB,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,gDAAgD;oBACjE,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC;iBAClD;YACL,CAAC,CAAC,CAAC;SACN;QAED,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAAA,CAAC;IAEK,kDAA0B,GAAjC,UAAkC,IAAW;QACzC,OAAO,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;QAClD,sDAAsD;QAEtD,yEAAyE;IAC7E,CAAC;IAGM,uDAA+B,GAAtC,UAAuC,IAAW;QAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEtE,IAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAEtB,uCAAuC;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;IAEM,8CAAsB,GAA7B,UAA8B,IAAS;QACnC,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG,EAAE;YAC7B,OAAO,uCAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC5B;;YAAM,OAAO,IAAI,CAAC;IACvB,CAAC;IAEM,4CAAoB,GAA3B;QACI,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE;YACvD,OAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;SACpD;aAAM;YACH,IAAM,CAAC,GAAW,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YACnD,OAAO,CAAC,KAAK,MAAM,CAAC;SACvB;IACL,CAAC;IAEM,8CAAsB,GAA7B,UAA8B,IAAmB;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,uDAAmB,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,uDAAmB,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC;IACzJ,CAAC;IAED,uCAAuC;IAChC,oCAAY,GAAnB,UAAoB,IAAU,EAAE,SAAqB,EAAE,oBAAqC;QAA5D,yCAAqB;QAAE,mEAAqC;QACxF,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEX,IAAI,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAoB,KAAK,wDAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,IAAI,IAAI,CAAC,gBAAgB;YACrB,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE7C,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI;YACpE,oBAAoB,GAAG,IAAI,CAAC;QAEhC,IAAI,oBAAoB,KAAK,IAAI,EAAE;YAC/B,sGAAsG;YACtG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC3C,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAC3C;aAAM;YACH,qBAAqB;YACrB,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAE/B,6BAA6B;YAC7B,iEAAiE;YACjE,yDAAyD;YACzD,IAAI,eAAa,GAAG,CAAC,CAAC;YAEtB,IAAI,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBAEhE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;oBACtB,eAAa,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;oBAC3D,oBAAoB;oBACpB,8CAA8C;oBAC9C,oGAAoG;oBACpG,mDAAmD;iBACtD;gBAED,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,iCAAiC;aACtE;YAED,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAExC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACtB,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;qBAC1C,GAAG,CAAC,YAAE;oBACH,UAAG,CAAC,aAAa,CAAC,SAAS,CACvB,uBAAuB,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;wBACvE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,eAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBAFlC,CAEkC,CAAC,CAAC;gBAE5C,EAAE,IAAI,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aAC7C;SACJ;QAED,2BAA2B;QAC3B,IAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEM,6CAAqB,GAA5B,UAA6B,IAAW;QAEpC,mDAAmD;QACnD,kIAAkI;QAClI,4FAA4F;QAE5F,8EAA8E;QAC9E,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;aAC3C,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,EAArD,CAAqD,CAAC;aACjE,GAAG,CAAC,WAAC;YACF,IAAI,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ;gBACrD,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;;gBAEjB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;QAEP,OAAO,GAAG,CAAC;IACf,CAAC;IAED,mFAAmF;IAC5E,8CAAsB,GAA7B,UAA8B,IAAU;QACpC,2DAA2D;QAC3D,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,aAAa,IAAI,GAAG,GAAG,CAAC,EAAE;YAE/B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACtB,iBAAiB;gBACjB,8CAA8C;gBAC9C,mDAAmD;gBACnD,aAAa,GAAG,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;aAC9D;YAED,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,iCAAiC;SAC/D;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,kBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAoB,KAAK,wDAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxG,IAAI,IAAI,CAAC,gBAAgB;gBACrB,kBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAE7C,sGAAsG;YACtG,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;iBAC1C,GAAG,CAAC,YAAE,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAClC,uBAAuB,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EACrF,kBAAgB,CAAC,EAFV,CAEU,CAAC,CAAC;YAE3B,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACpE;QAED,IAAI,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7D,IAAI,GAAG,KAAK,KAAK;YACb,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAE1C,OAAO,GAAG,CAAC;IACf,CAAC;IAED,2BAA2B;IAC3B,oFAAoF;IAC7E,4CAAoB,GAA3B,UAA4B,IAAU;QAClC,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACrC,KAAK,CAAC,WAAC;YACJ,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ;gBACrD,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ;QADrD,CACqD,CAAC;aACzD,MAAM,CAAC,WAAC;YACL,OAAO,CAAC,CAAC,MAAM,CAAC;QACpB,CAAC,CAAC;aACD,GAAG,EAAE,CAAC;QAEX,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,kEAAkE;IAC3D,sCAAc,GAArB,UAAsB,IAAU;QAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC;QAEtC,yHAAyH;QACzH,6CAA6C;QAC7C,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACnC,KAAK,CAAC,WAAC;YACJ,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ;QAArD,CAAqD,CAAC;aACzD,MAAM,CAAC,WAAC;YACL,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;YAClB,IAAI,CAAC,CAAC,SAAS,EAAE,gCAAgC;gBAC7C,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,EAAE,EAAC,kBAAkB;gBAC1E,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;gBACb,WAAW,GAAG,IAAI,CAAC;aACtB;YAED,OAAO,EAAE,CAAC;QACd,CAAC,CAAC;aACD,GAAG,EAAE,CAAC;QAEX,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU;YACpD,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC;QAE7B,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEM,gDAAwB,GAA/B,UAAgC,IAAU;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAEM,wCAAgB,GAAvB,UAAwB,IAAW;QAC/B,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAA3B,CAA2B,CAAC;aACvC,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,CAAC,eAAe,EAA3B,CAA2B,CAAC,CAAC;QAE3C,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,+CAAuB,GAA9B,UAA+B,IAAW;QACtC,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAA3B,CAA2B,CAAC;aACvC,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,CAAC,sBAAsB,EAAlC,CAAkC,CAAC,CAAC;QAElD,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,qCAAa,GAApB,UAAqB,IAAW;QAC5B,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAA3B,CAA2B,CAAC;aACvC,MAAM,CAAC,WAAC;YACL,CAAC,CAAC,SAAS,CAAC,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;YACvF,OAAO,CAAC,CAAC,SAAS,CAAC;QACvB,CAAC,CAAC;aACD,OAAO,EAAE,CAAC;QAEf,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,sCAAc,GAArB,UAAsB,IAAU;QAC5B,qDAAqD;QACrD,IAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChD,IAAM,QAAQ,GAAU,IAAK,CAAC,YAAY,CAAC;QAC3C,IAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/C,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,QAAQ;YACrC,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,YAAY,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;;YAE/J,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,cAAc,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,CAAC;IACd,CAAC;IAED,+CAA+C;IAC/C,iEAAiE;IACjE,kDAAkD;IAClD,qGAAqG;IACrG,kCAAkC;IAClC,IAAI;IAEJ,+HAA+H;IAC/H,mFAAmF;IAC5E,uCAAe,GAAtB,UAAuB,IAAW;QAC9B,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,WAAC;YAC5C,QAAC,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC9G,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;oBACzD,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAFpB,CAEoB,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,+CAAuB,GAA9B,UAA+B,IAAW;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YACpC,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,WAAC;gBAClD,QAAC,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC9G,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;wBACzD,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAFpB,CAEoB,CAAC,CAAC;YAC1B,OAAO,GAAG,CAAC;SACd;;YAAM,OAAO,CAAC,CAAC;IACpB,CAAC;IAEM,iCAAS,GAAhB,UAAiB,IAAW,EAAE,WAAuB;QAAvB,6CAAuB;QAEjD,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC;QAC/G,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;QACrG,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;QAC/F,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC;QAE/G,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAC;YACxB,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;YACjG,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;YACnG,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;YACrG,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;YAC3G,CAAC,CAAC,oBAAoB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,WAAW,CAAC,CAAC;YACvH,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/E,IAAI,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAElF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC;YACnB,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;YAC7F,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;YAC3F,IAAI,CAAC,CAAC,SAAS,EAAE;gBACb,CAAC,CAAC,SAAS,CAAC,eAAe,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC;gBACjI,CAAC,CAAC,SAAS,CAAC,sBAAsB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,CAAC;gBAC/I,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;aAC5G;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,oCAAY,GAAnB,UAAoB,SAAe,EAAE,KAAa,EAAE,cAAuB;QAEvE,IAAM,OAAO,GAAG,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC;QAC3H,IAAM,GAAG,GAAG,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC;QAClC,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,qCAAa,GAApB,UAAqB,IAAmB,EAAE,cAAuB;QAC7D,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACtE,CAAC;IAEM,qCAAa,GAApB,UAAqB,IAAmB,EAAE,cAAuB,EAAE,WAAmB;QAClF,IAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAC1D,IAAI,CAAC,4BAA4B,CAAC;QAC1C,IAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,GAAG,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,GAAG,CAAC;IACf,CAAC;IAED,4CAA4C;IACrC,yCAAiB,GAAxB,UAAyB,IAAS;QAC9B,IAAI,GAAG,CAAC,aAAa,CAAC,oBAAoB,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjE,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAErD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,iCAAS,GAAhB,UAAiB,IAAS;QACtB,OAAO,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG,CAAC;IAC/C,CAAC;IAEM,2BAAG,GAAV,UAAW,CAAM;QACb,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;YACvB,OAAO,CAAC,CAAC;;YAET,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAEM,2BAAG,GAAV,UAAW,CAAM;QACb,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;YACvB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;YAElB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAEM,2BAAG,GAAV,UAAW,CAAM;QACb,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAEM,2BAAG,GAAV,UAAW,CAAM;QACb,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7B,CAAC;IAEM,2CAAmB,GAA1B,UAA2B,IAAS;QAC1B,SAAoB,IAAI,EAAtB,GAAG,WAAE,GAAG,WAAE,GAAG,SAAS,CAAC;QAE/B,IAAM,GAAG,GAAkB;YACvB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;YACrD,WAAW,EAAe,IAAI,CAAC,WAAW;YAC1C,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;YACpC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5B,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1B,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9B,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,cAAc,EAAE,CAAC;YACjB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1B,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;YAChC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,QAAQ,EAAY,IAAI,CAAC,QAAQ;YAEjC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YAErB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC5B,4BAA4B,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB;YAClE,4BAA4B,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB;YAClE,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;YACpC,sBAAsB,EAAE,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC;YACxD,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACxB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1B,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YACpB,kBAAkB,EAAE,IAAI;YACxB,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;SACjE,CAAC;QAEF,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAE3C,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE5C,OAAO,uDAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEM,wCAAgB,GAAvB,UAAwB,IAAmB;QACvC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,IAAM,GAAG,GAAG,IAAI,KAAK,EAAU,CAAC;QAChC,IAAI,IAAI,CAAC,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;IACxB,CAAC;IAEM,qCAAa,GAApB;QACI,OAAO,IAAI,uCAAI,EAAE,CAAC;IACtB,CAAC;IAEM,8CAAsB,GAA7B,UAA8B,IAAW,EAAE,IAAiB,EAAE,YAAiC,EAAE,KAAU;QACvG,IAAI,GAAG,GAAG,IAAI,KAAK,EAAO,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACnB,GAAG,GAAG,IAAI,CAAC;;YAEX,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,IAAM,SAAS,GAAe;YAC1B,IAAI,EAAE,IAAI;YACV,aAAa,EAAyB;gBAClC,UAAU,EAAE,GAAG;aAClB;YACD,YAAY,EAAE,YAAY;YAC1B,KAAK,EAAE,KAAK;SACf,CAAC;QAEF,IAAM,MAAM,GAAG,iEAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,mDAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEzF,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAEjC,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,mDAA2B,GAAlC,UAAmC,IAAW,EAAE,IAAS,EAAE,KAAU;QACjE,IAAI,GAAG,GAAG,IAAI,KAAK,EAAO,CAAC;QAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YACnB,GAAG,GAAG,IAAI,CAAC;;YAEX,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,IAAM,SAAS,GAAe;YAC1B,IAAI,EAAE,IAAI;YACV,aAAa,EAAyB;gBAClC,aAAa,EAAE,GAAG;aACrB;YACD,KAAK,EAAE,KAAK;SACf,CAAC;QAEF,IAAM,MAAM,GAAG,iEAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,mDAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEzF,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAEjC,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,yCAAiB,GAAxB,UAAyB,IAAW,EAAE,YAAiC,EAAE,KAAiB,EAAE,KAA4C,EAAE,UAA2B;QAA5F,oCAAiB;QAAE,gCAAwB,kDAAc,CAAC,KAAK;QAAE,+CAA2B;QACjK,IAAM,SAAS,GAAe;YAC1B,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,YAAY;YAC1B,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,UAAU;SACzB,CAAC;QAEF,IAAM,MAAM,GAAG,iEAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,mDAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAEhG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAEjC,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,+CAAuB,GAA9B,UAA+B,IAAW,EAAE,YAA2B,EAAE,UAA6B,EAAE,KAA4C;QAA5C,gCAAwB,kDAAc,CAAC,KAAK;QAChJ,IAAM,SAAS,GAAe;YAC1B,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,UAAU;SACzB,CAAC;QAEF,OAAO,iEAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,mDAAe,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClG,CAAC;IAEM,yCAAiB,GAAxB,UAAyB,IAAW,EAAE,KAA+C;QAA/C,gCAAwB,kDAAc,CAAC,QAAQ;QACjF,IAAM,SAAS,GAAe;YAC1B,IAAI,EAAE,IAAI;SACb,CAAC;QAEF,OAAO,iEAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,mDAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5F,CAAC;IAEM,+CAAuB,GAA9B,UAA+B,IAAW,EAAE,eAA4B,EAAE,KAA+C;QAA/C,gCAAwB,kDAAc,CAAC,QAAQ;QACrH,IAAI,SAAS,GAAe;YACxB,IAAI,EAAE,IAAI;SACb,CAAC;QAEF,IAAI,eAAe,EAAE;YACjB,IAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YACvD,OAAO,GAAG,CAAC,aAAa,CAAC;YACzB,OAAO,GAAG,CAAC,YAAY,CAAC;YAExB,SAAS,GAAe,GAAG,CAAC;YAE5B,uBAAuB;YACvB,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAC7D,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YAC3E,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SACzD;QAED,OAAO,iEAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,mDAAe,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAClG,CAAC;IAED,kEAAkE;IAC3D,sCAAc,GAArB,UAAsB,IAAW,EAAE,YAA6B;QAA7B,mDAA6B;QAC5D,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aAC1C,KAAK,CAAC,WAAC,IAAI,mBAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAA1C,CAA0C,CAAC;aACtD,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,WAAW,EAAb,CAAa,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC;IACf,CAAC;IAED,+DAA+D;IAC/D,mCAAmC;IAC5B,iDAAyB,GAAhC,UAAiC,IAAc;QAC3C,uBAAuB;QACvB,IAAM,IAAI,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aACnC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ,EAAhD,CAAgD,CAAC;aAC5D,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACzE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EADhE,CACgE,CAAC,CAAC;QAEhF,+BAA+B;QAC/B,IAAM,IAAI,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,WAAW,KAAK,IAAI,EAAtB,CAAsB,CAAC;aAClC,MAAM,CAAC,WAAC;YACL,OAAO,4CAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;iBAC1B,KAAK,CAAC,WAAC;gBACJ,QAAC,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ;oBAChD,CAAC,CAAC,QAAQ,GAAG,CAAC;YADd,CACc,CAAC,CAAE,sBAAsB;iBAC1C,GAAG,CAAC,WAAC;gBACF,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oBACxE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBAC3E,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;QACV,CAAC,CAAC;aACD,GAAG,EAAE,CAAC;QAEX,OAAO,IAAI,GAAG,IAAI,CAAC;IACvB,CAAC;IAEM,0DAAkC,GAAzC,UAA0C,IAAc;QAEpD,iCAAiC;QACjC,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;aACpC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,WAAW,KAAK,IAAI,EAAtB,CAAsB,CAAC;aAClC,MAAM,CAAC,WAAC;YACL,OAAO,4CAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;iBAC1B,KAAK,CAAC,WAAC;gBACJ,QAAC,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ;oBAChD,CAAC,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ;oBAChD,CAAC,CAAC,QAAQ,GAAG,CAAC;YAFd,CAEc,CAAC,CAAC,sBAAsB;iBACzC,GAAG,CAAC,WAAC;gBACF,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBAChF,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;QACV,CAAC,CAAC;aACD,GAAG,EAAE,CAAC;QAEX,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,8CAAsB,GAA7B,UAA8B,IAAc;QACxC,uBAAuB;QACvB,IAAM,IAAI,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACtC,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAzE,CAAyE,CAAC,CAAC;QAEzF,YAAY;QACZ,IAAM,OAAO,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;aACtC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ,EAAhD,CAAgD,CAAC;aAC5D,GAAG,CAAC,WAAC,IAAI,WAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAtE,CAAsE,CAAC,CAAC;QAEtF,+BAA+B;QAC/B,IAAM,IAAI,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,WAAW,KAAK,IAAI,EAAtB,CAAsB,CAAC;aAClC,MAAM,CAAC,WAAC;YACL,OAAO,4CAAU,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;iBAC7B,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAzE,CAAyE,CAAC,CAAC;QAC7F,CAAC,CAAC;aACD,GAAG,EAAE,CAAC;QAEX,YAAY;QACZ,IAAM,OAAO,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;aACxC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,WAAW,KAAK,IAAI,EAAtB,CAAsB,CAAC;aAClC,MAAM,CAAC,WAAC;YACL,OAAO,4CAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;iBAC1B,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ,EAAhD,CAAgD,CAAC;iBAC5D,GAAG,CAAC,WAAC;gBACF,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;gBAChF,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;QACV,CAAC,CAAC;aACD,GAAG,EAAE,CAAC;QAEX,OAAO,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEM,6CAAqB,GAA5B,UAA6B,IAAW,EAAE,YAAiC,EAAE,KAAU,EAAE,MAAc,EAAE,QAAgB,EAAE,YAAgC;QACvJ,IAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,YAAE,IAAI,SAAE,CAAC,EAAE,KAAK,MAAM,EAAhB,CAAgB,CAAC,CAAC;QAChE,IAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,IAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,YAAY,KAAK,sDAAkB,CAAC,gBAAgB,EAAE;gBACtD,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAChB,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC;gBAClB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC;aACxB;iBAAM;gBACH,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;aACpB;YAED,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC;YACnB,EAAE,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;YAC/B,EAAE,CAAC,kBAAkB,GAAG,YAAY,CAAC;YAErC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,kDAAc,CAAC,QAAQ,CAAC,CAAC;YAE3E,IAAG,IAAI,CAAC,QAAQ,EAChB;gBACI,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;aACjE;SACJ;IACL,CAAC;IAEM,qCAAa,GAApB,UAAqB,MAAa,EAAE,gBAAmC,EAAE,QAAgB,EAAE,UAAuB;QAC9G,4CAA4C;QAC5C,2DAA2D;QAC3D,yEAAyE;QACzE,IAAM,IAAI,GAAS,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEvB,IAAM,aAAa,GAAmB,GAAG,CAAC,aAAa,CAAC;QAExD,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,EAAE;YAC1B,gBAAgB,CAAC,QAAQ,GAAG,EAAE,CAAC;SAClC;aACI;YAED,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,qCAAqC;gBACpE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,sDAAsD;YAC1F,IAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,CAAC,wDAAwD;YACtG,IAAM,GAAG,GAAG;gBACR,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAChC,iBAAiB,EAAE,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;gBACnE,yBAAyB,EAAE,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAC3E,qBAAqB,EAAE,EAAE;gBACzB,kBAAkB,EAAE,EAAE;gBACtB,cAAc,EAAE,EAAE;gBAClB,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;aACrE,CAAC;YAEF,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YACnG,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,KAAK,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;YAEhH,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE;gBAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;oBACnE,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBAC3D,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBACxD,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;iBAC1F;qBAAM;oBACH,GAAG,CAAC,qBAAqB,GAAG,EAAE,CAAC;oBAC/B,GAAG,CAAC,kBAAkB,GAAG,EAAE,CAAC;oBAC5B,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;iBAC3B;gBAED,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC;gBACnC,GAAG,CAAC,iBAAiB,GAAG,EAAE,CAAC;aAC9B;YAED,gBAAgB,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;YAElC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE;gBACxB,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBAChE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBAChE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;aAC/E;iBACI;gBACD,0BAA0B;gBAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC/D,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;wBACjB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAClC,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;oBAC/C,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;oBAC/C,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;iBAC9D;aACJ;YAED,mBAAmB;YACnB,4DAA4D;YAC5D,IAAI,IAAI,CAAC,4BAA4B,EAAE;gBACnC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC;gBAC9D,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC;gBACpE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC;gBACvE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC;gBACvE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC;gBACjE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC;aACtE;iBAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxE,IAAI,MAAM,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,IAAI,KAAK,+CAAW,CAAC,QAAQ,EAA/B,CAA+B,CAAC;qBAC5F,iBAAiB,CAAC,WAAC,IAAI,QAAC,CAAC,cAAc,EAAhB,CAAgB,CAAC,CAAC,OAAO,EAAE,CAAC;gBACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBACnB,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACrC,IAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAExB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;oBAExG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;oBAC/C,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;oBACrD,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;oBACjD,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;oBACjD,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACvD,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;iBACpD;aACJ;YAED,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;gBAC7B,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;aACxE;YAED,gBAAgB,CAAC,kBAAkB,GAAG,EAAE,CAAC;YACzC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC/D,gBAAgB,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;aAClE;SACJ;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,WAAW;YACjD,IAAI,CAAC,mBAAmB,KAAK,IAAI;YACjC,IAAI,CAAC,mBAAmB,CAAC,EAAE,IAAI,IAAI,EAAE;YACrC,gBAAgB,CAAC,mBAAmB,GAAG,EAAE,CAAC;SAC7C;aAAM;YACH,gBAAgB,CAAC,mBAAmB,GAAG,CAAC;oBACpC,uBAAuB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;iBACzD,CAAC,CAAC;SACN;QAED,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE;YAChF,IAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC;YACnH,IAAI,OAAO,EAAE;gBACT,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC;oBACtC,uBAAuB,EAAE,OAAO;iBACnC,CAAC,CAAC;aACN;SACJ;QAED,IAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;QAEvC,gBAAgB,CAAC,aAAa,GAAG,aAAa,CAAC;QAC/C,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAExC,gBAAgB,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAClE,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAClC,gBAAgB,CAAC,IAAI,GAAG,EAAE,CAAC;QAE3B,IAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC;QAChD,IAAM,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,cAA6B,CAAC;QACvE,IAAM,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC;QACpD,IAAM,cAAc,GAAI,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC;QACzD,IAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC;QAC5E,IAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,cAAc,CAAC;QAE9E,IAAM,sBAAsB,GAAG;YAC3B,gBAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;YACzC,gBAAgB,CAAC,UAAU,GAAG,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;YACzF,gBAAgB,CAAC,YAAY,GAAG,YAAY,CAAC;QACjD,CAAC,CAAC;QAEF,IAAI,CAAC,eAAe,IAAI,CAAC,aAAa,EAAE;YACpC,sBAAsB,EAAE,CAAC;YACzB,IAAI,OAAO,UAAU,KAAK,UAAU;gBAAE,UAAU,EAAE,CAAC;SACtD;aAAM;YACH,GAAG,CAAC,aAAa;iBACZ,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;iBAC3B,IAAI,CAAC,UAAC,MAAkB;gBACrB,gBAAgB,CAAC,UAAU,GAAG,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC3F,IAAM,UAAU,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc;gBACvE,gBAAgB,CAAC,UAAU,GAAG,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;gBAErF,IAAI,QAAQ,GAAG,YAAY,CAAC;gBAC5B,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;oBAC/D,IAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAC,CAAM,IAAK,QAAC,CAAC,aAAa,KAAK,IAAI,CAAC,UAAU,EAAnC,CAAmC,CAAC,CAAC;oBACxF,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;wBACzB,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;qBAC3B;iBACJ;gBACD,gBAAgB,CAAC,YAAY,GAAG,QAAQ,CAAC;YAC7C,CAAC,CAAC;iBACD,KAAK,CAAC,sBAAsB,CAAC;iBAC7B,OAAO,CAAC;gBACL,IAAI,OAAO,UAAU,KAAK,UAAU;oBAAE,UAAU,EAAE,CAAC;YACvD,CAAC,CAAC,CAAC;SACV;QAED,gBAAgB,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrF,gBAAgB,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC1F,gBAAgB,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/E,gBAAgB,CAAC,kBAAkB,GAAG,UAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAG,CAAC;QAClI,6FAA6F;QAC7F,gBAAgB,CAAC,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,uBAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEnH,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;QAC1B,qEAAqE;QAErE,gBAAgB,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAErF,gBAAgB,CAAC,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC3H,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,gBAAgB,CAAC,KAAK,GAAG;gBACrB;oBACI,SAAS,EAAE,IAAI,CAAC,OAAO;iBAC1B;aACJ,CAAC;SACL;aAAM;YACH,gBAAgB,CAAC,KAAK,GAAG,EAAE,CAAC;SAC/B;QAED,gBAAgB,CAAC,gBAAgB,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;YACzB,IAAM,UAAU,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;YAChC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,IAAI,UAAU,IAAI,KAAK,EAAE;gBACrB,IAAI,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,SAAS,KAAK,CAAC,EAAE;oBACpD,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC;oBACtB,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC;iBAC3B;qBAAM;oBACH,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC;oBACrB,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACpE;aACJ;iBACI;gBACD,yCAAyC;gBACzC,wCAAwC;gBACxC,oDAAoD;gBACpD,UAAU;gBACV,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC;gBACtB,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC;gBACxB,GAAG;aACN;YAED,IAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChE,IAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAElE,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACnC,YAAY,EAAE,EAAE,CAAC,KAAK;gBACtB,WAAW,EAAE,EAAE,CAAC,IAAI;gBACpB,aAAa,EAAE,OAAO;gBACtB,YAAY,EAAE,MAAM;gBACpB,UAAU,EAAE,EAAE,CAAC,GAAG;gBAClB,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,cAAc,EAAE,EAAE,CAAC,OAAO;gBAC1B,eAAe,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,SAAS,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACjE,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;gBACxF,iBAAiB,EAAE,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG;gBACnJ,uBAAuB,EAAE,EAAE,CAAC,uBAAuB;gBACnD,mBAAmB,EAAE,EAAE,CAAC,YAAY;gBACpC,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,oBAAoB,EAAE,EAAE,CAAC,GAAG;gBAC5B,qBAAqB,EAAE,EAAE,CAAC,IAAI;gBAC9B,yBAAyB,EAAG,CAAC,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAG,CAAC,CAAC,CAAC,IAAI;gBAC3K,sBAAsB,EAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;gBACjF,sBAAsB,EAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;aACrF,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,QAAQ,GAAG,EAAE,CAAC;QAE/B,yFAAyF;QACzF,qDAAqD;QACrD,sBAAsB;QACtB,+EAA+E;QAC/E,wFAAwF;QACxF,QAAQ;QACR,+CAA+C;QAC/C,GAAG;QAEH,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAE;YACpB,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,wFAAwF;gBACrG,IAAI,EAAE,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ;oBACtD,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC;gBAEvB,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAC3B,eAAe,EAAE,EAAE,CAAC,eAAe;oBACnC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;oBACnE,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;iBACzE,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QACjG,gBAAgB,CAAC,iBAAiB,GAAG,WAAI,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAE,CAAC;QAE7G,gBAAgB,CAAC,UAAU,GAAG,EAAE,CAAC;QACjC,IAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,MAAM,EAAE;YACR,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC7B,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;aAC/F,CAAC,CAAC;SACN;QAED,gBAAgB,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACrI,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAEpD,qGAAqG;QACrG,gBAAgB,CAAC,sBAAsB,GAAG,EAAE,CAAC;QAC7C,gBAAgB,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC3C,gBAAgB,CAAC,sBAAsB,GAAG,EAAE,CAAC;QAC7C,gBAAgB,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAEvC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAEM,2CAAmB,GAA1B,UAA2B,IAAW,EAAE,gBAAmC,EAAE,QAAgB;QACzF,IAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,sBAAsB,EAAO,CAAC;QAE5D,IAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,0BAA0B,KAAK,IAAI,CAAC;QAE3E,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC;;YACnB,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE;gBACzB,IAAI,CAAC,GAAQ,IAAI,CAAC;gBAClB,IAAM,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;gBACrE,QAAQ,GAAG,EAAE;oBACT,KAAK,sBAAsB;wBACvB,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;wBAClF,IAAI,CAAC,CAAC,CAAC,EAAE;4BACL,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAChD,IAAI,iBAAiB,KAAK,IAAI;gCAC1B,kFAAkF;gCAClF,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CACxC,GAAG,CAAC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;yBAC1F;wBACD,MAAM;oBAEV,KAAK,oBAAoB;wBACrB,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;wBACzE,IAAI,CAAC,CAAC,CAAC,EAAE;4BACL,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACjD;wBAED,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;wBAC1E,IAAI,CAAC,CAAC,CAAC,EAAE;4BACL,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACjD;wBAED,MAAM;oBAEV,KAAK,6BAA6B;wBAC9B,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;wBAClF,IAAI,CAAC,CAAC,CAAC,EAAE;4BACL,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACnD;wBAED,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;wBACnF,IAAI,CAAC,CAAC,CAAC,EAAE;4BACL,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACnD;wBAED,MAAM;oBACV;wBACI,IAAI,GAAG,EAAE;4BACL,IAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;4BACpE,IAAI,QAAQ,IAAI,OAAO,eAAQ,CAAC,QAAQ,0CAAE,UAAU,MAAK,UAAU,EAAE;gCACjE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;gCAC9D,IAAI,CAAC,CAAC,CAAC,EAAE;oCACL,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iCAC7C;gCACD,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;gCAC/D,IAAI,CAAC,CAAC,CAAC,EAAE;oCACL,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iCAC7C;6BACJ;yBACJ;iBACR;aACJ;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAAA,CAAC;IAEF,2CAA2C;IAC3C,4DAA4D;IAC5D,mCAAmC;IAC5B,gDAAwB,GAA/B,UAAgC,IAAc,EAAE,QAAgE;QAAhH,iBAQC;QAPG,IAAI,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAC,IAAI,eAAQ,CAAC,IAAI,CAAC,KAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAA5B,CAA4B,CAAC,CAAC;QAE1D,IAAI,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAG,IAAI,UAAG,CAAC,KAAK,CAAC,CAAC;gBACnC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAC,IAAI,eAAQ,CAAC,IAAI,CAAC,KAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAA7B,CAA6B,CAAC,CAAC,CAAC;gBACvD,CAAC,EAFuB,CAEvB,CAAC,CAAC;IACf,CAAC;IAEM,mDAA2B,GAAlC,UAAmC,IAAc,EAAE,QAAmE;QAAtH,iBAQC;QAPG,IAAI,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC,IAAI,eAAQ,CAAC,IAAI,CAAC,KAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAA5B,CAA4B,CAAC,CAAC;QAE7D,IAAI,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAG,IAAI,UAAG,CAAC,QAAQ,CAAC,CAAC;gBACtC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC,IAAI,eAAQ,CAAC,IAAI,CAAC,KAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAA7B,CAA6B,CAAC,CAAC,CAAC;gBAC1D,CAAC,EAFuB,CAEvB,CAAC,CAAC;IACf,CAAC;IAEM,qDAA6B,GAApC,UAAqC,IAAc,EAAE,QAAuE;QAA5H,iBAQC;QAPG,IAAI,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAC,IAAI,eAAQ,CAAC,IAAI,CAAC,KAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAA5B,CAA4B,CAAC,CAAC;QAE/D,IAAI,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAG,IAAI,UAAG,CAAC,UAAU,CAAC,CAAC;gBACxC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,WAAC,IAAI,eAAQ,CAAC,IAAI,CAAC,KAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAA7B,CAA6B,CAAC,CAAC,CAAC;gBAC5D,CAAC,EAFuB,CAEvB,CAAC,CAAC;IACf,CAAC;IAAA,CAAC;IAEK,wCAAgB,GAAvB,UAAwB,EAAiB,EAAE,YAAqB;QAC5D,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEhC,EAAE,CAAC,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC;QAC9B,EAAE,CAAC,sBAAsB,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvF,CAAC;IAAA,CAAC;IAEK,yCAAiB,GAAxB,UAAyB,IAAW,EAAE,SAAqB,EAAE,KAAmC;QAC5F,IAAM,CAAC,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACnC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,KAAK,EAArB,CAAqB,CAAC;aACjC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,EAAE;YACH,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;YACxB,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;SAC9B;IACL,CAAC;IAEM,4CAAoB,GAA3B,UAA4B,EAAe,EAAE,oBAA2C;QACpF,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACjF,CAAC;IAEM,sCAAc,GAArB,UAAsB,SAAiB,EAAE,oBAA2C;QAChF,IAAI,IAAI,GAAW,IAAI,CAAC;QAExB,QAAQ,SAAS,EAAE;YACf,KAAK,gEAA4B,CAAC,IAAI;gBAClC,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC5C,MAAM;YACV,KAAK,gEAA4B,CAAC,UAAU;gBACxC,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBACnD,MAAM;YACV,KAAK,gEAA4B,CAAC,YAAY;gBAC1C,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;gBACpD,MAAM;YACV,KAAK,gEAA4B,CAAC,aAAa,CAAC;YAChD,KAAK,gEAA4B,CAAC,OAAO;gBACrC,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;gBACtD,MAAM;YACV;gBACI,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;gBACxE,MAAM;SACb;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAAA,CAAC;IAGK,kDAA0B,GAAjC,UAAkC,SAAiB,EAAE,oBAA2C;QAC5F,IAAI,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,OAAO,EAAE,CAAC,wBAAwB,IAAI,SAAS,EAAC,CAAC,CAAC,CAAC;QACzG,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAEM,6CAAqB,GAA5B,UAA6B,gBAAwB;QACjD,IAAI,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE9E,QAAQ,gBAAgB,CAAC,WAAW,EAAE,EAAE;YACpC,KAAK,gEAA4B,CAAC,IAAI,CAAC;YACvC,KAAK,gEAA4B,CAAC,UAAU,CAAC;YAC7C,KAAK,gEAA4B,CAAC,QAAQ,CAAC;YAC3C,KAAK,gEAA4B,CAAC,OAAO,CAAC;YAC1C,KAAK,gEAA4B,CAAC,YAAY,CAAC;YAC/C,KAAK,gEAA4B,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzD,KAAK,gEAA4B,CAAC,QAAQ,CAAC,WAAW,EAAE;gBACpD,OAAO,IAAI,CAAC;SACnB;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,qCAAa,GAApB,UAAqB,EAAe;QAChC,IAAI,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;QACvB,IAAI,GAAG,CAAC,OAAO,CAAC,gEAA4B,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;YACnE,GAAG,GAAG,gEAA4B,CAAC,iBAAiB,CAAC;SACxD;QAED,IAAI,GAAG,GAAW,IAAI,CAAC;QAEvB,QAAQ,GAAG,EAAE;YACT,KAAK,gEAA4B,CAAC,OAAO,CAAC;YAC1C,KAAK,gEAA4B,CAAC,QAAQ,CAAC;YAC3C,KAAK,gEAA4B,CAAC,iBAAiB,CAAC;YACpD,KAAK,gEAA4B,CAAC,YAAY,CAAC;YAC/C,KAAK,gEAA4B,CAAC,IAAI;gBAClC,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC;gBACpB,MAAM;YACV,KAAK,gEAA4B,CAAC,UAAU;gBACxC,GAAG,GAAG,kBAAkB,GAAG,EAAE,CAAC,mBAAmB,GAAG,OAAO,GAAG,EAAE,CAAC,mBAAmB,GAAG,OAAO,CAAC;gBAC/F,IAAI,EAAE,CAAC,SAAS;oBACZ,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC;gBAC9C,MAAM;YACV;gBACI,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE;oBAClC,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC;oBACpB,IAAI,EAAE,CAAC,SAAS,EAAE;wBACd,GAAG,IAAI,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC;qBAC5D;iBACJ;gBACD,MAAM;SACb;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,uCAAe,GAAtB,UAAuB,EAAiB;QACpC,EAAE,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;QACzB,EAAE,CAAC,sBAAsB,IAAI,CAAC,CAAC,CAAC;QAChC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACb,IAAI,EAAE,CAAC,cAAc;YACjB,EAAE,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAC5B,IAAI,EAAE,CAAC,WAAW;YACd,EAAE,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QACzB,IAAI,EAAE,CAAC,KAAK;YACR,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACvB,CAAC;IAAA,CAAC;IAEF,qCAAqC;IAC9B,qCAAa,GAApB,UAAqB,EAAiB,EAAE,EAAiB,EAAE,UAAoB;QAC3E,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;YAAE,OAAO;QACvB,IAAI,IAAI,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,EAAE,CAAC,eAAe,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QAChG,EAAE,CAAC,sBAAsB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC;QACrH,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC5D,EAAE,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;QAC7F,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;QACpF,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK;YACpB,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC;IAEM,sCAAc,GAArB,UAAsB,IAAc,EAAE,UAAe,EAAE,oBAA2C;QAAlG,iBAwHC;QAvHG,IAAM,UAAU,GAAG,iEAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,IAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC9C,IAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChD,IAAM,YAAY,GAAG,IAAI,KAAK,EAAiB,CAAC;QAEhD,IAAM,WAAW,GACb;YACI,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;YAChB,kBAAkB,EAAE,CAAC,CAAC,sHAAsH;SAC/I,CAAC;QAEN,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,UAAC,IAAI,EAAE,iBAAiB;YACxD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACxB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,UAAU,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3F,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;wBAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,iFAAiF;oBAClH,WAAW,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC/D;qBAAM,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,gEAA4B,CAAC,QAAQ,EAAE;oBACtH,WAAW,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,6BAA6B;iBAC5G;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6BAA6B,CAAC,IAAI,EAAE,UAAC,IAAI,EAAE,gBAAgB;YAC5D,IAAM,IAAI,GAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE/C,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;YAEvD,iDAAiD;YACjD,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAC9B,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;aACvE;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,4EAA4E;gBAC5E,iCAAiC;gBACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3B;iBAAM,IAAI,IAAI,CAAC,SAAS,EAAE;gBACvB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBACjC,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;oBAC7B,WAAW,CAAC,cAAc,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC;aAChG;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,UAAC,IAAI,EAAE,iBAAiB;YAC3D,KAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YAEtD,gCAAgC;YAChC,IAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,IAAI;gBACJ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,sBAAsB;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,UAAC,IAAI,EAAE,gBAAgB;YAC1D,IAAI,EAAE,GAAG,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAElC,wCAAwC;YACxC,IAAI,gBAAgB,EAAE;gBAClB,IAAI,IAAI,CAAC,SAAS,KAAK,gEAA4B,CAAC,OAAO;oBACvD,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC;;oBAEjC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;aACjC;iBAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxB,IAAI,IAAI,CAAC,SAAS,KAAK,gEAA4B,CAAC,OAAO;oBACvD,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC;;oBAEjC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;aACjC;YAED,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvB,IAAI,CAAC,CAAC,EAAE;gBACJ,IAAI,GAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC,gBAAgB,EAAE;oBACnB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;oBAClB,IAAI,IAAI,CAAC,SAAS;wBACd,KAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC5C;gBACD,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;aACxB;iBAAM;gBACH,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACvD,IAAI,IAAI,CAAC,SAAS;oBACd,KAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,qBAAqB;aAChG;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC;YACpC,WAAW,CAAC,kBAAkB,GAAG,UAAU,GAAG,CAAC,UAAU,GAAG,iBAAiB,CAAC,CAAC;;YAE/E,WAAW,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAEvC,wBAAwB;QACxB,YAAY,CAAC,OAAO,CAAC,cAAI,IAAI,kBAAW,CAAC,cAAc,IAAI,IAAI,CAAC,sBAAsB,EAAzD,CAAyD,CAAC,CAAC;QACxF,WAAW,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAExF,sDAAsD;QACtD,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,oCAAoC;QAClE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,WAAC;YACjC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,SAAS,EAAE;gBACb,CAAC,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC7B,CAAC,CAAC,gBAAgB,GAAkB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aACjE;YAED,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACrD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,4CAAoB,GAA3B,UAA4B,YAA2B,EAAE,oBAA2C;QAApG,iBA4BC;QA3BG,IAAI,YAAY,CAAC,IAAI,CAAC,eAAe,KAAK,uDAAmB,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/F,kFAAkF;YAClF,YAAY,CAAC,cAAc,GAAG,EAAE,CAAC;YACjC,IAAI,IAAE,GAAG,IAAI,KAAK,EAAe,CAAC;YAElC,4CAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAG;gBAClD,mDAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAC;oBACnC,IAAI,EAAE,GAAgB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACtC,KAAI,CAAC,oBAAoB,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;oBACpD,IAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,CAAC,CAAC;YAJF,CAIE,CACL,CAAC;YAEF,YAAY,CAAC,cAAc,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAE,CAAC;iBAC5C,OAAO,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,EAAX,CAAW,CAAC;iBACzB,MAAM,CAAC,WAAC;gBACL,OAAO;oBACH,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE;oBAClB,eAAe,EAAE,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC;oBACnE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,MAAM,EAAR,CAAQ,CAAC;iBAC/B;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,MAAM,GAAG,CAAC,EAAZ,CAAY,CAAC;iBACxB,MAAM,CAAC,WAAC,IAAI,QAAC,EAAD,CAAC,CAAC;iBACd,OAAO,EAAE,CAAC;SAElB;IACL,CAAC;IAEM,yCAAiB,GAAxB,UAAyB,IAAS;QAC9B,OAAO,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,GAAG,CAAC;IAC/C,CAAC;IAED,kCAAkC;IAC3B,oCAAY,GAAnB,UAAoB,WAAkB,EAAE,EAAiB;QACrD,IAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC;QAClD,IAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC;QAClD,IAAI,iBAAiB,GAAS,IAAI,CAAC;QAEnC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,qBAAqB,IAAI,WAAW,CAAC,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE;YACtG,iBAAiB,GAAS;gBACtB,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,SAAS;gBACzC,4BAA4B,EAAE,WAAW,CAAC,QAAQ,CAAC,yBAAyB;gBAC5E,4BAA4B,EAAE,WAAW,CAAC,QAAQ,CAAC,yBAAyB;aAC/E,CAAC;SACL;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAC1C,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7D,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBACnC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC1C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAEvC,OAAO,SAAS,CAAC;IACrB,CAAC;IAAA,CAAC;IAEK,iDAAyB,GAAhC,UAAiC,SAAc;QAC3C,OAAa;YACT,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM;YACvE,4BAA4B,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,yBAAyB;YAChI,4BAA4B,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS,CAAC,yBAAyB;SACnI,CAAC;IACN,CAAC;IAEM,wCAAgB,GAAvB,UAAwB,IAAwB;QAC5C,IAAM,GAAG,GAAG,EAAiB,CAAC;QAE9B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAClC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;aACtC;YACD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;gBAClG,GAAG,CAAC,IAAI,GAAO,IAAI,CAAC,IAAI,CAAC;gBACzB,GAAG,CAAC,OAAO,GAAI,IAAI,CAAC,OAAO,CAAC;gBAC5B,GAAG,CAAC,KAAK,GAAM,IAAI,CAAC,KAAK,CAAC;gBAC1B,GAAG,CAAC,KAAK,GAAM,IAAI,CAAC,KAAK,CAAC;gBAC1B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC7B,GAAG,CAAC,KAAK,GAAM,IAAI,CAAC,KAAK,CAAC;aAC7B;SACJ;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAEL,8BAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;AC77C6B;AAE4B;AACH;AAKvD,0EAA0E;AACnE;IA6BH,4DAA4D;IAC5D;QAAA,iBA0BC;QAtDO,gBAAW,GAAqE,IAAI,CAAC;QA6BzF,gEAAgE;QAChE,IAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,2DAAmB,CAAC,CAAC,MAAM,CAAC,WAAC,IAAI,YAAI,CAAC,mBAAmB,CAAC,2DAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAzD,CAAyD,CAAC,CAAC;QACrI,IAAM,GAAG,GAAG,IAAI,KAAK,EAAoB,CAAC;QAE1C,uBAAuB;QACvB,KAAK,CAAC,OAAO,CAAC,WAAC;YACX,IAAM,CAAC,GAAG,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,UAAU,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAC;gBACrC,GAAG,CAAC,IAAI,CAAmB;oBACvB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,QAAQ,EAAE,CAAC;iBACd,CAAC,CAAC;YACP,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,iBAAiB;QACjB,IAAI,CAAC,WAAW,GAAG,4CAAU,CAAC,IAAI,CAAC,GAAG,CAAC;aAClB,OAAO,CAAC,cAAI,IAAI,WAAI,CAAC,IAAI,EAAT,CAAS,CAAC;aAC1B,MAAM,CAAC,WAAC;YACL,OAAO;gBACH,IAAI,EAAwB,CAAC,CAAC,GAAG,EAAE;gBACnC,SAAS,EAAE,4CAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,WAAC,IAAE,QAAC,CAAC,KAAK,EAAP,CAAO,CAAC,CAAC,OAAO,EAAE;aAC1E,CAAC;QACN,CAAC,CAAC,CAAC,YAAY,CAAC,WAAC,IAAE,QAAC,CAAC,IAAI,EAAN,CAAM,EAAE,WAAC,IAAE,QAAC,CAAC,SAAS,EAAX,CAAW,CAAC,CAAC;IACnE,CAAC;IApDD,sBAAW,6BAAQ;aAAnB;YACI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;gBACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;aAC3C;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;;;OAAA;IAED,sEAAsE;IACtE,qCAAS,GAAT,UAAU,IAAqB,EAAE,SAAqB,EAAE,KAA4C;QAA5C,gCAAwB,kDAAc,CAAC,KAAK;QAChG,IAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,GAAG,GAAgB;YACnB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,IAAI;SACrB,CAAC;QAEF,UAAU,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,KAAK,IAAI,KAAK,EAAhB,CAAgB,CAAC,CAAC,OAAO,CAAC,cAAI;YACjD,IAAI,GAAG,CAAC,aAAa,EAAE;gBACnB,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;aACvE;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;IA+BO,+CAAmB,GAA3B,UAA4B,IAAS;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,uCAAW,GAAnB,UAAoB,IAAY;QAC5B,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,2DAAmB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,OAA2B,CAAC,CAAC;IACjC,CAAC;IAED,kDAAsB,GAAtB;QACI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IArEc,0BAAQ,GAAsB,IAAI,CAAC;IAsEtD,wBAAC;CAAA;;;;;;;;;;;;;;;;;ACjFmE;AAOpE;IAyEI;IAEA,CAAC;IAED,8BAAO,GAAP;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,mBAAM,GAAb,UAAc,IAAmB;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,YAAY,EAAE,CAAC;QAErC,IAAI,OAAO,CAAO,IAAK,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;YAC7C,yFAAyF;YACzF,OAAa,IAAK,CAAC,KAAK,CAAC;YACzB,OAAa,IAAK,CAAC,YAAY,CAAC;YAChC,OAAa,IAAK,CAAC,MAAM,CAAC;YAE1B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;SACnD;;YAEG,OAAsB,IAAI,CAAC;IACnC,CAAC;IAEM,iBAAI,GAAX,UAAY,IAAmB;QAC3B,IAAI,OAAO,GAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;MAEE;IACK,+BAAkB,GAAzB,UAA0B,IAAmB;QACzC,sBAAsB;QACtB,OAAO,IAAI,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC1C,CAAC;IAGD,sBAAI,gCAAM;QADV,sEAAsE;aACtE;YACI,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;aAED,UAAW,CAAS;YAChB,MAAM,IAAI,SAAS,CAAC,yDAAyD,CAAC,CAAC;QACnF,CAAC;;;OAJA;IAMD,sBAAI,kCAAQ;aAAZ;YACI,OAAO,6EAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC;;;OAAA;IAED,sBAAI,kCAAQ;aAAZ;YACI,OAAO,6EAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC;;;OAAA;IAED,sBAAI,gCAAM;aAAV;YACI,OAAO,6EAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;aACD,UAAW,CAAU;YACjB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;;;OAHA;IAKD,sBAAI,8BAAI;aAGR;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;aALD,UAAS,CAAS;YACd,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAClB,CAAC;;;OAAA;IAKD,sBAAI,2CAAiB;aAArB;YACI,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;;;OAAA;IAED,sBAAI,+BAAK;aAAT;YACI,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;;;OAAA;IAED,sBAAI,6BAAG;aAAP;YACI,OAAO,IAAI,CAAC,GAAG,CAAC;QACpB,CAAC;;;OAAA;IAED,sBAAI,yCAAe;aAAnB;YACI,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;;;OAAA;IACL,mBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;AC9JM;IAGH,mCAAoB,MAAW,EAAU,aAAkB;QAAvC,WAAM,GAAN,MAAM,CAAK;QAAU,kBAAa,GAAb,aAAa,CAAK;QACvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,iDAAa,GAAb;QACI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,4CAAQ,GAAR;QACI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,0IAA0I,EAAE,SAAS,CAAC,CAAC;IACrL,CAAC;IAZM,iCAAO,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC;IAc5E,gCAAC;CAAA;AAGD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,2BAA2B,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAErG,+DAAe,2BAA2B;;;;;;;;;;;;;;;;;;ACxByD;AA2B5F;IAOH,gCAAoB,MAAoC,EAAU,gBAAqB,EAAU,aAAkB,EAAU,OAAY;QAArH,WAAM,GAAN,MAAM,CAA8B;QAAU,qBAAgB,GAAhB,gBAAgB,CAAK;QAAU,kBAAa,GAAb,aAAa,CAAK;QAAU,YAAO,GAAP,OAAO,CAAK;QAJzI,YAAO,GAAI,iFAAkB,CAAC,IAAI,CAAC;QACnC,aAAa;QACL,YAAO,GAAG,IAAI,gBAAgB,CAAC,uFAAwB,CAAC,WAAW,CAAC,CAAC;QAGzE,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,iFAAkB,CAAC,GAAG,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,8CAAa,GAAb;QACI,CAAC,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACjE,CAAC;IAGD,8CAAa,GAAb;QACI,CAAC,CAAC,oCAAoC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,0CAAS,GAAT,UAAU,KAAK;QAAf,iBAuCC;QAtCG,IAAM,IAAI,GAAiB,KAAK,CAAC,IAAI,CAAC;QAEtC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;gBACvC,kCAAkC;gBAClC,KAAK,IAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;oBAC1B,KAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBACtC;gBAED,IAAI,CAAC,KAAI,CAAC,MAAM,CAAC,YAAY,EAAE;oBAC3B,KAAI,CAAC,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC;iBAC3C;gBAED,IAAI,KAAI,CAAC,MAAM,CAAC,eAAe,EAAE;oBAC7B,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;oBACrE,KAAI,CAAC,aAAa,CAAC,yBAAyB,EAAE,CAAC;iBAClD;gBAED,IAAG,KAAI,CAAC,MAAM,CAAC,eAAe,EAAE;oBAC5B,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,GAAG,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC;iBAC1E;gBAED,KAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBACvD,IAAI,WAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,0CAAE,EAAE,EAAE;oBACtC,IAAM,IAAI,GAAG,KAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBACrC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE;wBACjD,KAAI,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;qBACtD;yBAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBACtE,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;4BACjB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAClC,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACpB,KAAI,CAAC,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC;qBACrC;iBACJ;aACJ;QACL,CAAC,CAAC;IACN,CAAC;IAED,wCAAO,GAAP;QACI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAnEM,8BAAO,GAAG,CAAC,QAAQ,EAAE,kBAAkB,EAAE,eAAe,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAoExG,6BAAC;CAAA;AAGK,OAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACnGtG,gCAAgC;AACF;AACA;AACgB;AACsB;AAE8G;AAQlL;IAAA;IA68BA,CAAC;IA38BG,2CAA2C;IAC3C,wEAAwE;IACjE,+BAAc,GAArB,UAAsB,SAAqB;QACvC,IAAI,SAAS,CAAC,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC,OAAO,CAAC,cAAc,KAAK,GAAG,EAAE,EAAE,kBAAkB;YAClG,SAAS,CAAC,IAAI,GAAU,6EAAuB,CAAC,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1F,OAAO,SAAS,CAAC,IAAI,CAAC;SACzB;QACD,kBAAkB;QAClB,SAAS,CAAC,IAAI,GAAG,IAAI,uCAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC;IAEM,6BAAY,GAAnB,UAAoB,SAAqB;QACrC,IAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;QACnC,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAElC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAE5C,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEpD,IAAI,WAAW,CAAC,QAAQ,IAAI,GAAG,CAAC,kBAAkB,IAAI,GAAG,CAAC,oBAAoB,EAAE;YAC5E,uBAAuB;YACvB,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACxE;aAAM;YACH,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;SACnE;QAED,gCAAgC;QAEhC,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,qDAAqD;IACrD,6BAA6B;IAC7B,oEAAoE;IAEpE,kCAAkC;IAClC,GAAG;IAEI,iCAAgB,GAAvB,UAAwB,SAAqB;QAEzC,IAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,2CAA2C;QAC/E,IAAM,IAAI,GAAG,IAAI,uCAAI,EAAE,CAAC;QACxB,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC1B,6CAA6C;QAC7C,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAc;YACvB,EAAE,EAAE,QAAQ,CAAC,UAAU;YACvB,IAAI,EAAE,QAAQ,CAAC,YAAY;YAC3B,YAAY,EAAE,QAAQ,CAAC,oBAAoB;YAC3C,mBAAmB,EAAE,QAAQ,CAAC,2BAA2B;YACzD,aAAa,EAAE,QAAQ,CAAC,qBAAqB;SAChD,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC5C,IAAI,QAAQ,CAAC,mBAAmB,EAAE;YAC9B,IAAI,CAAC,mBAAmB,GAAyB;gBAC7C,IAAI,EAAE,QAAQ,CAAC,mBAAmB;aACrC,CAAC;SACL;QAED,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACvC,6EAAuB,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,kDAAc,CAAC,GAAG,CAAC,CAAC;QAE1E,OAAO,IAAI,CAAC;IAEhB,CAAC;IAED,mBAAmB;IACJ,4CAA2B,GAA1C,UAA2C,SAAqB;QAC5D,IAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,2CAA2C;QAC/E,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAEhB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,YAAE;YACvC,IAAM,SAAS,GAAS;gBACpB,4BAA4B,EAAE,EAAE,CAAC,GAAG;gBACpC,4BAA4B,EAAE,EAAE,CAAC,GAAG;gBACpC,SAAS,EAAE,EAAE,CAAC,OAAO;aACxB,CAAC;YAEF,IAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;YAC/E,IAAM,YAAY,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC/C,IAAM,iBAAiB,GAAG,KAAK,GAAG,YAAY,CAAC;YAC/C,IAAM,cAAc,GAAG,OAAO,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;YAClH,IAAM,EAAE,GAAG,uDAAY,CAAC,MAAM,CAAgB;gBAC1C,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE;gBAC9B,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,4BAA4B,EAAE,SAAS,CAAC,4BAA4B;gBACpE,4BAA4B,EAAE,SAAS,CAAC,4BAA4B;gBACpE,oBAAoB,EAAE,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBACzD,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,KAAK,EAAE,EAAE,CAAC,QAAQ;gBAClB,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,iBAAiB;gBAC7B,WAAW,EAAE,iBAAiB,GAAG,EAAE,CAAC,QAAQ;gBAC5C,cAAc,EAAE,6EAAuB,CAAC,YAAY,CAAC,SAAS,EAAE,iBAAiB,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC;gBACrH,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,EAAE;gBACR,YAAY,EAAE,IAAI;gBAClB,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;aACxC,CAAC,CAAC;YAEH,IAAI,EAAE,CAAC,SAAS,KAAK,sCAAsC,EAAE;gBAEzD,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;gBAC5B,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;gBAClB,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;gBACxB,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;gBAC9B,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;gBAC1B,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC;gBACnB,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC;gBACrB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC;gBAC3B,EAAE,CAAC,QAAQ,GAAG,4CAAQ,CAAC,IAAI,CAAC;gBAC5B,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;gBACxB,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;gBACxB,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;gBACxB,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;gBACxB,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;gBACxB,EAAE,CAAC,uBAAuB,GAAG,EAAE,CAAC,uBAAuB,CAAC;gBACxD,EAAE,CAAC,WAAW,GAAgB,EAAE,CAAC,WAAW,CAAC;gBAC7C,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAChB,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;gBAClB,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC;gBAE1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC/B;iBAAM,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE;gBACtB,cAAc;gBACd,EAAE,CAAC,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1C,EAAE,CAAC,QAAQ,GAAG,4CAAQ,CAAC,UAAU,CAAC;gBAElC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC/B;iBAAM;gBACH,uBAAuB;gBACvB,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;aAClD;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEc,uCAAsB,GAArC,UAAsC,SAAqB;QACvD,IAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,2CAA2C;QAC/E,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAEhB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,YAAE;YAEtC,IAAI,OAAO,GAAa;gBACpB,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,kBAAkB,EAAE,mBAAmB;gBACvC,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,IAAI,EAAE,EAAE,CAAC,QAAQ;gBACjB,SAAS,EAAE,oBAAoB;gBAC/B,eAAe,EAAE,SAAS;gBAC1B,OAAO,EAAE,CAAC;gBACV,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,IAAI;aAClB,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAEc,mCAAkB,GAAjC,UAAkC,SAAqB;QAC3C,OAAG,GAAe,6EAAuB,IAAtC,EAAE,GAAG,GAAU,6EAAuB,IAAjC,EAAE,GAAG,GAAK,6EAAuB,IAA5B,CAA6B;QAElD,IAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC;QAC7B,IAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;QACzB,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAElC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACb,CAAC,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;QAC9D,CAAC,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC;QAC3D,CAAC,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;QACjE,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;QACrD,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QAC/C,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;QACxD,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;QAC/B,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QAC3B,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;QAC5C,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;QAC3D,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;QACnC,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,4CAAQ,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,CAAC,QAAQ,CAAC;QAClE,CAAC,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;QAC9D,CAAC,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC;QACxE,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC;QACzC,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,8DAA6D;QACzG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;QACtE,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,iBAAiB,GAAG,EAAE,CAAC,iBAAiB,KAAK,IAAI,IAAI,EAAE,CAAC,iBAAiB,KAAK,IAAI,CAAC;QACrF,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;QAE3B,IAAI,CAAC,CAAC,QAAQ,EAAE;YACZ,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC;YACnC,2BAA2B;YAC3B,gFAAgF;YAChF,OAAO;YACP,oEAAoE;SACvE;QAED,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;QAC5C,CAAC,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,YAAY,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC;YAC1E,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,6EAAuB,CAAC,oBAAoB,EAAE,CAAC;QACtE,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACjG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC;QAC1B,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACpG,CAAC,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC;QACvE,CAAC,CAAC,oBAAoB,GAAG,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC;QACnF,CAAC,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;QACjE,CAAC,CAAC,sBAAsB,GAAG,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC;QACzF,CAAC,CAAC,0BAA0B,GAAG,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,0BAA0B,CAAC;QACrG,CAAC,CAAC,oBAAoB,GAAG,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC;QACnF,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QAChD,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAErD,IAAI,EAAE,CAAC,iBAAiB,KAAK,IAAI,IAAI,EAAE,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACrE,CAAC,CAAC,iBAAiB,GAAG,EAAE,CAAC,iBAAiB,CAAC;SAC9C;QAED,IAAI,EAAE,CAAC,IAAI;YACP,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC;QAExB,IAAI,EAAE,CAAC,OAAO,EAAE;YACZ,CAAC,CAAC,OAAO,GAAG,IAAI,KAAK,EAAe,CAAC;YACzB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAC;gBAC9B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAc;oBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACvB,CAAC;YACN,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAEc,uCAAsB,GAArC,UAAsC,SAAqB;QACvD,IAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACzC,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YACpC,IAAI,CAAC,mBAAmB,GAAyB;gBAC7C,IAAI,EAAE,IAAI;aACb,CAAC;SACL;aAAM,IAAI,IAAI,EAAE;YACb,IAAI,CAAC,mBAAmB,GAAyB;gBAC7C,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;aAC3D,CAAC;SACL;IACL,CAAC;IAEc,4BAAW,GAA1B,UAA2B,SAAqB;QAC5C,IAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,OAAO,CAAC,QAAQ,EAAE;YAClB,IAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAc;gBACvB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;gBACtC,SAAS,EAAE,IAAI,KAAK,EAAY;gBAChC,QAAQ,EAAE,IAAI,KAAK,EAAY;gBAC/B,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,IAAI,KAAK,EAAiB;gBACrC,eAAe,EAAE,IAAI,KAAK,EAAa;gBACvC,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,yBAAyB,EAAE,CAAC,CAAC,yBAAyB;gBACtD,yBAAyB,EAAE,CAAC,CAAC,yBAAyB;gBACtD,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;gBAC1C,aAAa,EAAE,CAAC,CAAC,aAAa;gBAC9B,mBAAmB,EAAE,CAAC,CAAC,mBAAmB;gBAC1C,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;aAC3C,CAAC;YAEF,IAAI,CAAC,CAAC,iBAAiB,KAAK,IAAI,IAAI,CAAC,CAAC,iBAAiB,KAAK,KAAK;gBAC7D,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,CAAC;YAE1D,IAAI,CAAC,CAAC,SAAS,EAAE;gBACb,IAAI,EAAE,SAAY,CAAC;gBAEnB,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE;oBACnC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;iBAChC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;oBACnC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;iBACpB;;oBAAM,EAAE,GAAG,EAAE,CAAC;gBAEf,EAAE,CAAC,OAAO,CAAC,WAAC;oBACR,IAAM,GAAG,GAAa;wBAClB,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;wBAC/B,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;wBAC3C,cAAc,EAAE,CAAC,CAAC,cAAc;wBAChC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;wBACnC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;wBAC/C,IAAI,EAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;qBACjD,CAAC;oBAEF,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE;wBACpB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;qBAC5C;oBAED,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE;wBACpB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;qBAC5C;oBAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACA,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAC;oBAC9B,IAAM,GAAG,GAAa;wBAClB,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,GAAG,EAAE,CAAC,CAAC,GAAG;wBACV,cAAc,EAAE,CAAC,CAAC,cAAc;wBAChC,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,OAAO,EAAE,CAAC,CAAC,OAAO;qBACrB,CAAC;oBAEF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrC,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,CAAC,SAAS,EAAE;gBACD,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,WAAC;oBAC/B,IAAM,EAAE,GAAkB;wBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,MAAM,EAAE,CAAC,CAAC,MAAM;qBACnB,CAAC;oBAEF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,CAAC,eAAe,EAAE;gBACP,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,WAAC;oBACrC,IAAM,GAAG,GAAc;wBACnB,IAAI,EAAgB,CAAC,CAAC,IAAI;wBAC1B,gBAAgB,EAAoB,CAAC,CAAC,gBAAgB;wBACtD,SAAS,EAAE,CAAC,CAAC,SAAS;wBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;qBACnB,CAAC;oBAEF,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;aACN;SACJ;aAAM;YACH,IAAI,CAAC,QAAQ,GAAc;gBACvB,EAAE,EAAE,IAAI;aACX,CAAC;SACL;IACL,CAAC;IAEc,yCAAwB,GAAvC,UAAwC,SAAqB;QACzD,IAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAC;gBACpC,IAAM,EAAE,GAAa;oBACjB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;oBACnC,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;oBACxC,eAAe,EAAE,CAAC,CAAC,eAAe;oBAClC,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;oBAC5C,mBAAmB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;oBAC1E,mBAAmB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;oBAC1E,uBAAuB,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;oBACtF,mBAAmB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;oBAC1E,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;oBAC/C,SAAS,EAAE,IAAI;iBAClB,CAAC;gBAEF,IAAI,CAAC,CAAC,SAAS,EAAE;oBACb,IAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;oBACtB,EAAE,CAAC,SAAS,GAAe;wBACvB,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,IAAI,EAAiB,CAAC,CAAC,IAAI;wBAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,eAAe,EAAE,CAAC,CAAC,eAAe;wBAClC,sBAAsB,EAAE,CAAC,CAAC,sBAAsB;wBAChD,SAAS,EAAE,CAAC,CAAC,SAAS;wBACtB,eAAe,EAAE,CAAC,CAAC,eAAe;wBAClC,GAAG,EAAE,CAAC,CAAC,GAAG;wBACV,SAAS,EAAE,CAAC,CAAC,SAAS;wBACtB,KAAK,EAAE,CAAC,CAAC,KAAK;qBACjB,CAAC;iBACL;gBAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAEa,2CAA0B,GAAxC,UAAyC,GAAQ;QAC7C,IAAM,EAAE,GAAG,uDAAY,CAAC,MAAM,CAAgB;YAC1C,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,WAAW,EAAE,GAAG,CAAC,MAAM;YACvB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO;YAC1C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;YAClC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC;YAC/C,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,YAAY,EAAE,6EAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;YAC3D,QAAQ,EAAE,6EAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnD,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,cAAc,EAAE,GAAG,CAAC,GAAG;YACvB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,uBAAuB,EAAE,GAAG,CAAC,uBAAuB;YACpD,WAAW,EAAe,GAAG,CAAC,WAAW;YACzC,QAAQ,EAAY,GAAG,CAAC,QAAQ;YAChC,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;YAC9C,YAAY,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY;YACzD,sBAAsB,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,sBAAsB;YACvF,SAAS,EAAE,GAAG,CAAC,SAAS;SAC3B,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,KAAK,EAAE;YACX,EAAE,CAAC,4BAA4B,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC;YACtE,EAAE,CAAC,4BAA4B,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC;SACzE;QAED,IAAI,GAAG,CAAC,kBAAkB;YACtB,EAAE,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC;QAEnD,IAAI,GAAG,CAAC,SAAS;YACb,EAAE,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QAEjC,IAAI,GAAG,CAAC,eAAe;YACnB,EAAE,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;QAE7C,IAAI,GAAG,CAAC,sBAAsB;YAC1B,EAAE,CAAC,sBAAsB,GAAG,GAAG,CAAC,sBAAsB,CAAC;QAE3D,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,EAAE,CAAC,KAAK,EAAE;gBACV,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,WAAC;oBACd,CAAC,CAAC,aAAa,GAAS,CAAE,CAAC,aAAa,CAAC;oBACzC,OAAa,CAAE,CAAC,aAAa,CAAC;oBAC9B,OAAO,CAAC,CAAC,eAAe,CAAC;gBAC7B,CAAC,CAAC;aACL;SACJ;;YAAM,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;QAErB,OAAO,EAAE,CAAC;IACd,CAAC;IAEc,0CAAyB,GAAxC,UAAyC,SAAqB;QAC1D,IAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,OAAO,CAAC,aAAa,EAAE;YACX,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,aAAG;gBAC3C,IAAM,EAAE,GAAG,gBAAgB,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;gBAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAEc,kCAAiB,GAAhC,UAAiC,SAAqB;QAClD,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAClC,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,mCAAmC;QAC3E,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC,oCAAoC;QAC7F,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC,sCAAsC;QACnG,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,oBAAoB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAEM,mDAAkC,GAAzC,UAA0C,EAAkB;QACxD,IAAI,GAAwB,CAAC;QAE7B,QAAQ,EAAE,EAAE;YACR,KAAK,kDAAc,CAAC,MAAM;gBACtB,GAAG,GAAG,uDAAmB,CAAC,MAAM,CAAC;gBACjC,MAAM;YACV,KAAK,kDAAc,CAAC,KAAK;gBACrB,GAAG,GAAG,uDAAmB,CAAC,KAAK,CAAC;gBAChC,MAAM;YACV,KAAK,kDAAc,CAAC,WAAW;gBAC3B,GAAG,GAAG,uDAAmB,CAAC,WAAW,CAAC;gBACtC,MAAM;YACV,KAAK,kDAAc,CAAC,SAAS;gBACzB,GAAG,GAAG,uDAAmB,CAAC,SAAS,CAAC;gBACpC,MAAM;YACV,KAAK,kDAAc,CAAC,eAAe;gBAC/B,GAAG,GAAG,uDAAmB,CAAC,eAAe,CAAC;gBAC1C,MAAM;YACV,KAAK,kDAAc,CAAC,MAAM;gBACtB,GAAG,GAAG,uDAAmB,CAAC,MAAM,CAAC;gBACjC,MAAM;YACV;gBACI,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;SACnF;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAEc,+BAAc,GAA7B,UAA8B,iBAA2B;QACrD,iBAAiB,CAAC,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAE,IAAI,SAAE,CAAC,SAAS,KAAK,UAAU,EAA3B,CAA2B,CAAC,CAAC;IACtG,CAAC;IAED,0BAA0B;IACX,mCAAkB,GAAjC,UAAkC,SAAqB;QACnD,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAClC,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,kCAAkC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,GAAG,CAAC,MAAM,KAAK,kDAAc,CAAC,MAAM,EAAE;YACtC,IAAI,IAAI,CAAC,SAAS,KAAK,uDAAmB,CAAC,SAAS,EAAE;gBAClD,IAAI,GAAG,CAAC,eAAe,EAAE;oBACrB,SAAS,GAAG,uDAAmB,CAAC,SAAS,CAAC;iBAC7C;qBAAM;oBACH,SAAS,GAAG,uDAAmB,CAAC,eAAe,CAAC;iBACnD;aACJ;YAED,IAAI,IAAI,CAAC,SAAS,KAAK,kDAAc,CAAC,KAAK,EAAE;gBACzC,IAAI,GAAG,CAAC,eAAe,EAAE;oBACrB,SAAS,GAAG,uDAAmB,CAAC,KAAK,CAAC;iBACzC;qBAAM;oBACH,SAAS,GAAG,uDAAmB,CAAC,WAAW,CAAC;iBAC/C;aACJ;SACJ;QAED,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEc,qCAAoB,GAAnC,UAAoC,GAAsB;QACtD,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,QAAQ,GAAG,CAAC,SAAS,EAAE;YACnB,KAAK,uDAAmB,CAAC,KAAK,CAAC;YAC/B,KAAK,uDAAmB,CAAC,WAAW,CAAC;YACrC,KAAK,uDAAmB,CAAC,SAAS,CAAC;YACnC,KAAK,uDAAmB,CAAC,eAAe;gBACpC,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM;SACb;QAED,IAAI,GAAG,CAAC,kBAAkB;YACtB,gBAAgB,GAAG,IAAI,CAAC;QAE5B,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC5C,CAAC;IAEc,+BAAc,GAA7B,UAA8B,IAAW;QACrC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;YAC5F,OAAO,IAAI,CAAC,WAAW,CAAC;SAC3B;QACD,IAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,cAAc,IAAI,EAAE,CAAC;QACtD,IAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,cAAc,IAAI,EAAE,CAAC;QACtD,IAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC;QACrG,OAAO,UAAG,MAAM,SAAG,gBAAgB,SAAG,MAAM,CAAE,CAAC;IACnD,CAAC;IAED,mCAAmC;IACpB,8BAAa,GAA5B,UAA6B,SAAqB;QAC9C,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAClC,IAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAE7D,kBAAkB;QAClB,IAAM,OAAO,GAAa;YACtB,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW;YAC9E,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc;YACzE,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,QAAQ;YACpC,YAAY,EAAE,IAAI,CAAC,cAAc;YACjC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,eAAe,EAAE,GAAG,CAAC,SAAS;YAC9B,mBAAmB,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI;YACnF,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ;YACrE,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACpD,YAAY,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI;YACtD,KAAK,EAAE,IAAI,KAAK,EAAe;YAC/B,QAAQ,EAAE,IAAI,KAAK,EAAe;YAClC,UAAU,EAAE,IAAI,KAAK,EAAiB;YACtC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACtC,gBAAgB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB;YAC3E,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;YAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,eAAe;YAClD,kBAAkB,EAAE,QAAQ;YAC5B,gBAAgB,EAAE,GAAG,CAAC,kBAAkB;YACxC,kBAAkB,EAAE,GAAG,CAAC,oBAAoB;YAC5C,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK;YACxE,mBAAmB,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW;YACpF,QAAQ,EAAE,IAAI,CAAC,gBAAgB;YAC/B,gBAAgB,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB;YACtF,iBAAiB,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YACzE,4BAA4B,EAAE,IAAI,CAAC,4BAA4B,IAAI,EAAE;YACrE,4BAA4B,EAAE,IAAI,CAAC,4BAA4B,IAAI,EAAE;YACrE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,EAAE;YACrD,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,IAAI,EAAE;YAC3D,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,IAAI,EAAE;YAC7D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,IAAI,EAAE;YACnD,iBAAiB,EAAE,KAAK;YACxB,iCAAiC,EAAE,CAAC,QAAQ;YAC5C,mBAAmB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB;YAC9E,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,UAAU;YACxC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,sBAAsB;SACrD,CAAC;QAEF,OAAO,OAAO,CAAC;IACnB,CAAC;IAEc,2CAA0B,GAAzC,UAA0C,SAAqB,EAAE,iBAA2B;QACxF,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAClC,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAI,GAAG,CAAC,kBAAkB,EAAE;YACxB,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACtD,iBAAiB,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC3D,iBAAiB,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACrE,IAAI,IAAI,GAAgB;gBACpB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,mBAAmB;gBAChC,GAAG,EAAE,mBAAmB;gBACxB,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE,CAAC;gBACR,YAAY,EAAE,CAAC;gBACf,GAAG,EAAE,CAAC;gBACN,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,KAAK;gBACnB,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,IAAI;aACpB,CAAC;YAEF,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtC;IAEL,CAAC;IAEc,qCAAoB,GAAnC,UAAoC,SAAqB,EAAE,iBAA2B;QAClF,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAElC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI;YAAE,OAAO,CAAC,iCAAiC;QAE9F,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;IAEc,uCAAsB,GAArC,UAAsC,SAAqB,EAAE,MAAkB;QAC3E,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAElC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC;IAEc,iCAAgB,GAA/B,UAAgC,GAAsB,EAAE,KAA2B,EAAE,cAAkC,EAAE,QAAiB;QAEtI,KAAK,CAAC,OAAO,CAAC,YAAE;YACZ,IAAM,IAAI,GAAgB;gBACtB,SAAS,EAAE,EAAE,CAAC,QAAQ,KAAK,4CAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS;gBACpE,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtF,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY;gBACvD,2DAA2D;gBAC3D,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC9D,4IAA4I;gBAC5I,YAAY,EAAE,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;gBACrF,qIAAqI;gBACrI,GAAG,EAAE,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC;gBAC/E,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,YAAY,EAAE,KAAK;gBACnB,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,YAAY,EAAE,EAAE,CAAC,YAAY;gBAC7B,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;aACxC,CAAC;YAEF,IAAI,EAAE,CAAC,QAAQ,KAAK,4CAAQ,CAAC,UAAU;gBAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC;YACpE,IAAI,EAAE,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC;YAEzD,IAAI,EAAE,CAAC,sBAAsB;gBACzB,IAAI,CAAC,sBAAsB,GAAG,GAAG,CAAC,aAAa,CAAC,6BAA6B,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC;YAE7G,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAEc,8BAAa,GAA5B,UAA6B,QAAyB,EAAE,UAAgC,EAAE,UAAoB;QAE1G,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,OAAO,CAAC,iBAAO;gBACpB,IAAI,OAAO,CAAC,SAAS,EAAE;oBACnB,IAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;oBAC/B,IAAM,IAAI,GAAkB;wBACxB,KAAK,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5D,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9C,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,iBAAiB,EAAE,IAAI,CAAC,sBAAsB,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/E,eAAe,EAAE,IAAI,CAAC,eAAe;wBACrC,SAAS,EAAE,OAAO,CAAC,EAAE;qBACxB,CAAC;oBAEF,IAAI,IAAI,CAAC,gBAAgB;wBACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBAElD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACzB;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAEc,gCAAe,GAA9B,UAA+B,SAAqB,EAAE,iBAA2B;QAC7E,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,mBAAmB,GAAgB;gBACnC,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE;gBAC9B,kBAAkB,EAAE,IAAI;gBACxB,MAAM,EAAE,IAAI,CAAC,aAAa;gBAC1B,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE;gBAClB,SAAS,EAAE,UAAU;aACxB,CAAC;YACF,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SACxD;IACL,CAAC;IAEc,gCAAe,GAA9B,UAA+B,SAAqB,EAAE,iBAA2B;QAC7E,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAE;gBACpB,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;oBAC9F,IAAI,CAAC,GAAgB;wBACjB,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;wBACzC,MAAM,EAAE,EAAE,CAAC,MAAM;wBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,SAAS,EAAE,EAAE,CAAC,SAAS;wBACvB,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC7D,SAAS,EAAE,EAAE,CAAC,SAAS;qBAC1B,CAAC;oBAEF,IAAI,EAAE,CAAC,mBAAmB;wBACtB,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;oBAEnD,IAAI,EAAE,CAAC,mBAAmB,EAAE;wBACxB,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;wBAC/C,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;qBACjF;oBAED,IAAI,EAAE,CAAC,uBAAuB;wBAC1B,CAAC,CAAC,uBAAuB,GAAG,EAAE,CAAC,uBAAuB,CAAC;oBAE3D,IAAI,EAAE,CAAC,mBAAmB;wBACtB,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;oBAEnD,IAAI,EAAE,CAAC,UAAU;wBAAE,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;oBAEhD,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACtC;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAEc,kCAAiB,GAAhC,UAAiC,SAAqB,EAAE,MAAkB;QACtE,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAE;YACpB,IAAI,CAAC,GAAgB;gBACjB,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,kBAAkB,EAAE,EAAE,CAAC,kBAAkB;gBACzC,MAAM,EAAE,EAAE,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1E,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC;gBAC7B,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,SAAS,EAAE,EAAE,CAAC,SAAS;aAC1B,CAAC;YAEF,IAAI,EAAE,CAAC,mBAAmB;gBACtB,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;YAEnD,IAAI,EAAE,CAAC,mBAAmB,EAAE;gBACxB,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;gBAC/C,CAAC,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;aACjF;YAED,IAAI,EAAE,CAAC,uBAAuB;gBAC1B,CAAC,CAAC,uBAAuB,GAAG,EAAE,CAAC,uBAAuB,CAAC;YAE3D,IAAI,EAAE,CAAC,mBAAmB;gBACtB,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;YAEnD,IAAI,EAAE,CAAC,UAAU;gBAAE,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;YAEhD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAEc,4BAAW,GAA1B,UAA2B,SAAqB,EAAE,QAA4B,EAAE,UAAoB;QAChG,iCAAiC;QACjC,QAAQ,GAAG,4CAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC/B,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,EAArD,CAAqD,CAAC;aACjE,MAAM,CAAC,WAAC,IAAI,QAAC,EAAD,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAE9B,oDAAoD;QACpD,8BAA8B;QAE9B,uBAAuB;QACvB,mCAAmC;QACnC,4CAA4C;QAC5C,sDAAsD;QACtD,4BAA4B;QAC5B,4EAA4E;QAC5E,gCAAgC;QAChC,0CAA0C;QAC1C,4BAA4B;QAC5B,gBAAgB;QAChB,iDAAiD;QACjD,WAAW;QACX,SAAS;QACT,GAAG;IACP,CAAC;IAEc,8BAAa,GAA5B,UAA6B,SAAqB,EAAE,iBAA2B;QAC3E,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC;QAElC,iBAAiB,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7C,iBAAiB,CAAC,eAAe,GAAG,uDAAmB,CAAC,QAAQ,CAAC;QACjE,iBAAiB,CAAC,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAE3D,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,EAAE;YACzB,mDAAmD;YACnD,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SACtG;aACI;YACD,IAAM,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YAEvE,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,8DAA8D;YACjG,IAAI,GAAG,CAAC,kBAAkB;gBACtB,iBAAiB,CAAC,gBAAgB,GAAG,KAAK,CAAC;SAClD;QAED,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,IAAI,CAAC,WAAW,EAAE;YACd,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;gBAClD,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;SACnC;QAED,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACtG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7C,GAAG,CAAC,YAAY,CAAC,CAAC;QAE1B,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI;YACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE7B,IAAM,MAAM,GAAe;YACvB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE;YAClB,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,KAAK,EAAE,IAAI,KAAK,EAAe;YAC/B,QAAQ,EAAE,IAAI,KAAK,EAAe;YAClC,UAAU,EAAE,IAAI,KAAK,EAAiB;SACzC,CAAC;QAEF,IAAI,GAAG,CAAC,kBAAkB,EAAE;YACxB,MAAM,CAAC,IAAI,GAAG,yBAAyB,CAAC;SAC3C;QAED,IAAI,GAAG,CAAC,oBAAoB,EAAE;YAC1B,MAAM,CAAC,IAAI,GAAG,2BAA2B,CAAC;SAC7C;QAED,oEAAoE;QACpE,6EAA6E;QAC7E,mCAAmC;QACnC,mCAAmC;QACnC,wBAAwB;QACxB,GAAG;QACH,iBAAiB,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAE9B,OAAO,MAAM,CAAC;IAClB,CAAC;IACL,uBAAC;AAAD,CAAC;;AAED,yBAAyB;AACzB,0EAA0E;AAC1E,kFAAkF;AAClF,sCAAsC;AAC/B,SAAS,cAAc,CAAC,OAAY,EAAE,cAAwB;IACjE,gDAAgD;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ;QAC7B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAElC,IAAM,cAAc,GAAG,6EAAuB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC;IAEpC,IAAM,GAAG,GAAG,gBAAgB,CAAC,cAAc,CAAa;QACpD,OAAO,EAAE,OAAO;QAChB,WAAW,EAAqB;YAC5B,YAAY,EAAE,cAAc;SAC/B;KACJ,CAAC,CAAC;IAEH,+EAA+E;IAE/E,OAAO,GAAG,CAAC;AACf,CAAC;AAEM,SAAS,0BAA0B,CAAC,IAAW,EAAE,UAAiB;IACrE,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO;IACjC,IAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,IAAI,UAAU,CAAC,QAAQ;QACnB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC,IAAI,UAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAhB,CAAgB,CAAC,CAAC;IACvD,IAAI,UAAU,CAAC,cAAc;QACzB,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,WAAC,IAAI,UAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAhB,CAAgB,CAAC,CAAC;IAE7D,IAAI,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC;YACnB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;gBACf,IAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB,IAAI,EAAE,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC,mBAAmB;oBAChD,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;aACtD;QACL,CAAC,CAAC,CAAC;IAEP,IAAI,IAAI,CAAC,OAAO;QACZ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAC;YAClB,IAAiB,CAAE,CAAC,QAAQ;gBACX,CAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC;oBAC9B,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;wBACf,IAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACzB,IAAI,EAAE,CAAC,mBAAmB,IAAI,CAAC,CAAC,CAAC,mBAAmB;4BAChD,CAAC,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC;qBACtD;gBACL,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;AACX,CAAC;AAEM,SAAS,YAAY,CAAC,IAAW,EAAE,MAAsB,EAAE,UAAmB,EAAE,YAAqB,EAAE,eAAyB;IACnI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAE5B,OAAO,gBAAgB,CAAC,YAAY,CAAa;QAC7C,IAAI,EAAE,IAAI;QACV,WAAW,EAAqB;YAC5B,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACtC,YAAY,EAAE,YAAY;YAC1B,eAAe,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;SACnD;KACJ,CAAC,CAAC;AACP,CAAC;AAEM,SAAS,cAAc,CAAC,OAAY;IACvC,OAAO,gBAAgB,CAAC,gBAAgB,CAAa;QACjD,OAAO,EAAE,OAAO;QAChB,WAAW,EAAqB,EAAE;KACrC,CAAC,CAAC;AACP,CAAC;AACD,kHAAkH;AAClH,+CAA+C;AAC/C,0DAA0D;AAC1D,GAAG;;;;;;;;;;;;;;;;;;;;;AC3iCH,IAAY,kBAEX;AAFD,WAAY,kBAAkB;IAC1B,iCAAW;AACf,CAAC,EAFW,kBAAkB,KAAlB,kBAAkB,QAE7B;AAED;IAII,gBAAY,KAAa,EAAE,GAAW;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IACvB,CAAC;IAED,wBAAO,GAAP,UAAQ,EAAU;QACd,OAAO,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;IACtD,CAAC;IACL,aAAC;AAAD,CAAC;;AAED;IAAA;IAMA,CAAC;IAAD,sBAAC;AAAD,CAAC;;AAED;IAAA;IAQA,CAAC;IAAD,sBAAC;AAAD,CAAC;;AAED;IAAA;IA0BA,CAAC;IAZG,oCAAa,GAAb;QACI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;SACnC;aAAM;YACH,IAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,wBAAwB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7E,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACrE;IACL,CAAC;IACL,mBAAC;AAAD,CAAC;;AAED;IAgBI;QACI,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,EAAgB,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,IAAI,eAAe,EAAE,CAAC;QAC5C,IAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAC;QAChD,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC;IACnE,CAAC;IACL,eAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxF6B;AAGgE;AACiB;AAK/G;IAMI;QALA,oBAAe,GAAa,IAAI,CAAC;QACjC,gBAAW,GAAoC,IAAI,CAAC;QACpD,2BAAsB,GAAG,IAAI,KAAK,EAAgB,CAAC;QACnD,WAAM,GAAyC,IAAI,CAAC;QAGhD,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC7D,CAAC;IAEa,mCAAoB,GAAlC;QACI,OAAO,IAAI,cAAc,EAAE,CAAC;IAChC,CAAC;IAEM,6CAAoB,GAA3B,UAA4B,GAAa;QAAzC,iBAgDC;QA/CG,IAAM,QAAQ,GAAG,IAAI,+CAAQ,EAAE,CAAC;QAEhC,IAAI,GAAG;YACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAEjC,IAAI,GAAG,CAAC,cAAc,EAAE;YACpB,IAAM,EAAE,GAAG,IAAI,sDAAe,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;YACtC,QAAQ,CAAC,cAAc,GAAG,EAAE,CAAC;SAChC;QAED,IAAI,GAAG,CAAC,kBAAkB,EAAE;YACxB,IAAM,EAAE,GAAG,IAAI,sDAAe,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC1C,QAAQ,CAAC,kBAAkB,GAAG,EAAE,CAAC;SACpC;QAED,IAAI,GAAG,CAAC,aAAa,EAAE;YACnB,QAAQ,CAAC,aAAa,GAAG,IAAI,KAAK,EAAgB,CAAC;YACnD,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,cAAI;gBAC1B,IAAM,EAAE,GAAG,KAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBAC/C,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;SACN;QAED,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY;gBAAE,OAAO,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY;gBAAE,OAAO,CAAC,CAAC;YAChD,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE;gBACpC,OAAO,CAAC,CAAC;aACZ;YAED,IAAM,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YAExD,IAAI,EAAE,KAAK,CAAC,EAAE;gBACV,IAAM,GAAG,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE3F,IAAI,GAAG,KAAK,CAAC;oBACT,OAAO,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;;oBACvD,OAAO,GAAG,CAAC;aACnB;YAED,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;QAChC,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,iDAAwB,GAA/B,UAAgC,IAAkB;QAC9C,IAAM,EAAE,GAAG,IAAI,mDAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACxB,6CAA6C;QAC7C,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;IAEM,gDAAuB,GAA9B,UAA+B,GAA8B;QACjD,eAAW,GAAK,IAAI,YAAT,CAAU;QAE7B,8DAA8D;QAC9D,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,OAAO,CAAC,WAAC,IAAI,kBAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAA1B,CAA0B,CAAC,CAAC;SAChD;QAED,OAAO,WAAW,CAAC;IACvB,CAAC;IAEM,6CAAoB,GAA3B,UAA4B,GAAuB;QAC/C,IAAM,QAAQ,GAAG,IAAI,mEAAkB,EAAE,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE7B,QAAQ,CAAC,uBAAuB,GAAG,IAAI,KAAK,EAAyB,CAAC;QACtE,IAAI,GAAG,CAAC,uBAAuB,EAAE;YAC7B,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,aAAG;gBACnC,IAAM,MAAM,GAAG,IAAI,sEAAqB,EAAE,CAAC;gBAC3C,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC3B,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;SACN;QAED,QAAQ,CAAC,8BAA8B,GAAG,IAAI,KAAK,EAAgC,CAAC;QACpF,IAAI,GAAG,CAAC,8BAA8B,EAAE;YACpC,GAAG,CAAC,8BAA8B,CAAC,OAAO,CAAC,aAAG;gBAC1C,IAAM,MAAM,GAAG,IAAI,6EAA4B,EAAE,CAAC;gBAClD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC3B,QAAQ,CAAC,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;SACN;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEK,iDAAwB,GAA9B,UAA+B,UAAkB;;;;;4BACjC,qBAAM,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC;4BAC/C,QAAQ,EAAE,UAAU;4BACpB,UAAU,EAAE,YAAY;yBAC3B,CAAC;;wBAHI,GAAG,GAAG,SAGV;wBAEF,sBAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAgB,CAAC,EAAC;;;;KAC1D;IAEK,gDAAuB,GAA7B,UAA8B,IAAW;;;;;4BACzB,qBAAM,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC;4BAC/C,QAAQ,EAAE,IAAI,CAAC,EAAE;4BACjB,UAAU,EAAE,YAAY;yBAC3B,CAAC;;wBAHI,GAAG,GAAG,SAGV;6BAEE,CAAC,GAAG,CAAC,IAAI,EAAT,wBAAS;wBACT,GAAG,CAAC,IAAI,GAAG;4BACP,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,aAAa;4BAChD,kBAAkB,EAAE,GAAG,CAAC,aAAa,CAAC,sBAAsB;4BAC5D,OAAO,EAAE,IAAI,CAAC,EAAE;4BAChB,WAAW,EAAE,IAAI,CAAC,WAAW;yBAChC,CAAC;wBAEF,QAAG,CAAC,IAAI;wBAAiB,qBAAM,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC;;wBAAhF,GAAS,aAAa,GAAG,SAAuD,CAAC;wBACjF,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;;;wBAEtB,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;wBAEA,qBAAM,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC;;wBAAxE,cAAc,GAAG,SAAuD;wBAExE,QAAM,IAAI,GAAG,EAAe,CAAC;wBAEnC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE,IAAI,YAAG,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,EAAzB,CAAyB,CAAC,CAAC;wBAEhE,cAAc,CAAC,OAAO,CAAC,YAAE;4BACrB,IAAI,CAAC,KAAG,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;gCACxB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;6BACnC;wBACL,CAAC,CAAC,CAAC;;;wBAGD,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAgB,CAAC,CAAC;wBACjE,qBAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;;wBAA1C,SAA0C,CAAC;wBAE3C,sBAAO,QAAQ,EAAC;;;;KACnB;IAEK,uCAAc,GAApB,UAAqB,IAAY,EAAE,KAAa,EAAE,OAAY;;;;;;wBACpD,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAClC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,6BAA6B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAC7E,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAE7D,qBAAM,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;gCACrE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gCAC3B,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;6BACxB,CAAC,CAAC;;wBAHG,GAAG,GAAG,SAGT;wBAEH,sBAAO,GAAG,CAAC,IAA0B,EAAC;;;;KACzC;IAAA,CAAC;IAEI,wCAAe,GAArB,UAAsB,OAAY;;;;;;wBACxB,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAClC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,6BAA6B,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAC7E,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAG7D,qBAAM,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;gCACrE,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,kBAAkB;6BACnD,CAAC,CAAC;;wBAFG,GAAG,GAAG,SAET;wBAEH,sBAAO,GAAG,CAAC,IAAc,EAAC;;;;KAC7B;IAEK,8CAAqB,GAA3B,UAA4B,KAAoB;;;;;4BAChC,qBAAM,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC;;wBAApD,GAAG,GAAG,SAA8C;wBAC1D,sBAAO,GAAG,CAAC,IAAiC,EAAC;;;;KAChD;IAAA,CAAC;IAEI,8CAAqB,GAA3B,UAA4B,QAAkB;;;;;;;wBAEpC,GAAG,GAAG,IAAI,KAAK,EAAsB,CAAC;wBAExC,QAAQ,GAAG,IAAI,KAAK,EAAE,CAAC;wBAErB,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;wBACzC,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;wBAE9B,qBAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC;;wBAArD,QAAQ,GAAG,SAA0C;wBAC3D,QAAQ,CAAC,OAAO,CAAC,WAAC,IAAI,UAAG,CAAC,IAAI,CAAC,KAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAtC,CAAsC,CAAC,CAAC;wBAC9D,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;;;;;KACrC;IAEK,+DAAsC,GAA5C,UAA6C,IAAW;;;gBACpD,sBAAO,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAC;;;KACzD;IAEK,yDAAgC,GAAtC,UAAuC,UAAkB;;;;;;;wBAC/C,GAAG,GAAG,IAAI,KAAK,EAAgB,CAAC;wBAE1B,qBAAM,GAAG,CAAC,eAAe,CAAC,gCAAgC,CAAC,UAAU,CAAC;;wBAA5E,GAAG,GAAG,SAAsE;wBAClF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAC,IAAI,UAAG,CAAC,IAAI,CAAC,KAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAA1C,CAA0C,CAAC,CAAC;wBAElE,IAAI,CAAC,sBAAsB,GAAG,GAAG,CAAC;wBAClC,sBAAO,GAAG,EAAC;;;;KACd;IAEK,qCAAY,GAAlB;;;;;6BACQ,IAAI,CAAC,eAAe,CAAC,KAAK,EAA1B,wBAA0B;wBAC1B,qBAAM,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;;wBAA/F,SAA+F,CAAC;;4BAEhG,qBAAM,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;;wBAA/F,SAA+F,CAAC;;;;;;KACvG;IAEK,iDAAwB,GAA9B,UAA+B,MAAc,EAAE,UAAkB,EAAE,MAAc;;;;4BAC7E,qBAAM,GAAG,CAAC,eAAe,CAAC,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC;;wBAA9E,SAA8E,CAAC;;;;;KAClF;IAED,gCAAO,GAAP,UAAQ,WAA0B,EAAE,GAA0B;QAC1D,IAAI,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,YAAY,EAAE;YACxC,WAAW,CAAC,IAAI,CAAC,IAAI,6CAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;YACxF,WAAW,CAAC,IAAI,CAAC,IAAI,6CAAM,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,+BAA+B;SACnG;aAAM;YACH,WAAW,CAAC,IAAI,CAAC,IAAI,6CAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;SAC5D;IACL,CAAC;IAED,qCAAY,GAAZ,UAAa,IAAmB;QAC5B,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,UAAC,CAAC,IAAK,YAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,EAApC,CAAoC,CAAC,CAAC;QAC1D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,qCAAY,GAAZ,UAAa,KAAK;QACd,IAAI,WAAW,GAAG,IAAI,KAAK,EAAU,CAAC,CAAC,uCAAuC;QAE9E,IAAI,KAAK,EAAE;YACP,IAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAChE,IAAM,UAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YACvB,IAAM,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC7B,IAAM,WAAS,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,gBAAgB;YACnD,IAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAE5C,qBAAqB;YACrB,IAAI,QAAQ,EAAE;gBACV,IAAM,KAAK,GAAG,QAAQ,CAAC,8BAA8B,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,IAAI,KAAK,UAAQ,EAAnB,CAAmB,CAAC,CAAC;gBACvF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;wBACrB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;qBACvC;iBACJ;qBAAM;oBACH,IAAM,EAAE,GAAG,QAAQ,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,WAAS,EAAzB,CAAyB,CAAC,CAAC;oBACnF,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;wBACf,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;qBACpC;iBACJ;aAEJ;;gBAAM,WAAW,GAAG,IAAI,CAAC;SAE7B;QAED,IAAI,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC;QAC/C,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,IAAI,WAAW,EAAE;YACb,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;oCACpC,EAAE;gBACP,IAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAb,CAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxE,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC/B,KAAK,CAAC,IAAI,CAAC;wBACP,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;wBACzC,KAAK,EAAE,EAAE;qBACZ,CAAC,CAAC;iBACN;;YAPL,KAAK,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;wBAAlC,EAAE;aAQV;SACJ;aAAM;YACH,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,qEAAqE,CAAC,CAAC;SAC7G;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAAA,CAAC;IAEF,8CAAqB,GAArB;QAEI,IAAI,CAAC,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;aACtD,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,aAAa,CAAC,EAApF,CAAoF,CAAC;aAChG,MAAM,CAAC,WAAC,IAAI,UAAG,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAtE,CAAsE,CAAC;aACnF,OAAO,CAAC,WAAC,IAAI,QAAC,EAAD,CAAC,CAAC;aACf,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,CAAC,EAAE,EAAE,qDAAqD;YAC3D,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;SAClB;QAED,OAAO,CAAC,CAAC;IACb,CAAC;IAEK,4CAAmB,GAAzB,UAA0B,KAA8B;;;;;gBAC9C,IAAI,GAAG,KAAK,EAAO,CAAC;gBAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAmC,CAAC;gBAEzD,KAAK,CAAC,OAAO,CAAC,WAAC;oBACX,IAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBACrE,IAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACtB,IAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpD,IAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;oBAC9F,IAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC/F,IAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;oBAE9F,IAAM,EAAE,GAAG;wBACP,EAAE,EAAE,CAAC,CAAC,MAAM;wBACZ,KAAK,EAAE,UAAG,CAAC,CAAC,kBAAkB,eAAK,IAAI,MAAG;wBAC1C,KAAK,EAAE,QAAQ;wBACf,GAAG,EAAE,MAAM;wBACX,SAAS,EAAE,CAAC,CAAC,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;4BAC5D,CAAC,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;gCAC7C,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;qBAC1D,CAAC;oBAEF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEd,IAAI,EAAE,GAAG,KAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC/B,IAAI,CAAC,EAAE,EAAE;wBACL,EAAE,GAAG,IAAI,KAAK,EAAoB,CAAC;wBACnC,KAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;qBAC7B;oBAED,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEf,CAAC,CAAC,CAAC;gBAEH,8CAA8C;gBAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAC;oBACpC,IAAM,EAAE,GAAG,KAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,aAAa,CAAC,oBAAoB,EAAE;wBACjF,IAAI,CAAC,IAAI,CAAC;4BACN,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;4BAChE,MAAM,EAAE,IAAI;4BACZ,SAAS,EAAE,uBAAuB;4BAClC,OAAO,EAAE,YAAY;yBACxB,CAAC,CAAC;qBACN;oBACD,yEAAyE;oBACzE,kBAAkB;oBAClB,4EAA4E;oBAC5E,wBAAwB;oBACxB,iDAAiD;oBACjD,gCAAgC;oBAChC,UAAU;oBACV,IAAI;gBACR,CAAC,CAAC,CAAC;gBAEH,sBAAO,IAAI,EAAC;;;KACf;IACL,qBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnXD;IAAA;IAQA,CAAC;IAAD,4BAAC;AAAD,CAAC;;AAED;IAAkD,gDAAqB;IAAvE;;IAIA,CAAC;IAAD,mCAAC;AAAD,CAAC,CAJiD,qBAAqB,GAItE;;AAED;IAOI;QACI,IAAI,CAAC,uBAAuB,GAAG,IAAI,KAAK,EAAyB,CAAC;QAClE,IAAI,CAAC,8BAA8B,GAAG,IAAI,KAAK,EAAgC,CAAC;IACpF,CAAC;IACL,yBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BD,wHAAwH;AACxH,IAAY,eAKX;AALD,WAAY,eAAe;IACvB,6DAAQ;IACR,6DAAQ;IACR,yEAAc;IACd,yEAAc,EAAC,wEAAwE;AAC3F,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED,IAAY,cAYX;AAZD,WAAY,cAAc;IACtB,qDAAS;IACT,4DAAa;IACb,mDAAS;IACT,qEAAkB;IAClB,uDAAW;IACX,6DAAc;IACd,qEAAkB;IAClB,2DAAa;IACb,+DAAe;IACf,uEAAmB;IACnB,wDAAY;AAChB,CAAC,EAZW,cAAc,KAAd,cAAc,QAYzB;AAED,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,oCAAqB;IACrB,oCAAqB;IACrB,kCAAmB;AACvB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAED,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC1B,qCAAe;IACf,yCAAmB;IACnB,2DAAqC;AACzC,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,QAI7B;AAED,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,sDAAkC;IAClC,kDAA8B;IAC9B,kDAA8B;IAC9B,8CAA0B;IAC1B,oDAAgC;IAChC,8CAA0B;AAC9B,CAAC,EAPW,gBAAgB,KAAhB,gBAAgB,QAO3B;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACpB,iCAAiB;IACjB,gDAAgC;AACpC,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAED,IAAY,4BAUX;AAVD,WAAY,4BAA4B;IACpC,6CAAa;IACb,0DAA0B;IAC1B,sDAAsB;IACtB,mDAAmB;IACnB,gEAAgC;IAChC,8DAA8B;IAC9B,qDAAqB;IACrB,wEAAwC;IACxC,qDAAqB;AACzB,CAAC,EAVW,4BAA4B,KAA5B,4BAA4B,QAUvC;AAED,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,uCAAsB;IACtB,gCAAe;AACnB,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB;AAED,IAAY,mBAQX;AARD,WAAY,mBAAmB;IAC3B,wCAAiB;IACjB,0CAAmB;IACnB,mDAA4B;IAC5B,sCAAe;IACf,2DAAoC;IACpC,8CAAuB;IACvB,wCAAiB;AACrB,CAAC,EARW,mBAAmB,KAAnB,mBAAmB,QAQ9B;AAED,IAAY,cASX;AATD,WAAY,cAAc;IACtB,iCAAe;IACf,mCAAiB;IACjB,mCAAiB;IACjB,iCAAe;IACf,iCAAe;IACf,8CAA4B;IAC5B,yCAAuB;IACvB,sDAAoC;AACxC,CAAC,EATW,cAAc,KAAd,cAAc,QASzB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAChB,yBAAa;IACb,2DAA2D;IAC3D,qCAAyB;AAC7B,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;AAED,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC5B,8CAAsB;IACtB,qDAA6B;AACjC,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,4CAAuB;IACvB,0CAAqB;IACrB,gDAA2B;AAC/B,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;;;;;;;;;;;;;;;;ACyDD,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,8BAAe;IACf,kCAAmB;IACnB,6CAA8B;IAC9B,oCAAqB;AACzB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB;;;;;;;;;;;;;;;;;;;;;;ACpK6B;AACA;AACuC;AACtB;AAEgE;AAI/G;IAAA;IA01BA,CAAC;IAx1BG,2CAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,QAAQ,GAAG,EAAE;iBACtC;aACJ;SACJ,CAAC;IACN,CAAC;IAED;OACG;IACH,0CAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,OAAoB,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC;IAC9C,CAAC;IAEO,iDAAgB,GAAxB,UAAyB,IAAW;QAChC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;YACzB,IAAI,EAAE,CAAC,KAAK,EAAE;gBACV,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,WAAC,IAAI,cAAO,CAAC,CAAC,eAAe,EAAxB,CAAwB,CAAC,CAAC;aACnD;QACL,CAAC,CAAC;IACN,CAAC;IAEO,sEAAqC,GAA7C,UAA8C,KAA2B,EAAE,SAAiB,EAAE,cAAsB;QAChH,IAAI,IAAI,GAAkB,IAAI,CAAC;QAC/B,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;YACjB,IAAM,EAAE,GAAkB,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;gBAC3E,IAAI,GAAG,EAAE,CAAC;gBACV,MAAM;aACT;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,yDAAwB,GAAhC,UAAiC,SAAqB,EAAE,cAAsB;QAC1E,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;QAC5C,IAAI,KAAK,GAAG,KAAK,CAAC;QAElB,YAAY,CAAC,OAAO,CAAC,cAAI;YACrB,IAAI,IAAI,CAAC,cAAc,KAAK,cAAc,EAAE;gBACxC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAG;oBACrB,KAAK,GAAG,KAAK,CAAC;oBACd,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAU;wBAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,CAAC;4BAC1D,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,UAAU,CAAC;4BAC5D,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC;4BACnD,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;4BACtD,KAAK,GAAG,IAAI,CAAC;yBAChB;oBAEL,CAAC,CAAC,CAAC;oBAEH,IAAI,KAAK,KAAK,KAAK,EAAE;wBACjB,cAAc,GAAG,IAAI,CAAC;qBACzB;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAG;oBACpB,KAAK,GAAG,KAAK,CAAC;oBACd,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAU;wBAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,CAAC;4BAC1D,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,CAAC,UAAU,CAAC;4BAC5D,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC;4BACnD,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE;4BACtD,KAAK,GAAG,IAAI,CAAC;yBAChB;oBAEL,CAAC,CAAC,CAAC;oBAEH,IAAI,KAAK,KAAK,KAAK,EAAE;wBACjB,cAAc,GAAG,IAAI,CAAC;qBACzB;gBACL,CAAC,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;IAC1B,CAAC;IAGD;;;;;OAKG;IACK,4CAAW,GAAnB,UAAoB,KAAiC,EAAE,cAAsB;QACzE,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,cAAI,IAAI,WAAI,CAAC,cAAc,KAAK,cAAc,EAAtC,CAAsC,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACK,oDAAmB,GAA3B,UAA4B,aAAmC,EAAE,MAAc;QAC3E,IAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,YAAE,IAAI,SAAE,CAAC,MAAM,KAAK,MAAM,EAApB,CAAoB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACxE,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACK,yCAAQ,GAAhB,UAAiB,IAAS,EAAE,GAAW;QACnC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;YAC3C,IAAM,MAAM,GAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAE,IAAI,SAAE,KAAK,GAAG,EAAV,CAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SACvD;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,4BAA4B;IACpB,sDAAqB,GAA7B,UAA8B,QAAsB,EAAE,IAAmB,EAAE,KAAa;QACpF,IAAI,MAAM,GAAkB;YACxB,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;SACnB,CAAC;QAEF,IAAI,aAAa,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAExD,IAAI,QAAQ,CAAC,IAAI,KAAK,gDAAY,CAAC,aAAa,EAAE;YAC9C,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC;gBACvB,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,EAAE;oBACtD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;oBAC3B,OAAO,KAAK,CAAC;iBAChB;YACL,CAAC,CAAC,CAAC;SACN;QAED,QAAQ,QAAQ,CAAC,gBAAgB,EAAE;YAC/B,KAAK,oDAAgB,CAAC,cAAc;gBAChC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC1F,MAAM;YACV,KAAK,oDAAgB,CAAC,eAAe;gBACjC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;gBACjE,MAAM;YACV,KAAK,oDAAgB,CAAC,YAAY;gBAC9B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACnD,MAAM;YACV,KAAK,oDAAgB,CAAC,aAAa;gBAC/B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBAC5E,MAAM;YACV,KAAK,oDAAgB,CAAC,UAAU;gBAC5B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC;gBAClD,MAAM;YACV;gBACI,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACpB,MAAM;SACb;QAED,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QACnD,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC;QAEvD,IAAI,KAAK,KAAK,IAAI;YACd,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC;QAE3C,IAAI,QAAQ,CAAC,gBAAgB,KAAK,oDAAgB,CAAC,aAAa,EAAE;YAC9D,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;YACnD,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC;SAC1D;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEc,mCAAY,GAA3B,UAA4B,IAA4B;QACpD,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;eACnE,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC9D,CAAC;IAEO,uDAAsB,GAA9B,UAA+B,QAAsB,EAAE,KAAa,EAAE,aAAmC;QAAzG,iBA2GC;QA1GG,IAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;QAC5C,IAAM,MAAM,GAAgB;YACxB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,CAAC;SACnB,CAAC;QAEF,IAAI,eAAe,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,IAAI,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACtC,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAG;YACzB,aAAa,CAAC,OAAO,CAAC,YAAE;gBACpB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAChE,CAAC,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC;oBAChE,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;uBAC9C,CAAC,CAAC,EAAE,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;uBACzE,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;uBAC7D,CAAC,KAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE;oBAC3D,eAAe,IAAI,EAAE,CAAC,KAAK,CAAC;iBAC/B;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACtD,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAClE,kBAAkB,GAAG,IAAI,CAAC;SAC7B;QAED,eAAe,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7F,aAAa,IAAI,eAAe,CAAC;QAEjC,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAkB,KAAK,IAAI,CAAC;YAC1F,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,sBAAsB,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YACzF,QAAQ,QAAQ,CAAC,gBAAgB,EAAE;gBAC/B,KAAK,oDAAgB,CAAC,cAAc;oBAChC,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC1C,MAAM;gBACV,KAAK,oDAAgB,CAAC,eAAe;oBACjC,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;oBACxD,MAAM;gBACV,KAAK,oDAAgB,CAAC,YAAY;oBAC9B,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC1C,MAAM;gBACV,KAAK,oDAAgB,CAAC,aAAa;oBAC/B,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;oBAC1D,MAAM;gBACV,KAAK,oDAAgB,CAAC,aAAa;oBAC/B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAClC,MAAM;gBACV,KAAK,oDAAgB,CAAC,UAAU;oBAC5B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAClC,MAAM;gBACV;oBACI,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACpB,MAAM;aACb;YAED,MAAM,CAAC,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC1C,IAAI,QAAQ,CAAC,gBAAgB,KAAK,oDAAgB,CAAC,eAAe,IAAI,eAAe,KAAK,CAAC,EAAE;gBACzF,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAC;aACtC;iBAAM,IAAI,QAAQ,CAAC,gBAAgB,KAAK,oDAAgB,CAAC,eAAe,EAAE;gBACvE,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAC;aACtC;SAEJ;QAED,qCAAqC;QACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkCG;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,8CAA8C;IACtC,mDAAkB,GAA1B,UAA2B,SAAqB;QAC5C,IAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;QACnC,IAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC;QAE5C,IAAI,CAAC,YAAY;YACb,OAAO,IAAI,KAAK,EAAgB,CAAC;QAErC,IAAM,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC;QAE9C,IAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM,CAAC,WAAC;YAC9C,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,CAAC,gCAAgC;YAC1E,IAAI,CAAC,CAAC,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAE3C,IAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;gBACtC,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;YAC7B,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAEO,iDAAgB,GAAxB,UAAyB,SAAqB;QAA9C,iBAyhBC;QAxhBG,IAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC;QACnC,IAAM,YAAY,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,KAAK,EAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;QAClG,IAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;QAE5C,IAAI,WAAW,CAAC,gBAAgB;YAAE,OAAO,CAAC,8CAA8C;QAExF,IAAI,aAAa,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;QAChF,IAAI,CAAC,aAAa;YACd,aAAa,GAAG,EAAE,CAAC;QAEvB,IAAM,eAAe,GAAG,IAAI,GAAG,EAAyB,CAAC,CAAC,+GAA+G;QAEzK,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;YAChC,EAAE,CAAC,KAAK,GAAG,IAAI,KAAK,EAAuB,CAAC;YAC5C,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC;YAEpB,IAAI,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC,OAAO,EAAE;gBAClC,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE;oBACrC,IAAM,QAAQ,GAAkB,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBAC7D,IAAI,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,eAAe,EAAE;wBACpC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;wBAC3C,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;wBACnD,MAAM;qBACT;iBACJ;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,6BAA6B;QAC7B,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;YAChC,IAAI,EAAE,CAAC,OAAO,EAAE;gBACZ,IAAI,EAAE,CAAC,kBAAkB,KAAK,sDAAkB,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC;oBACxE,EAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC;aACpC;QACL,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,YAAY;YACZ,YAAY,CAAC,OAAO,CAAC,YAAE,IAAI,SAAE,CAAC,gBAAgB,GAAG,IAAI,KAAK,EAAoB,EAAnD,CAAmD,CAAC,CAAC;QAEpF,4EAA4E;QAC5E,4FAA4F;QAC5F,2HAA2H;QAC3H,IAAM,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAEhE,WAAW,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa;aAChD,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,CAAC,sBAAsB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAA3E,CAA2E,CAAC,CAAC;QAE9F,IAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAE/B,iCAAiC;QACjC,IAAI,KAAK,GAAG,6EAAuB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,cAAc,GAAG,IAAI,KAAK,EAAe,CAAC;QAE9C,oBAAoB,CAAC,OAAO,CAAC,cAAI;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;gBAC7D,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;gBACjE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;gBACtG,CAAC,KAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC,EAAE;gBAC1H,IAAM,MAAM,GAAG,KAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;gBACnF,IAAI,MAAM,CAAC,QAAQ;oBACf,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACnC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,IAAI,KAAK,EAAsB,CAAC;QAC9C,cAAc,CAAC,OAAO,CAAC,YAAE;YACrB,IAAI,YAAY,GAAG,IAAI,CAAC;YACxB,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE;gBACnB,IAAM,CAAC,GAAuB,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,CAAC,cAAc,KAAK,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;oBAC7C,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC;oBAC1B,YAAY,GAAG,KAAK,CAAC;oBACrB,MAAM;iBACT;aACJ;YAED,IAAI,YAAY,EAAE;gBACd,OAAO,CAAC,IAAI,CACY;oBAChB,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc;oBACtC,QAAQ,EAAE,EAAE,CAAC,QAAQ;iBACxB,CAAC,CAAC;aACV;QACL,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,wDAAwD;QACxD,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;YAChC,IAAI,CAAC,EAAE,CAAC,KAAK;gBACT,EAAE,CAAC,KAAK,GAAG,IAAI,KAAK,EAAuB,CAAC;YAEhD,IAAI,WAAW,CAAC,QAAQ;gBACpB,WAAW,CAAC,QAAQ,CAAC,QAAQ;gBAC7B,WAAW,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC;gBACjC,GAAG,CAAC,aAAa,CAAC,wCAAwC,KAAK,IAAI,EAAE;gBACrE,IAAI,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAErD,IAAI,IAAI,GAAiB;oBACrB,gBAAgB,EAAE,oDAAgB,CAAC,eAAe;oBAClD,MAAM,EAAE,gBAAgB;iBAC3B,CAAC;gBAEF,IAAI,MAAM,GAAG,KAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACxD,IAAI,QAAQ,GAAwB;oBAChC,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,YAAY,EAAE,MAAM,CAAC,QAAQ;oBAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,cAAc,EAAE,IAAI;oBACpB,kBAAkB,EAAE,IAAI;iBAC3B,CAAC;gBAEF,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC3B;YAED,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE;gBACtC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,qBAAW;oBACpD,IAAI,CAAC,EAAE,CAAC,SAAS,KAAK,WAAW,CAAC,SAAS;wBACnC,CAAC,WAAW,CAAC,IAAI,KAAK,gDAAY,CAAC,MAAM;+BAClC,CAAC,WAAW,CAAC,IAAI,KAAK,gDAAY,CAAC,aAAa;gCAC/C,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK;gCAChC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC/C,CAAC,CAAC,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK,CAAC;4BAClD,CAAC,YAAY,KAAK,IAAI,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,CAAC;4BACrD,eAAe,KAAK,KAAK,CAAC,EAChC;wBAEE,eAAe,GAAG,IAAI,CAAC;wBAEvB,IAAI,WAAW,CAAC,KAAK,EAAE;4BACnB,YAAY,GAAG,IAAI,CAAC;yBACvB;6BAAM;4BACH,WAAW,GAAG,IAAI,CAAC;yBACtB;wBAED,IAAI,IAAI,GAAiB;4BACrB,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;4BAC9C,MAAM,EAAE,WAAW,CAAC,MAAM;yBAC7B,CAAC;wBAEF,IAAI,MAAM,GAAG,KAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;wBACxD,IAAI,QAAQ,GAAwB;4BAChC,aAAa,EAAE,MAAM,CAAC,aAAa;4BACnC,QAAQ,EAAE,IAAI;4BACd,aAAa,EAAE,MAAM,CAAC,aAAa;4BACnC,YAAY,EAAE,MAAM,CAAC,QAAQ;4BAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;4BACvC,cAAc,EAAE,IAAI;yBACvB,CAAC;wBAEF,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qBAC3B;gBACL,CAAC,CAAC,CAAC;aACN;YAED,IAAI,EAAE,CAAC,SAAS,IAAI,eAAe,KAAK,KAAK,EAAE;gBAC3C,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAM;oBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,gDAAY,CAAC,MAAM;2BACjC,CAAC,MAAM,CAAC,IAAI,KAAK,gDAAY,CAAC,aAAa;4BAC1C,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK;4BAC3B,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;wBAEnC,IAAI,IAAI,GAAiB;4BACrB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;4BACzC,MAAM,EAAE,MAAM,CAAC,MAAM;yBACxB,CAAC;wBAEF,IAAI,MAAM,GAAG,KAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;wBACxD,IAAI,QAAQ,GAAwB;4BAChC,aAAa,EAAE,MAAM,CAAC,aAAa;4BACnC,QAAQ,EAAE,IAAI;4BACd,aAAa,EAAE,MAAM,CAAC,aAAa;4BACnC,YAAY,EAAE,MAAM,CAAC,QAAQ;4BAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;4BACvC,cAAc,EAAE,IAAI;yBACvB,CAAC;wBAEF,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qBAC3B;gBACL,CAAC,CAAC,CAAC;aACN;QACL,CAAC,CAAC,CAAC;QAEH,iBAAiB;QACjB,4CAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC;aAChC,OAAO,CAAC,WAAC,IAAI,QAAC,CAAC,cAAc,EAAhB,CAAgB,CAAC;aAC9B,OAAO,CAAC,cAAI;YACT,IAAI,KAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;gBACpD,IAAI,CAAC,cAAc,KAAK,KAAK;gBAC7B,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE;gBAE/B,IAAI,eAAe,GAAG,CAAC,CAAC;gBACxB,IAAI,cAAc,GAAG,IAAI,KAAK,EAAU,CAAC;gBAEzC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAQ;oBAC1B,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;wBAChC,IAAM,YAAY,GAAG,sBAAsB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;wBAEnE,IAAI,EAAE,CAAC,OAAO;4BACV,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;gCAC1B,QAAQ,CAAC,SAAS;gCAClB,CAAC,QAAQ,CAAC,QAAQ,CAAC;gCACvB,CAAC,QAAQ,CAAC,SAAS;oCACf,QAAQ,CAAC,QAAQ;oCACjB,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC;gCACrG,CAAC,CAAC,EAAE,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC;oCAC3D,CAAC,QAAQ,CAAC,UAAU,CAAC;gCACzB,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gCAC5E,CAAC,KAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;4BACpE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;4BAC7D,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,EAAE;4BACnE,IAAI,IAAI,CAAC,IAAI,KAAK,gDAAY,CAAC,aAAa,EAAE;gCAC1C,IAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;gCACpD,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;oCACtD,eAAe,IAAI,EAAE,CAAC;oCACtB,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;iCACrC;6BAEJ;iCAAM;gCACH,eAAe,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;gCAC5D,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;6BACrC;yBACJ;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBAGH,IAAI,eAAe,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;oBAE3D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAU;wBAC3B,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAU;4BACxC,IAAI,UAAU,CAAC,OAAO;gCAClB,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;gCAC7D,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;gCACjE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS;oCACpC,UAAU,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;oCACjD,CAAC,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,QAAQ;wCACxC,UAAU,CAAC,QAAQ,KAAK,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;oCAC/E,CAAC,CAAC,UAAU,CAAC,UAAU,KAAK,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC;wCACvE,CAAC,UAAU,CAAC,UAAU,CAAC;oCAC3B,CAAC,CAAC,UAAU,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;oCAC1F,CAAC,KAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gCAChF,CAAC,IAAI,CAAC,IAAI,KAAK,gDAAY,CAAC,MAAM;uCAC3B,CAAC,IAAI,CAAC,IAAI,KAAK,gDAAY,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK;wCAC7E,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO;gCACjE,CAAC,CAAC,KAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;uHAC6B,CAAC,EAAE;gCAC1F,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACJ;oCACd,SAAS,EAAE,UAAU,CAAC,SAAS;oCAC/B,KAAK,EAAE,UAAU,CAAC,SAAS;iCAC9B,CAAC,CAAC;6BACV;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBAEH,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC3B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAQ;4BAC1B,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAU;gCACxC,IAAI,UAAU,CAAC,OAAO;oCAClB,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC;oCAC7D,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;oCACjE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;wCACnF,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC;wCACvF,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC;wCAC1D,CAAC,CAAC,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;wCAChG,CAAC,CAAC,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;wCACpF,CAAC,KAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oCAC5E,CAAC,IAAI,CAAC,IAAI,KAAK,gDAAY,CAAC,MAAM;2CAC3B,CAAC,IAAI,CAAC,IAAI,KAAK,gDAAY,CAAC,aAAa;4CACxC,QAAQ,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,IAAI,QAAQ,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;oCACxF,UAAU,CAAC,OAAO;oCAClB,CAAC,CAAC,KAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;oCACrD,6GAA6G;qCAChH,EAAE;oCAEH,IAAI,IAAI,CAAC,IAAI,KAAK,gDAAY,CAAC,aAAa,EAAE;wCAE1C,IAAI,QAAQ,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK;4CACrC,QAAQ,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE;4CACvC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;4CAC9B,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;4CAClD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACJ;gDACd,SAAS,EAAE,UAAU,CAAC,SAAS;gDAC/B,KAAK,EAAE,UAAU,CAAC,SAAS;6CAC9B,CAAC,CAAC;yCACV;qCACJ;yCAAM;wCAEH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CACJ;4CACd,SAAS,EAAE,UAAU,CAAC,SAAS;4CAC/B,KAAK,EAAE,UAAU,CAAC,SAAS;yCAC9B,CAAC,CAAC;qCACV;iCACJ;4BACL,CAAC,CAAC,CAAC;wBACP,CAAC,CAAC,CAAC;qBACN;oBAED,IAAI,aAAa,GAAG,CAAC,CAAC;oBAEtB,IAAI,KAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;wBACxE,aAAa,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;qBACxH;yBAAM;wBACH,aAAa,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAC9F,aAAa,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;qBAC5G;oBAED,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;yBACjC,OAAO,CAAC,WAAC,IAAI,QAAC,CAAC,KAAK,EAAP,CAAO,CAAC;yBACrB,OAAO,CAAC,yBAAe;wBACpB,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAU;4BACxC,IAAI,UAAU,CAAC,OAAO;gCAClB,UAAU,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS;gCAClD,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,IAAI,aAAa,KAAK,CAAC,CAAC,CAAC,EAAE;gCAEhE,IAAI,KAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;oCACzD,IAAI,SAAS,GAAG,KAAI,CAAC,qCAAqC,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;oCACjI,IAAI,SAAS,IAAI,IAAI,EAAE;wCACnB,IAAI,KAAK,GAAG,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;wCACrG,IAAI,MAAM,GAAG,KAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;wCAChE,IAAI,QAAQ,GACa;4CACjB,aAAa,EAAE,MAAM,CAAC,aAAa;4CACnC,QAAQ,EAAE,4CAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;4CACjC,aAAa,EAAE,MAAM,CAAC,aAAa;4CACnC,YAAY,EAAE,MAAM,CAAC,QAAQ;4CAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;4CACvC,cAAc,EAAE,IAAI,CAAC,cAAc;yCACtC,CAAC;wCACN,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wCAC/B,aAAa,IAAI,KAAK,CAAC;wCACvB,OAAO,KAAK,CAAC;qCAChB;yCAAM;wCACH,KAAK,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,EAAE;4CAC5B,IAAM,CAAC,GAAwB,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4CACnD,IAAI,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,EAAE;gDAE1C,IAAI,KAAK,GAAG,aAAa,GAAG,CAAC,CAAC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;oDAC9D,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,eAAe,CAAC;gDACzD,IAAI,MAAM,GAAG,KAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;gDACjE,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;gDAC3C,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;gDACvC,aAAa,IAAI,KAAK,CAAC;gDACvB,MAAM;6CACT;yCACJ;qCACJ;iCACJ;qCAAM;oCACH,IAAM,OAAK,GAAG,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;wCAC5C,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;wCAC9B,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;oCAC7B,IAAM,QAAM,GAAG,KAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAK,CAAC,CAAC;oCACnE,IAAM,UAAQ,GAAwB;wCAClC,aAAa,EAAE,QAAM,CAAC,aAAa;wCACnC,QAAQ,EAAE,4CAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;wCACjC,aAAa,EAAE,QAAM,CAAC,aAAa;wCACnC,YAAY,EAAE,QAAM,CAAC,QAAQ;wCAC7B,eAAe,EAAE,QAAM,CAAC,eAAe;wCACvC,cAAc,EAAE,IAAI,CAAC,cAAc;qCACtC,CAAC;oCAEF,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAQ,CAAC,CAAC;oCAChC,aAAa,IAAI,OAAK,CAAC;oCACvB,OAAO,KAAK,CAAC;iCAChB;6BACJ;wBACL,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;iBACV;aACJ;QACL,CAAC,CAAC,CAAC;QAEP,sBAAsB;QACtB,IAAM,UAAU,GAAG,IAAI,KAAK,EAAiB,CAAC;QAC9C,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;YAChC,IAAI,oBAAoB,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,IAAI,GAAG,4CAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAErC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,aAAa,GAAG,CAAC,EAAnB,CAAmB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,aAAa,GAAG,CAAC,EAAnB,CAAmB,CAAC,CAAC;aAC/C;;gBAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAC,IAAI,QAAC,CAAC,aAAa,EAAf,CAAe,CAAC,CAAC;YAE3D,IAAM,KAAK,GAAG,IAAI;gBACd,0CAA0C;gBAC1C,4FAA4F;gBAC5F,uEAAuE;gBACvE,qGAAqG;gBACrG,6BAA6B;iBAC5B,iBAAiB,CAAC,WAAC,IAAI,QAAC,CAAC,YAAY,EAAd,CAAc,CAAC;iBACtC,OAAO,EAAE,CAAC;YAEf,6EAA6E;YAE7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC/D,IAAI,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE5B,IAAI,YAAY,IAAI,EAAE,CAAC,OAAO,EAAE;oBAC5B,IAAI,YAAY,CAAC,eAAe,IAAI,YAAY,CAAC,eAAe,GAAG,EAAE,CAAC,KAAK,EAAE;wBACzE,IAAI,OAAO,GAAG,uDAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAEpC,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,eAAe,CAAC;wBAC7C,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;wBACxC,2GAA2G;wBAC3G,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;wBACnG,OAAO,CAAC,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;wBACjF,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC,EAAE,CAAC;wBAChC,OAAO,CAAC,sBAAsB,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,YAAY,CAAC,cAAc,CAAC;wBAC5E,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAEzF,EAAE,CAAC,KAAK,IAAI,YAAY,CAAC,eAAe,CAAC;wBACzC,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC;wBACzC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC;wBAE7B,oBAAoB,IAAI,YAAY,CAAC,eAAe,CAAC;wBAErD,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAC5B;yBAAM;wBAEH,sGAAsG;wBACtG,uHAAuH;wBACvH,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;wBACzF,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC1E,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;wBAC5E,oBAAoB,GAAG,CAAC,CAAC;qBAC5B;iBACJ;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,CAAC,YAAE;YACjB,IAAI,CAAC,CAAC,EAAE,CAAC,sBAAsB,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,sBAAsB,CAAC,EAAE;gBAC/E,IAAI,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC;gBAC3D,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC7B,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS;oBAC3E,EAAE,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;aACxD;YACD,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,uDAAuD;QACvD,IAAI,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC;YAC1F,GAAG,CAAC,aAAa,CAAC,wCAAwC,KAAK,IAAI,EAAE;YAErE,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;gBAChC,IAAM,kBAAkB,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC;gBAE/D,IAAI,EAAE,CAAC,OAAO,EAAE;oBACZ,yFAAyF;oBACzF,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,GAAG,kBAAkB,CAAC;oBACvE,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;oBAC/E,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC1E,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;iBACrE;YACL,CAAC,CAAC,CAAC;SACN;QAED,6BAA6B;QAC7B,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;YAChC,IAAI,EAAE,CAAC,OAAO,EAAE;gBACZ,IAAI,EAAE,CAAC,kBAAkB,KAAK,sDAAkB,CAAC,KAAK;oBAClD,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE;oBAClB,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAE7E,IAAI,EAAE,CAAC,YAAY,KAAK,CAAC,EAAE;wBACvB,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC;wBAC7B,4EAA4E;qBAC/E;;wBACG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC;iBACnC;qBAAM,IAAI,EAAE,CAAC,kBAAkB,KAAK,sDAAkB,CAAC,OAAO;oBAC3D,EAAE,CAAC,QAAQ,IAAI,CAAC,EAAE;oBAClB,IAAI,EAAE,CAAC,QAAQ,GAAG,GAAG;wBACjB,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC;oBAEtB,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,CAAC;oBAEnD,IAAI,EAAE,CAAC,YAAY,KAAK,CAAC,EAAE;wBACvB,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,SAAS,CAAC;wBAC7B,gCAAgC;qBACnC;;wBACG,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;iBACtF;gBAED,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC1E,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;aACrE;QACL,CAAC,CAAC,CAAC;QAEH,8CAA8C;QAC9C,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,YAAE;YAChC,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,eAAe,EAAE;gBAClC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE;oBACnB,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;iBACjF;qBAAM;oBACH,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;iBACtB;gBAED,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC7E;QACL,CAAC,CAAC,CAAC;QAEH,KAAK,GAAG,6EAAuB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5D,iDAAiD;QAEjD,4EAA4E;QAC5E,IAAM,iBAAiB,GAAG,4CAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,WAAC,IAAI,QAAC,CAAC,QAAQ,EAAV,CAAU,CAAC,CAAC,cAAc,EAAE,CAAC;QAEvG,IAAI,WAAW,CAAC,iBAAiB,KAAK,IAAI,IAAI,WAAW,CAAC,uBAAuB,KAAK,IAAI,EAAE;YACxF,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,QAAQ,GAAG,CAAC,EAAE;gBACrD,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC/H,WAAW,CAAC,iBAAiB,GAAG,KAAK,CAAC;aACzC;iBAAM;gBACH,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC;aAC5B;SACJ;QAED,IAAI,WAAW,CAAC,uBAAuB,KAAK,IAAI,IAAI,WAAW,CAAC,iBAAiB,KAAK,IAAI,EAAE;YACxF,WAAW,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAEtC,IAAI,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;YACpG,IAAI,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,6BAA6B,CAAC,KAAK,MAAM,CAAC;YAC9E,IAAI,CAAC,QAAQ,EAAE;gBACX,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAChF,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,GAAG;oBACxE,YAAY,CAAC,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;aACV;SACJ;IACL,CAAC;IACL,6BAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;AC51B0D;AAC5B;AAG/B;IAAA;IAyBA,CAAC;IAvBG,oCAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,KAAK,GAAG,EAAE;iBACnC;aACJ;SACJ,CAAC;IACN,CAAC;IAED,mCAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,iEAAiE;QACjE,IAAM,IAAI,GAAG,uCAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,8CAA8C;QACxF,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAE9B,IAAI,KAAK,EAAE;YACP,qDAAqD;YACrD,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACnD;QAED,OAAoB,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC;IAC9C,CAAC;IACL,sBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;ACnCwF;AAIrF;IAAA;IAgJA,CAAC;IA9IG,sCAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,OAAO,GAAG,EAAE;iBACrC;gBACmC;oBAChC,IAAI,EAAE,mDAAe,CAAC,cAAc;oBACpC,KAAK,EAAE,kDAAc,CAAC,OAAO,GAAG,EAAE;iBACrC;aACJ;SACJ,CAAC;IACN,CAAC;IAED,qCAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;YAC3F,IAAM,IAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC;gBACnB,IAAI,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ;oBACrD,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ;oBACrD,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,OAAO,EAAE;oBACtD,wDAAwD;oBACxD,0EAA0E;oBAC1E,+CAA+C;oBAC/C,IAAM,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7G,IAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;iBACpC;YACL,CAAC,CAAC,CAAC;YAEH,IAAM,KAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAE,CAAC,CAAC;YAC5C,4BAA4B;YAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAC;gBACnB,IAAI,KAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;oBACf,CAAC,CAAC,OAAO,GAAG,KAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC7B;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACvD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;SACvD;QAED,OAAoB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED;;;;;;;;;MASE;IACM,4CAAgB,GAAxB,UAAyB,IAAW,EAAE,OAA4B;QAC9D,IAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEtC,IAAI,GAAG,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI;YAAE,OAAO,GAAG,CAAC;QAEzD,IAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEzC,2DAA2D;QAC3D,gEAAgE;QAChE,qBAAqB;QACrB,mDAAmD;QACnD,8DAA8D;QAC9D,6BAA6B;QAC7B,uBAAuB;QAEvB,kDAAkD;QAClD,iCAAiC;QACjC,mCAAmC;QAEnC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,8BAA8B;QAC9B,+BAA+B;QAC/B,aAAa,CAAC,OAAO,CAAC,YAAE;YACpB,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC;gBAAE,OAAO,IAAI,EAAE,CAAC,WAAW,CAAC;iBAC7C,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC;gBAAE,SAAS,IAAI,EAAE,CAAC,WAAW,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,6EAA6E;QAC7E,aAAa,CAAC,OAAO,CAAC,YAAE;YACpB,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC;gBAClC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,yBAAyB;iBACnH,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,IAAI,SAAS,IAAI,CAAC;gBACzC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,yBAAyB;;gBACrH,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,aAAa,CAAC,OAAO,CAAC,YAAE;YACpB,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC;gBAAE,cAAc,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;iBAC9D,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE;gBACzB,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;aACjD;QACL,CAAC,CAAC,CAAC;QAEH,IAAM,QAAQ,GAAG,iBAAiB,GAAG,CAAC,IAAI,cAAc,KAAK,CAAC,CAAC;QAE/D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAC;YAEhC,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,IAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAE7B,0EAA0E;YAC1E,yDAAyD;YACzD,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAEzC,uBAAuB;gBACvB,aAAa,CAAC,OAAO,CAAC,YAAE;oBACpB,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE,UAAU;wBAC9B,iBAAiB,IAAI,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;yBACvF,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE,kHAAkH;wBAC3I,iBAAiB,IAAI,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC;gBACtF,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,oCAAoC;gBACpC,uBAAuB;gBACvB,aAAa,CAAC,OAAO,CAAC,YAAE;oBACpB,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE,UAAU;wBAC9B,iBAAiB,IAAI,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC;yBAC1E,IAAI,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE,YAAY;wBACrC,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjH,CAAC,CAAC,CAAC;aACN;YAED,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,OAAO,CAAC,YAAE,IAAI,cAAO,EAAE,CAAC,YAAY,EAAtB,CAAsB,CAAC,CAAC;QAEpD,OAAO,GAAG,CAAC;IACf,CAAC;IAAA,CAAC;IAEN,wBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;ACrJyB;AACuC;AAIoB;AACvB;AAG9D;IAAA;IA2HA,CAAC;IAzHG,2CAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,KAAK,GAAG,EAAE;iBACnC;aACJ;SACJ,CAAC;IACN,CAAC;IAED,uDAAsB,GAAtB,UAAuB,CAAQ,EAAE,EAAiB;QAC9C,IAAM,IAAI,GAAS,CAAC,CAAC;QACrB,IAAM,CAAC,GAAiB,EAAE,CAAC;QAE3B,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,oBAAoB,KAAK,IAAI;YACpD,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ,CAAC,SAAS;YACvB,CAAC,CAAC,QAAQ,KAAK,4CAAQ,CAAC,UAAU;YAClC,CAAC,CAAC,WAAW,KAAK,oDAAW,CAAC,QAAQ;YACtC,EAAE,CAAC,kBAAkB,KAAK,sDAAkB,CAAC,gBAAgB,EAC/D;YACE,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACpE,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE;gBACzB,IAAI,KAAK,GAAQ,CAAC,CAAC;gBACnB,0EAA0E;gBAC1E,IAAI,CAAC,CAAC,SAAS;oBACX,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAEpC,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,GAAG;oBAAE,GAAG,GAAG,CAAC,CAAC;gBAElB,OAAO,GAAG,CAAC;aACd;SACJ;QAED,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACH,0CAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAAlE,iBA8DC;QA7DG,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,aAAa;YACnB,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,EAAiB,CAAC;QAEpD,IAAI,SAAS,CAAC,aAAa,EAAE;YACzB,IAAI,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE;gBACvC,IAAM,KAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,WAAC,IAAI,QAAC,EAAD,CAAC,EAAE,WAAC,IAAI,WAAI,EAAJ,CAAI,CAAC,CAAC;gBAEnG,IAAI,CAAC,aAAa;oBACd,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,WAAC,IAAI,QAAC,KAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAnB,CAAmB,CAAC,CAAC,OAAO,EAAE,CAAC;aACrF;YAED,IAAI,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE;gBACpC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,WAAC;oBACxC,IAAM,IAAI,GAAG,6EAAuB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;oBAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;aACN;SACJ;QAED,IAAM,CAAC,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC3C,IAAM,UAAU,GAAG,SAAS,CAAC,UAAU,KAAK,IAAI,CAAC;QAEjD,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aAC9B,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,OAAO,KAAK,KAAK,EAAnB,CAAmB,CAAC,CAAC,qCAAqC;aACrE,OAAO,CAAC,WAAC;YACN,mBAAmB;YACnB,IAAM,KAAK,GAAG,KAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,UAAU,EAAE;gBACZ,IAAM,SAAS,GAAG,6EAAuB,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAEhE,IAAI,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE;oBAClD,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;oBAClC,CAAC,CAAC,4BAA4B,GAAG,SAAS,CAAC,4BAA4B,CAAC;oBACxE,CAAC,CAAC,4BAA4B,GAAG,SAAS,CAAC,4BAA4B,CAAC;iBAC3E;aACJ;YACD,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,mDAAmD;YAC/E,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC;YACrB,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;YACnB,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB;YAC1F,6FAA6F;YAC7F,iCAAiC;YACjC,IAAM,GAAG,GAAG,KAAI,CAAC,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAEjI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACZ,IAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvB,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;gBACrB,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC;gBACjC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,4BAA4B;aAClG;iBAAM;gBACH,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACjB;QACL,CAAC,CAAC,CAAC;QAEP,uBAAuB;QACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,OAAO,KAAK,IAAI,EAAlB,CAAkB,CAAC,CAAC,CAAC;QAEvG,OAAoB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,gDAAe,GAAf,UAAgB,IAAmB,EAAE,QAAkB;QACnD,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,IAAI,GAAG,GAAG,eAAQ,IAAI,CAAC,SAAS,kBAAQ,IAAI,CAAC,YAAY,UAAO,CAAC;QAEjE,IAAG,QAAQ,KAAK,SAAS,EACzB;YACI,GAAG,IAAI,QAAQ,CAAC;SACnB;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,oDAAW,CAAC,QAAQ;YAAE,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,0BAA0B;QAElG,OAAO,GAAG,CAAC;IACf,CAAC;IACL,6BAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;ACpIL,gCAAgC;AACqC;AAEmB;AAOpF;IAAA;IAoKA,CAAC;IAlKG,kDAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,cAAc;oBACpC,KAAK,EAAE,kDAAc,CAAC,KAAK,GAAG,EAAE;iBACnC;aACJ;SACJ,CAAC;IACN,CAAC;IAED,iDAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,sBAAsB,GAAG,6EAAuB,CAAC,sBAAsB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACtG,IAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QACxC,IAAM,aAAa,GAAG,6EAAuB,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAE/E,qEAAqE;QACrE,IAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtE,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;QAEpC,6DAA6D;QAC7D,sBAAsB;QACtB,IAAI,sBAAsB,KAAK,IAAI,EAAE;YACjC,uBAAuB;YACvB,8BAA8B;YAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;SACpD;QAED,wDAAwD;QACxD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAEpC,wCAAwC;QACxC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpD,IAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAC,IAAI,WAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAjB,CAAiB,CAAC,CAAC;QAEnD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEpC,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAE;gBACvB,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;gBACvB,IAAI,SAAS,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,IAAI,SAAS,CAAC,YAAY,CAAC,aAAa,IAAI,IAAI,EAAE;oBAC5F,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;oBACvB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;iBACpB;qBACI;oBACD,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC;oBAClB,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxC;gBAED,4DAA4D;gBAC5D,IAAI,UAAU,KAAK,qDAAiB,CAAC,UAAU,EAAE;oBAC7C,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAE5B,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC;oBAC/C,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC;oBACjD,EAAE,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,GAAG,aAAa,CAAC;iBAC1D;gBAED,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI;oBAClD,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,8DAA8D;YAC/F,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QAEnB,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAE9E,OAAoB;YAChB,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,WAAW;SAC3B,CAAC;IACN,CAAC;IAED,wDAAgB,GAAhB,UAAiB,IAAW;QACxB,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/B,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;OAGG;IACK,oDAAY,GAApB,UAAqB,SAAqB;QAA1C,iBA2BC;QA1BG,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QAE1C,IAAM,aAAa,GAAG,6EAAuB,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAE/E,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa;YAC3D,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,cAAI;gBAC3B,WAAW,CAAC,OAAO,CAAC,iBAAO;oBACvB,IAAI,OAAO,CAAC,KAAK,EAAE;wBACf,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAO;4BACzB,6DAA6D;4BAC7D,iGAAiG;4BAEjG,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE;gCACtB,kBAAkB;gCAClB,IAAI,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE;oCACxE,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC;oCAC/B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;iCACxB;6BACJ;wBACL,CAAC,CAAC,CAAC;qBACN;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAEO,2DAAmB,GAA3B,UAA4B,SAAqB;QAAjD,iBAgBC;QAfG,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;QACjD,IAAM,aAAa,GAAG,CAAC,CAAC,4DAA2D;QAEnF,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YACnD,YAAY,IAAI,YAAY,CAAC,KAAK,EAAE;YACpC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,cAAI;gBAC3B,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAO;oBAC9B,kBAAkB;oBAClB,IAAI,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE;wBACxE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,QAAO;qBACjE;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAEO,sDAAc,GAAtB,UAAuB,IAAmB,EAAE,OAAoB,EAAE,cAAuB,EAAE,aAAqB;QAC5G,kBAAkB;QAClB,kGAAkG;QAClG,oDAAoD;QACpD,oFAAoF;QACpF,2FAA2F;QAC3F,IAAM,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,GAAG,aAAa,EAAE,CAAC,CAAC;YAClF,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEzD,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,aAAa;YACvD,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,4CAAQ,CAAC,IAAI;gBAC7B,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;gBACzD,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS;gBACpC,OAAO,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;gBACrF,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;;oBAEnE,CAAC,IAAI,CAAC,QAAQ,KAAK,4CAAQ,CAAC,UAAU;wBAClC,OAAO,CAAC,SAAS,IAAI,KAAK;wBAC1B,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EACrC;YACE,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IACL,oCAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;AC9KgE;AAEV;AAOvD;IAAA;IAkDA,CAAC;IAhDG,mDAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,cAAc;oBACpC,KAAK,EAAE,kDAAc,CAAC,YAAY,GAAG,EAAE;iBAC1C;aACJ;SACJ,CAAC;IACN,CAAC;IAED,kDAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAE;YACvB,IAAI,UAAU,GAAkB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,iFAAiF;YAEjF,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YACjC,sEAAsE;YACtE,2EAA2E;YAC3E,wDAAwD;YACxD,+DAA+D;YAC/D,qEAAqE;YACrE,iJAAiJ;YACjJ,iEAAiE;YACjE,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC;YACvD,UAAU,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,6EAAuB,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;YAC1H,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,oCAAoC;YACjG,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;YAC/C,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;YACpC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;YACvC,UAAU,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;YACtC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;YAC3B,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAErB,4BAA4B;YAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,YAAE,IAAI,SAAE,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,EAAvB,CAAuB,CAAC,CAAC;YAE9E,IAAI,EAAE,CAAC,MAAM,KAAK,IAAI,EAAE;gBACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACvC;QACL,CAAC,CAAC,CAAC;QAEH,OAAoB;YAChB,aAAa,EAAE,IAAI;SACtB,CAAC;IACN,CAAC;IACL,qCAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;AC3DyB;AACuC;AAChB;AAG+E;AAGhI;IAAA;IA+bA,CAAC;IA7bG,2CAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,cAAc;oBACpC,KAAK,EAAE,kDAAc,CAAC,YAAY,GAAG,EAAE;iBAC1C;aACJ;SACJ,CAAC;IACN,CAAC;IAED,0CAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,iEAAiE;QACjE,IAAM,IAAI,GAAS,SAAS,CAAC,IAAI,CAAC;QAClC,IAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,CAAC;QAEtD,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAE/B,+GAA+G;QAC/G,IAAI,KAAK,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aAC1C,MAAM,CAAC,WAAC,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAAlD,CAAkD,CAAC;aAC/D,GAAG,EAAE,CAAC;QAEX,IAAI,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAoB,KAAK,wDAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACtB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;;YAEzC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;iBAC1C,GAAG,CAAC,YAAE,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,6EAAuB,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC,EAA/F,CAA+F,CAAC,CAAC;YAEhH,KAAK,IAAI,CAAC,GAAG,CAAC;SACjB;QAED,IAAM,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAO,iEAAc,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE9G,gDAAgD;QAChD,8BAA8B;QAC9B,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,gBAAgB,KAAK,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,gBAAgB,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7M,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,8BAA8B,CAAC,SAAS,CAAC,CAAC;SAClD;QAED,IAAM,eAAe,GAAG,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAChG,iCAAiC;QACjC,iBAAiB,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAErD,IAAI,UAAU,IAAI,SAAS,CAAC,UAAU,IAAI,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,KAAK,CAAC,EAAE;YAEhG,qCAAqC;YACrC,KAAK,IAAI,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;SACpE;aAAM;YACH,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;SACzB;QAED,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAE5B,IAAI,SAAS,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YAEnD,6BAA6B;YAE7B,IAAI,SAAS,CAAC,WAAW,IAAI,KAAK,EAAE;gBAChC,2CAA2C;gBAC3C,IAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;gBAElD,IAAI,KAAK,IAAI,cAAc,EAAE;oBACzB,KAAK,GAAG,cAAc,CAAC;iBAC1B;aACJ;iBACI;gBACD,IAAI,iBAAiB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;gBAC1F,IAAI,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,KAAK,CAAC,EAAE;oBAC1D,iBAAiB,IAAI,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;oBAC7E,iBAAiB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;iBACzE;gBAED,KAAK,IAAI,iBAAiB,CAAC;aAC9B;SACJ;QAED,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAChC,IAAI,SAAS,CAAC,YAAY,CAAC,aAAa,KAAK,IAAI,EAAE;gBAC/C,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,6EAAuB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;gBACjF,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;aACtD;;gBAEG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,6EAAuB,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;SAC3G;;YACG,UAAU,GAAG,KAAK,CAAC;QAEvB,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAExD,IAAM,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,IAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzF,IAAM,iBAAiB,GAAG,UAAU,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,6EAAuB,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3J,IAAI,0BAA0B,GAAG,KAAK,GAAG,iBAAiB,CAAC;QAE3D,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;YACvF,2DAA2D;YAC3D,IAAI,iBAAiB,IAAI,CAAC,IAAI,UAAU,GAAG,iBAAiB;gBACxD,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;YACrG,4FAA4F;iBACvF,IAAI,iBAAiB,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,iBAAiB;gBAC7D,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;YAE5F,uEAAuE;YACvE,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,iBAAiB,CAAC;gBACtF,iBAAiB,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,UAAU,CAAC;YACvE,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,mBAAmB,CAAC;gBACxF,iBAAiB,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,UAAU,CAAC;SAC5E;aACI;YACD,iBAAiB,CAAC,mBAAmB,IAAI,kBAAkB,CAAC;YAC5D,IAAI,iBAAiB,CAAC,mBAAmB,GAAG,CAAC;gBAAE,iBAAiB,CAAC,mBAAmB,GAAG,CAAC,CAAC;YACzF,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;SAC9F;QAED,IAAI,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAEhG,iBAAiB,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5F,iBAAiB,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACxG,iBAAiB,CAAC,iBAAiB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC1G,iBAAiB,CAAC,mBAAmB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAE9G,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAEvC,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,WAAC,IAAI,QAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAvE,CAAuE,CAAC,CAAC;QACvH,IAAM,GAAG,GAA2B,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAChG,GAAG,CAAC,OAAO,CAAC,WAAC,IAAI,QAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAvE,CAAuE,CAAC,CAAC;QAE1F,OAAoB;YAChB,aAAa,EAAE,IAAI;SACtB,CAAC;IACN,CAAC;IAEO,kDAAiB,GAAzB,UAA0B,SAAqB,EAAE,UAAyB;QAA1E,iBAeC;QAfgD,8CAAyB;QACtE,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,SAAS,CAAC,gBAAgB,KAAK,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE;YACtE,kCAAkC;YAClC,IAAI,CAAC,UAAU,EAAE;gBACb,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;qBACzC,GAAG,CAAC,WAAC,IAAI,YAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAjC,CAAiC,CAAC,CAAC;aACpD;iBAAM;gBACH,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;qBACzC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,UAAU,EAA1B,CAA0B,CAAC;qBACtC,GAAG,CAAC,WAAC,IAAI,YAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAjC,CAAiC,CAAC,CAAC;aACpD;SACJ;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAEO,+DAA8B,GAAtC,UAAuC,SAAqB;QACxD,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;QAC9B,SAAS,CAAC,uBAAuB,GAAG,CAAC,CAAC;QAEtC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE;YAC7B,IAAM,OAAO,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACzD,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;YAErF,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,IAAI,SAAS,CAAC,UAAU;oBACpB,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC;;oBAEhC,SAAS,CAAC,cAAc,GAAG,KAAK,CAAC;gBAErC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;gBAC7B,OAAO,CAAC,OAAO,CAAC,aAAG;oBAEf,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,QAAQ,GAAG,CAAC,EAAd,CAAc,CAAC,CAAC,MAAM,GAAG,CAAC;wBAChD,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;oBAEjC,SAAS,CAAC,uBAAuB,IAAI,4CAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;yBAC7D,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,EAArD,CAAqD,CAAC;yBACjE,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,CAAC;oBAExB,0CAA0C;oBAC1C,iEAAiE;oBACjE,+CAA+C;oBAC/C,6EAA6E;gBACjF,CAAC,CAAC,CAAC;aACN;SACJ;IAEL,CAAC;IAED;;OAEG;IACK,6CAAY,GAApB,UAAqB,iBAAqC,EAAE,KAAa,EAAE,gBAAwB,EAAE,KAAa;QAC9G,IAAI,KAAK,GAAG,CAAC,IAAI,iBAAiB,CAAC,mBAAmB,GAAG,CAAC,EAAE,EAAE,kDAAkD;YAC5G,KAAK,IAAI,iBAAiB,CAAC,mBAAmB,CAAC;SAClD;QAED,iBAAiB,CAAC,UAAU,GAAG,KAAK,GAAG,gBAAgB,CAAC;QACxD,IAAI,iBAAiB,CAAC,UAAU,GAAG,CAAC;YAChC,iBAAiB,CAAC,UAAU,GAAG,CAAC,CAAC;QAErC,iBAAiB,CAAC,iBAAiB,GAAG,KAAK,GAAG,gBAAgB,CAAC;QAC/D,IAAI,iBAAiB,CAAC,iBAAiB,GAAG,CAAC;YACvC,iBAAiB,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC5C,+EAA+E;QAC/E,iEAAiE;QAEjE,IAAI,iBAAiB,CAAC,UAAU,GAAG,KAAK;YAAE,iBAAiB,CAAC,UAAU,GAAG,KAAK,CAAC;QAC/E,IAAI,iBAAiB,CAAC,iBAAiB,GAAG,KAAK;YAAE,iBAAiB,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC7F,IAAI,iBAAiB,CAAC,mBAAmB,GAAG,KAAK;YAAE,iBAAiB,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjG,IAAI,iBAAiB,CAAC,gBAAgB,GAAG,KAAK;YAAE,iBAAiB,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAE3F,MAAM,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,WAAC;YAChE,IAAM,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,WAAC;YACtC,QAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB;QAA5E,CAA4E,CAAC,CAAC;QAElF,eAAe;QACf,iBAAiB,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5F,iBAAiB,CAAC,iBAAiB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC1G,iBAAiB,CAAC,mBAAmB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAC9G,iBAAiB,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAExG,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,WAAC;YACtC,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,qDAAoB,GAA5B,UAA6B,iBAAqC,EAAE,WAAyB,EAAE,eAAgC,EAAE,UAAyB;QAA1J,iBAuHC;QAvHgI,8CAAyB;QACtJ,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAM,KAAK,GAAuB,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACvF,6EAAuB,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;QAEnE,iEAAiE;QACjE,uDAAuD;QACvD,kEAAkE;QAClE,IAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;QAEhD,KAAK,CAAC,OAAO,CAAC,YAAE;YACZ,IAAI,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;YACvB,IAAI,GAAG,CAAC,OAAO,CAAC,gEAA4B,CAAC,iBAAiB,CAAC,KAAK,CAAC;gBACjE,GAAG,GAAG,gEAA4B,CAAC,iBAAiB,CAAC;YAEzD,QAAQ,GAAG,EAAE;gBACT,KAAK,gEAA4B,CAAC,OAAO;oBACrC,iBAAiB,CAAC,mBAAmB,IAAI,EAAE,CAAC,MAAM,CAAC;oBACnD,IAAI,UAAU,IAAI,IAAI,IAAI,iBAAiB,CAAC,mBAAmB,GAAG,UAAU;wBACxE,iBAAiB,CAAC,mBAAmB,GAAG,UAAU,CAAC;oBACvD,MAAM;gBACV,KAAK,gEAA4B,CAAC,QAAQ,CAAC;gBAC3C,KAAK,gEAA4B,CAAC,iBAAiB,CAAC;gBACpD,KAAK,gEAA4B,CAAC,IAAI;oBAClC,iBAAiB,CAAC,UAAU,IAAI,EAAE,CAAC,MAAM,CAAC;oBAC1C,IAAI,UAAU,IAAI,IAAI,IAAI,iBAAiB,CAAC,UAAU,GAAG,UAAU;wBAC/D,iBAAiB,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC9C,MAAM;gBACV,KAAK,gEAA4B,CAAC,YAAY;oBAC1C,iBAAiB,CAAC,iBAAiB,IAAI,EAAE,CAAC,MAAM,CAAC;oBACjD,IAAI,UAAU,IAAI,IAAI,IAAI,iBAAiB,CAAC,iBAAiB,GAAG,UAAU;wBACtE,iBAAiB,CAAC,iBAAiB,GAAG,UAAU,CAAC;oBACrD,MAAM;gBACV,KAAK,gEAA4B,CAAC,UAAU;oBACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;oBACzC,IAAM,QAAQ,GAAG,KAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;oBACpD,iBAAiB,CAAC,gBAAgB,IAAI,QAAQ,CAAC;oBAC/C,IAAI,UAAU,IAAI,IAAI,IAAI,iBAAiB,CAAC,gBAAgB,GAAG,UAAU;wBACrE,iBAAiB,CAAC,gBAAgB,GAAG,UAAU,CAAC;oBACpD,iBAAiB,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;oBAExG,GAAG,CAAC,cAAc,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,EACjH,QAAQ,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC;oBAEtC,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,eAAe,KAAK,IAAI,EAAE;wBACvD,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC;6BACxG,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;wBAC9B,EAAE,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;qBACnC;oBAED,MAAM;gBAEV;oBACI,IAAI,CAAC,6EAAuB,CAAC,qBAAqB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;wBAE9D,IAAI,EAAE,CAAC,kBAAkB,KAAK,mBAAmB;4BAC7C,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,gEAA4B,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;4BAC5E,EAAE,CAAC,kBAAkB,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,gEAA4B,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;yBACtG;wBAED,IAAI,GAAG,GAAG,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAd,CAAc,CAAC,CAAC;wBACvE,IAAI,EAAE,GAAsB,IAAI,CAAC;wBAEjC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;4BAClB,2CAA2C;4BAC3C,EAAE,GAAsB;gCACpB,SAAS,EAAE,EAAE,CAAC,SAAS;gCACvB,iBAAiB,EAAE,EAAE,CAAC,eAAe;gCACrC,gBAAgB,EAAE,CAAC;gCACnB,MAAM,EAAE,CAAC;gCACT,EAAE,EAAE,EAAE,CAAC,EAAE;6BACZ,CAAC;4BAEF,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC,eAAe,KAAK,IAAI,EAAE;gCACvD,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;gCAC5B,EAAE,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;6BACnC;4BAED,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;yBAE7C;6BAAM;4BACH,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;4BACZ,IAAI,EAAE,CAAC,SAAS;gCACZ,EAAE,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;4BACpC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;yBACjB;wBAED,EAAE,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,KAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC5F;oBACD,MAAM;aACb;QACL,CAAC,CAAC,CAAC;QAEH,eAAe,CAAC,OAAO,CAAC,YAAE;YACtB,IAAI,CAAC,6EAAuB,CAAC,qBAAqB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;gBAE9D,IAAI,EAAE,CAAC,kBAAkB,KAAK,mBAAmB;oBAC7C,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,gEAA4B,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;oBAC5E,EAAE,CAAC,kBAAkB,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,gEAA4B,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;iBACtG;gBAED,IAAM,EAAE,GAAG,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,EAAE,CAAC,SAAS,EAA5B,CAA4B,CAAC,CAAC;gBACtF,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;oBACf,IAAM,QAAQ,GAAG,KAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;oBACpD,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,IAAI,QAAQ,CAAC;oBACnC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;iBACnF;aACJ;iBAAM,IAAI,EAAE,CAAC,SAAS,KAAK,gEAA4B,CAAC,UAAU,EAAE;gBACjE,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,uBAAuB,CAAC,EAAE;oBAC1C,IAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC;oBAErD,IAAM,QAAQ,GAAG,KAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,cAAc,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,YAAY,EACjE,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;iBACnE;aACJ;QACL,CAAC,CAAC,CAAC;IAEP,CAAC;IAEO,0DAAyB,GAAjC,UAAkC,OAA+B;QAC7D,IAAI,CAAC,OAAO,CAAC,SAAS;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC;QAC9C,OAAO,OAAO,CAAC,MAAM;YACjB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBACvB,OAAO,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;gBACjD,OAAO,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACtD,CAAC;IAEO,uDAAsB,GAA9B,UAA+B,UAAgB;QAC3C,IAAI,UAAU,EAAE;YAEZ,IAAI,aAAa,GAAG,KAAK,CAAC;YAC1B,IAAI,OAAO,UAAU,CAAC,aAAa,KAAK,WAAW,EAAE;gBACjD,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;aAC5C;YAED,IAAI,MAAM,GAAG,aAAa;gBACtB,CAAC,UAAU,CAAC,MAAM,KAAK,uDAAmB,CAAC,WAAW;oBAClD,UAAU,CAAC,MAAM,KAAK,uDAAmB,CAAC,eAAe;oBACzD,UAAU,CAAC,MAAM,KAAK,uDAAmB,CAAC,SAAS;oBACnD,UAAU,CAAC,MAAM,KAAK,uDAAmB,CAAC,KAAK;oBAC/C,UAAU,CAAC,MAAM,KAAK,uDAAmB,CAAC,MAAM,CAAC,CAAC;YAE1D,OAAO,MAAM,CAAC;SACjB;aACI;YACD,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEO,+CAAc,GAAtB,UAAuB,CAAsC,EAAE,WAAyB,EACpF,aAAqB,EAAE,qBAA6B;QACpD,IAAI,GAAG,GAAgB,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,GAAG,GAAgB,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE5D,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QACpG,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAChG,IAAI,EAAE,GAAG,CAAC;YAAE,EAAE,GAAG,CAAC,CAAC;QACnB,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxC,yGAAyG;QACzG,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,EAAE,GAAG,CAAC;YACN,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;QAE7C,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,GAAG,CAAC,EAAE;YACtG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;gBACxF,KAAK,GAAG,cAAc,GAAG,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,CAAC;YAEzE,CAAC,CAAC,SAAS,CAAC,sBAAsB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;YACzH,CAAC,CAAC,SAAS,CAAC,eAAe,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YAC3G,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACtF;aAAM;YACH,CAAC,CAAC,SAAS,CAAC,sBAAsB,GAAG,CAAC,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;YAChC,CAAC,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;SACvB;QAED,CAAC,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;QAC/B,CAAC,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,kHAAkH;IAClH,UAAU;IACF,uDAAsB,GAA9B,UAA+B,SAAqB;QAApD,iBAwBC;QAvBG,IAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/C,IAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,CAAC;QACtD,iBAAiB,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAE3C,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,GAAG,CAAC,cAAc,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAErD,IAAM,qBAAqB,GAAG,WAAW,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;QAC5H,IAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,iCAAgC;QAEhF,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,WAAC;YACtC,IAAI,CAAC,CAAC,SAAS,EAAE;gBACb,KAAI,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;aAC7E;QACL,CAAC,CAAC,CAAC;QAEH,IAAM,GAAG,GAA2B,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAChG,GAAG,CAAC,OAAO,CAAC,WAAC;YACT,IAAI,CAAC,CAAC,SAAS,EAAE;gBACb,KAAI,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;aAC7E;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEL,6BAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;ACvcgE;AAEV;AAGvD;IAAA;IAuEA,CAAC;IArEG,kDAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,cAAc;oBACpC,KAAK,EAAE,kDAAc,CAAC,QAAQ,GAAG,EAAE;iBACtC;aACJ;SACJ,CAAC;IACN,CAAC;IAED,iDAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,iEAAiE;QACjE,IAAM,IAAI,GAAS,SAAS,CAAC,IAAI,CAAC;QAClC,IAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QAE1C,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAEjC,IAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;QACxC,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEnC,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,OAAO,CAAC,YAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;oBACzB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC7B,IAAI,EAAE,CAAC,eAAe,KAAK,IAAI,EAAE;wBAC7B,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,eAAe,CAAC;wBAC7C,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,GAAG,CAAC;qBACvC;yBACI;wBACD,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,eAAe,CAAC;qBACrD;iBACJ;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,WAAW,EAAE;YACb,WAAW,CAAC,OAAO,CAAC,aAAG;gBACnB,IAAI,GAAG,CAAC,UAAU;oBACd,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,YAAE;wBACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;4BACzB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;4BAC7B,6EAAuB,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;4BAClE,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,KAAK,CAAC;4BACnC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,GAAG,CAAC;yBACvC;oBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAC3E,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1D,IAAI,CAAC,sBAAsB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;QAE1F,OAAoB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IAEL,oCAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;AC5EyB;AAE6B;AAEvD;IAAA;IAiCA,CAAC;IA/BG,iDAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,SAAS,GAAG,EAAE;iBACvC;gBACmC;oBAChC,IAAI,EAAE,mDAAe,CAAC,cAAc;oBACpC,KAAK,EAAE,kDAAc,CAAC,SAAS,GAAG,EAAE,CAAC,yBAAyB;iBACjE;aACJ;SACJ,CAAC;IACN,CAAC;IAED,gDAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,KAAK,CAAC,EAAhD,CAAgD,CAAC;aAC5D,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,CAAC,eAAe,EAA3B,CAA2B,CAAC,CAAC;QAE3C,IAAM,MAAM,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACxC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,EAApC,CAAoC,CAAC;aAChD,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,CAAC,GAAG,EAAf,CAAe,CAAC,CAAC;QAE/B,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEhE,OAAoB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IACL,mCAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;ACpCsD;AAEvD;IAAA;IA6BA,CAAC;IA3BG,kCAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,GAAG,GAAG,EAAE;iBACjC;aACJ;SACJ,CAAC;IACN,CAAC;IAED,iCAAS,GAAT,UAAU,eAAgC,EAAE,SAAqB;QAC7D,iEAAiE;QACjE,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAC5B,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;QAEpD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAC;YAExB,CAAC,CAAC,cAAc;gBACZ,GAAG,CAAC,aAAa,CAAC,SAAS,CACvB,CAAC,CAAC,WAAW;oBACb,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,GAAG,GAAG,EACxF,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,OAAoB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IACL,oBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;;AChCyB;AACuC;AACtC;AAEqE;AAErD;AAE3C;IAAA;QAgJI,0BAA0B;QAClB,qBAAgB,GAAG,UAAU,IAAW;YAE5C,IAAI,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;iBACtC,KAAK,CAAC,YAAE,IAAI,SAAE,CAAC,QAAQ,GAAG,CAAC,EAAf,CAAe,CAAC;iBAC5B,GAAG,CAAC,YAAE,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,EAA3D,CAA2D,CAAC,CAAC;YAE5E,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACtB,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;qBACxC,KAAK,CAAC,YAAE,IAAI,SAAE,CAAC,QAAQ,GAAG,CAAC,EAAf,CAAe,CAAC;qBAC5B,GAAG,CAAC,YAAE,IAAI,oFAAuB,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,EAAhD,CAAgD,CAAC,CAAC;gBAEjE,GAAG,IAAI,GAAG,CAAC;aACd;YAED,OAAO,GAAG,CAAC;QACf,CAAC;IA+CL,CAAC;IA7MG,oCAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,KAAK,GAAG,EAAE;iBACnC;gBACmC;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,QAAQ,GAAG,EAAE;iBACtC;gBACmC;oBAChC,IAAI,EAAE,mDAAe,CAAC,cAAc;oBACpC,KAAK,EAAE,kDAAc,CAAC,aAAa,GAAG,EAAE;iBAC3C;aACJ;SACJ,CAAC;IACN,CAAC;IAED,mCAAS,GAAT,UAAU,eAAgC,EAAE,SAAqB;QAC7D,iEAAiE;QACjE,IAAM,IAAI,GAAG,uCAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,8CAA8C;QACxF,IAAM,cAAc,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;QACpD,IAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QAExC,IAAI,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,oBAAoB,KAAK,wDAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,IAAI,CAAC,gBAAgB;YACtB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;;YAEzC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE7C,IAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aACzE,KAAK,CAAC,WAAC,IAAI,QAAC,uDAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAnC,CAAmC,CAAC;aAC/C,MAAM,CAAC,WAAC,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAA7C,CAA6C,CAAC;aAC1D,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QACvB,IAAM,qBAAqB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aACxF,KAAK,CAAC,WAAC,IAAI,8DAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAlC,CAAkC,CAAC;aAC9C,MAAM,CAAC,WAAC,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,EAA7C,CAA6C,CAAC;aAC1D,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC,CAAC,CAAC;QAE/E,IAAI,4BAA4B,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,oBAAoB,GAAW,IAAI,CAAC;QAExC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YACzB,uDAAuD;YACvD,oEAAoE;YACpE,6FAA6F;YAC7F,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;YACjC,IAAI,IAAI,CAAC,QAAQ,IAAI,6EAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE;gBACnF,6EAA6E;gBAC7E,iGAAiG;gBACjG,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBACxB,IAAI,CAAC,gBAAgB,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;oBACpF,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;oBAC3E,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG;wBAC7B,oBAAoB,GAAG,GAAG,CAAC;iBAClC;qBACI;oBACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;oBACxE,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;oBAC3E,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,YAAY;wBACtC,oBAAoB,GAAG,YAAY,CAAC;iBAC3C;gBAED,4BAA4B,GAAG,6EAAuB,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;gBAC7F,sCAAsC;gBACtC,iEAAiE;gBACjE,mFAAmF;aACtF;SACJ;QAED,YAAY;QACZ,qDAAqD;QACrD,qJAAqJ;QACrJ,uIAAuI;QACvI,cAAc;QACd,6DAA6D;QAC7D,2JAA2J;QAC3J,6IAA6I;QAC7I,cAAc;QACd,IAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aAC9E,KAAK,CAAC,WAAC,IAAI,QAAC,uDAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAnC,CAAmC,CAAC;aAC/C,MAAM,CAAC,WAAC,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAA/D,CAA+D,CAAC;aAC5E,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACf,IAAM,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aACnF,KAAK,CAAC,WAAC,IAAI,8DAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAlC,CAAkC,CAAC;aAC9C,MAAM,CAAC,WAAC,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,EAA/D,CAA+D,CAAC;aAC5E,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEf,IAAM,OAAO,GAAG,WAAW,GAAG,gBAAgB,CAAC;QAC/C,IAAM,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,4BAA4B,CAAC,EAAE,CAAC,CAAC,CAAC;QACpG,IAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,GAAG,4BAA4B,EAAE,CAAC,CAAC,CAAC;QAEtF,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAClH,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,6EAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5F,IAAI,eAAe,KAAK,mDAAe,CAAC,cAAc,EAAE;YACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,qEAAqE;YAClG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,SAAS,CAAC,YAAY,IAAI,UAAU,KAAK,qDAAiB,CAAC,UAAU,EAAE;gBACvE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,uDAAuD;aACzH;iBAAM;gBACH,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,6EAAuB,CAAC,YAAY,CAAO,IAAI,EACzE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACzC,kEAAkE;gBAClE,SAAS,CAAC,YAAY;oBACtB,SAAS,CAAC,YAAY,CAAC,cAAc,KAAK,IAAI;oBAC9C,SAAS,CAAC,YAAY,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,uCAAuC;aAC9F;SACJ;aAAM;YACH,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;YACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;SAC9B;QAED,IAAM,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aACjF,MAAM,CAAC,WAAC,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAArD,CAAqD,CAAC;aAClE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QAErC,IAAM,iBAAiB,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aACpF,MAAM,CAAC,WAAC,IAAI,UAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAxD,CAAwD,CAAC;aACrE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAE3C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QAEhC,IAAM,IAAI,GAAgB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,uBAAuB,GAAG,oBAAoB,CAAC;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;IAoBO,oCAAU,GAAlB,UAAmB,SAAqB;QACpC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QACpC,IAAM,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,CAAC;QAEtD,IAAI,QAAQ,EAAE;YACV,IAAI,QAAQ,CAAC,IAAI;gBACb,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC;YAEzB,IAAI,iBAAiB,CAAC,YAAY;gBAC9B,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAExF,IAAI,QAAQ,CAAC,WAAW;gBACpB,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC;YAEhC,IAAI,QAAQ,CAAC,aAAa;gBACtB,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC;SACrC;QAED,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,cAAc;YACrD,GAAG,IAAI,4CAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,MAAM,EAAR,CAAQ,CAAC,CAAC;QAEhF,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAA,CAAC;IAEM,sCAAY,GAApB,UAAqB,IAAW;QAC5B,OAAO,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,KAAK,GAAG,CAAC,EAAX,CAAW,CAAC;aACvB,GAAG,EAAE,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,2EAA2E;IACnE,8CAAoB,GAA5B,UAA6B,SAAqB;QAC9C,IAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QAE5B,IAAM,IAAI,GAAG,6EAAuB,CAAC,yBAAyB,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5F,IAAM,IAAI,GAAG,6EAAuB,CAAC,kCAAkC,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAErG,+BAA+B;QAC/B,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE9C,OAAO,IAAI,GAAG,IAAI,GAAG,UAAU,CAAC;IACpC,CAAC;IAEL,sBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;ACvNgE;AAEV;AAC5B;AAE3B;IAAA;IA4BA,CAAC;IA1BG,4CAAU,GAAV;QACI,OAAkC;YAC9B,gBAAgB,EAAE;gBACsB;oBAChC,IAAI,EAAE,mDAAe,CAAC,QAAQ;oBAC9B,KAAK,EAAE,kDAAc,CAAC,aAAa,GAAG,EAAE;iBAC3C;gBACmC;oBAChC,IAAI,EAAE,mDAAe,CAAC,cAAc;oBACpC,KAAK,EAAE,kDAAc,CAAC,aAAa,GAAG,EAAE;iBAC3C;aACJ;SACJ,CAAC;IACN,CAAC;IAED,2CAAS,GAAT,UAAU,gBAAiC,EAAE,SAAqB;QAC9D,IAAM,IAAI,GAAG,uCAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEzC,oCAAoC;QACpC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;YACxE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,6EAAuB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5F,OAAoB,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;IACL,8BAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;ACjC6D;AACA;AACY;AACE;AACA;AACxB;AACY;AACc;AAC9B;AACJ;AACkB;AACd;AAEpD,IAAM,GAAG,GAAG;IACR,wBAAwB,EAAE,2EAAsB;IAChD,mBAAmB,EAAE,iEAAiB;IACtC,iBAAiB,EAAE,6DAAe;IAClC,wBAAwB,EAAE,2EAAsB;IAChD,gCAAgC,EAAE,2FAA8B;IAChE,+BAA+B,EAAE,yFAA6B;IAC9D,wBAAwB,EAAE,4EAAsB;IAChD,+BAA+B,EAAE,yFAA6B;IAC9D,8BAA8B,EAAE,uFAA4B;IAC5D,eAAe,EAAE,yDAAa;IAC9B,iBAAiB,EAAE,8DAAe;IAClC,yBAAyB,EAAE,6EAAuB;CACrD,CAAC;AAEF,IAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,+DAAe,mBAAmB,EAAC;;;;;;;;;;;;;;;;;;;;AC9BL;AACgB;AACsB;AAEkB;AAOtF;IA6WI,+CAA+C;IAE/C,cAAc;IACd;QACI,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAC1B,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,4CAAQ,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,6EAAuB,CAAC,oBAAoB,EAAE,CAAC;QACrE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAc;YACvB,EAAE,EAAE,IAAI;SACX,CAAC;QACF,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,EAAiB,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,EAAY,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC/B,CAAC;IA9UD,sBAAI,gCAAc;QAHlB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;aACD,UAAmB,CAAS;YACxB,uDAAuD;QAC3D,CAAC;;;OAHA;IAKD,sBAAI,0BAAQ;aAAZ;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aACD,UAAa,CAAU;YACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;;;OAHA;IAKD,sBAAI,gCAAc;aAAlB;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;aACD,UAAmB,CAAS;YACxB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC5B,CAAC;;;OAHA;IAKD,sBAAI,kCAAgB;aAApB;YACI,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;aACD,UAAqB,CAAS;YAC1B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC9B,CAAC;;;OAHA;IAKD,sBAAI,sCAAoB;aAAxB;YACI,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACrC,CAAC;aACD,UAAyB,CAAS;YAC9B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAClC,CAAC;;;OAHA;IAKD,sBAAI,sCAAoB;aAAxB;YACI,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACrC,CAAC;aACD,UAAyB,CAAS;YAC9B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAClC,CAAC;;;OAHA;IAKD,sBAAI,wCAAsB;aAA1B;YACI,OAAO,IAAI,CAAC,sBAAsB,CAAC;QACvC,CAAC;aACD,UAA2B,CAAS;YAChC,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;QACpC,CAAC;;;OAHA;IAKD,sBAAI,4CAA0B;aAA9B;YACI,OAAO,IAAI,CAAC,0BAA0B,CAAC;QAC3C,CAAC;aACD,UAA+B,CAAS;YACpC,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC;QACxC,CAAC;;;OAHA;IAKD,sBAAI,qCAAmB;aAAvB,UAAwB,CAAM;YAC1B,OAAO;QACX,CAAC;;;OAAA;IAED,sBAAI,mCAAiB;aAGrB;YACI,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAClC,CAAC;aALD,UAAsB,CAAU;YAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC/B,CAAC;;;OAAA;IAKD,sBAAI,0BAAQ;aAGZ;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;aALD,UAAa,CAAY;YACrB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;;;OAAA;IAKD,sBAAI,6BAAW;aAAf,UAAgB,CAAU;YACtB,mBAAmB;QACvB,CAAC;;;OAAA;IAGD,sBAAI,kCAAgB;QADpB,8BAA8B;aAC9B;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;aACD,UAAqB,CAAS;YAC1B,OAAO;QACX,CAAC;;;OAHA;IAKD,sBAAI,8BAAY;aAAhB;YACI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAE3D,IAAM,CAAC,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACnC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,EAArD,CAAqD,CAAC;iBACjE,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,MAAM,EAAR,CAAQ,CAAC;iBACrB,GAAG,EAAE,CAAC;YAEX,OAAO,6EAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;aAED,UAAiB,CAAS;YACtB,IAAI,GAAG,GAAa,IAAI,CAAC;YACzB,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAEtC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAC5C,GAAG,GAAG,IAAI,CAAC;;gBAEX,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;qBAC/B,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI,EAA/E,CAA+E,CAAC;qBAC3F,MAAM,CAAC,WAAC,IAAI,QAAC,EAAD,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;YAEzC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;gBACX,kBAAkB;gBAClB,GAAG,GAAsB;oBACrB,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE;oBAC9B,kBAAkB,EAAE,IAAI;oBACxB,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE;oBAClB,SAAS,EAAE,gEAA4B,CAAC,QAAQ;oBAChD,eAAe,EAAE,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,yBAAyB,CAAC;oBACxE,OAAO,EAAE,CAAC;iBACb,CAAC;gBAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAE3B;iBAAM;gBACH,IAAI,CAAC,CAAC,EAAE;oBACJ,qBAAqB;oBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,QAAQ,IAAI,CAAC,CAAC,WAAW,KAAK,IAAI,EAA/E,CAA+E,CAAC,CAAC;iBAC9H;qBAAM;oBACH,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;oBACf,aAAa;oBACb,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;iBAC3B;aACJ;QACL,CAAC;;;OArCA;IAwCD,sBAAI,gDAA8B;QADlC,4CAA4C;aAC5C;YACI,OAAO,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,yBAAyB,CAAC;QACvE,CAAC;aACD,UAAmC,CAAS;YACxC,aAAa;QACjB,CAAC;;;OAHA;IAMD,sBAAI,uCAAqB;QADzB,wCAAwC;aACxC;YACI,IAAI,GAAG,GAAG,CAAC,CAAC;YAEZ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa;gBAC5C,GAAG,GAAG,6EAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAEnE,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;aACD,UAA0B,CAAS;YAC/B,aAAa;QACjB,CAAC;;;OAHA;IAMD,sBAAI,2CAAyB;aAI7B;YACI,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,CAAC;YAE7B,gCAAgC;YAChC,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACtC,qGAAqG;iBACpG,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,OAAO,EAApD,CAAoD,CAAC;iBAChE,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,MAAM,EAAR,CAAQ,CAAC;iBACrB,GAAG,EAAE,CAAC;YAEX,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QAhBD,gCAAgC;aAChC,UAA8B,CAAS;YACnC,aAAa;QACjB,CAAC;;;OAAA;IAeD,sBAAI,4BAAU;aAId;YACI,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAA1B,CAA0B,CAAC;iBACtC,MAAM,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,EAAX,CAAW,CAAC,CAAC,OAAO,EAAE,CAAC;YAExC,OAAO,GAAG,CAAC;QACf,CAAC;aAVD,UAAe,CAAoB;YAC/B,aAAa;QACjB,CAAC;;;OAAA;IAYD,sBAAI,+BAAa;QAFjB,gDAAgD;QAChD,0DAA0D;aAC1D;YACI,OAAO,CAAC,6EAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,CAAC;aACD,UAAkB,CAAU;YACxB,OAAO;QACX,CAAC;;;OAHA;IAKD,sBAAI,+BAAa;aAAjB;YACI,OAAO,6EAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;aACD,UAAkB,CAAS;YACvB,OAAO;QACX,CAAC;;;OAHA;IAKD,sBAAI,+BAAa;aAAjB;YACI,OAAO,6EAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3D,CAAC;aACD,UAAkB,CAAS;YACvB,OAAO;QACX,CAAC;;;OAHA;IAKD,sBAAI,mCAAiB;aAArB,UAAsB,CAAU;YAC5B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC/B,CAAC;;;OAAA;IAED,sBAAI,2BAAS;aAAb;YAAA,iBAGC;YAFG,OAAO,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,WAAC,IAAI,YAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,EAAlE,CAAkE,CAAC,CAAC;YACrH,2DAA2D;QAC/D,CAAC;aACD,UAAc,CAAS;YACnB,OAAO;QACX,CAAC;;;OAHA;IAKD,sBAAI,yCAAuB;aAM3B;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC;QACxC,CAAC;aARD,UAA4B,CAAU;YAClC,IAAI,CAAC,IAAI,IAAI,CAAC,uBAAuB,EAAE;gBACnC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;aAClC;YACD,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;QACrC,CAAC;;;OAAA;IAKD,sBAAI,oCAAkB;aAAtB;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACnC,CAAC;aACD,UAAuB,CAAU;YAC7B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAChC,CAAC;;;OAHA;IAKD,sBAAI,+BAAa;aAGjB;YACI,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;aALD,UAAkB,CAAS;YACvB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAC3B,CAAC;;;OAAA;IAKD,sBAAI,gCAAc;aAGlB;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;aALD,UAAmB,CAAS;YACxB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC5B,CAAC;;;OAAA;IAKD,sBAAI,kCAAgB;aAGpB;YACI,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;aALD,UAAqB,CAAU;YAC3B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC9B,CAAC;;;OAAA;IAKD,sBAAI,oCAAkB;aAGtB;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACnC,CAAC;aALD,UAAuB,CAAU;YAC7B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAChC,CAAC;;;OAAA;IAKD,sBAAI,gCAAc;aAGlB;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;aALD,UAAmB,CAAU;YACzB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC5B,CAAC;;;OAAA;IAqED,sBAAO,GAAP;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,WAAM,GAAb,UAAc,IAAW;QACrB,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,OAAO,CAAO,IAAK,CAAC,OAAO,CAAC,KAAK,UAAU,EAAE;YAC7C,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,uDAAY,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aACtE;SACJ;QAED,OAAa,IAAI,CAAC;IACtB,CAAC;IAED,UAAU;IACV,oCAAqB,GAArB;QACI,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,OAAO,EAApD,CAAoD,CAAC,CAAC,2BAA2B;aAC5F,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAA1B,CAA0B,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,kGAAkG;IAClG,sCAAuB,GAAvB;QACI,IAAM,GAAG,GAAG,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,gEAA4B,CAAC,OAAO,EAA9E,CAA8E,CAAC;aAC1F,GAAG,CAAC,WAAC,IAAI,QAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAA1B,CAA0B,CAAC,CAAC;QAE1C,OAAO,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEO,6BAAc,GAAtB;QACI,OAAO,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,KAAK,GAAG,CAAC,EAAX,CAAW,CAAC;aACvB,KAAK,EAAE,CAAC;IACjB,CAAC;IAEO,+BAAgB,GAAxB;QACI,OAAO,4CAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;aACrC,KAAK,CAAC,WAAC,IAAI,QAAC,CAAC,KAAK,GAAG,CAAC,EAAX,CAAW,CAAC;aACvB,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,sBAAI,0BAAQ;aAAZ;YACI,OAAO,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;aACD,UAAa,CAAU;QACvB,CAAC;;;OAFA;IAID,sBAAI,0BAAQ;aAAZ;YACI,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC;aACD,UAAa,CAAU;QACvB,CAAC;;;OAFA;IAID,sBAAI,4BAAU;aAAd;YACI,OAAO,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;aACD,UAAe,CAAU;QACzB,CAAC;;;OAFA;IAGL,WAAC;AAAD,CAAC;;AAED,SAAS,gBAAgB;IACrB,OAAO,IAAI,IAAI,EAAE,CAAC;AACtB,CAAC;;;;;;;;;;;;;;;;;ACrfM;IAMH;IACA,CAAC;IAED,2CAAW,GAAX;QACI,OAAO,IAAI,OAAO,CAAC,UAAC,GAAG,EAAE,GAAG;YACxB,IAAI,MAAM,CAAC,MAAM,EAAE;gBACf,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;aACrB;YACD,IAAM,kBAAkB,GAAG,UAAC,MAAM;gBAC9B,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,IAAM,gBAAgB,GAAG,UAAC,KAAK;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnB,GAAG,CAAC,KAAK,CAAC,CAAC;YACf,CAAC,CAAC;YACF,WAAW,CAAC,WAAW,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACP,CAAC;IAED,8CAAc,GAAd,UAAe,KAAa;QACxB,OAAO,IAAI,OAAO,CAAO,UAAC,GAAG,EAAE,GAAG;YAC9B,WAAW,CAAC,uBAAuB,CAAC;gBAChC,WAAW,EAAE,qBAAqB,CAAC,GAAG;gBACtC,MAAM,EAAE,KAAK;gBACb,sBAAsB,EAAE,IAAI;gBAC5B,aAAa,EAAE,IAAI,EAAE,6BAA6B;aACrD,EAAE,UAAC,MAAM,IAAK,UAAG,EAAE,EAAL,CAAK,EAAE,UAAC,GAAG,IAAK,UAAG,CAAC,GAAG,CAAC,EAAR,CAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,0CAAU,GAAV;QACI,OAAO,IAAI,OAAO,CAAS,UAAC,GAAG,EAAE,GAAG;YAChC,WAAW,CAAC,mBAAmB,CAAC;gBAC5B,WAAW,EAAE,qBAAqB,CAAC,GAAG;aACzC,EAAE,UAAC,MAAM,IAAK,UAAG,CAAC,MAAM,CAAC,EAAX,CAAW,EAAE,UAAC,GAAG,IAAK,UAAG,CAAC,GAAG,CAAC,EAAR,CAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,gDAAgB,GAAhB,UAAiB,QAAiB,EAAE,MAAe;QAC/C,IAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACzE,OAAO,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,UAAG,QAAQ,cAAI,MAAM,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,CAAC;IAED,6CAAa,GAAb;QACI,IAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,8CAAc,GAAd,UAAe,QAAgB,EAAE,MAAc;QAC3C,YAAY,CAAC,OAAO,CAAC,qBAAqB,CAAC,eAAe,EAAE,UAAG,QAAQ,cAAI,MAAM,CAAE,CAAC,CAAC;IACzF,CAAC;IAED,qCAAK,GAAL;QACI,YAAY,CAAC,UAAU,CAAC,qBAAqB,CAAC,eAAe,CAAC,CAAC;IACnE,CAAC;IA5DM,6BAAO,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAE1B,yBAAG,GAAG,oBAAoB,CAAC;IAC3B,qCAAe,GAAG,SAAS,CAAC;IA0D/C,4BAAC;CAAA;AAGK,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE9D,+DAAe,gBAAgB,EAAC;;;;;;;;;;;;;;;;;;;AC1EwC;AAejE;IAmCH;QAAA,iBAyCC;QAzEO,gBAAW,GAA2B,EAAE,CAAC;QAiC7C,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;YACvE,aAAa;YACb,OAAO,CAAC,IAAI,CAAC;gBACH,MAAO,CAAC,WAAW,GAAG,IAAI,CAAC;YACrC,CAAC,EAAE,cAAO,CAAC,EAAE,kBAAkB,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;SACvD;QAED,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACnC,mHAAmH;YAC/G,MAAM,CAAC,OAAO,CAAC,UAAC,IAAI;gBAChB,IAAI,IAAI,EAAE;oBACN,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC7B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;wBACtD,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;qBACvD;oBAED,KAAI,CAAC,WAAW,GAAG;wBACf,KAAK,EAAE,WAAW;wBAClB,QAAQ,EAAE,IAAI,CAAC,IAAI;wBACnB,QAAQ,EAAE,mFAA2B;wBACrC,UAAU,EAAE,qFAA6B;wBACzC,OAAO,EAAE,IAAI,CAAC,OAAO;qBACxB,CAAC;oBAEF,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;iBACnC;qBAAM;oBACH,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;iBACzC;YACL,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;YAC9B,KAAK,CAAC,QAAQ,CAAC,UAAC,KAAc;gBAC1B,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACxC,CAAC,EAAE,UAAC,KAAK;gBACL,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAChC,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IArED,sBAAI,yCAAU;aAAd;YACI,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;;;OAAA;IAED,sBAAW,6CAAc;aAAzB;YACI,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC;QACrE,CAAC;;;OAAA;IAED,sBAAW,0CAAW;aAAtB;YACI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAO,MAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;QACpG,CAAC;;;OAAA;IAED,sBAAW,wCAAS;aAApB;YACI,OAAO,OAAO,OAAO,KAAK,WAAW,IAAU,MAAO,CAAC,WAAW,CAAC;QACvE,CAAC;;;OAAA;IAED,sBAAW,wCAAS;aAApB;;YACI,OAAO,WAAI,CAAC,UAAU,CAAC,QAAQ,0CAAE,WAAW,EAAE,MAAK,SAAS,CAAC;QACjE,CAAC;;;OAAA;IAED,sBAAW,oCAAK;aAAhB;YACI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3B,CAAC;;;OAAA;IAED,sBAAW,8CAAe;aAA1B;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;;;OAAA;IA6CD,sBAAI,4CAAa;aAAjB;YACI,OAAa,MAAO,CAAC,MAAM,CAAC;QAChC,CAAC;;;OAAA;IA/EM,yBAAO,GAAG,CAAC,iBAAiB,CAA4B,CAAC;IAgFpE,wBAAC;CAAA;AAED,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;KACrB,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAEtD,+DAAe,YAAY,EAAC;;;;;;;;;;;;;;AC5F5B;IAKI,6BACY,EAAO,EACP,aAAkB;QADlB,OAAE,GAAF,EAAE,CAAK;QACP,kBAAa,GAAb,aAAa,CAAK;IAE9B,CAAC;IAED,kCAAI,GAAJ;;QACI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAI,kBAAM,CAAC,MAAM,0CAAE,QAAQ,0CAAE,EAAE,GAAE;YAC1D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC;gBACnC,SAAS,EAAE,kBAAkB,CAAC,gBAAgB;gBAC9C,QAAQ,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClD,OAAO,EAAE,OAAO;aACnB,CAAC,CAAC;SACJ;IACL,CAAC;IAED,mCAAK,GAAL;;QACI,IAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAI,kBAAM,CAAC,MAAM,0CAAE,QAAQ,0CAAE,EAAE,GAAE;YAC1D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;SACtC;aACI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;YAC1F,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAC3B;gBACI,QAAQ,EAAE,eAAe;gBACzB,aAAa,EAAE,kBAAkB,CAAC,gBAAgB;aACrD,EACD,UAAU,UAAU;gBAChB,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACjC,CAAC,EACD,UAAU,KAAK;gBACX,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,CACJ,CAAC;SACL;QACD,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,oCAAM,GAAN;;QACI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAI,kBAAM,CAAC,MAAM,0CAAE,QAAQ,0CAAE,EAAE,GAAE;YAC5D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC;SAC/C;aACI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE;YAC1F,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;SACtC;IACL,CAAC;IAEO,sDAAwB,GAAhC,UAAiC,IAAwB;QACrD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACxD,OAAO;SACR;QACD,IAAI;YACF,IAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;YAC5B,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;SACpE;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC9B;gBAAS;YACR,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;IACH,CAAC;IAnEI,2BAAO,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,mBAAmB,CAAC,CAAC;IAoElE,0BAAC;CAAA;AAEK,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;AChFO;AASxE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;KACpB,QAAQ,CAAC,YAAY,EAAE,sFAA8B,CAAC,CAAC;AAU5D;IAAA;IAwBA,CAAC;IAvBG,2BAAI,GAAJ,UAAK,GAAQ;QACT,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAA2B,CAAC;IAC9E,CAAC;IAED,uCAAgB,GAAhB,UAAiB,KAAkB,EAAE,GAAW;QAC5C,OAAO,IAAI,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;YACtB,aAAa;YACb,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAC,CAAwB;gBACzD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBAEvB,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd;YACL,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE;gBAC3B,GAAG,CAAC,IAAI,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAEL,mBAAC;AAAD,CAAC;AAED;IAAA;QAEY,UAAK,GAAG,CAAC,CAAC;QACD,YAAO,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;QACxB,aAAQ,GAAG,GAAG,CAAC;IAwDpC,CAAC;IArDG,2BAAI,GAAJ,UAAK,GAAQ;QACT,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5D,CAAC;IAED,uCAAgB,GAAhB,UAAiB,KAAkB,EAAE,GAAW;QAAhD,iBAgCC;QA/BG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,IAAM,UAAU,GAAG,WAAW,CAAC;gBAC3B,KAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAM,QAAQ,GAAG,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,QAAQ,CAAC;gBAC9C,IAAI,KAAI,CAAC,KAAK,GAAG,QAAQ,EAAE;oBACvB,KAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACtB,MAAM,CAAC,qBAAqB,CAAC,CAAC;iBACjC;gBACD,IAAI,KAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;oBAEtB,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO;iBACV;gBAED,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI;oBACA,IAAI,GAAG,KAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;iBACtC;gBAAC,WAAM;iBAEP;gBACD,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;oBACtB,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC1B,KAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACtB,OAAO,CAAC,IAAI,CAAC,CAAC;iBACjB;YACL,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,uCAAgB,GAAxB;QACI,IAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACvE,IAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAEpE,IAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC;QACxG,IAAM,SAAS,GAAG,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;QAE5G,IAAM,WAAW,GAAG,GAAG,CAAC;QACxB,IAAM,YAAY,GAAG,GAAG,CAAC;QAEzB,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QACnE,IAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACnE,OAAO,2BAAoB,WAAW,sBAAY,YAAY,mBAAS,GAAG,oBAAU,IAAI,CAAE,CAAC;IAC/F,CAAC;IAEL,mBAAC;AAAD,CAAC;AAED;IAAA;IAQA,CAAC;IAPG,2CAAM,GAAN,UAAO,MAAe;QAClB,IAAI,MAAM,EAAE;YACR,OAAO,IAAI,YAAY,EAAE,CAAC;SAC7B;QAED,OAAO,IAAI,YAAY,EAAE,CAAC;IAC9B,CAAC;IACL,iCAAC;AAAD,CAAC;AAGM;IAGH,qBAAoB,UAAkB,EAAU,aAA6B,EAAU,UAA6B;QAAhG,eAAU,GAAV,UAAU,CAAQ;QAAU,kBAAa,GAAb,aAAa,CAAgB;QAAU,eAAU,GAAV,UAAU,CAAmB;QAE5G,iBAAY,GAAG,IAAI,CAAC;IAD5B,CAAC;IAGD,sBAAI,oCAAW;aAAf;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;;;OAAA;IAED,2BAAK,GAAL;QAAA,iBA2BC;QA1BG,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErD,IAAM,KAAK,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,CAAC;QAEnE,IAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACrD,IAAI,QAAQ,GAAG,+EAAwE,KAAK,yEAAsE,CAAC;QACnK,QAAQ,IAAI,qBAAc,IAAI,CAAC,UAAU,CAAE,CAAC;QAC5C,QAAQ,IAAI,wBAAiB,WAAW,CAAE,CAAC;QAC3C,QAAQ,IAAI,iBAAU,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAE,CAAC;QAE7D,IAAM,SAAS,GAAG,IAAI,0BAA0B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAElH,IAAM,KAAK,GAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAIxC,OAAO,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,aAAG;YACpE,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,IAAM,MAAM,GAAI,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,KAAI,CAAC,cAAc,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAClF,IAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrC,IAAM,MAAM,GAAG,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACpC,IAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;YAC1B,IAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC;YAExC,OAAO,EAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,8BAAQ,GAAhB,UAAiB,KAAa;QAC1B,IAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/D,IAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAS,CAAC;YAC/E,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAEO,oCAAc,GAAtB;QACI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YACxD,8CAA8C;YAC9C,OAAO,QAAQ,CAAC,MAAM,GAAG,gBAAgB;SAC5C;QAED,OAAO,QAAQ,CAAC,MAAM,GAAG,gBAAgB;IAC7C,CAAC;IAxDM,mBAAO,GAAG,CAAC,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAyDhF,kBAAC;CAAA;AAEK,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;AAEjD,+DAAe,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxLyB;AAQrD;IAGI,4BACY,EAAO,EACP,aAA4B,EAC5B,aAAkB,EAClB,eAAgC,EAChC,eAAgC,EAChC,UAA6B;QAL7B,OAAE,GAAF,EAAE,CAAK;QACP,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAK;QAClB,oBAAe,GAAf,eAAe,CAAiB;QAChC,oBAAe,GAAf,eAAe,CAAiB;QAChC,eAAU,GAAV,UAAU,CAAmB;IAEzC,CAAC;IAED,8CAAiB,GAAjB;QACI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC3B,IAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACtC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,QAAQ,CAAC,OAAO,CAAC;SAC3B;aAAM;YACH,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACvF;IACL,CAAC;IAED,qCAAQ,GAAR;QACI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC3B,IAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACjC,IAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;YACrD,IAAM,UAAU,GAAG,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC7B,OAAO,QAAQ,CAAC,OAAO,CAAC;SAC3B;aAAM;YACH,OAAO,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SACvG;IACL,CAAC;IAED,yDAA4B,GAA5B;QAAA,iBA4BC;QA3BG,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAU,MAAO,CAAC,WAAW,EAAE;YACzD,IAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;YACxH,IAAM,MAAI,GAAG,IAAI,CAAC;YAClB,IAAM,EAAE,GAAG,QAAQ,CAAC,4BAA4B,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;iBAC/E,IAAI,CAAC,UAAC,IAAI;gBACP,QAAQ,GAAG,MAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAC3B,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAS,EAAE;oBAC7B,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAChC,EAAE,CAAC,IAAI,GAAG,iEAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBAClC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;oBACpC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;oBACxB,OAAO,EAAE,CAAC,MAAM,CAAC;oBACjB,OAAO,EAAE,CAAC,UAAU,CAAC;oBACrB,OAAO,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,OAAX,MAAM,2BAAS,KAAI,CAAC,yBAAyB,EAAE,WAAE;gBAEjD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzB,OAAO,QAAQ,CAAC,OAAO,CAAC;YAC5B,CAAC,CAAC,CAAC;YACP,OAAO,EAAE,CAAC;SACb;aAAM;YACH,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;YACnD,OAAO,QAAQ,CAAC,OAAO,CAAC;SAC3B;IAEL,CAAC;IAAA,CAAC;IAEF,sDAAyB,GAAzB;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;QAChD,OAAO,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,YAAE;gBACV,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;YACF,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,8CAAiB,GAAjB,UAAkB,MAAc,EAAE,WAAmB;QACjD,IAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;QACxH,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IAC1D,CAAC;IA7EM,0BAAO,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IA8EtI,yBAAC;CAAA;AAEK,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1FpB;AAc3C;IAwBI,wBAAoB,cAA+B,EAAU,QAA4B,EAAU,aAA4B,EAC3H,KAAU,EAAE,OAAe;QADX,mBAAc,GAAd,cAAc,CAAiB;QAAU,aAAQ,GAAR,QAAQ,CAAoB;QAAU,kBAAa,GAAb,aAAa,CAAe;QAvBvH,iBAAY,GAAG,EAAE,CAAC;QAClB,oBAAe,GAAG,KAAK,CAAC;QACxB,gBAAW,GAAG,KAAK,CAAC;QAOpB,iBAAY,GAAG,KAAK,CAAC;QAIrB,mBAAc,GAAG,IAAI,yCAAO,EAAQ,CAAC;QAKrC,mBAAc,GAAG,IAAI,yCAAO,EAAU,CAAC;QAO3C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAtBD,sBAAI,0CAAc;aAAlB;YACI,OAAO,IAAI,CAAC,WAAkB,CAAC;QACnC,CAAC;;;OAAA;IAOD,sBAAI,oCAAQ;aAAZ;YACI,OAAO,IAAI,CAAC,cAAkC,CAAC;QACnD,CAAC;;;OAAA;IAGD,sBAAI,oCAAQ;aAAZ;YACI,OAAO,IAAI,CAAC,cAAoC,CAAC;QACrD,CAAC;;;OAAA;IASD,2CAAkB,GAAlB;QAAA,iBAiCC;QAhCG,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,OAAO;SACV;QACD,IAAI,CAAC,QAAQ,CAAC;YACV,KAAI,CAAC,cAAc,CAAC,sBAAsB,GAAG,KAAI,CAAC,OAAO,CAAC;YAAA,CAAC;YAC3D,KAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,KAAI,CAAC,YAAY,CAAC;YAE5D,IAAI,CAAC,KAAI,CAAC,WAAW,EAAE;gBACnB,KAAI,CAAC,cAAc,CAAC,sBAAsB,GAAG,CAAC;wBAC1C,IAAI,EAAE,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC;wBAC7C,KAAK,EAAE,QAAQ;qBAClB,CAAC,CAAC;aACN;iBACI;gBACD,KAAI,CAAC,cAAc,CAAC,sBAAsB,GAAG,EAAE,CAAC;aACnD;YAED,KAAI,CAAC,cAAc,CAAC,cAAc,GAAG,UAAC,IAAI;gBACtC,KAAI,CAAC,kBAAkB,EAAE,CAAC;gBAE1B,KAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,mBAAmB;gBACnB,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,KAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC;YACV,KAAI,CAAC,aAAa,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,2CAAkB,GAAlB,UAAmB,KAAa;QAAhC,iBAQC;QARkB,qCAAa;QAC5B,IAAI,IAAI,CAAC,eAAe,IAAI,KAAK,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC;gBACV,KAAI,CAAC,aAAa,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;gBACnD,KAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YACjC,CAAC,CAAC,CAAC;SAEN;IACL,CAAC;IAAA,CAAC;IAEF,mCAAU,GAAV,UAAW,IAAY;QAAvB,iBAOC;QANG,IAAI,CAAC,QAAQ,CAAC;YACV,KAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,KAAI,CAAC,eAAe,EAAE;gBACtB,KAAI,CAAC,cAAc,CAAC,mBAAmB,GAAG,KAAI,CAAC,YAAY,CAAC;aAC/D;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,6CAAoB,GAApB,UAAqB,IAAY,EAAE,OAAkB;QAArD,iBAIC;QAHG,IAAI,CAAC,QAAQ,CAAC;YACV,KAAI,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC;IAED,oCAAW,GAAX,UAAY,CAAkB;QAA9B,iBAkBC;QAjBG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAEzB,IAAI,CAAC,QAAQ,CAAC;gBACV,KAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;aACI,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE;YACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,cAAM,YAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAzB,CAAyB,CAAC,CAAC;SAElD;IACL,CAAC;IAED,gCAAO,GAAP;QACI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,cAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;IAEL,CAAC;IAEO,0CAAiB,GAAzB,UAA0B,CAAkB;;QACxC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,OAAO,GAAG,CAAC;oBACP,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC;oBAC7C,KAAK,EAAE,QAAQ;iBAClB,CAAC,CAAC;SACN;;YAED,KAAgB,mBAAC,CAAC,OAAO,6CAAE;gBAAtB,IAAM,CAAC;gBACR,OAAO,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,IAAI,EAAE,CAAC,CAAC,IAAI;iBACf,CAAC,CAAC;aACN;;;;;;;;;QACD,IAAI,CAAC,cAAc,CAAC,sBAAsB,GAAG,OAAO,CAAC;IACzD,CAAC;IACL,qBAAC;AAAD,CAAC;;;;;;;;;;;;;;;;;;ACnFD,IAAY,WAUX;AAVD,WAAY,WAAW;IAEnB,6CAAQ;IACR,2EAAuB;IACvB,+DAAiB;IACjB,uDAAa;IACb,qDAAY;IACZ,yDAAc;IACd,yEAAsB;IACtB,+DAAiB;AACrB,CAAC,EAVW,WAAW,KAAX,WAAW,QAUtB;AAGD,IAAY,QAOX;AAPD,WAAY,QAAQ;IAChB,mDAAc;IACd,mEAAsB;IACtB,qEAAuB;IACvB,mDAAc;IACd,2DAAkB;IAClB,uEAAwB;AAC5B,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzFwC;AAEqC;AACuG;AACxH;AACuG;AAKpK,IAAM,YAAY,GAAG,UAAC,GAAW;IAC7B,IAAI,CAAC,KAAK,CAAkB,GAAG,CAAC,EAAE;QAC9B,wBAAwB;QACxB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAChE,OAAO,GAAG,CAAC;SACd;QACD,OAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACjE;IACD,OAAO,GAAG,CAAC;AACjB,CAAC,CAAC;AAGK;IAkCH,iCAAoB,aAA6B,EACrC,KAAsB,EACtB,cAA+B,EAC/B,QAA4B,EAC5B,aAA4B,EAC5B,EAAgB,EAChB,YAAiB,EACjB,IAAoB;QAPZ,kBAAa,GAAb,aAAa,CAAgB;QACrC,UAAK,GAAL,KAAK,CAAiB;QACtB,mBAAc,GAAd,cAAc,CAAiB;QAC/B,aAAQ,GAAR,QAAQ,CAAoB;QAC5B,kBAAa,GAAb,aAAa,CAAe;QAC5B,OAAE,GAAF,EAAE,CAAc;QAChB,iBAAY,GAAZ,YAAY,CAAK;QACjB,SAAI,GAAJ,IAAI,CAAgB;QAtChC,kBAAa,GAAkB,IAAI,yCAAO,EAAQ,CAAC;QAKnD,uBAAkB,GAAwC,IAAI,yCAAO,EAA8B,CAAC;QAe3F,YAAO,GAAG,eAAe,CAAC;QAC1B,eAAU,GAAG,qFAA6B,CAAC;QAC3C,gBAAW,GAAG,sBAAsB,CAAC;IAiB9C,CAAC;IA3BD,sBAAI,oDAAe;aAAnB;YAAA,iBAEC;YADG,OAAO,EAAE,IAAI,EAAE,UAAC,CAAC,IAAK,YAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAA/B,CAA+B,EAAE,KAAK,EAAE,aAAG,IAAI,YAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAlC,CAAkC,EAAE,CAAC;QAC9G,CAAC;;;OAAA;IAED,sBAAI,wCAAG;aAAP;YACI,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,yCAAyC,CAAC;QAC/H,CAAC;;;OAAA;IAuBD,sBAAI,2DAAsB;aAA1B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;;;OAAA;IAED,sBAAI,4CAAO;aAAX;YACI,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC,CAAC,KAAM,CAAC;QAC1D,CAAC;;;OAAA;IAGD,6CAAW,GAAX,UAAY,QAA6B;;QACrC,OAAO,EAAE,OAAO,EAAE,cAAQ,CAAC,MAAM,0CAAE,EAAE,EAAE,QAAQ,EAAE,cAAQ,CAAC,MAAM,0CAAE,EAAE,EAAE,CAAC;IAC3E,CAAC;IAEO,yCAAO,GAAf,UAAgB,QAAsD,EAAE,IAA8B;QAAtG,iBAqBC;QApBG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAoB,CAAC;QAE9E,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAM,YAAI,CAAC,WAAW,CAAC,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAArF,CAAqF,CAAC,CAAC;QACpI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAC,MAAM,IAAK,YAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAnB,CAAmB,CAAC,CAAC;QAExE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,6CAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAClC,QAAQ,EAAE,cAAM,cAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAlC,CAAkC;SACrD,CAAC;QAEF,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE3C,OAAQ,IAAI,CAAC,QAAQ,CAAC,OAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC;IAGD,6CAAW,GAAX,UAAY,OAA4B;QAAxC,iBAEC;QADG,OAAO,IAAI,CAAC,OAAO,CAAC,cAAM,YAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAA7B,CAA6B,EAAE,aAAa,CAAC,CAAC;IAC5E,CAAC;IAED,wCAAM,GAAN,UAAO,OAAiB,EAAE,MAAc,EAAE,OAAuB;QAAjE,iBAMC;QALG,IAAI,CAAC,OAAO,CAAC,mBAAmB;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,OAAO,CAAC;YAChB,IAAM,QAAQ,GAAG,CAAC,OAAO,OAAO,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAwB,CAAC;YAClK,OAAO,KAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;QACzF,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjB,CAAC;IAED,sCAAI,GAAJ,UAAK,CAAC,EAAE,EAAE;QACN,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,iDAAe,GAAf;QACI,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,8CAAY,GAAZ;QAAA,iBAmBC;QAlBG,IAAI,CAAC,aAAa,GAAG,IAAI,yCAAO,EAAQ,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,2CAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAC;;YACxC,KAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,WAAI,CAAC,OAAO,0CAAE,WAAW,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAM,IAAI,GAAG,2CAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAC3B,+CAAS,CAAC,WAAC,IAAI,YAAI,CAAC,UAAU,CAAC,KAAI,CAAC,UAAU,CAAC,EAAhC,CAAgC,CAAC,EAChD,0CAAG,CAAC,UAAC,GAAG,IAAK,cAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAhB,CAAgB,CAAC,EAC9B,2CAAK,CAAC,IAAI,CAAC,EACX,6CAAM,EAAE,EACR,gDAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAChC,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAExD,CAAC;IAED,kDAAgB,GAAhB,UAAiB,OAAe,EAAE,KAAa;QAC3C,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,aAAM,KAAK,OAAI,EAAE,GAAG,CAAC,CAAC;QAE/C,IAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,cAAI,IAAI,WAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,EAA/B,CAA+B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE9E,OAAO,+DAAsD,GAAG,WAAQ;IAC5E,CAAC;IAEO,6CAAW,GAAnB,UAAoB,GAAQ;QACxB,IAAI,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;QACvD,IAAI,GAAG,YAAY,8CAAY,EAAE;YAC7B,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC;SACjF;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAY;YAC5B,MAAM,EAAE,KAAK;YACb,iBAAiB,EAAE,GAAG,YAAY,8CAAY,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC9F,QAAQ,EAAE;gBACN,gBAAgB,EAAE,IAAI;aACzB;SACJ,CAAC;IACN,CAAC;IAEO,2CAAS,GAAjB;;QACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAqB,EAAE,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,gBAAI,CAAC,kBAAkB,0CAAE,MAAM,mCAAI,IAAI,CAAC;YAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;QACnF,IAAI,CAAC,kBAAkB,GAAG,IAAI,yCAAO,EAA8B,CAAC;QACpE,IAAI,CAAC,cAAc,GAAG,IAAI,6DAAc,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACtK,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAa,CAAC;IAC/C,CAAC;IAEO,yCAAO,GAAf;;QACI,IAAI,CAAC,QAAQ,GAAqB,EAAE,CAAC;QACrC,UAAI,CAAC,cAAc,0CAAE,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,gBAAI,CAAC,OAAO,0CAAE,MAAM,mCAAI,IAAI,CAAC;YAAE,UAAI,CAAC,OAAO,0CAAE,WAAW,EAAE,CAAC;QACjE,UAAI,CAAC,aAAa,0CAAE,QAAQ,EAAE,CAAC;QAC/B,UAAI,CAAC,kBAAkB,0CAAE,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;IACrC,CAAC;IAEO,6CAAW,GAAnB,UAAoB,QAAoC;QAAxD,iBAgEC;;QA9DG,IAAM,eAAe,GAAG,OAAO,QAAQ,CAAC,QAAQ,KAAK,WAAW,CAAC;QAEjE,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;SACf;QAED,UAAI,CAAC,cAAc,0CAAE,kBAAkB,EAAE,CAAC;QAE1C,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,EAAE;YACxB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;SAC7B;QACD,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,IAAI,eAAe,IAAI,QAAQ,CAAC,QAAQ,KAAK,kDAAQ,CAAC,oBAAoB,EAAE;YAClG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;YACtB,IAAM,KAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAA+B,CAAC,CAAC;YAC3E,IAAI,KAAG,CAAC,MAAM,EAAE;gBACZ,IAAI,CAAC,UAAU,GAAG,KAAG,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,OAAC,QAAgC,CAAC,MAAM,0CAAE,EAAE,KAAI,GAAG,IAAI,KAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE;oBAClH,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAE,EAAE,QAAQ,EAAE;4BACrC,KAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,GAAG,KAAI,CAAC,eAAe,CAAC;4BACxE,KAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,oBAAoB,GAAG,MAAM,CAAC,KAAI,CAAC,oBAAoB,CAAC,CAAC;4BAC1F,KAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAG,CAAC,CAAC;wBAC/B,CAAC,EAAC,CAAC,CAAC;iBACX;qBAAM;oBACH,IAAI,KAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE;wBAClC,KAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;wBACxE,KAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;qBACrF;oBACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAG,CAAC,CAAC;iBAC9B;aAEJ;iBAAM;gBACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAG,CAAC,CAAC;aAC7B;YAED,OAAO,QAAQ;SAClB;aACI;YACD,IAAM,OAAO,GAAI,QAAgC,CAAC,IAAI,CAAC;YACvD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;gBAC/B,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAE,QAAgC,CAAC,KAAK,CAAC,CAAC;gBAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;oBACrC,IAAI,CAAC,YAAY,EAAE,CAAC;iBACvB;aACJ;YACD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;gBAC5B,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG;gBACtE,OAAO,EAAE;oBACL,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE;oBACzC,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE;iBAC5C;aACJ,CAAC,CAAC;SACN;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,sDAAoB,GAApB,UAAqB,QAAoC;;QACrD,IAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,QAAQ,CAAC,EAAE,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;SAC3D;QACD,IAAI,QAAQ,CAAC,EAAE,EAAE;YACb,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;SAChI;QAED,IAAI,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAClD,UAAI,CAAC,cAAc,0CAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7H,CAAC;IAED,4CAAU,GAAV,UAAW,eAAoC,EAAE,UAAmB;;QAChE,IAAI,CAAC,WAAI,CAAC,aAAa,CAAC,sBAAsB,EAAoB,0CAAE,qBAAqB,GAAE;YACvF,OAAO,IAAI,CAAC;SACf;QACD,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,eAAe,CAAC,eAAe;gBAAE,OAAO,IAAI,CAAC;YAClD,IAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,eAAe,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;YACvG,OAAO;gBAEH,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;aAC5C,CAAC;SACL;aAED;YACI,IAAI,CAAC,eAAe,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACvC,IAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;YAC7E,OAAO;gBACH,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;aAC5C,CAAC;SACL;IACL,CAAC;IAAA,CAAC;IAEM,8CAAY,GAApB;QAAA,iBAoBC;QAnBG,IAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI;YACA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACvB,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,QAAQ,CAAC,OAAO,CAAC;aAC3B;YACD,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,CAAC,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAC,CAAC,CAAC;YAC3H,OAAO,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE;iBAC9C,KAAK,CAAC,aAAG,IAAI,cAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAhB,CAAgB,CAAC;iBAC9B,OAAO,CAAC,aAAG;gBACR,KAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC;gBAC1C,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,QAAQ,CAAC,OAAO,CAAC;YAC5B,CAAC,CAAC,CAAC;SACN;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;SACjB;IAEL,CAAC;IAEO,gDAAc,GAAtB;QAAA,iBAYC;QAXG,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,uBAEhB,IAAI,CAAC,aAAa,EAAE,KACvB,OAAO,EAAE,SAAS,EAClB,WAAW,EAAE,GAAG,EAChB,MAAM,EAAE,IAAI,CAAC,UAAU,IAE9B,CAAC,CAAC,IAAI,CAAC,6CAAO,CAAC,EAAE,IAAI,EAAG,IAAI,GAAG,EAAE,EAAC,CAAC,EAAE,0CAAG,CAAC,aAAG;YACzC,KAAI,CAAC,eAAe,GAAyB,GAAI,CAAC,IAAI,CAAC;YACvD,KAAI,CAAC,oBAAoB,GAAG,MAAM,CAAE,GAA2B,CAAC,KAAK,CAAC,CAAC;QAC3E,CAAC,CAAC,EAAE,2CAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAEO,wCAAM,GAAd,UAAe,MAAc;;QACzB,UAAI,CAAC,aAAa,0CAAE,IAAI,EAAE,CAAC;QAE3B,IAAI,MAAM,KAAK,QAAQ,EAAG;YACtB,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC1C;YACD,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;SACpD;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,uBAET,IAAI,CAAC,aAAa,EAAE,KACvB,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,IAAI,CAAC,UAAU,EACvB,MAAM,EAAE,IAAI,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,IAElB,CAAC,CAAC,IAAI,CAAC,2CAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACrD,CAAC;IAEO,0DAAwB,GAAhC,UAAiC,QAA6B;;QAC1D,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,UAAI,CAAC,aAAa,0CAAE,IAAI,EAAE,CAAC;QAE3B,IAAM,KAAK,GAAG,UAAC,GAAW,IAAK,QAAC;YAC5B,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE;gBACN,gBAAgB,EAAE,GAAG;aACxB;SACJ,CAAC,EAL6B,CAK7B,CAAC;QACH,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,IAAS,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;YAC5G,OAAO,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1E;aAAM,IAAI,CAAK,cAAQ,CAAC,MAAM,0CAAE,EAAE,MAAK,CAAC,EAAE;YACvC,IAAI,QAAQ,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aAC7B;YACD,OAAO,KAAK,CAAC,eAAQ,CAAC,MAAM,0CAAE,EAAE,EAAC,CAAC,CAAC,UAAG,cAAQ,CAAC,MAAM,0CAAE,EAAE,eAAK,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAG,CAAC,CAAC,CAAE,eAAQ,CAAC,MAAM,0CAAE,EAAE,MAAI,cAAQ,CAAC,MAAM,0CAAE,EAAE,EAAC,CAAC;SACtI;aAAM;YACH,IAAI,QAAQ,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;aAC7B;YACD,OAAO;gBACH,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS;gBACrE,QAAQ,EAAE;oBACN,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACvC,mBAAmB,EAAE,QAAQ;iBAChC;aAEJ;SACJ;IACL,CAAC;IAEO,4CAAU,GAAlB,UAAmB,QAAoC;QACnD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrG,CAAC;IAGO,iDAAe,GAAvB,UAAwB,OAA4B;QAChD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CACvB,sBACO,IAAI,CAAC,aAAa,EAAE,KACvB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EACvB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,IAAI,EAAE,OAAO,CAAC,WAAW,GAC5B,CACJ,CAAC,CAAC;IACP,CAAC;IAEO,4CAAU,GAAlB,UAAmB,MAAe,EAAE,GAAW,EAAE,EAAU,EAAE,QAAgB;QACzE,IAAI,CAAC,UAAU,GAAG,GAAG;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CACvB,sBACO,IAAI,CAAC,aAAa,EAAE,KACvB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,EAAE,GAChB,CACJ,CAAC,CAAC;IACP,CAAC;IAEO,4CAAU,GAAlB,UAAmB,GAAW;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,uBAEhB,IAAI,CAAC,aAAa,EAAE,KACvB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,GAAG,IAElB,CAAC,CAAC;IACP,CAAC;IAEO,sCAAI,GAAZ,UAAmD,IAAY;QAA/D,iBAyCC;QAvCG,IAAM,UAAU,GAAG,UAAC,GAAQ;;YACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBACzB,OAAO,UAAG,CAAC,CAAC,0CAAE,EAAE,KAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aACxD;YACD,OAAO,GAAG,CAAC;QACf,CAAC,CAAC;QAEF,IAAM,OAAO,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAC,CAAC;QACpE,OAAO,0CAAI,CACyB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAS,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,eAAe,EACtG,IAAI,EACJ;YACI,OAAO,EAAE,IAAI,OAAO,CAAC,EAAC,wBAAwB,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC;YAC7F,YAAY,EAAE,MAAM;YACpB,MAAM,EAAE,EAAE,UAAU,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;SACvD,CACJ,CACJ,CAAC,IAAI,CACF,gDAAS,CAAC,aAAG;YACT,IAAI,MAAM,GAAG,IAAI,0CAAM,CAAC,EAAE,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;YACnF,OAAO,0CAAI,CAAe,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBACzD,IAAI,CACD,0CAAG,CAAC,UAAC,GAAsC;gBACvC,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE;oBAChC,KAAI,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;iBACtC;gBACD,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAsB,GAAG,CAAC,GAAG,CAAC,IAAK,KAAK,CAAC,EAAE;oBAChF,MAAM,IAAI,KAAK,CAAC,KAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC3H;gBACD,OAAO,GAAG,CAAC,GAAQ,CAAC;YACxB,CAAC,CAAC,CACL,CAAC;QACV,CAAC,CAAC,EACF,gDAAU,CAAC,aAAG;YACV,OAAO,gDAAU,CAAC,cAAM,UAAG,EAAH,CAAG,CAAC,CAAC;QACjC,CAAC,CAAC,CACL,CAAC,IAAI,CAAC,2CAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAEO,uCAAK,GAAb,UAAc,GAAQ,EAAE,MAA2B;QAA3B,4CAA2B;QAC/C,IAAM,OAAO,GAAG,IAAI,2CAAO,EAAE,CAAC;QAE9B,OAAO,OAAO,CAAC,WAAW,CAAC;YACvB,GAAG,aACC,CAAC,EAAE;oBACC,MAAM,EAAE,MAAM;oBACd,IAAI,EAAQ,IAAI,CAAC,aAAc,CAAC,gBAAgB;oBAChD,GAAG,EAAQ,IAAI,CAAC,aAAc,CAAC,WAAW;iBAC7C,IACE,GAAG,CACT;SACJ,CAAC,CAAC;IACP,CAAC;IAEO,+CAAa,GAArB;;QACI,OAAO;YACH,OAAO,EAAQ,IAAI,CAAC,aAAc,CAAC,eAAe;YAClD,QAAQ,EAAE,WAAI,CAAC,aAAa,CAAC,YAAY,0CAAE,MAAM,IAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,kBAAkB;YAC9J,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC;IAEN,CAAC;IAED,0CAAQ,GAAR;QACI,IAAI,CAAO,IAAI,CAAC,aAAc,CAAC,gBAAgB,IAAI,CAAO,IAAI,CAAC,aAAc,CAAC,WAAW,EAAE;YACvF,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC,CAAC;SACpG;QACD,IAAI,CAAO,IAAI,CAAC,aAAc,CAAC,eAAe,EAAE;YAC5C,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC,CAAC;SAChH;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,wDAAsB,GAA9B,UAA+B,IAAY,EAAE,IAAY;QACrD,QAAQ,IAAI,EAAE;YACV,KAAK,IAAI;gBACL,OAAO,2CAA2C,CAAC;YACvD,KAAK,IAAI;gBACL,OAAO,yBAAyB,CAAC;YACrC,KAAK,IAAI;gBACL,OAAO,0BAA0B,CAAC;YACtC,KAAK,IAAI;gBACL,OAAO,sBAAsB,CAAC;YAClC,KAAK,IAAI;gBACL,OAAO,0CAA0C,CAAC;YACtD,KAAK,IAAI;gBACL,OAAO,sBAAsB,CAAC;YAClC,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACL,OAAO,2BAA2B,CAAC;YACvC,KAAK,IAAI;gBACL,OAAO,0MAA0M,CAAC;YACtN,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACL,OAAO,mHAAmH,CAAC;YAC/H,KAAK,IAAI;gBACL,OAAO,mBAAmB,CAAC;YAC/B,KAAK,IAAI;gBACL,OAAO,oBAAoB,CAAC;YAChC,KAAK,IAAI;gBACL,OAAO,oBAAoB,CAAC;YAChC,KAAK,IAAI;gBACL,OAAO,yBAAyB,CAAC;YACrC,KAAK,IAAI;gBACL,OAAO,sBAAsB,CAAC;YAClC,KAAK,IAAI;gBACL,OAAO,oBAAoB,CAAC;YAChC,KAAK,IAAI;gBACL,OAAO,qGAAqG,CAAC;YACjH;gBACI,IAAI,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACtB,OAAO,iBAAiB,GAAG,IAAI,CAAC;SACvC;IACL,CAAC;IAhhBM,+BAAO,GAAG,CAAC,eAAe,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAkhBtJ,8BAAC;CAAA;AAGK,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAElE,+DAAe,kBAAkB,EAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACziB3B,IAAM,kBAAkB,GAAG;IAC9B,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACrB;AASM;IAKH,+BACY,EAAO,EACP,cAA6C;QAD7C,OAAE,GAAF,EAAE,CAAK;QACP,mBAAc,GAAd,cAAc,CAA+B;QAJjD,UAAK,GAAG,IAAI,CAAC;QAQrB,4BAAuB,GAAG,KAAK,CAAC;IAH5B,CAAC;IAKL,oCAAI,GAAJ;QACI,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI;YACA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;SAC9B;QAAC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACpB;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IAEH,sCAAM,GAAN,UAAO,KAAU,EAAE,KAA6B;QAAhD,iBAsBC;QArBG,IAAI;YACA,kDAAkD;YAClD,IAAI,IAAI,CAAC,uBAAuB,IAAI,CAAC,KAAK,KAAK,kBAAkB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACnF,OAAO,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC;qBACzD,IAAI,CAAC,UAAC,GAAG;oBACN,KAAI,CAAC,KAAK,GAAG,KAAK,IAAI,kBAAkB,CAAC,GAAG,CAAC;oBAC7C,OAAO,GAAG,CAAC;gBACf,CAAC,CAAC,CAAC;aACV;iBACI;gBACD,IAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACjC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,QAAQ,CAAC,OAAO,CAAC;aAC3B;SACJ;QACD,OAAO,EAAE,EAAE;YACP,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,IAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACjC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,QAAQ,CAAC,OAAO,CAAC;SAC3B;IACL,CAAC;IAjEM,6BAAO,GAAG,CAAC,IAAI,EAAE,qCAAqC,EAAE,qBAAqB,CAAC,CAAC;IAgF1F,4BAAC;CAAA;AAED;IAEI,kCAAgC,QAAa;QAAb,aAAQ,GAAR,QAAQ,CAAK;IAC7C,CAAC;IAIO,0CAAO,GAAf,UAAgB,GAAG,EAAE,MAAM,EAAE,KAAK;QAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,6CAAU,GAAlB,UAAmB,GAAG,EAAE,MAAM;QAC1B,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,WAAC,IAAI,oBAAQ,CAAC,QAAO,EAAhB,CAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,GAAG,CAAC,CAAC;QAElF,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,UAAS,OAAO;YACnC,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC;IAEK,wDAAqB,GAA3B,UAA4B,KAAU,EAAE,KAA6B;;;;;;;wBAC3D,EAAE,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC;6BAC9B,GAAE,CAAC,MAAM,IAAI,CAAC,GAAd,wBAAc;wBACd,qBAAM,IAAI,CAAC,IAAI,EAAE;;wBAAjB,SAAiB,CAAC;;;oBAGtB,gEAAgE;oBAChE,sBAAO,IAAI,CAAC,QAAQ,CAAC,cAAM,YAAK,CAAC,iBAAiB,GAAG,KAAK,EAA/B,CAA+B,CAAC,CAAC,IAAI,CAAC,cAAM,YAAI,CAAC,QAAQ,CAAC;4BAEjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;4BAChC,IAAM,OAAO,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE,CAAC;4BAEjD,IAAI,SAAS,GAAG,CAAC,CAAC,+BAA+B,CAAC,CAAC,IAAI,EAAE,CAAC;4BAC1D,SAAS,GAAG,KAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;4BAEjH,IAAI,IAAI,GAAG,KAAI,CAAC,UAAU,CAAC,SAAS,EAAE;gCAClC,eAAe,EAAE,KAAK,CAAC,eAAe;gCACtC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,eAAe;gCACrE,CAAC,EAAE,OAAO;6BACb,CAAC,CAAC;4BACH,OAAO,KAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBACzC,CAAC,CAAC,EAdqE,CAcrE,CAAC,EAAC;;;;KACP;IAED,uCAAI,GAAJ;QACI,IAAM,IAAI,GAAG,mBAAmB;YAC5B,sBAAsB;YACtB,YAAY;YACZ,gCAAgC;YAChC,mCAAmC;YACnC,aAAa;YACb,0DAA0D;YAC1D,aAAa;YACb,SAAS,CAAC;QAEd,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtC,CAAC;IACL,+BAAC;AAAD,CAAC;AAED;IAAuC,4CAAwB;IAG3D,kCAAoB,EAAO,EAAE,QAAa;QAA1C,YACI,kBAAM,QAAQ,CAAC,SAClB;QAFmB,QAAE,GAAF,EAAE,CAAK;;IAE3B,CAAC;IAED,8CAAW,GAAX,UAAY,IAAY,EAAE,KAAU;QAChC,IAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACjC,cAAc,CAAC,iBAAiB,CAAC,UAAU,WAAW;YAClD,IAAI,WAAW,EAAE;gBACb,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAC1B;YAED,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEnB,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;IAnBM,gCAAO,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAC;IAoBlE,+BAAC;CAAA,CArBsC,wBAAwB,GAqB9D;AAEM;IAIH,kCAAqB,aAA6B;QAA7B,kBAAa,GAAb,aAAa,CAAgB;IAClD,CAAC;IAED,uCAAI,GAAJ;QACI,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,wDAAqB,GAArB,UAAsB,KAAU,EAAE,KAA6B;QAC3D,IAAI;YACA,aAAa;YACb,IAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;YAC3E,OAAO,CAAC,WAAW,CAAe,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;YAE9F,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChC;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC5B;IACL,CAAC;IAEK,uDAAoB,GAA1B;;;;;;;wBACI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;4BAC5B,sBAAO;yBACV;wBACK,SAAS,GAAG,kBAAkB,CAAC,aAAa,KAAK,SAAS,IAAI,kBAAkB,CAAC,aAAa,KAAK,IAAI,CAAC;wBACxG,QAAQ,GAAS,MAAO,CAAC,QAAQ,CAAC;wBAClC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,UAAG,QAAQ,CAAC,QAAQ,eAAK,QAAQ,CAAC,IAAI,oBAAiB,CAAC,CAAC,CAAC,UAAG,QAAQ,CAAC,QAAQ,eAAK,QAAQ,CAAC,IAAI,8BAA2B,CAAC;wBAChJ,gBAAgB,GAA+D,IAAI,CAAC;6BAEpF,mBAAkB,IAAI,MAAM,GAA5B,wBAA4B;;;;wBAEF,qBAAY,MAAO,CAAC,gBAAgB,EAAE;;wBAAtD,aAAa,GAAG,SAAsC;wBAC5D,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;;gCAClC,KAAqB,2BAAa,CAAC,OAAO,6CAAE;oCAAvC;oCACD,6BAA6B;oCAC7B,IAAI,QAAM,KAAK,aAAa,CAAC,aAAa,EAAE;wCACxC,gBAAgB,GAAG;4CACf,IAAI,EAAE,QAAM,CAAC,IAAI;4CACjB,GAAG,EAAE,QAAM,CAAC,GAAG;4CACf,MAAM,EAAE,QAAM,CAAC,MAAM;4CACrB,KAAK,EAAE,QAAM,CAAC,KAAK;yCACtB,CAAC;qCACL;iCACJ;;;;;;;;;yBACJ;;;;wBAED,OAAO,CAAC,GAAG,CAAC,IAAE,CAAC,CAAC;;;wBAIpB,OAAO,GAAG,sCAAsC,CAAC;wBACrD,IAAI,gBAAgB,EAAE;4BAClB,KAAW,GAAG,IAAI,gBAAgB,EAAE;gCAChC,OAAO,IAAI,WAAI,GAAG,cAAI,gBAAgB,CAAC,GAAG,CAAC,CAAE,CAAC;6BACjD;yBACJ;wBACK,MAAO,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;;;;;KAC9C;IAEO,6CAAU,GAAlB,UAAmB,KAAyH;;QACxI,OAAO,KAAK,CAAC,CAAC,CAAwC;YAC9C,oCAAoC;YACpC,WAAW,wBAAM,KAAK,CAAC,WAAW,KAAE,QAAQ,EAAE,WAAK,CAAC,WAAW,CAAC,QAAQ,0CAAE,GAAG,CAAC,WAAC,YAAI,8BAAK,CAAC,KAAE,IAAI,EAAO,OAAC,CAAC,IAAI,0CAAE,QAAQ,EAAE,IAAE,IAAC,GAAC;YAC5H,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,gBAAgB,eAAM,KAAK,CAAC,gBAAgB,CAAC;YAC7C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,wBAAwB;YACzD,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,mBAAmB;YAC/C,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,sBAAsB;YAC1D,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe;SACtD;YACD,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IA3EM,oCAAW,GAAG,sBAAsB,CAAC;IACrC,gCAAO,GAAG,CAAC,eAAe,EAAG,wBAAwB,CAAC,CAAC;IA2ElE,+BAAC;CAAA;AAED;IAA2C,gDAAwB;IAG/D,sCAAoB,EAAO,EAAU,aAA4B,EAAU,cAAmB,EAAE,QAAa;QAA7G,YACI,kBAAM,QAAQ,CAAC,SAClB;QAFmB,QAAE,GAAF,EAAE,CAAK;QAAU,mBAAa,GAAb,aAAa,CAAe;QAAU,oBAAc,GAAd,cAAc,CAAK;;IAE9F,CAAC;IAED,kDAAW,GAAX,UAAY,IAAY,EAAE,KAAU;QAApC,iBA2BC;QA1BG,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAGzB,MAAO,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,UAAC,GAAG,EAAE,MAAM;YAC/D,IAAI,GAAG,EAAE;gBACL,IAAI,GAAG,KAAK,uBAAuB,EAAE;oBACjC,KAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,cAAM,eAAQ,CAAC,OAAO,EAAE,EAAlB,CAAkB,CAAC,CAAC,KAAK,CAAC,UAAC,GAAG;wBAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;wBAChB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC1B,CAAC,CAAC,CAAC;oBACH,OAAO;iBACV;qBAAM;oBACH,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;oBACrC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC3B;aACJ;iBACI;gBACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;aAClD;YAED,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAGH,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,uDAAgB,GAAhB;QACI,IAAM,QAAQ,GAAG,8BAA8B,CAAC;QAChD,IAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,2FAA2F,CAAC,CAAC;QAC3I,IAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;QAC3D,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC,QAAQ,EAAE;YACX,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,EAClF,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAC1E,UAAC,IAAI;gBACD,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC/B,MAAO,CAAC,OAAO,CAAC,WAAW,CAAC,oBAAoB,EAAE;YAC5D,CAAC,CAAC,CAAC;SACV;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;IAnDM,oCAAO,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,4BAA4B,CAAC,CAAC;IAoDzG,mCAAC;CAAA,CArD0C,wBAAwB,GAqDlE;AAEK,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/D,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,8BAA8B,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;AAC7E,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,0BAA0B,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACrE,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,0BAA0B,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAErE,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,qCAAqC,EAAE,CAAC,eAAe,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,0BAA0B;IACpJ,UAAU,aAAa,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,wBAAwB;QACrG,IAAI,aAAa,CAAC,MAAM,IAAI,CAAO,MAAO,CAAC,SAAS,CAAC,QAAQ,IAAU,MAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;YAChI,OAAO,wBAAwB,CAAC;SACnC;aACI,IAAI,kBAAkB,CAAC,QAAQ,IAAI,SAAS,EAAE;YAC/C,OAAO,4BAA4B,CAAC;SACvC;QAED,OAAO,wBAAwB,CAAC;IACpC,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9UL;IAIH,iCAAoB,KAAsB,EAAU,aAA6B,EAAU,UAA6B,EAAU,SAA8B;QAA5I,UAAK,GAAL,KAAK,CAAiB;QAAU,kBAAa,GAAb,aAAa,CAAgB;QAAU,eAAU,GAAV,UAAU,CAAmB;QAAU,cAAS,GAAT,SAAS,CAAqB;IAChK,CAAC;IAEY,oDAAkB,GAA/B;;;;;;gBACI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM;oBAAE,sBAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC;gBAE/E,IAAI;oBACM,OAAO,GAAG,UAAI,CAAC,UAAU,CAAC,UAAU,0CAAE,OAAO,CAAC;oBACpD,IAAI,CAAC,OAAO;wBAAE,sBAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC;oBACtC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5D,IAAI,YAAY,IAAI,EAAE;wBAAE,sBAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC;iBACzD;gBAAC,OAAO,EAAE,EAAE;oBACT,sBAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC;iBACjC;gBAED,CAAC,CAAC,OAAO,EAAE,CAAC;gBACN,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;oBACnB,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,UAAU;oBAClD,aAAa;oBACb,kBAAkB,EAAE,IAAI;oBACxB,aAAa;oBACb,WAAW,EAAE,IAAI;iBACpB,CAAC,CAAC;gBAEH,sBAAO,GAAG;yBACL,IAAI,CAAC,cAAM,cAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAtB,CAAsB,CAAC;yBAClC,KAAK,CAAC,UAAC,KAAK;wBACT,IAAI,KAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;4BAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;yBACrC;wBACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;4BACrB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;yBAChC;wBAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAClC,CAAC,CAAC;yBACD,OAAO,CAAC,cAAM,QAAC,CAAC,SAAS,EAAE,EAAb,CAAa,CAAC,EAAC;;;KACrC;IAEY,0DAAwB,GAArC;;;;;4BACoB,qBAAM,IAAI,CAAC,kBAAkB,EAAE;;wBAAzC,OAAO,GAAG,SAA+B;wBAE/C,IAAI,OAAO,EAAE;4BACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;4BAC1C,sBAAO,IAAI,EAAC;yBACf;wBACD,sBAAO,KAAK,EAAC;;;;KAChB;IAlDM,+BAAO,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC;IAoDpG,8BAAC;CAAA;AAEK,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEzE,+DAAe,yBAAyB,EAAC;;;;;;;;;;;;;ACvCzC;IAEI,0BACY,aAA4B,EAC5B,WAAwB;QADxB,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;IAEpC,CAAC;IAED,8CAAmB,GAAnB,UAAoB,IAAoB;QACpC,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE;gBAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;aAC3F;iBACI;gBACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACtE;YAED,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YAEjI,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;aACvF;iBACI;gBACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aAClG;YACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,2CAAgB,GAAhB,UAAiB,MAAc,EAAE,IAAoB;QACjD,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE;gBAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;aAC3F;iBACI;gBACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACtE;YAED,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YAEjI,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;aACvF;iBACI;gBACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aAClG;YACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;IAGD,mEAAwC,GAAxC,UAAyC,SAAqB,EAAE,OAAe,EAAE,YAAqB,EAAE,GAAQ;QAC5G,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,EAAE;YACjC,IAAM,UAAU,GAAS,IAAI,CAAC,WAAY,CAAC,aAAa,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACrF,IAAM,uBAAuB,GAAI,SAAS,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC;YACxF,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,GAAG,uBAAuB,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5F,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,GAAG,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;YAChF,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACvG;aAAM;YACH,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClE,gBAAgB,GAAG,cAAc,CAAC;YAClC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YACtH,IAAI,CAAC,YAAY,EAAE;gBACf,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;aAC5E;SACJ;QAED,OAAmB;YACf,eAAe,EAAE,cAAc;YAC/B,GAAG,EAAE,QAAQ;YACb,sBAAsB,EAAE,gBAAgB;SAC3C;IACL,CAAC;IAnFM,wBAAO,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;IAoFxE,uBAAC;CAAA;AAEK,OAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5B,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;ACnHF;AA0EpD,CAAC;AA2GN,yDAAyD;AACzD,IAAM,oBAAoB,GAAG,UAAC,aAAkB,EAAE,aAAkB,EAAE,KAAU,EAAE,eAAoB,EAClG,cAAmB,EAAE,aAAkB,EAAE,cAAmB,EAAE,cAAmB,EAAE,WAAgB,EACnG,cAAmB,EAAE,eAAoB,EAAE,aAAkB;IAC7D,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;QAC5B,IAAM,KAAG,GAAsB,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,GAAG,KAAG,CAAC;KACpB;IACD,aAAa;IACb,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;QAC3B,YAAY;QACZ,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;KAClB;IACD,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC;IAClC,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC;IAClC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;IACzB,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC;IACtC,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;IACpC,GAAG,CAAC,cAAc,GAAG,aAAa,CAAC;IACnC,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;IACpC,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;IACpC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IAC9B,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;IACpC,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC;IACtC,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC;IAClC,OAAO,iEAAiB,CAAC,QAAQ,CAAC;AACtC,CAAC;AAGD,+DAAe,oBAAoB,EAAC;;;;;;;;;;;;;;;;;;AChN2G;AAUxI;IAUH,wBACY,EAAa,EACb,aAA6B,EAC7B,cAA+B,EAC/B,oBAA2C,EAC3C,oBAA2C,EAC3C,kBAAyC,EACzC,oBAA2C,EAC3C,2BAAkD,EAClD,0BAAiD,EACjD,gBAAyC,EACzC,aAA4B,EAC5B,KAAoB,EACpB,YAAiB,EACjB,UAAe;QAbf,OAAE,GAAF,EAAE,CAAW;QACb,kBAAa,GAAb,aAAa,CAAgB;QAC7B,mBAAc,GAAd,cAAc,CAAiB;QAC/B,yBAAoB,GAApB,oBAAoB,CAAuB;QAC3C,yBAAoB,GAApB,oBAAoB,CAAuB;QAC3C,uBAAkB,GAAlB,kBAAkB,CAAuB;QACzC,yBAAoB,GAApB,oBAAoB,CAAuB;QAC3C,gCAA2B,GAA3B,2BAA2B,CAAuB;QAClD,+BAA0B,GAA1B,0BAA0B,CAAuB;QACjD,qBAAgB,GAAhB,gBAAgB,CAAyB;QACzC,kBAAa,GAAb,aAAa,CAAe;QAC5B,UAAK,GAAL,KAAK,CAAe;QACpB,iBAAY,GAAZ,YAAY,CAAK;QACjB,eAAU,GAAV,UAAU,CAAK;QAvB3B,cAAS,GAAY,KAAK,CAAC;QAC3B,8BAAyB,GAAY,KAAK,CAAC;QAwBjC,IAAI,CAAC,UAAW,CAAC,yBAAyB,GAAG,KAAK,CAAC;IAC7D,CAAC;IAED,sCAAa,GAAb;QACU,IAAI,CAAC,UAAW,CAAC,yBAAyB,GAAG,IAAI,CAAC;IAC5D,CAAC;IAED,uCAAc,GAAd;QACI,IAAI,WAAW,GAAgB,EAAE,CAAC;QAElC,0CAA0C;QAC1C,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAClH,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;YAC1B,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAEjJ,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ;YAC3B,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAEjJ,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO;YAC1B,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAE3I,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS;YAC5B,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAExJ,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe;YAClC,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,4BAA4B,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAEnK,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS;YAC5B,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE,6BAA6B,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE/J,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW;YAC9B,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEpI,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,8CAAqB,GAArB;QACI,IAAI,GAAG,GAAoC,EAAE,CAAC;QAC9C,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,WAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;IAED,6BAAI,GAAJ,UAAK,KAAU,EAAE,GAAW,EAAE,QAAa;QACvC,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC;YACvC,GAAG,CAAC,QAAS,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,+BAAM,GAAN,UAAO,KAAU,EAAE,GAAW,EAAE,QAAa;QACzC,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACnC,GAAG,CAAC,QAAS,CAAC,WAAW,GAAG,IAAI,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,iDAAwB,GAAxB,UAAyB,KAAK,EAAE,GAAG;QAC/B,IAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,UAAU,EAAE;YAC9D,OAAO,GAAG,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC;gBAC7C,GAAG,CAAC,QAAS,CAAC,WAAW,GAAG,IAAI,CAAC;YAC3C,CAAC,CAAC,CAAC;SACN;aACI;YACD,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;gBACvB,GAAG,CAAC,QAAS,CAAC,WAAW,GAAG,IAAI,CAAC;YAC3C,CAAC,CAAC,CAAC;YAAA;AAAC;SACP;IACL,CAAC;IAAA,CAAC;IAEF;;;;MAIE;IACF,oCAAW,GAAX,UAAY,OAAO,EAAE,KAAK;QAA1B,iBA8GC;QA5GG,IAAI;YACA,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAChD;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,OAAO,SAAS,CAAC,OAAO,CAAC;SAC5B;QAED,IAAI,WAAW,CAAC,QAAQ,IAAI,IAAI,EAAE;YAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAM,IAAI,GAAG,6BAA6B,CAAC;YAC3C,QAAQ,CAAC,OAAO,CAAC;gBACb,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE;oBACN,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,mBAAmB,EAAE,IAAI;iBAC5B;aAEJ,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,OAAO,CAAC;SAC3B;QAED,IAAI,OAAO,GAAG;YACV,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;SACrB,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;QAGzC,IAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAO,CAAC;QAC1C,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC;QAE/B,IAAI,MAAM,CAAC,MAAM,EAAE;YACf,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;gBAC/G,IAAI,WAAW,CAAC,GAAG,IAAI,sBAAsB,EAAE;oBAC3C,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,cAAM,YAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAA9B,CAA8B,CAAC,CAAC,CAAC,QAAQ;iBACjE;aACJ;SACJ;QAGD,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;YACnD,GAAG,GAAG,GAAG;iBACJ,IAAI,CAAC;gBACF,KAAI,CAAC,UAAU,CAAC,yBAAyB,GAAG,IAAI,CAAC;gBACjD,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC,CAAC,CAAC;SACV;QAED,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;YACX,KAAI,CAAC,UAAU,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACjD,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC,IAAI,CAAC,UAAC,GAAwB;;YACrC,CAAC,CAAC,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;gBAC3B,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC;gBAC/B,IAAI,SAAG,CAAC,QAAQ,0CAAE,mBAAmB,EAAE;oBACnC,CAAM,SAAG,CAAC,QAAQ,0CAAE,mBAAoB,EAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC;iBACvE;aACJ;YAED,KAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;YAC3C,OAAO,KAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC;gBACjD,KAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC;gBAC1C,IAAI,CAAC,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACxB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAEf,OAAO,CAAC,CAAC,OAAO,CAAC;YACrB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;aACD,KAAK,CAAC,UAAC,GAAG;YACP,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS,EAAE;gBACrC,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC;aACzE;YACD,MAAM,GAAG,CAAC;QACd,CAAC,CAAC;aACD,OAAO,CAAC;YACL,CAAC,CAAC,SAAS,EAAE,CAAC;YACR,WAAW,CAAC,QAAS,CAAC,WAAW,GAAG,IAAI,CAAC;YAC/C,KAAI,CAAC,UAAU,CAAC,yBAAyB,GAAG,KAAK,CAAC;YAElD,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ;gBACtB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,UAAU,EAAE;gBAC9D,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;aAC1C;YAED,IAAI,MAAM,CAAC,MAAM,EAAE;gBACf,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;oBAC/G,IAAI,WAAW,CAAC,GAAG,KAAK,sBAAsB,EAAE;wBAC5C,KAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;qBAC/B;iBACJ;aACJ;YAED,KAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IAEP,CAAC;IAAA,CAAC;IAEF,+BAAM,GAAN,UAAO,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;QAA9C,iBAqMC;QApMG,IAAI,OAAO,GAAG;YACV,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC7B,CAAC;QAEF,IAAI,CAAC,GAAG,IAAI,CAAC;QACb,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YAEvB,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;YACtB,IAAI,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;gBACtD,cAAc,CAAC,kBAAkB,CAAC,CAAC;gBACnC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;oBACjG,cAAc,CAAC,cAAc,CAAC;YAEtC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,UAAC,EAAE;gBAC/B,IAAI,EAAE,CAAC,eAAe,IAAI,aAAa;oBACnC,EAAE,CAAC,SAAS,IAAI,aAAa,EAAE;oBAC/B,IAAI,GAAG,GAAG,KAAI,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC;oBAC1E,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;oBAE1B,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC/B,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BACP,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;4BAChC,SAAS,CAAC,OAAO,CAAC;gCACd,MAAM,EAAE,MAAM,CAAC,MAAM;gCACrB,MAAM,EAAE,IAAI;gCACZ,mBAAmB,EAAE,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gCACzC,mBAAmB,EAAE,4BAA4B;gCACjD,uBAAuB,EAAE,EAAE,CAAC,mBAAmB;gCAC/C,SAAS,EAAE,MAAM,CAAC,SAAS;6BAC9B,CAAC,CAAC;4BAEH,OAAO,SAAS,CAAC,OAAO,CAAC;wBAC7B,CAAC,CAAC,CAAC;wBAEH,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,GAAG;4BACX,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAClB,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;4BAChC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;4BACvB,OAAO,SAAS,CAAC,OAAO,CAAC;wBAC7B,CAAC,CAAC,CAAC;qBACN;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC,IAAI,CAAC;gBACV,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAChC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3B,OAAO,SAAS,CAAC,OAAO,CAAC;YAC7B,CAAC,CAAC,CAAC;SAEN;QAED,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE;YACpD,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAC/B,QAAQ,CAAC,MAAM,CACX;gBACI,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE;oBACN,gBAAgB,EAAE,yBAAyB;iBAC9C;aACJ,CAAC,CAAC;YACP,OAAO,QAAQ,CAAC,OAAO,CAAC;SAC3B;QAED,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE;YAClD,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC;aACI;YACD,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;SACzB;QAED,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;QACzC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACP,KAAI,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,UAAC,EAAE;YAC9C,IAAI,EAAE,CAAC,eAAe,IAAI,aAAa,EAAE;gBACrC,IAAI,GAAG,GAAG,KAAI,CAAC,UAAU,CAAC,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC;gBAC1E,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBAE1B,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBAE/B,wIAAwI;oBACxI,IAAI,MAAM,CAAC,oBAAoB,KAAK,IAAI,IAAI,EAAE,CAAC,mBAAmB,KAAK,6BAA6B,IAAI,EAAE,CAAC,mBAAmB,KAAK,sBAAsB,EAAE;wBACvJ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BACP,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;4BAChC,SAAS,CAAC,OAAO,CAAC;gCACd,MAAM,EAAE,MAAM,CAAC,MAAM;gCACrB,mBAAmB,EAAE,EAAE;gCACvB,mBAAmB,EAAE,oCAAoC;gCACzD,MAAM,EAAE,IAAI;gCACZ,SAAS,EAAE,MAAM,CAAC,SAAS;6BAC9B,CAAC,CAAC;4BACH,OAAO,SAAS,CAAC,OAAO,CAAC;wBAC7B,CAAC,CAAC,CAAC;qBACN;yBACI,IAAI,EAAE,CAAC,mBAAmB,IAAI,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,QAAQ,IAAI,EAAE,CAAC,mBAAmB,CAAC,QAAQ,IAAI,EAAE,CAAC,mBAAmB,CAAC,QAAQ,KAAK,WAAW,CAAC,GAAG,EAAE;wBACvK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BACP,IAAM,QAAQ,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;4BACjC,QAAQ,CAAC,MAAM,CACX;gCACI,MAAM,EAAE,KAAK;gCACb,QAAQ,EAAE;oCACN,gBAAgB,EAAE,qEAA8D,EAAE,CAAC,mBAAmB,CAAC,QAAQ,sCAAmC;iCACrJ;6BACJ,CAAC,CAAC;4BACP,OAAO,QAAQ,CAAC,OAAO,CAAC;wBAC5B,CAAC,CAAC,CAAC;qBACN;yBAEG,IAAI,WAAW,CAAC,GAAG,IAAI,sBAAsB,EAAE;wBAC3C,IAAI,CAAC,CAAC,EAAE,CAAC,mBAAmB,IAAI,CAAC,EAAE,CAAC,mBAAmB,IAAI,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,gBAAgB;4BAClG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAQ,OAAO,KAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAG;gCACtF,IAAM,QAAQ,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gCACjC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE;oCACrC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iCAChC;qCAAM;oCACH,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;iCACzB;gCACD,OAAO,QAAQ,CAAC,OAAO,CAAC;4BAC5B,CAAC,CAAC,CAAC;yBACN;6BACI;4BACD,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gCACP,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gCAChC,SAAS,CAAC,OAAO,CAAC;oCACd,MAAM,EAAE,MAAM,CAAC,MAAM;oCACrB,MAAM,EAAE,IAAI;oCACZ,SAAS,EAAE,MAAM,CAAC,SAAS;iCAC9B,CAAC,CAAC;gCACH,OAAO,SAAS,CAAC,OAAO,CAAC;4BAC7B,CAAC,CAAC,CAAC;yBACN;qBACJ;yBACI;wBACD,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAQ,OAAO,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACzF;oBAEL,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,GAAG;;wBACX,GAAG,CAAC,uBAAuB,GAAG,EAAE,CAAC,mBAAmB,CAAC;wBACrD,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE;4BACpC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;yBACpC;wBACD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;4BAC3B,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC;4BAC/B,IAAI,SAAG,CAAC,QAAQ,0CAAE,mBAAmB,EAAE;gCACnC,CAAM,SAAG,CAAC,QAAQ,0CAAE,mBAAoB,EAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC;gCACpE,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE;oCAC1B,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;iCAC9D;gCACD,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE;oCAC1B,GAAG,CAAC,mBAAmB,GAAG,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;iCAC9D;6BACJ;yBACJ;wBAED,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAClB,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;wBAChC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBACvB,OAAO,SAAS,CAAC,OAAO,CAAC;oBAC7B,CAAC,CAAC,CAAC;iBACN;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAC,GAAG;YACX,KAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;YAC3C,OAAO,KAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC;gBACjD,KAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAC;gBAC1C,IAAI,CAAC,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBACxB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACf,OAAO,CAAC,CAAC,OAAO,CAAC;YACrB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC,OAAO,CAAC;YACD,KAAI,CAAC,UAAW,CAAC,yBAAyB,GAAG,KAAK,CAAC;YACzD,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ;gBACtB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,UAAU,EAAE;gBAC9D,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;aAC1C;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,CAAC,IAAI,CAAC;YACV,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,SAAS,CAAC,OAAO,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAAA,CAAC;IAEF,iCAAQ,GAAR,UAAS,GAAW;QAChB,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAEtD,IAAI,SAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,KAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE;YAC1E,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SACvC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,uCAAc,GAAd,UAAe,KAAU,EAAE,WAAuB,EAAE,YAAoB;QAA7C,qDAAuB;QAAE,mDAAoB;QACpE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAO,CAAC;QAC3D,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;YAC7B,GAAG,CAAC,WAAW,GAAG,sBAAsB,CAAC;SAC5C;QAED,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,kBAAkB,EAAE;YACpF,GAAG,CAAC,WAAW,GAAG,eAAe,CAAC;SACrC;QAED,IAAI,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;QACxD,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAGhF,IAAI,CAAC,EAAE,EAAE;YACL,IAAI,YAAY,KAAK,IAAI;gBACrB,OAAO,IAAI,CAAC;YAEhB,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CACjC,6HAA6H,CAAC,CAAC;YACnI,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;SACtB;QAED,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE;YACT,EAAE,CAAC,QAAS,CAAC,WAAW,GAAG,KAAK,CAAC;YACvC,IAAI,CAAC,SAAS,GAAS,EAAE,CAAC,QAAS,CAAC,SAAS,KAAK,IAAI,CAAC;SAC1D;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAAA,CAAC;IAEF,mCAAU,GAAV,UAAW,aAAqB,EAAE,mBAA2B;QACzD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAC3G,CAAC;IAAA,CAAC;IAEF,4CAAmB,GAAnB,UAAoB,GAAG,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAmB;QACpF,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE;YAC3B,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YAChD,IAAI,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;SACpD;QAED,CAAC,CAAC,gBAAgB,IAAI,MAAM,CAAC;QAE7B,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEb,OAAO,GAAG,CAAC;IACf,CAAC;IAAA,CAAC;IAEF,6CAAoB,GAApB,UAAqB,GAAG;QACpB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG;YAC1D,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,IAAI,CAAC;gBAC9B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;;gBAEhB,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAAA,CAAC;IAEF,2CAAkB,GAAlB,UAAmB,GAAG,EAAE,sBAAsB;QAC1C,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG;YAC1D,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;gBACnB,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;gBACvB,IAAI,sBAAsB,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,KAAK,IAAI;oBACtG,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc;oBACjC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC;aAChD;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACf,CAAC;IAAA,CAAC;IAEF,+CAAsB,GAAtB,UAAuB,GAAG;QACtB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG;YAC1D,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE;gBACtB,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;gBACtC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC;aACtC;YAED,+HAA+H;YAC/H,GAAG,CAAC,GAAG,CAAC,CAAC,wBAAwB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC;QAClE,CAAC,CAAC,CAAC;IACP,CAAC;IAAA,CAAC;IAEF,4CAAmB,GAAnB,UAAoB,GAAG,EAAE,YAAY;QAArC,iBAeC;QAdG,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,UAAC,GAAG;YACjD,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAElB,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE;gBACnF,YAAY,CAAC,IAAI,CAAC,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,6DAA6D,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;sBACtH,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC5D,SAAS,GAAG,IAAI,CAAC;aACpB;YACD,GAAG,EAAE,CAAC;QACV,CAAC,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACrB,CAAC;IAAA,CAAC;IAEF,oCAAW,GAAX,UAAY,aAAa;QACrB,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,YAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,KAAI,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,KAAK,UAAU,EAAE;YACjF,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;SAC1D;QAED,IAAI,QAAQ,IAAI,sBAAsB,EAAE;YACpC,GAAG,GAAG;gBACF,OAAO,EAAE,aAAa,CAAC,aAAa;gBACpC,QAAQ,EAAE,aAAa,CAAC,QAAQ;aACnC,CAAC;SACL;aAAM,IAAI,QAAQ,IAAI,4BAA4B,EAAE;YACjD,GAAG,GAAG;gBACF,OAAO,EAAE,aAAa,CAAC,oBAAoB;gBAC3C,QAAQ,EAAE,aAAa,CAAC,cAAc;aACzC,CAAC;SACL;aAAM,IAAI,QAAQ,IAAI,6BAA6B,EAAE;YAClD,GAAG,GAAG;gBACF,OAAO,EAAE,aAAa,CAAC,GAAG;gBAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;aACnC,CAAC;SACL;;YAEG,GAAG,GAAG;gBACF,OAAO,EAAE,aAAa,CAAC,SAAS;gBAChC,QAAQ,EAAE,aAAa,CAAC,QAAQ;aACnC,CAAC;QAEN,OAAO,GAAG,CAAC;IACf,CAAC;IAAA,CAAC;IAEF,uCAAc,GAAd,UAAe,QAAQ;QACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACpB,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE;gBACvB,QAAQ,CAAC,QAAQ,GAAG,sBAAsB,CAAC;aAC9C;iBACI,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE;gBAC3B,QAAQ,CAAC,QAAQ,GAAG,oBAAoB,CAAC;aAC5C;iBAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACvB,QAAQ,CAAC,QAAQ,GAAG,4BAA4B,CAAC;aACpD;iBAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACvB,QAAQ,CAAC,QAAQ,GAAG,6BAA6B,CAAC;aACrD;SACJ;QAED,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC7B,CAAC;IAED,gCAAO,GAAP,UAAQ,IAAI,EAAE,IAAI,EAAE,EAAE;QAClB,IAAI,KAAK,CAAC;QACV,OAAO,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI;YACJ,IAAI,OAAO,CAAC,UAAC,EAAE,EAAE,GAAG,IAAK,YAAK,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAjC,CAAiC,CAAC;SAC9D,CAAC,CAAC,OAAO,CAAC,cAAM,mBAAY,CAAC,KAAK,CAAC,EAAnB,CAAmB,CAAC,CAAC;IAC1C,CAAC;IAED;;;MAGE;IACF,0CAAiB,GAAjB,UAAkB,KAAK,EAAE,eAAe;QAAxC,iBA0DC;QAzDG,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,IAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAO,CAAC;QAE1C,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC;QAG/B,IAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACvE,IAAI,CAAC,CAAC,cAAc,EAAE;YAClB,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,WAAW,CAAC,eAAe,KAAK,eAAe,EAAE;gBACjD,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACzC,OAAO,YAAY,CAAC,OAAO,CAAC;aAC/B;SACJ;QAED,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC;QAE3B,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,UAAU,EAAE;YACzG,OAAO,GAAG,CAAC,IAAI,CAAC;gBACZ,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACxB,OAAO,SAAS,CAAC,OAAO,CAAC;YAC7B,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;YACnD,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,cAAM,kBAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,EAA3B,CAA2B,CAAC;SACpD;QAED,OAAO,GAAG,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9B,KAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;iBACnF,IAAI,CAAC,UAAC,GAAG;gBACN,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC;oBAC3D,eAAe,EAAE,eAAe;oBAChC,MAAM,EAAE,GAAG;iBACd,CAAC,CAAC,CAAC;gBAEJ,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAChC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,SAAS,CAAC,OAAO,CAAC;YAC7B,CAAC,CAAC;iBACD,KAAK,CAAC,WAAC;gBACJ,IAAI,CAAC,KAAK,EAAE,EAAE;oBACV,IAAI,SAAS,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;oBAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACxB,OAAO,SAAS,CAAC,OAAO,CAAC;iBAC5B;YACL,CAAC,CAAC,CAAC;QACX,CAAC,CAAC;aACG,OAAO,CAAC;YACL,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ;gBACtB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,UAAU,EAAE;gBAC9D,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;aAC1C;QACL,CAAC,CAAC,CAAC;IACX,CAAC;IAAA,CAAC;IAEF,6CAAoB,GAApB,UAAqB,WAAW;QAAhC,iBAQC;QAPG,WAAW,CAAC,YAAY,GAAG,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAClE,KAAK,CAAC,OAAO,CAAC,UAAC,CAAC;YACZ,IAAI,CAAC,CAAC,SAAS,KAAK,aAAa,EAAE;gBAC/B,WAAW,CAAC,YAAY,CAAC,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC;aAC/F;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAAA,CAAC;IAppBK,sBAAO,GAAG;QACb,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,sBAAsB;QACvF,oBAAoB,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,qHAAgB;QAC3H,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY;KACzD,CAAC;IAipBN,qBAAC;CAAA;AAED,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxqByC;AACxB;AAEjC;AAI0C;AAE/F,IAAM,qBAAqB,GAAG,EAAE,CAAC;AAGjC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,iBAAiB,EAClD,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe;IACxF,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,wFAAc,EAAE,6EAAW,EAAE,YAAY,EAAE,0FAAuB;IAC5H,UAAU,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,YAA0B,EAAE,YAAY,EAAE,aAAa,EAChG,QAAQ,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAqC,EAAE,eAAe,CAAC,WAAwB,EAAE,UAA6B,EAAE,uBAAgD;QADnN,iBA4yBC;QA1yBG,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;QAC9B,MAAM,CAAC,mBAAmB,GAAG;YACzB,6FAA6F;YAC7F,OAAO,IAAI,CAAC;YACZ,8DAA8D;QAClE,CAAC,CAAC;QAEF,MAAM,CAAC,MAAM,GAAG;YACZ,OAAO,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;QACjC,CAAC,CAAC;QAEF,cAAc;QACd,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;QAE3B,sFAAsF;QACtF,uDAAuD;QACvD,qDAAqD;QACrD,4DAA4D;QAC5D,2DAA2D;QAE3D,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,sDAAsD;QAEtF,IAAI,MAAM,CAAC,eAAe;YACtB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,mCAAmC;QAElE,EAAE;QACF,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC;QACnD,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC;QAC7C,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC,mBAAmB,CAAC;QAC3D,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC;QAC5C,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;QACrC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAEtB,MAAM,CAAC,SAAS,GAAG,yEAAgC,IAAI,SAAS,CAAC,wDAAuD;QACxH,yCAAyC;QACzC,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;QACzC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;QACxB,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE;YAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,CAAC,QAAQ,GAAG;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,EAAE;gBAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAE9B,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,CAAC,iBAAiB,GAAG;YACvB,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,KAAK;SAClB,CAAC;QAEF,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAEjF,MAAM,CAAC,UAAU,GAAG;YAChB,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YAC7E,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,CAAC,YAAY,GAAG;YAClB,IAAG,MAAM,CAAC,OAAO;gBACb,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YAEpD,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC;YACzB,QAAQ,CAAC;gBACL,OAAO,CAAC,GAAG,CAAC,eAAe,GAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,IAAI,WAAW,EAAE;oBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;wBACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;4BAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;4BAC1B,MAAM;yBACT;qBACJ;iBACJ;qBACI;oBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;4BAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;4BACvB,MAAM;yBACT;qBACJ;iBACJ;gBAED,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;YAC1E,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAGF,SAAS,gBAAgB,CAAC,CAAC;YACvB,IAAG,MAAM,CAAC,OAAO,EAAC;gBACd,IAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC;oBAC5E,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;qBACtB,IAAG,CAAC,CAAC,OAAO,KAAK,CAAC;oBACnB,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;aACpC;QACL,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,UAAU,EACtB,UAAU,QAAQ,EAAE,QAAQ;YACxB,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE;gBAC9C,MAAM,CAAC,KAAK,EAAE,CAAC;aAClB;QACL,CAAC,CACD,CAAC;QAEH,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;QAE/B,MAAM,CAAC,SAAS,GAAG;;;;;;iCACD,EAAC,aAAa,CAAC,MAAM,IAAI,yEAAgC,KAAK,OAAO,GAArE,wBAAqE;4BAAI,qBAAM,uBAAuB,CAAC,wBAAwB,EAAE;;4BAAzD,MAAC,UAAwD;;;4BAAG,SAAI;;;4BAAhJ,KAAK,KAA2I;4BACtJ,IAAI,KAAK,EAAE;gCACP,oEAAoE;gCACpE,IAAI,aAAa,CAAC,UAAU,KAAK,IAAI,IAAI,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC,aAAa,CAAC,YAAY,EAAE;oCAC7F,MAAM,CAAC,UAAU,EAAE,CAAC;iCACvB;qCAAM;oCACH,MAAM,CAAC,YAAY,EAAE,CAAC;oCACtB,cAAc,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,aAAG;wCACjC,IAAI,GAAG,EAAE;4CACL,MAAM,CAAC,gBAAgB,GAAG,cAAc,CAAC,gBAAgB,EAAE,CAAC;4CAC5D,IAAI,MAAM,CAAC,gBAAgB,IAAI,YAAY,CAAC,YAAY;gDACpD,UAAU,CAAC,cAAM,aAAM,CAAC,cAAc,EAAE,EAAvB,CAAuB,CAAC,CAAC;yCACjD;oCACL,CAAC,CAAC,CAAC;iCACN;6BACJ;;;;;SACJ;QAED,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE,IAAI;YAC1C,IAAI,UAAU,CAAC,cAAc,EAAE;gBAC3B,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC,CAAC;gBAC7F,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;aAChC;iBAAM;gBACH,MAAM,CAAC,SAAS,EAAE,CAAC;aACtB;YAED,CAAC,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC;YAEnC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,KAAK,IAAI,CAAC;YACvD,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;YAE/B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,MAAM,CAAC,UAAU,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE,IAAI;YAC1C,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,KAAK,IAAI,CAAC;YACvD,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,KAAK,IAAI,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE,UAAU,KAAK,EAAE,MAAM;YAC/D,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,2DAA2D;QAC3D,kBAAkB;QAClB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,KAAK,EAAE,IAAI;YAC5C,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAChC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAChC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK;YACvC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;YAE7B,mBAAmB,CAAC,MAAM,EAAE,CAAC;QAEjC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,GAAG;YAEhB,IAAI,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,EAAE;gBACtD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACvB,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE;oBACvC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACvB,QAAQ,CAAC;wBACL,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;oBAC3B,CAAC,EAAE,GAAG,CAAC,CAAC;oBACR,IAAM,IAAI,GAAG;wBACT,IAAI,SAAS,CAAC,YAAY,EAAE;4BACxB,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;4BAC9B,QAAQ,CAAC;gCACL,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gCACzC,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;4BAClD,CAAC,EAAE,GAAG,CAAC,CAAC;yBACX;6BAAM;4BACH,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE;gCACrC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gCAC9B,QAAQ,CAAC;oCACL,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oCACzC,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gCAClD,CAAC,EAAE,GAAG,CAAC,CAAC;4BACZ,CAAC,EAAE,KAAK,CAAC,CAAC;yBACb;oBAEL,CAAC,CAAC;oBAEF,IAAI,aAAa,CAAC,QAAQ,EAAE;wBACxB,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;qBACvB;yBAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;wBACxE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;qBACvB;gBACL,CAAC,CAAC,CAAC;aACN;QACL,CAAC,CAAC;QAEF,MAAM,CAAC,wBAAwB,GAAG;YAC9B,gGAAgG;YAEhG,MAAM,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;YACvC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;YAE1C,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxD,CAAC,CAAC;QAEF,MAAM,CAAC,wBAAwB,GAAG;YAC9B,MAAM,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;YACvC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;YAE1C,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;QAEF,UAAU,CAAC,mBAAmB,GAAG;YAC7B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,UAAU,IAAI,kBAAkB,EAAE;gBACzC,cAAc,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;aAC1B;QACL,CAAC,CAAC;QAEF,UAAU,CAAC,cAAc,GAAG;;;;;;4BACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;iCAEhC,OAAM,CAAC,UAAU,IAAI,kBAAkB,GAAvC,wBAAuC;;;;4BAEnC,qBAAM,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;;4BAA7E,SAA6E,CAAC;4BAC9E,qBAAM,cAAc,CAAC,cAAc,CAAC,aAAa,CAAC,eAAe,EAAE,aAAa,CAAC,WAAW,CAAC;;4BAA7F,SAA6F,CAAC;;;;4BAE9F,YAAY,CAAC,SAAS,CAAC,GAAC,CAAC,CAAC;;;4BAE1B,MAAM,CAAC,UAAU,EAAE,CAAC;4BACpB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;;;;;;SAGlC,CAAC;QAEF,MAAM,CAAC,UAAU,GAAG,UAAC,QAAQ;YACzB,IAAI,QAAQ,EAAE;gBACV,UAAU,CAAC,UAAU,CAAC,iCAAiC,CAAC,CAAC;aAC5D;iBAAM;gBACH,8BAA8B;gBAC9B,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,8BAA8B;aACzE;QACL,CAAC;QAED,mCAAmC;QAEnC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,2BAA2B;QAC3B,MAAM,CAAC,KAAK,GAAG,UAAU,QAAQ;YAAlB,iBA0Gd;YAzGG,IAAI,GAAG,GAAG,IAAI,CAAC;YAEf,MAAM,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;YACvC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;YAE1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBACjB,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAEnD,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;oBAC3B,OAAO,KAAK,CAAC;iBAChB;aACJ;iBACI;gBACD,GAAG,GAAG,EAAE,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;oBAC3C,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACjC;YAED,IAAI,aAAa,CAAC,QAAQ,EAAE;gBACxB,QAAQ,CAAC,IAAI,EAAE,CAAC;aACnB;iBACI;gBACD,aAAa,CAAC,YAAY,EAAE,CAAC;aAChC;YAED,CAAC,CAAC,OAAO,EAAE,CAAC;YAEZ,IAAM,UAAU,GAAG,UAAC,GAAG;gBACnB,gBAAgB;gBAChB,CAAC,CAAC,SAAS,EAAE,CAAC;gBAEd,IAAI,KAAK,GAAG,OAAO,CAAC;gBAEpB,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE;oBACxB,IAAI,MAAM,CAAC,OAAO,EAAE;wBAChB,QAAQ,CAAC;4BACL,MAAM,CAAC,QAAQ,EAAE,CAAC;4BAClB,MAAM,CAAC,iBAAiB,EAAE,CAAC;4BAC3B,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,EAAE;gCAC/B,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC;gCAC7B,MAAM,CAAC,YAAY,EAAE,CAAC;6BACzB;wBACL,CAAC,CAAC,CAAC;qBACN;gBACL,CAAC,EAAE,KAAK,CAAC,CAAC;YACd,CAAC,CAAC;YAEF,IAAM,YAAY,GAAG,UAAO,IAAI;;;;;;4BAC5B,wDAAwD;4BACxD,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;gCAC7B,aAAa,CAAC,oBAAoB,GAAG,KAAK,CAAC;gCAC3C,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;6BAC/B;4BAGK,0BAA0B,GAAG;;oCAC/B,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oCAC5C,kBAAkB;oCAElB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oCAEvB,IAAI,IAAI,CAAC,wBAAwB,EAAE;wCAC/B,gBAAgB;wCAChB,8BAA8B;wCAC9B,UAAU,CAAC,UAAU,CAAC,qBAAqB,EAAE;4CACzC,QAAQ,EAAE,aAAa,CAAC,YAAY;4CACpC,WAAW,EAAE,aAAa,CAAC,eAAe;4CAC1C,MAAM,EAAE,aAAa,CAAC,WAAW;4CACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;yCAC5B,CAAC,CAAC;qCACN;yCAAM;wCAEH,IAAI,CAAC,QAAQ,EAAE;4CACX,MAAM,CAAC,oCAAoC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;yCAClE;6CACI;4CACD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;yCAC9B;qCAEJ;oCAED,IAAI,MAAM,CAAC,OAAO;wCACd,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;;;iCACvD;4BAED,CAAC,CAAC,SAAS,EAAE,CAAC;iCACV,KAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAvG,wBAAuG;4BACvG,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,cAAc,EAC5F,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,IAAI,KAAK,EAChH,UAAO,GAAG;;;;4CACN,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;4CAChD,qBAAM,0BAA0B,EAAE;;4CAAlC,SAAkC,CAAC;;;;iCACtC,CACJ,CAAC;;;iCACK,IAAI,CAAC,eAAe,EAApB,wBAAoB;4BAC3B,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,eAAe,EAC7F,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAC5C,CAAC;;gCAEF,qBAAM,0BAA0B,EAAE;;4BAAlC,SAAkC,CAAC;;;;;iBAE1C,CAAC;YAEF,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACjH,CAAC,CAAC;QAEF,MAAM,CAAC,2BAA2B,GAAG,KAAK,CAAC;QAE3C,MAAM,CAAC,eAAe,GAAG;YACrB,MAAM,CAAC,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YAE1E,IAAI,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE;gBACpC,OAAO,KAAK,CAAC;aAChB;YACD,CAAC,CAAC,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAS,IAAI;gBAChF,CAAC,CAAC,SAAS,EAAE,CAAC;gBACd,aAAa,CAAC,cAAc,CAAC;oBACzB,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,iTAAiT,CAAC;iBACpV,EAAE;oBACC,QAAQ,CAAC;wBACL,MAAM,CAAC,wBAAwB,EAAE,CAAC;oBACtC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACV,CAAC,CAAC,CAAC;YACP,CAAC,EACG,UAAU,GAAG;gBACT,gBAAgB;gBAChB,CAAC,CAAC,SAAS,EAAE,CAAC;gBAEd,IAAI,KAAK,GAAG,OAAO,CAAC;gBAEpB,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACzC,wEAAwE;gBACxE,sCAAsC;YAC1C,CAAC,CAAC,CAAC;QAGX,CAAC,CAAC;QAEF,MAAM,CAAC,eAAe,GAAG;YACrB,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9C,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,cAAc,CAAC;YAChF,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,CAAC,YAAY,GAAG;YAClB,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;QAC/B,CAAC,CAAC;QAEF,MAAM,CAAC,iBAAiB,GAAG,UAAS,IAAI;YACpC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1I,OAAO,4BAA4B,CAAC;iBACnC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACtJ,OAAO,0BAA0B,CAAC;QAC1C,CAAC,CAAC;QAEF,MAAM,CAAC,mBAAmB,GAAG,UAAU,IAAI;YACvC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa;gBACvF,OAAO,0BAA0B,CAAC;;gBACjC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,GAAG,UAAU,IAAI;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa;gBAC9G,OAAO,0BAA0B,CAAC;;gBACjC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QAGF,MAAM,CAAC,mBAAmB,GAAG,UAAU,IAAI;YACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC;QAC9E,CAAC,CAAC;QAEF,MAAM,CAAC,qBAAqB,GAAG,UAAU,IAAI;YACzC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC;QAC7F,CAAC,CAAC;QAEF,MAAM,CAAC,uBAAuB,GAAG,UAAU,IAAI;YAC3C,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC;QACnG,CAAC,CAAC;QAEF,MAAM,CAAC,wBAAwB,GAAG,UAAU,IAAI;YAC5C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC;QAC7F,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,GAAG,UAAU,IAAI;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa;gBACjF,OAAO,0BAA0B,CAAC;;gBACjC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,CAAC,yBAAyB,GAAG,UAAU,IAAI;YAC7C,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,2BAA2B,CAAC;QACrH,CAAC,CAAC;QAEF,MAAM,CAAC,qBAAqB,GAAG,UAAU,IAAI;YACzC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,2BAA2B;gBACzG,OAAO,0BAA0B,CAAC;;gBACjC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,CAAC,uBAAuB,GAAG,UAAU,IAAI;YAC3C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,2BAA2B,CAAC;QAC/G,CAAC,CAAC;QAEF,MAAM,CAAC,kBAAkB,GAAG,UAAU,IAAI;YACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,2BAA2B;gBACnI,OAAO,0BAA0B,CAAC;;gBACjC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,CAAC,qBAAqB,GAAG,UAAU,IAAI;YACzC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,2BAA2B,IAAI,IAAI,CAAC;QAC9F,CAAC,CAAC;QAEF,MAAM,CAAC,kBAAkB,GAAG;YACxB,MAAM,CAAC,iBAAiB,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC;YAC7E,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;YACvC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC9C,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,GAAG;YACtB,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACjE,MAAM,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC9C,CAAC,CAAC;QAEF,MAAM,CAAC,mBAAmB,GAAG;YACzB,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YACvE,MAAM,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3C,CAAC,CAAC;QAGF,MAAM,CAAC,eAAe,GAAG;YACrB,IAAI,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC;QAEF,MAAM,CAAC,iBAAiB,GAAG;YACvB,IAAI,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;YACxC,IAAI,GAAG,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;gBACvC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;gBACzC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;aAC1C;iBACI;gBACD,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;gBAC1C,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;aACzC;YAED,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE;gBACnC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC3B,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;aAC/E;iBAAM;gBACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC/B,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;aAC/E;QACL,CAAC,CAAC;QAEF,MAAM,CAAC,eAAe,GAAG;YACrB,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC;QAEF,MAAM,CAAC,aAAa,GAAG,UAAU,MAAM;YACnC,CAAC,CAAC,OAAO,EAAE,CAAC;YACZ,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAChH,UAAC,IAAI;gBACD,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;oBAC7B,aAAa,CAAC,oBAAoB,GAAG,KAAK,CAAC;oBAC3C,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;iBAC/B;gBAED,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC5C,CAAC,CAAC,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAEvB,MAAM,CAAC,oCAAoC,CAAC;oBACxC,8BAA8B;oBAC9B,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,8BAA8B;gBAC1E,CAAC,CAAC,CAAC;YACP,CAAC,EACD,UAAU,GAAG;gBAET,CAAC,CAAC,SAAS,EAAE,CAAC;gBAEd,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,0EAA0E,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,qBAAqB,CAAC,EAAE;oBACxK,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;oBAC5C,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;oBAC/B,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;oBACpC,MAAM,CAAC,iBAAiB,EAAE,CAAC;iBAC9B;qBACI;oBACD,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;wBAC/B,mBAAmB,CAAC,MAAM,EAAE,CAAC;qBAChC;oBACD,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBAC/B;YACL,CAAC,CAAC,CAAC;QACX,CAAC;QAED,MAAM,CAAC,oCAAoC,GAAG,UAAe,QAAQ;;;;;gCAC7D,qBAAM,cAAc,CAAC,WAAW,EAAE;;4BAAtC,IAAI,SAAkC,EAAE;gCACpC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,eAAe,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE;oCACtF,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,iCAA0B,aAAa,CAAC,WAAW,CAAE,CAAC,CAAC,IAAI,KAAK,CAAC;oCACvH,IAAI,aAAa,EAAE;wCACf,sBAAO,QAAQ,IAAI,QAAQ,EAAE,EAAC;qCACjC;oCAGD,MAAM,CAAC,UAAU,GAAG,kBAAkB,CAAC;oCAEvC,aAAa,CAAC,iBAAiB,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,2DAAoD,aAAa,CAAC,YAAY,MAAG,CAAC,EACjL,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAC1F,UAAC,GAAG;wCACA,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;wCAC/B,IAAI,GAAG,EAAE;4CACL,YAAY,CAAC,OAAO,CAAC,iCAA0B,aAAa,CAAC,WAAW,CAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;4CAC7F,cAAc,CAAC,KAAK,EAAE,CAAC;yCAC1B;oCACL,CAAC,CACJ,CAAC;iCACL;qCAAM,IAAI,QAAQ,EAAE;oCACjB,QAAQ,EAAE,CAAC;iCACd;6BACJ;iCAAM;gCACH,QAAQ,EAAE,CAAC;6BACd;;;;;SACJ;QAED,MAAM,CAAC,WAAW,GAAG;YAEjB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAClB,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC,CAAC;gBAC1F,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBACrB,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC,CAAC;gBAC7G,OAAO,KAAK,CAAC;aAChB;YAED,mBAAmB,CAAC,KAAK,EAAE;iBACtB,IAAI,CAAC,UAAU,IAAI;gBAChB,MAAM,CAAC,aAAa,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAC,CAAC,CAAC;YAChH,CAAC,CAAC;iBACD,KAAK,CAAC,UAAU,GAAG;gBAChB,CAAC,CAAC,SAAS,EAAE,CAAC;gBAEd,mBAAmB,CAAC,MAAM,EAAE,CAAC;gBAE7B,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,sBAAsB,EAAE;oBACzD,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBAC/B;YAEL,CAAC,CAAC,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,CAAC,SAAS,GAAG;;;oBAEf,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;wBAClB,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC;wBAChF,sBAAO,KAAK,EAAC;qBAChB;oBAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;wBACrB,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC;wBAChF,sBAAO,KAAK,EAAC;qBAChB;oBAED,WAAW,CAAC,KAAK,EAAE;yBACd,IAAI,CAAC,UAAU,GAAG;wBACf,IAAI,CAAC,GAAG;4BAAE,OAAO;wBAEjB,MAAM,CAAC,aAAa,CAAC,EAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;oBAC3G,CAAC,CAAC;yBACD,KAAK,CAAC,UAAU,GAAG;wBAChB,CAAC,CAAC,SAAS,EAAE,CAAC;wBACd,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBAChC,CAAC,CAAC,CAAC;;;;SACV,CAAC;QAEF,MAAM,CAAC,wBAAwB,GAAG;YAC9B,IAAI,sBAAsB,GAAG,CAAC,CAAC,qBAAqB,CAAC,CAAC;YACtD,IAAI,GAAG,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;gBACvC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;gBACzC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;aAC1C;iBACI;gBACD,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;gBAC1C,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;aACzC;YAED,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE;gBACnC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC3B,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;aACtF;iBAAM;gBACH,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAC/B,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;aACtF;QACL,CAAC,CAAC;QAEF,MAAM,CAAC,iBAAiB,GAAG;YAEvB,MAAM,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;YACvC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC1C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YAEvB,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;QAEF,MAAM,CAAC,iBAAiB,GAAG;YACvB,MAAM,CAAC,iBAAiB,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7C,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,KAAK,CAAC;YACvC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC1C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YAEvB,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC;QAGF,MAAM,CAAC,SAAS,GAAG,UAAC,IAAI;YACpB,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,aAAa,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAE3D,UAAU,CAAC,UAAU,CAAC,oBAAoB,EAAE;gBACxC,WAAW,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe;gBACzE,cAAc,EAAE,IAAI,CAAC,OAAO;gBAC5B,eAAe,EAAE,aAAa,CAAC,IAAI;gBACnC,aAAa,EAAE,aAAa,CAAC,WAAW;aAC3C,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,MAAM,CAAC,0BAA0B,GAAG,KAAK,CAAC;QAE1C,MAAM,CAAC,YAAY,GAAG;YAClB,MAAM;YACN,MAAM,CAAC,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC;YAE1E,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE;gBACrC,OAAO,KAAK,CAAC;aAChB;YACD,CAAC,CAAC,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;gBAE5H,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAC5G,UAAC,IAAI;oBAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;oBACtB,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;wBAC7B,aAAa,CAAC,oBAAoB,GAAG,KAAK,CAAC;wBAC3C,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;qBAC/B;oBAED,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBAE5C,CAAC,CAAC,SAAS,EAAE,CAAC;oBAEd,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAEvB,8BAA8B;oBAC9B,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,8BAA8B;gBAC1E,CAAC,EACD,UAAU,GAAG;oBACT,CAAC,CAAC,SAAS,EAAE,CAAC;oBACd,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;YACX,CAAC,EACG,UAAU,GAAG;gBACT,CAAC,CAAC,SAAS,EAAE,CAAC;gBACd,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACX,CAAC,CAAC;QAEF,MAAM,CAAC,YAAY,GAAG;YAClB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,mBAAmB,CAAC,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC;QAEF,MAAM,CAAC,cAAc,GAAG;;;;;;wBAEhB,IAAI,CAAC,MAAM,CAAC,gBAAgB;4BAAE,sBAAO;wBACzB,qBAAM,cAAc,CAAC,UAAU,EAAE;;wBAAvC,GAAG,GAAG,SAAiC;6BACzC,GAAG,EAAH,wBAAG;wBACG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;6BACzB,IAAI,EAAJ,wBAAI;wBACJ,CAAC,CAAC,OAAO,EAAE,CAAC;;;;wBAEI,qBAAM,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;;wBAAzF,GAAG,GAAG,SAAmF;wBAC/F,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;wBAC5C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;wBACtB,CAAC,CAAC,SAAS,EAAE,CAAC;wBACd,MAAM,CAAC,UAAU,EAAE,CAAC;;;;wBAEpB,CAAC,CAAC,SAAS,EAAE,CAAC;wBACd,YAAY,CAAC,SAAS,CAAC,KAAG,CAAC,CAAC;;;;;wBAKxC,OAAO,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC;wBACf,IAAI,GAAC,CAAC,IAAI,IAAI,GAAC,CAAC,IAAI,KAAK,WAAW,CAAC,yBAAyB,EAAG;4BAC7D,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAC,CAAC;4BACtH,sBAAO;yBACV;6BAAM,IAAI,GAAC,CAAC,IAAI,IAAI,CAAC,GAAC,CAAC,IAAI,KAAK,WAAW,CAAC,yBAAyB,IAAI,GAAC,CAAC,IAAI,KAAK,WAAW,CAAC,kCAAkC,CAAC,EAAE;4BAClI,sBAAO;yBACV;6BAAM,IAAI,GAAC,CAAC,OAAO,EAAE;4BAClB,YAAY,CAAC,SAAS,CAAC,GAAC,CAAC,OAAO,CAAC,CAAC;yBACrC;6BAAM;4BACH,YAAY,CAAC,SAAS,CAAC,GAAC,CAAC,CAAC;yBAC7B;;;;;aAER;QAED,MAAM,CAAC,eAAe,GAAG;YACrB,OAAO;gBACH,OAAO,EAAE,aAAa,CAAC,eAAe;gBACtC,QAAQ,EAAE,aAAa,CAAC,YAAY;gBACpC,eAAe,EAAE,aAAa,CAAC,mBAAmB;gBAClD,wBAAwB,EAAE,KAAK;gBAC/B,cAAc,EAAE,aAAa,CAAC,cAAc;gBAC5C,MAAM,EAAE,aAAa,CAAC,WAAW;aACpC;QACL,CAAC;IACL,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;AC3zBoB;AAKjB;IAaH,sBAAoB,EAAE,EAAU,aAAkB,EAAU,qBAAqB,EAAU,eAAe,EAAU,cAAc,EAAU,gBAAgB,EACxI,SAAS,EAAW,aAAa,EAAU,WAAW,EAAU,eAAe,EAAU,cAAc,EACvG,qBAAqB,EAAU,eAAe,EAAU,cAAc,EAAU,eAAe,EAAU,cAAc,EAAU,UAAU,EAAU,mBAAmB,EAAU,UAAU,EAC5L,YAAY;QAHhC,iBAUC;QAVmB,OAAE,GAAF,EAAE;QAAU,kBAAa,GAAb,aAAa,CAAK;QAAU,0BAAqB,GAArB,qBAAqB;QAAU,oBAAe,GAAf,eAAe;QAAU,mBAAc,GAAd,cAAc;QAAU,qBAAgB,GAAhB,gBAAgB;QACxI,cAAS,GAAT,SAAS;QAAW,kBAAa,GAAb,aAAa;QAAU,gBAAW,GAAX,WAAW;QAAU,oBAAe,GAAf,eAAe;QAAU,mBAAc,GAAd,cAAc;QACvG,0BAAqB,GAArB,qBAAqB;QAAU,oBAAe,GAAf,eAAe;QAAU,mBAAc,GAAd,cAAc;QAAU,oBAAe,GAAf,eAAe;QAAU,mBAAc,GAAd,cAAc;QAAU,eAAU,GAAV,UAAU;QAAU,wBAAmB,GAAnB,mBAAmB;QAAU,eAAU,GAAV,UAAU;QAC5L,iBAAY,GAAZ,YAAY;QARzB,iBAAY,GAAG,IAAI,CAAC;QACnB,wBAAmB,GAAG,EAAE,CAAC;QAS7B,IAAI,CAAC,SAAS,CAAC;YACX,IAAI,KAAI,CAAC,UAAU,EAAE,EAAE;gBACnB,aAAa,CAAC,qBAAqB,EAAE,CAAC;aACzC;QACL,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAED,iCAAU,GAAV;QACI,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;IACpH,CAAC;IAAA,CAAC;IAEF,4BAAK,GAAL,UAAM,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAoB,EAAE,SAAgB,EAAE,SAAgB;QAApG,iBA8GC;QA9G2C,oDAAoB;QAAE,4CAAgB;QAAE,4CAAgB;QAChG,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,KAAK,KAAK,CAAC;QACrD,IAAI,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;QAC3G,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,CAAC,GAAG,EAAE;YACP,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ;gBACT,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;SAClD;QAED,wDAAwD;QACxD,yCAAyC;QACzC,mCAAmC;QACnC,yCAAyC;QACzC,oCAAoC;QACpC,uCAAuC;QACvC,yBAAyB;QACzB,0BAA0B;QAC1B,sDAAsD;QACtD,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC;aACvG,IAAI,CAAC,UAAC,IAAI;YACP,IAAM,QAAQ,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACjC,KAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC;YAEvC,IAAI,CAAC,IAAI,EAAE;gBACP,wBAAwB;gBACxB,QAAQ,CAAC,MAAM,CAAC,6BAA6B,GAAG,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAClF,OAAO,QAAQ,CAAC,OAAO,CAAC;aAC3B;YAED,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEvB,mGAAmG;YACnG,IAAI,CAAC,KAAI,CAAC,YAAY,EAAE;gBACpB,IAAI,KAAI,CAAC,aAAa,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,EAAE;oBACzD,KAAI,CAAC,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC;oBAEzC,IAAI,KAAI,CAAC,aAAa,CAAC,eAAe,KAAK,IAAI,CAAC,MAAM,EAAE;wBACpD,KAAI,CAAC,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC;qBAC5C;iBACJ;aACJ;YAED,IAAI,SAAS,IAAI,SAAS,CAAC,cAAc,EAAE;gBACvC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;aAClD;YAED,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC5B,KAAI,CAAC,aAAa,CAAC,OAAO,GAAG,WAAW,CAAC;YACzC,KAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAGvC,IAAI,CAAC,KAAI,CAAC,aAAa,CAAC,eAAe,EAAE;gBACrC,KAAI,CAAC,aAAa,CAAC,eAAe,GAAG,OAAO,CAAC;aAChD;YAED,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAI,CAAC,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,wCAAwC;YACrH,KAAI,CAAC,aAAa,CAAC,yBAAyB,EAAE,CAAC;YAE/C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;YAE3B,IAAI,QAAQ,EAAE;gBACV,KAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;aACnC;YAED,CAAC,CAAC,IAAI,CAAC,KAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,EAAE,EAAE;gBAC9C,EAAE,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;YAGH,IAAI,KAAI,CAAC,aAAa,CAAC,aAAa,EAAE;gBAClC,KAAI,CAAC,cAAc,CAAC,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;aACzD;YAED,KAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAE9B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC5B,CAAC,EAAE,UAAC,GAAG;YACH,IAAM,IAAI,GAAG,GAAG,CAAC;YACjB,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;gBACxC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;aAClB;YACD,IAAI,CAAC,GAAG,EAAE;gBACN,GAAG,GAAG,KAAI,CAAC,cAAc,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;aAC9D;YAED,IAAM,QAAQ,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACjC,wBAAwB;YACxB,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,KAAI,CAAC,aAAa,CAAC,aAAa,GAAG,eAAe,GAAG,IAAI,CAAC,CAAC;YACvG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC5B,CAAC,CAAC;aACD,IAAI,CAAC,UAAC,IAAI;YACP,IAAI,KAAI,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,KAAI,CAAC,UAAU,CAAC,WAAW,EAAE;gBACrH,IAAI,QAAQ,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAC/B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,OAAO,QAAQ,CAAC,OAAO,CAAC;aAC3B;iBAAM;gBACH,OAAO,KAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAC/C;QACL,CAAC,CAAC,CAAC;QAEP,yBAAyB;QACzB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAC,GAAG;YACb,OAAO,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;IACd,CAAC;IAAA,CAAC;IAEF,6CAAsB,GAAtB,UAAuB,IAAI;QACvB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAAA,CAAC;IAEF,6BAAM,GAAN;QAEI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;QAElC,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,wCAAwC,GAAG,IAAI,CAAC;QACnE,sCAAsC;QACtC,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IAAA,CAAC;IAEF,qCAAc,GAAd,UAAe,MAAM,EAAE,WAAW,EAAE,WAAW;QAC3C,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACvF,CAAC;IAAA,CAAC;IAEF,sCAAe,GAAf,UAAgB,OAAO,EAAE,QAAQ;QAAjC,iBAQC;QAPG,IAAI,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAC,GAAG;YACb,IAAI,QAAQ,GAAG,KAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAC/B,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACtB,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACd,CAAC;IAAA,CAAC;IAEF,sCAAe,GAAf,UAAgB,GAAG;QACf,IAAM,OAAO,GAAG;YACZ,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE;YACjD,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,EAAE;YAC7D,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE;YACnD,GAAG,EAAE,GAAG;SACX,CAAC;QAEF,IAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAElC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEf,IAAM,IAAI,GAAG,iDAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAEzD,IAAM,CAAC,GAAG,gDAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;YAChC,IAAI,EAAE,IAAI;YACV,EAAE,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,OAAO,CAAC,CAAC;IACb,CAAC;IAAA,CAAC;IAEF,8BAAO,GAAP,UAAQ,GAAG;QAAX,iBAcC;QAZG,0CAA0C;QAC1C,IAAM,UAAU,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAU,CAAC;QAEzC,IAAI,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;YAC7D,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;gBACT,OAAO,KAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;SACN;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAAA,CAAC;IAIF;;OAEG;IACK,qCAAc,GAAtB,UAAuB,eAAe;QAAtC,iBA6BC;QA5BG,IAAM,UAAU,GAAG,UAAC,CAAC;YACjB,sCAAsC;YACtC,YAAY,CAAC,KAAI,CAAC,eAAe,CAAC,CAAC;YACnC,KAAI,CAAC,eAAe,GAAG,UAAU,CAAC,UAAU,EAAE,eAAe,GAAC,IAAI,CAAC,CAAC,CAAE,0BAA0B;QACpG,CAAC;QAED,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAC,CAAC;YACrC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,IAAM,UAAU,GAAG;YACf,IAAI,KAAI,CAAC,UAAU,CAAC,yBAAyB,EAAE;gBAC3C,UAAU,CAAC,EAAC,IAAI,EAAE,yBAAyB,EAAC,CAAC,CAAC;gBAC9C,OAAO;aACV;YACD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,YAAY,CAAC,KAAI,CAAC,eAAe,CAAC,CAAC;YAEnC,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAC,CAAC;gBACrC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAC5C,KAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;QACtC,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,UAAU,EAAE,eAAe,GAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACH,8BAAO,GAAP,UAAQ,6BAA6B,EAAE,OAAO;QAA9C,iBA2IC;QA1IG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,6DAA6D;QACnF,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,mDAAmD;QAE5E,QAAQ,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;YACrC,KAAK,MAAM,EAAE,qCAAqC;gBAC9C,QAAQ,GAAG,IAAI,CAAC;gBAChB,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM;YACV,KAAK,MAAM,EAAE,4CAA4C;gBACrD,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM;SACb;QAED,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,QAAQ;QAEhD,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,IAAI,EAAE,GAAG,IAAI,CAAC;QAEd,gFAAgF;QAChF,4DAA4D;QAC5D,IAAI,CAAC,QAAQ,EAAE;YACX,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;iBACxC,IAAI,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBACzC,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;QAED,qEAAqE;QACrE,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;YACpE,6BAA6B,CAAC,IAAI,EAAE,CAAC;YACrC,EAAE,GAAG,6BAA6B,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;QAED,IAAI,CAAC,WAAW,EAAE;YACd,gEAAgE;YAChE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE;gBAClD,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAC3C,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;oBAC3E,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;oBAC9C,OAAO,KAAI,CAAC,qBAAqB,CAAC,kCAAkC,EAAE,CAAC;gBAC3E,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACnB;SACJ;QAED,IAAI,CAAC,WAAW,EAAE;YACd,gEAAgE;YAChE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9B,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEtD,yDAAyD;YACzD,oEAAoE;YACpE,yDAAyD;YACzD,0BAA0B;YAC1B,2CAA2C;YAC3C,2DAA2D;YAC3D,SAAS;YACT,UAAU;YACV,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;gBACT,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;gBACjC,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YACH,GAAG;YACH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC/B,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;iBAClC,IAAI,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBAClC,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;iBAC1C,IAAI,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBACtC,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;QAED,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,uBAAuB,EAAE;aAC1C,IAAI,CAAC;YACF,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;YAC3C,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,CAAC,WAAW,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7B,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;iBAC/B,IAAI,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAChC,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;QAED,IAAI,CAAC,WAAW,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7B,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;iBAClC,IAAI,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAChC,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC/B,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;iBACnC,IAAI,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBAClC,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;QAED,8CAA8C;QAC9C,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACvC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;aAC/G,IAAI,CAAC,UAAC,IAAI;YACP,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YAC1C,KAAI,CAAC,eAAe,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACjD,OAAO,KAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAA,CAAC;IAEF,uCAAgB,GAAhB,UAAiB,IAAI;;QACjB,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACtD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACxG,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACpE,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACtE,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,wBAAwB;QACrE,IAAI,CAAC,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACtD,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACtE,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEtD,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,mCAAI,IAAI,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,wCAAwC,GAAG,IAAI,CAAC,wCAAwC,CAAC;QAC5G,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;QACnD,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC;QACnE,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC;QAC7E,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACtE,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAChD,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1D,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACpD,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACpE,IAAI,CAAC,aAAa,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC;QAClF,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAErH,gCAAgC;QAChC,IAAI,CAAC,aAAa,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAClE,IAAI,CAAC,aAAa,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC;QAClF,IAAI,CAAC,aAAa,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC5E,IAAI,CAAC,aAAa,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC;QAChF,IAAI,CAAC,aAAa,CAAC,gCAAgC,GAAG,IAAI,CAAC,gCAAgC,CAAC;QAE5F,IAAI,CAAC,aAAa,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEtD,kHAAkH;QAClH,IAAI,CAAC,aAAa,CAAC,4BAA4B,GAAG,IAAI,CAAC,4BAA4B,IAAI,IAAI,CAAC,wBAAwB,CAAC;QACrH,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACpE,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEpE,IAAI,CAAC,aAAa,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,KAAK,IAAI,CAAC;QACrF,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAEhE,IAAI,CAAC,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAClE,IAAI,CAAC,aAAa,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAE9E,uBAAuB;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC5D,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,KAAK,CAAC;SAC5C;QAED,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,IAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE;YACzC,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;SAC7B;QAED,IAAI,IAAI,CAAC,8BAA8B;YACnC,IAAI,CAAC,aAAa,CAAC,8BAA8B,GAAG,IAAI,CAAC,8BAA8B,CAAC;QAE5F,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;QAC3D,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAChC,IAAI,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAC5D,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;SACrD;IACL,CAAC;IAED,sCAAe,GAAf,UAAgB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS;QACzD,OAAO,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACrG,CAAC;IAtfM,oBAAO,GAAG;QACb,IAAI,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB;QACvG,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB;QAChF,uBAAuB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY;QACpJ,cAAc,EAAE,YAAY;KAC/B,CAAC;IAiNK,8BAAiB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAiS/G,mBAAC;CAAA;AAED,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,OAA0C,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;AC9fvD;AACX;AAInC;IAuCH,sBAAoB,aAAkB,EAAU,UAAe,EAAU,UAAe;QAApE,kBAAa,GAAb,aAAa,CAAK;QAAU,eAAU,GAAV,UAAU,CAAK;QAAU,eAAU,GAAV,UAAU,CAAK;QApChF,iBAAY,GAAG,IAAI,CAAC;QAqCxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IApCO,+BAAQ,GAAhB;QACI,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAE,MAAc,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,CAAC;IAEM,4BAAe,GAAtB;QACI,IAAI;YACA,IAAM,MAAM,GAAG,oEAA2B,CAAC;YAC3C,IAAM,KAAG,GAAG,MAAa,CAAC;YAE1B,IAAI,CAAC,MAAM,IAAI,KAAG,CAAC,KAAK,IAAI,KAAG,CAAC,YAAY,EAAE;gBAC1C,OAAO;aACV;YAED,KAAG,CAAC,YAAY,GAAG,IAAI,CAAC;YAExB,CAAC,UAAS,MAAM;gBACZ,CAAC,UAAS,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC;oBAAE,IAAI,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;oBAAA,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC;oBAAA,CAAC,CAAC,EAAE,GAAC,CAAC,CAAC,EAAE,IAAE,EAAE,CAAC;oBACjE,CAAC,GAAC,CAAC,YAAY,EAAC,UAAU,EAAC,eAAe,EAAC,UAAU,EAAC,OAAO,CAAC,CAAC;oBAAA,KAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,GAAC,CAAC,EAAC,EAAE,CAAC;wBAAC,CAAC,UAAS,CAAC;4BACjG,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,IAAE,cAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC,EAAC,UAAS,EAAC,OAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC;wBAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzG,CAAC,GAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBAAA,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC;oBAAA,CAAC,CAAC,GAAG,GAAC,oCAAoC,GAAC,MAAM,GAAC,WAAW,CAAC;oBAAA,CAAC,CAAC,MAAM,GAAC,cAAW,KAAG,CAAC,YAAY,GAAC,KAAK,CAAC,EAAC,CAAC;oBAAA,CAAC,CAAC,OAAO,GAAC,cAAW,KAAG,CAAC,YAAY,GAAC,KAAK,CAAC,EAAC,CAAC;oBACzL,CAAC,GAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAA,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;gBAAA,CAAC,CAAC,CAAC,MAAM,EAAC,QAAQ,EAAC,QAAQ,EAAC,OAAO,CAAC,CAAC;YAC3G,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAGd;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBAC7B,MAAc,CAAC,YAAY,GAAG,KAAK,CAAC;aACzC;YACD,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;SACnD;IACL,CAAC;IAQO,0CAAmB,GAA3B;QAAA,iBASC;QARG,4DAA4D;QAC5D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,mDAAM,CAAC,wBAAwB,EAAE,UAAC,KAAK,EAAE,MAAM;YAC/D,IAAI,MAAM,KAAK,mDAAM,CAAC,0BAA0B,EAAE;gBAC9C,KAAI,CAAC,WAAW,EAAE,CAAC;aACtB;iBAAM,IAAI,MAAM,KAAK,mDAAM,CAAC,uBAAuB,EAAE;gBAClD,KAAI,CAAC,YAAY,EAAE,CAAC;aACvB;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,0CAAmB,GAA3B;QAAA,iBAUC;QATG,IAAI,CAAC,SAAS,GAAG;YACb,UAAU,EAAE,cAAQ,KAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;YAChD,KAAK,EAAE,cAAO,CAAC;YACf,QAAQ,EAAE,cAAO,CAAC;YAClB,YAAY,EAAE,cAAO,CAAC;YACtB,iBAAiB,EAAE,cAAO,CAAC;YAC3B,kBAAkB,EAAE,cAAO,CAAC;YAC5B,aAAa,EAAE,cAAO,CAAC;SAC1B,CAAC;IACN,CAAC;IAED,gCAAS,GAAT;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;YAClD,OAAO;SACV;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,IAAI;YACA,IAAI,yEAAgC,KAAK,OAAO,EAAE;gBAC9C,IAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,yEAAgC,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnH,IAAM,MAAI,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBAClD,IAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,eAAK,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7H,KAAK,CAAC,UAAU,CAAC;oBACb,OAAO,EAAE;wBACL,EAAE,EAAE,MAAI;wBACR,SAAS,EAAE,MAAI;wBACf,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;wBAElC,UAAU,EAAE,sEAA6B;wBACzC,KAAK,EAAE,KAAK;wBACZ,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;wBAC1E,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;qBACjF;oBACD,OAAO,EAAE;wBACL,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;wBAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ;wBAC/C,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,yEAAgC,KAAK,OAAO,CAAC,CAAC,QAAQ,EAAE;qBACjG;iBACJ,CAAC,CAAC;aACN;SACJ;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACpB;IACL,CAAC;IAGD,iCAAU,GAAV;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE;YACR,OAAO;SACV;QAED,IAAI;YACA,IAAI,yEAAgC,KAAK,OAAO,EAAE;gBAC9C,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACxC;SACJ;QAAC,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACpB;IACL,CAAC;IAED,kCAAW,GAAX;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE;YACR,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACvD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;IACL,CAAC;IAED,mCAAY,GAAZ;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE;YACR,OAAO;SACV;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACrD,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;IACL,CAAC;IAlJM,oBAAO,GAAG,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAmJjF,mBAAC;CAAA;AAED,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,OAA0C,CAAC,CAAC;;;;;;;;;;;;;;;;AC5J7F;AACf,oBAAoB,qBAAuB;AAC3C;;;;;;;;;;;ACFA;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2E;;;;;;;;;;AClOA;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;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;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;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLD,e;;;;;;;;;;ACAA,e;;;;;;;;;;ACAA,e;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA,sBAAsB;UACtB,oDAAoD,uBAAuB;UAC3E;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA,GAAG;UACH;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WCjDA;WACA;WACA;WACA;WACA;WACA;WACA,iBAAiB,qBAAqB;WACtC;WACA;WACA;WACA,kBAAkB,qBAAqB;WACvC,gEAAgE,iDAAiD;WACjH;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,E;;;;UCxBA;UACA;UACA;UACA,eAAe,4BAA4B;UAC3C,eAAe;UACf,iCAAiC,WAAW;UAC5C;UACA,E;;;UCPA;UACA;UACA;UACA;UACA,yCAAyC,wCAAwC;UACjF;UACA;UACA,E;;;UCPA;UACA,4CAA4C,oCAAoC,iGAAiG,kB;;;UCDjL;UACA,6CAA6C,qE;;;UCD7C;UACA,mDAAmD,8BAA8B,sEAAsE,kB;;;UCDvJ,wCAAwC,iE;;;UCAxC,qCAAqC,iC;;;UCArC;UACA;UACA;UACA;UACA,GAAG;UACH;UACA;UACA,CAAC,I;;;UCPD,8CAA8C,0D;;;;WCA9C;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,4CAA4C,mBAAmB;WAC/D;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA,E;;;;UCxCA;UACA;UACA;UACA,uDAAuD,iBAAiB;UACxE;UACA,gDAAgD,aAAa;UAC7D,E;;;UCNA;UACA;UACA;UACA;UACA,E;;;;WCJA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;;WAED;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA,2BAA2B;WAC3B,4BAA4B;WAC5B,2BAA2B;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA,iBAAiB,qCAAqC;WACtD;;WAEA,gDAAgD;WAChD;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,iBAAiB;WACrC;WACA;WACA;WACA,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA,OAAO;WACP,MAAM;WACN,KAAK;WACL,IAAI;WACJ,GAAG;WACH;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;;WAEA;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;;WAEA;WACA;WACA,EAAE;;WAEF;WACA;;WAEA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;;WAEA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA,KAAK;WACL;;WAEA;WACA;WACA,IAAI;WACJ,GAAG;WACH;;WAEA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA,qBAAqB,oBAAoB;WACzC;WACA;WACA;WACA,IAAI;WACJ,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,C;;;;UCvaA,4B;;;;WCAA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;WAGA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA,gBAAgB,6BAA6B;WAC7C;WACA;WACA;WACA;WACA;WACA,gBAAgB,8BAA8B;WAC9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;;WAEA;WACA;WACA;WACA,UAAU;WACV,iBAAiB,oBAAoB;WACrC;WACA;WACA;WACA;WACA,EAAE;WACF,iBAAiB,oBAAoB;WACrC;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;;WAEA,e;;;;;WChGA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB,2BAA2B;WAC9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,kBAAkB,cAAc;WAChC;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,iBAAiB,4BAA4B;WAC7C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,kBAAkB,uCAAuC;WACzD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,iCAAiC;WACpD;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,uCAAuC;WAC7D;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,sBAAsB;WAC5C;WACA;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA,WAAW;WACX,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA;WACA;WACA,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,oBAAoB,wCAAwC;WAC5D;WACA;WACA;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;WACA,SAAS;WACT,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE,KAAK;WACP;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL,IAAI;WACJ;WACA;WACA;;WAEA;WACA;WACA;WACA,sCAAsC;WACtC;WACA;WACA,EAAE;WACF;;WAEA,8CAA8C;;WAE9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,iCAAiC,mCAAmC;WACpE;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,4G;;;;;UEhkBA;UACA;UACA;UACA,kEAAkE,4DAA4D;UAC9H,kEAAkE,yDAAyD;UAC3H,kEAAkE,0DAA0D;UAC5H,4FAA4F,0DAA0D;UACtJ","sources":["webpack://crdregister/./src/PosScripts/configEnvironment.js","webpack://crdregister/./src/PosScripts/OptionsTreeItem.js","webpack://crdregister/./src/PosScripts/addCustomerController.js","webpack://crdregister/./src/PosScripts/addSalesRepresentativeController.js","webpack://crdregister/./src/PosScripts/addSalesShippingAddressController.js","webpack://crdregister/./src/PosScripts/addStockOrderLineController.js","webpack://crdregister/./src/PosScripts/addSurchargeController.js","webpack://crdregister/./src/PosScripts/barcodeService.js","webpack://crdregister/./src/PosScripts/cacheService.js","webpack://crdregister/./src/PosScripts/cameraScanController.js","webpack://crdregister/./src/PosScripts/cashManagementController.js","webpack://crdregister/./src/PosScripts/cashManagementService.js","webpack://crdregister/./src/PosScripts/changePasswordController.js","webpack://crdregister/./src/PosScripts/clickAndCollectDialogController.js","webpack://crdregister/./src/PosScripts/clickAndCollectGridController.js","webpack://crdregister/./src/PosScripts/clickAndCollectService.js","webpack://crdregister/./src/PosScripts/cloverReaderProvider.js","webpack://crdregister/./src/PosScripts/configService.js","webpack://crdregister/./src/PosScripts/constants.js","webpack://crdregister/./src/PosScripts/csvService.js","webpack://crdregister/./src/PosScripts/customerService.js","webpack://crdregister/./src/PosScripts/customersController.js","webpack://crdregister/./src/PosScripts/dashboardController.js","webpack://crdregister/./src/PosScripts/dataChangeNotificationService.js","webpack://crdregister/./src/PosScripts/dbUpdatesService.js","webpack://crdregister/./src/PosScripts/deliveryCalendarController.js","webpack://crdregister/./src/PosScripts/deliveryController.js","webpack://crdregister/./src/PosScripts/deliveryDialogController.js","webpack://crdregister/./src/PosScripts/directives.js","webpack://crdregister/./src/PosScripts/emailService.js","webpack://crdregister/./src/PosScripts/entry.js","webpack://crdregister/./src/PosScripts/errorService.js","webpack://crdregister/./src/PosScripts/eventConstants.js","webpack://crdregister/./src/PosScripts/fileDownloadService.js","webpack://crdregister/./src/PosScripts/filtersService.js","webpack://crdregister/./src/PosScripts/fontMeasureService.js","webpack://crdregister/./src/PosScripts/globals.js","webpack://crdregister/./src/PosScripts/headerController.js","webpack://crdregister/./src/PosScripts/helperService.js","webpack://crdregister/./src/PosScripts/homeController.js","webpack://crdregister/./src/PosScripts/index.js","webpack://crdregister/./src/PosScripts/jsStoreProvider.js","webpack://crdregister/./src/PosScripts/keyPressDelayService.js","webpack://crdregister/./src/PosScripts/labelPrintService.js","webpack://crdregister/./src/PosScripts/labelService.js","webpack://crdregister/./src/PosScripts/linklyPaymentReaderProvider.js","webpack://crdregister/./src/PosScripts/liveSearchService.js","webpack://crdregister/./src/PosScripts/localDBProvider.js","webpack://crdregister/./src/PosScripts/loyaltyDEARProvider.js","webpack://crdregister/./src/PosScripts/loyaltyLionProvider.js","webpack://crdregister/./src/PosScripts/loyaltyLionRewardsHandler.js","webpack://crdregister/./src/PosScripts/loyaltyService.js","webpack://crdregister/./src/PosScripts/main.js","webpack://crdregister/./src/PosScripts/offlineSalesController.js","webpack://crdregister/./src/PosScripts/openCloseRegistryController.js","webpack://crdregister/./src/PosScripts/orderStatusService.js","webpack://crdregister/./src/PosScripts/outletService.js","webpack://crdregister/./src/PosScripts/paymentSenseReaderProvider.js","webpack://crdregister/./src/PosScripts/pipes.js","webpack://crdregister/./src/PosScripts/printService.js","webpack://crdregister/./src/PosScripts/productManagementController.js","webpack://crdregister/./src/PosScripts/productManagementService.js","webpack://crdregister/./src/PosScripts/productsService.js","webpack://crdregister/./src/PosScripts/receiptService.js","webpack://crdregister/./src/PosScripts/registryService.js","webpack://crdregister/./src/PosScripts/remoteRequestProvider.js","webpack://crdregister/./src/PosScripts/reportCloseRegistryController.js","webpack://crdregister/./src/PosScripts/reportGiftCardController.js","webpack://crdregister/./src/PosScripts/reportInTransitController.js","webpack://crdregister/./src/PosScripts/reportInventoryController.js","webpack://crdregister/./src/PosScripts/reportPaymentTypeSummaryController.js","webpack://crdregister/./src/PosScripts/reportProductPerformanceController.js","webpack://crdregister/./src/PosScripts/reportSalesSummaryController.js","webpack://crdregister/./src/PosScripts/reportService.js","webpack://crdregister/./src/PosScripts/reportStoreCreditController.js","webpack://crdregister/./src/PosScripts/reportSurchargeController.js","webpack://crdregister/./src/PosScripts/requestInterceptors.js","webpack://crdregister/./src/PosScripts/saleService.js","webpack://crdregister/./src/PosScripts/salesHistoryController.js","webpack://crdregister/./src/PosScripts/salesParkedController.js","webpack://crdregister/./src/PosScripts/selectOutletRegistryController.js","webpack://crdregister/./src/PosScripts/selectTaxController.js","webpack://crdregister/./src/PosScripts/sellController.js","webpack://crdregister/./src/PosScripts/setPinController.js","webpack://crdregister/./src/PosScripts/setupController.js","webpack://crdregister/./src/PosScripts/sideBarController.js","webpack://crdregister/./src/PosScripts/soundService.js","webpack://crdregister/./src/PosScripts/squareReaderProvider.js","webpack://crdregister/./src/PosScripts/stockFamilyProductMatrixController.js","webpack://crdregister/./src/PosScripts/stockOrderingController.js","webpack://crdregister/./src/PosScripts/stockOrderingService.js","webpack://crdregister/./src/PosScripts/stockPurchaseOrderDetailController.js","webpack://crdregister/./src/PosScripts/stockTakeController.js","webpack://crdregister/./src/PosScripts/stockTakeService.js","webpack://crdregister/./src/PosScripts/stockTransferConroller.js","webpack://crdregister/./src/PosScripts/stockTransferOrderDetailController.js","webpack://crdregister/./src/PosScripts/triPOSReaderProvider.js","webpack://crdregister/./src/PosScripts/tyroReaderProvider.js","webpack://crdregister/./src/PosScripts/unpackWorkerHelper.js","webpack://crdregister/./src/PosScripts/userManagementController.js","webpack://crdregister/./src/PosScripts/userManagementService.js","webpack://crdregister/./src/PosScripts/webOnlyProvider.js","webpack://crdregister/./src/scss/index.scss","webpack://crdregister/./node_modules/moment/locale/ sync \\b\\B","webpack://crdregister/./TypePosScripts/CalculatorHelperService.ts","webpack://crdregister/./TypePosScripts/CalculatorService.ts","webpack://crdregister/./TypePosScripts/CheckoutItem.ts","webpack://crdregister/./TypePosScripts/Components/certificate-error/certificate-error.component.ts","webpack://crdregister/./TypePosScripts/Controllers/second-screen.controller.ts","webpack://crdregister/./TypePosScripts/ConverterService.ts","webpack://crdregister/./TypePosScripts/Delivery/Delivery.ts","webpack://crdregister/./TypePosScripts/Delivery/DeliveryHelper.ts","webpack://crdregister/./TypePosScripts/Delivery/ProductionCalendar.ts","webpack://crdregister/./TypePosScripts/Enums.ts","webpack://crdregister/./TypePosScripts/Interfaces.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/AutoDiscountCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/FinalCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/LoyaltyCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/NativePricesCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/RefundCheckoutSetupCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/RefundCheckoutSubmitCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/RefundLimitsCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/RefundPaymentsSetupCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/SurchargesPaymentsCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/TaxCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/TotalCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/TotalPaymentsCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/index.ts","webpack://crdregister/./TypePosScripts/Sale.ts","webpack://crdregister/./TypePosScripts/Services/biometrics-auth.service.ts","webpack://crdregister/./TypePosScripts/Services/device-info.service.ts","webpack://crdregister/./TypePosScripts/Services/google-helper.service.ts","webpack://crdregister/./TypePosScripts/Services/msal.service.ts","webpack://crdregister/./TypePosScripts/Services/offline-sale.service.ts","webpack://crdregister/./TypePosScripts/Services/payment-providers/progress-dialog.ts","webpack://crdregister/./TypePosScripts/Services/payment-providers/windcave/interfaces.ts","webpack://crdregister/./TypePosScripts/Services/payment-providers/windcave/windcave-provider.service.ts","webpack://crdregister/./TypePosScripts/Services/second-terminal.service.ts","webpack://crdregister/./TypePosScripts/Services/server-connection.service.ts","webpack://crdregister/./TypePosScripts/Services/surcharge.service.ts","webpack://crdregister/./TypePosScripts/Typings/Typings.ts","webpack://crdregister/./src/PosScripts/cardPayService.ts","webpack://crdregister/./src/PosScripts/loginController.ts","webpack://crdregister/./src/PosScripts/loginService.ts","webpack://crdregister/./src/PosScripts/pendoService.ts","webpack://crdregister/./src/PosScripts/unpackWorker.js","webpack://crdregister/./src/PosImages/ sync \\.(svg%7Cpng%7Cjpg)$","webpack://crdregister/./src/PosViews/ sync \\.html$","webpack://crdregister/./translations.js","webpack://crdregister/ignored|D:\\a\\1\\s\\DearPos\\CrdRegister\\node_modules\\readable-stream\\lib\\internal\\streams|util","webpack://crdregister/ignored|D:\\a\\1\\s\\DearPos\\CrdRegister\\node_modules\\readable-stream\\lib|util","webpack://crdregister/ignored|D:\\a\\1\\s\\DearPos\\CrdRegister\\node_modules\\sjcl|crypto","webpack://crdregister/webpack/bootstrap","webpack://crdregister/webpack/runtime/chunk loaded","webpack://crdregister/webpack/runtime/compat get default export","webpack://crdregister/webpack/runtime/define property getters","webpack://crdregister/webpack/runtime/get javascript chunk filename","webpack://crdregister/webpack/runtime/get javascript update chunk filename","webpack://crdregister/webpack/runtime/get mini-css chunk filename","webpack://crdregister/webpack/runtime/get update manifest filename","webpack://crdregister/webpack/runtime/getFullHash","webpack://crdregister/webpack/runtime/global","webpack://crdregister/webpack/runtime/hasOwnProperty shorthand","webpack://crdregister/webpack/runtime/load script","webpack://crdregister/webpack/runtime/make namespace object","webpack://crdregister/webpack/runtime/node module decorator","webpack://crdregister/webpack/runtime/hot module replacement","webpack://crdregister/webpack/runtime/publicPath","webpack://crdregister/webpack/runtime/css loading","webpack://crdregister/webpack/runtime/jsonp chunk loading","webpack://crdregister/webpack/before-startup","webpack://crdregister/webpack/startup","webpack://crdregister/webpack/after-startup"],"sourcesContent":["window.buildConfiguration = {\n \"configuration\": \"Release\",\n \"appVersion\": \"3.6.002\",\n \"platform\": \"site\",\n \"appSchema\": \"DEARPOSQA\",\n \"dearAPIBaseUrl\": \"https://qa.dearsystems.com\",\n \"dearAPIImageUrl\": \"https://qacdn-cmgmfqgkh6cjfvaw.z01.azurefd.net/Product/GetImageRatio\",\n \"CFBundleURLSchemes\": \"square-sq0idp-8KDmmDZaGvTzIAMSYCoKKA\",\n \"squareApplicationId\": \"sq0idp-8KDmmDZaGvTzIAMSYCoKKA\",\n \"tyroApplicationId\": \"ixWaAfreqg0t9oqXwgVYHyPUZNC0psrnO1a6\",\n \"triPOSApplicationId\": \"8613\",\n \"WMSApplicationLink\": \"dear.wms.qa\",\n \"WMSApplicationLinkIOS\": \"cin7-core-wmsqa/id1463946498\",\n \"PendoKey\": \"d2a85e42-79c0-4094-5e06-3e0664462ff6\",\n \"GSuites_ClientID\": \"888436474878-7k9jv4odcfst0lh9g2kvgu42o7b25vp9.apps.googleusercontent.com\",\n \"MS_ClientID\": \"083dbce8-ba31-44a2-a51a-457560a7cd4d\"\n};window.isSite = true;\nmodule.exports = buildConfiguration;","export class OptionsTreeItem {\r\n    constructor(el) {\r\n        this.el = el;\r\n    }\r\n}","angular.module(\"mainApp\").controller('addCustomerController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'customerService', 'helperService',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'liveSearchService', '$q',\r\nfunction ($scope, $rootScope, configService, errorService, customerService, helperService,\r\n    $element, constants, $timeout, gettextCatalog, liveSearchService, $q) {\r\n\r\n    $scope.customer = null;\r\n    $scope.searchText = null;\r\n    $scope.searchTextLive = null;\r\n    $scope.customerSearchList = [];\r\n    $scope.showViewDetails = false;\r\n    $scope.searchLimit = constants.customerSearchLimit;\r\n    $scope.mode = 'search';\r\n    $scope.enableLoyalty = configService.enableLoyalty;\r\n    $scope.isOnline = configService.isOnline;\r\n    $scope.minSymbolsToStartSearch = configService.minSymbolsToStartSearch;\r\n    $scope.minSymbolsMessage = gettextCatalog.getString(\"Enter no less than {{cnt}} symbols to start searching.\", { cnt: $scope.minSymbolsToStartSearch });\r\n    $scope.notSetAddressTypeText = 'Not set';\r\n    $scope.debounceTime = 0; // ms\r\n    $scope.countries = [];\r\n    $scope.submittedTab = -1;\r\n    $scope.submittedEditTab = -1;\r\n\r\n    $scope.tabs = {\r\n        contactTabIndex: 0,\r\n        billingSelected: 0,\r\n        shippingSelected: 0\r\n    };\r\n\r\n    $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n\r\n    $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n        $scope.isOnline = object;\r\n    });\r\n\r\n    $scope.formatBalance = helperService.formatBalance;\r\n\r\n    $scope.addressTypes = [\r\n    { Name: $scope.notSetAddressTypeText },\r\n    { Name: \"Billing\" },\r\n    { Name: \"Business\" },\r\n    { Name: \"Shipping\" }];\r\n\r\n    $scope.newCustomer = {\r\n        Name: '',\r\n        Contacts: [\r\n            {\r\n                Name: null,\r\n                Email: null,\r\n                Phone: null,\r\n                MobilePhone: null\r\n            }\r\n        ],\r\n        Addresses: [\r\n            {\r\n                Line1: null,\r\n                Type: \"Shipping\"\r\n            },\r\n            {\r\n                Line1: null,\r\n                Type: \"Billing\"\r\n            }\r\n        ],\r\n        Account: 0,\r\n        ID: 0,\r\n        Status: \"Active\",\r\n        Currency: configService.currency,\r\n        EnableLoyaltyPoints: true,\r\n        LoyaltyPoints: 0,\r\n        StoreCredits: 0,\r\n        UseSameForBilling: false,\r\n        SendReceiptViaEmail: true\r\n    }; // here will be info for create new customer workflow\r\n\r\n    $scope.loadCountries = function() {\r\n        $.blockUI();\r\n        customerService.loadCountries().then(resp => {\r\n            $scope.countries = resp?.data || [];\r\n        }).catch(err => {\r\n            errorService.showError(err);\r\n        }).finally(() => {\r\n            $.unblockUI();\r\n        })\r\n    }\r\n    $scope.loadCountries();\r\n    \r\n    function resetNewCustomer() {\r\n        $scope.searchText = null;\r\n        $scope.searchTextLive = null;\r\n        $scope.newCustomer = {\r\n            Name: '',\r\n            Contacts: [\r\n                {\r\n                    Name: null,\r\n                    Email: null,\r\n                    Phone: null,\r\n                    MobilePhone: null,\r\n                    MarketingConsent: '1'\r\n                }\r\n            ],\r\n            Addresses: [\r\n                {\r\n                    Line1: null,\r\n                    Type: \"Shipping\"\r\n                },\r\n                {\r\n                    Line1: null,\r\n                    Type: \"Billing\"\r\n                }\r\n            ],\r\n            Account: 0,\r\n            ID: 0,\r\n            Status: \"Active\",\r\n            Currency: configService.currency,\r\n            EnableLoyaltyPoints: true,\r\n            LoyaltyPoints: 0,\r\n            StoreCredits: 0,\r\n            UseSameForBilling: false,\r\n            SendReceiptViaEmail: true\r\n        }; // here will be info for create new customer workflow\r\n\r\n        $timeout(function() {\r\n            $('input, select').trigger('refresh');\r\n        }, 500);\r\n    }\r\n\r\n    $scope.setCustomerLoadMode = function(){\r\n        $scope.loadOnline = customerService.loadOnline();\r\n        if ($scope.loadOnline) {\r\n            $scope.debounceTime = 500;\r\n        }\r\n    }\r\n\r\n    $scope.setCustomerLoadMode();\r\n\r\n    $scope.$on('addCustomer.show', function (event, data) {\r\n        $scope.searchText = null;\r\n        $scope.searchTextLive = null;\r\n\r\n        $scope.currentTabCreate = 0;\r\n        $scope.prevTabCreate = 0;\r\n\r\n        if (data.mode == 'add')\r\n            $scope.mode = 'add';\r\n        else{            \r\n            $scope.mode = 'search';\r\n        }\r\n        if (typeof data.isCustomersGrid !== \"undefined\")\r\n            $scope.isCustomersGrid = data.isCustomersGrid;\r\n        else\r\n            $scope.isCustomersGrid = false;\r\n        $scope.showViewDetails = data.showViewDetails || false;\r\n        $scope.customerSearchList = [];\r\n        $scope.addCustomerForm.$setPristine();\r\n        resetNewCustomer();\r\n        console.log($scope.newCustomer.EnableLoyaltyPoints);\r\n        $scope.initSelects('ADD');\r\n        helperService.showDialog($element, function() {\r\n            if ($scope.mode == 'add') {\r\n                $('#addCustomerModalBody').trigger('element.shown');\r\n            }\r\n            if ($scope.mode == 'search') {\r\n                $('#searchCustomerText').focus();\r\n            }\r\n            else {\r\n                $('#addSelectModalBody').trigger('element.shown');\r\n            }\r\n        });\r\n    });\r\n\r\n    $scope.editCustomerShowHandler = function(customer, mode){\r\n        $scope.resetTabdrop(true);\r\n        \r\n        $scope.mode = mode;\r\n        $scope.contractSelected = 0;\r\n        $scope.tabs.contactTabIndex = 0;\r\n        $scope.tabs.shippingSelected = 0;\r\n        $scope.tabs.billingSelected = 0;\r\n        $scope.currentTab = 0;\r\n        $scope.prevTab = 0;\r\n\r\n        var existShipping = false;\r\n        var existBilling = false;\r\n\r\n        $scope.editedCustomer = {};\r\n        angular.copy(customer, $scope.editedCustomer);\r\n\r\n        const shippingAddr = customer.Addresses.filter(x => x.Type === 'Shipping');\r\n        $.each(shippingAddr, function (idx, el) {\r\n            $scope.tabs.shippingSelected = idx;\r\n            existShipping = true;\r\n            return false;\r\n        });\r\n\r\n        const billingAddr = customer.Addresses.filter(x => x.Type === 'Billing');\r\n        $.each(billingAddr, function (idx, el) {\r\n            $scope.tabs.billingSelected = idx;\r\n            existBilling = true;\r\n            return false;\r\n        });\r\n\r\n        if ($scope.editedCustomer.Contacts.length === 0) {\r\n            $scope.editedCustomer.Contacts.push({MarketingConsent: '1'});\r\n        }\r\n\r\n        if (existShipping === false) {\r\n            $scope.editedCustomer.Addresses.push({ Type: 'Shipping', open: true });\r\n            $scope.tabs.shippingSelected = -1;\r\n        } else {\r\n            const index = $scope.editedCustomer.Addresses.findIndex(addr => addr.ID === shippingAddr[0]?.ID);\r\n            if (index > -1) {\r\n                const selectedShippingAddr = $scope.editedCustomer.Addresses[index];\r\n                $scope.editedCustomer.Addresses[index] = {...selectedShippingAddr, open: true};\r\n            }\r\n        }\r\n\r\n        if (existBilling === false) {\r\n            $scope.editedCustomer.Addresses.push({ Type: 'Billing', open: true });\r\n            $scope.tabs.billingSelected = -1;\r\n        } else {\r\n            const index = $scope.editedCustomer.Addresses.findIndex(addr => addr.ID === billingAddr[0]?.ID);\r\n            if (index > -1) {\r\n                const selectedBillingAddr = $scope.editedCustomer.Addresses[index];\r\n                $scope.editedCustomer.Addresses[index] = {...selectedBillingAddr, open: true};\r\n            }\r\n        }        \r\n\r\n        $scope.groupValidation = [];\r\n        $scope.groupValidation.push({ groupName: 'MainInfo', isTouched: false, isValid: true });\r\n        $scope.groupValidation.push({ groupName: 'Contacts', isTouched: false, isValid: true });\r\n        $scope.groupValidation.push({ groupName: 'Shipping', isTouched: false, isValid: true });\r\n        $scope.groupValidation.push({ groupName: 'Billing', isTouched: false, isValid: true });\r\n\r\n        $scope.editCustomerForm.$setPristine();\r\n        var SCOPE = $scope;\r\n        helperService.showDialog($element, function() {\r\n            $('#editCustomerModalBody').trigger('element.shown');\r\n            $timeout(function(){\r\n                SCOPE.editCustomerForm.$setPristine();\r\n            },2);\r\n        });\r\n\r\n        $scope.updateTabdrop();\r\n        $scope.initSelects('EDIT');\r\n\r\n        // $timeout(function () {\r\n        //     if ($scope.firstRunEditDialog == false) {\r\n        //         $('#contact-tabs').tabdrop('layout');\r\n        //         $('#billing-tabs').tabdrop('layout');\r\n        //         $('#shipping-tabs').tabdrop('layout');\r\n        //     }\r\n        //     else {\r\n        //         $('#contact-tabs').tabdrop({text: '<img src=\"PosImages/menu-tabs.svg\" style=\"width:25px;height: 30px;\" />'});\r\n        //         $('#billing-tabs').tabdrop({text: '<img src=\"PosImages/menu-tabs.svg\" style=\"width:25px;height: 30px;\" />'});\r\n        //         $('#shipping-tabs').tabdrop({text: '<img src=\"PosImages/menu-tabs.svg\" style=\"width:25px;height: 30px;\" />'});\r\n        //     }\r\n\r\n        //     $scope.firstRunEditDialog = false;\r\n\r\n        // }, 500);\r\n    }\r\n\r\n    $scope.initSelects = function(formType) {\r\n        const options = {\r\n            selectSearch: true,\r\n            selectSearchNotFound: 'No matches found',\r\n            selectSearchPlaceholder: 'Search...'\r\n        };\r\n        if (formType === 'ADD') {\r\n            $('#acountryS, #acountryB').attr('data-load-later', 'false');\r\n            $('#acountryS, #acountryB').styler(options);\r\n        } else if (formType === 'EDIT') {\r\n            $timeout(function() {\r\n                $('select.countrySelect:not(\"#acountryS, #acountryB\")').styler(options);\r\n            }, 0);\r\n        }\r\n    }\r\n\r\n    $scope.$on('editCustomer.show', function (event, customer) {\r\n        $scope.editCustomerShowHandler(customer, 'editCustomer');\r\n    });\r\n\r\n    $scope.$on('editCustomer.sales.show', function (event, customer) {\r\n        $scope.editCustomerShowHandler(customer, 'editCustomerOnSalesPage');\r\n    });\r\n\r\n    $scope.firstRunEditDialog = [true];\r\n\r\n    $scope.resetTabdrop = function(fullReset) {\r\n        $('.drop-completed').removeClass('drop-completed');\r\n        if (fullReset == true) {\r\n            var ctrl = null;\r\n            if ($scope.firstRunEditDialog[0] != true) {\r\n                ctrl = $('#contact-tabs');\r\n                ctrl.tabdrop('reset');\r\n            }\r\n        }\r\n    }\r\n\r\n    $scope.updateTabdrop = function() {\r\n        $timeout(function () {\r\n            var idx = $scope.currentTab;\r\n            var ctrl = null;\r\n\r\n            if (idx === 0) {\r\n                ctrl = $('#contact-tabs');\r\n            }\r\n\r\n            if(!!ctrl) {\r\n                if ($scope.firstRunEditDialog[idx] === false) {\r\n                    ctrl.tabdrop('layout');\r\n                }\r\n                else {\r\n                    ctrl.tabdrop({text: '<img src=\"PosImages/menu-tabs.svg\" style=\"width:25px;height: 25px;\" />'});\r\n                }\r\n            }\r\n\r\n            $scope.firstRunEditDialog[idx] = false;\r\n\r\n        }, 500);\r\n    }\r\n\r\n    $scope.$on('editCustomerContact.show', function (event, object) {\r\n        $scope.mode = 'editCustomerContact';\r\n        $scope.editedCustomerContact = object.Contact;\r\n        $scope.editedCustomerContactObjcet = object;\r\n        helperService.showDialog($element);\r\n        $timeout(function () {\r\n            $('#type').trigger('refresh');\r\n        }, 0);\r\n    });\r\n\r\n    $scope.$on('editCustomerAddress.show', function (event, object) {\r\n        $scope.mode = 'editCustomerAddress';\r\n        $scope.editedCustomerAddress = object.Address;\r\n        $scope.editedCustomerAddressObjcet = object;\r\n        helperService.showDialog($element);\r\n\r\n        $timeout(function () {\r\n            $('#type').trigger('refresh');\r\n        }, 0);\r\n    });\r\n\r\n    //$scope.$watch('searchText',\r\n    //  function (newValue, oldValue) {\r\n    //      if (newValue !== oldValue && !!newValue &&\r\n    //          newValue.length >= configService.minSymbolsToStartSearch) {\r\n    //          keyPressDelayService.forceDelayOperation(newValue, $scope.searchCustomer);\r\n    //      }\r\n    //  }\r\n    // );\r\n    $scope.liveSearchIsOpen = false;\r\n\r\n    $scope.$watch('liveSearchIsOpen',\r\n        function (newValue, oldValue) {\r\n            if (newValue) {\r\n                $timeout(function() {\r\n                    helperService.fitHeightTypeahead('#' + $('#searchCustomerText').attr('aria-owns'), true, '#searchCustomerFormModalBody');\r\n                },400);\r\n            }\r\n        }\r\n    );\r\n\r\n    // cache, so customers won't be loaded second time when enter is hit\r\n    $scope.loadCustomersOnlineResults = null;\r\n\r\n    $scope.liveSearchCustomer = function (val) {\r\n        $scope.searchText = val;\r\n        if (configService.isMobileDesign) {\r\n            return [];\r\n        }\r\n\r\n        $scope.isLoading = false;\r\n        if (!$scope.loadOnline) {\r\n            return liveSearchService.filterCustomerData(val, 5);\r\n        } else if (configService.isOnline) {\r\n            $scope.isLoading = true;\r\n            return customerService.loadCustomers(val, null, $scope.searchLimit, null, true)\r\n                .then(function (res) {\r\n                    $scope.loadCustomersOnlineResults = {Customers: res.Customers, SearchText: val};\r\n                    const liveSearchResults = liveSearchService.mapOnlineCustomers(res.Customers.slice(0, 5), val);\r\n                    $scope.isLoading = false;\r\n\r\n                    return liveSearchResults.slice(0, 5);\r\n                });\r\n\r\n        } else {\r\n            return [];\r\n        }\r\n    };\r\n\r\n    $scope.liveSearchFinished = function (val) {\r\n        return !!val ? val.name : null;\r\n    };\r\n\r\n    $scope.liveSearchSelected = function (item, model, label, event) {\r\n            // make search by product id and add product to order\r\n\r\n            if(event && Array.from(event.target.classList).includes('view-details-btn')){\r\n                $scope.viewDetailsButtonHandler(item);\r\n            }\r\n            else {\r\n                $scope.searchCustomerID = model.id;\r\n                $scope.searchCustomerEmail = model.email;\r\n                $scope.searchCustomer();\r\n            }            \r\n    };\r\n\r\n    $scope.viewDetailsButtonHandler = function (customer) {\r\n        $.blockUI();\r\n\r\n        customerService.loadCustomers(null, null, 1, { CustomerID: customer.id || customer.ID })\r\n            .then(function (resp) {\r\n                $.unblockUI();\r\n\r\n                if (!!resp.Customers && resp.Customers.length > 0) {\r\n                    if (!configService.isSite) {\r\n                        Keyboard.hide();\r\n                    }\r\n                    else {\r\n                        helperService.hideKeyboard();\r\n                    }\r\n\r\n                    let customer = resp.Customers[0];\r\n\r\n                    $rootScope.$broadcast('editCustomer.sales.show', customer);\r\n                }\r\n            },\r\n                function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                })\r\n    }\r\n\r\n    $scope.liveKeyPress = function (event) {\r\n        if (event.which === 13) {\r\n            $scope.searchCustomerID = null;\r\n            $scope.searchCustomerEmail = null;\r\n            $scope.searchCustomer();\r\n        }\r\n    };\r\n\r\n\r\n    $scope.canShowErrors = false;\r\n\r\n    $scope.searchCustomerLoadCustomers = function (searchText, id, forceOnline) {  \r\n        let pr = null;\r\n        if ((!$scope.loadCustomersOnlineResults || $scope.loadCustomersOnlineResults.SearchText !== searchText) || id) {\r\n            pr = customerService.loadCustomers(searchText, null, $scope.searchLimit, (!!id ? { CustomerID: id } : null), forceOnline || $scope.enableLoyalty === true);\r\n        } else {\r\n            const deferred = $q.defer();\r\n            deferred.resolve({Customers: $scope.loadCustomersOnlineResults.Customers});\r\n            pr = deferred.promise;\r\n        }\r\n        \r\n        pr.then(function (resp) {\r\n            // reset cache\r\n            $scope.loadCustomersOnlineResults = null;\r\n            $scope.customerSearchList = resp.Customers;\r\n           \r\n            $.unblockUI();\r\n           \r\n            if (!!resp.Customers && resp.Customers.length > 0) {\r\n                if (!configService.isSite) {\r\n                    Keyboard.hide();\r\n                }\r\n                else {\r\n                    helperService.hideKeyboard();\r\n                }\r\n\r\n                // when from live search simply select him\r\n                if (!!id && resp.Customers.length == 1) {\r\n                    $scope.selectCustomer(resp.Customers[0]);\r\n                    $scope.addCustomer();\r\n                    return;\r\n                }\r\n            }\r\n\r\n            $timeout(function () {\r\n                if (!!$scope.customerSearchList && $scope.customerSearchList.length > 0) {\r\n                    if (configService.isMobile) {\r\n                        Keyboard.hide();\r\n                    }\r\n                    else {\r\n                        helperService.hideKeyboard();\r\n                    }\r\n                }\r\n            }, 0);\r\n        },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n    }\r\n\r\n    $scope.searchCustomer = function () {\r\n        $scope.canShowErrors = $scope.searchCustomerForm.$invalid;\r\n        var id = $scope.searchCustomerID;\r\n\r\n        $scope.searchCustomerID = null;\r\n\r\n        var searchText = $('#searchCustomerText').val();\r\n\r\n        if ($scope.searchCustomerForm.searchCustomerText.$invalid) {\r\n            return false;\r\n        }\r\n\r\n        $scope.canShowErrors = false;\r\n        $.blockUI();\r\n        \r\n        $scope.searchCustomerLoadCustomers(searchText, id);\r\n\r\n        return false;\r\n    };\r\n  \r\n    $scope.cancelDialog = function () {\r\n        let initialModeValue = $scope.mode;\r\n\r\n        if($scope.mode === 'editCustomerOnSalesPage'){\r\n            $scope.cancelEditCustomerDialogModal();\r\n        }\r\n        else {\r\n            helperService.closeDialog($element);\r\n        }    \r\n        \r\n        if(initialModeValue === 'search'){\r\n            $(\"#searchCustomerText\").val(null).trigger('input');\r\n        }\r\n    };\r\n\r\n    $scope.addCustomer = function () {\r\n        helperService.closeDialog($element);\r\n        const email = $scope.searchCustomerEmail;\r\n        $scope.searchCustomerEmail = null;\r\n        $rootScope.$broadcast('addCustomer.selected', { customer: $scope.customer, action: 'search', email: email });\r\n    };\r\n  \r\n\r\n    $scope.selectCustomer = function (item) {\r\n        $scope.customer = item;\r\n    };\r\n\r\n    $scope.createCustomer = function () {\r\n        if (validateCreateModal($scope.addCustomerForm, $scope.currentTabCreate)) {\r\n            $scope.submittedTab = $scope.currentTabCreate;\r\n            errorService.showError(\r\n                gettextCatalog.getString('Please fill in the required fields before saving.')\r\n            );\r\n            return;\r\n        }\r\n        $scope.submittedTab = -1;\r\n\r\n        $.blockUI();\r\n        $scope.newCustomer.Contacts[0].Name = $scope.newCustomer.Name;\r\n        if (!!$scope.newCustomer.Addresses) {\r\n            $scope.newCustomer.Addresses = $scope.newCustomer.Addresses.filter(function (a) {\r\n                 return !!a.Line1 && !!a.City;\r\n                });\r\n\r\n            angular.forEach($scope.newCustomer.Addresses, function (el) {\r\n                el.State = el.StateProvince;\r\n                el.Postcode = el.ZipPostCode;\r\n\r\n                if (!el.DefaultForType) {\r\n                    el.DefaultForType = false;\r\n                }\r\n            });\r\n\r\n            if($scope.newCustomer.UseSameForBilling){\r\n                $scope.newCustomer.Addresses[1] = {\r\n                    Line1: $scope.newCustomer.Addresses[0].Line1,\r\n                    Line2: $scope.newCustomer.Addresses[0].Line2,\r\n                    City: $scope.newCustomer.Addresses[0].City,\r\n                    State: $scope.newCustomer.Addresses[0].State,\r\n                    Country: $scope.newCustomer.Addresses[0].Country,\r\n                    Postcode: $scope.newCustomer.Addresses[0].Postcode,\r\n                    DefaultForType: $scope.newCustomer.Addresses[0].DefaultForType,\r\n                    Type: \"Billing\"\r\n                };\r\n            }\r\n        }\r\n\r\n        $scope.newCustomer.LocatoinID  = configService.lastOutletID;\r\n\r\n        customerService.createCustomer($scope.newCustomer).then(function (resp) {\r\n            $.unblockUI();\r\n            helperService.closeDialog($element);\r\n            $scope.newCustomer.ID = resp.CustomerID;\r\n            if(resp.Addresses) {\r\n                resp.Addresses.forEach(function(addr) {\r\n                    addr.ID =addr.AddressID;\r\n                    addr.City = addr.CitySuburb;\r\n                    delete addr.CitySuburb;\r\n                    delete addr.CustomerID;\r\n                    addr.State = addr.StateProvince;\r\n                    delete addr.StateProvince;\r\n                    addr.Postcode = addr.ZipPostCode;\r\n                    delete addr.ZipPostCode;\r\n                    delete addr.DefaultForType;\r\n                    delete addr.TaxExemptionReasonCode;\r\n                    delete addr.ValidationState;\r\n                    delete addr.ValidationText;\r\n                });\r\n\r\n                $scope.newCustomer.Addresses = resp.Addresses;\r\n            }\r\n\r\n            if(resp.Contacts) {\r\n                resp.Contacts.forEach(function(c) {\r\n                    c.ID = c.ContactID;\r\n                    delete c.ValidationState;\r\n                    delete c.ValidationText;\r\n                    delete c.CustomerID;\r\n                    delete c.Website;\r\n                    delete c.IncludeInEmail;\r\n                    delete c.Fax;\r\n                    delete c.Comment;\r\n                    delete c.JobTitle;\r\n                });\r\n\r\n                $scope.newCustomer.Contacts = resp.Contacts;\r\n            }\r\n\r\n            if (resp.TaxRuleID) {\r\n                $scope.newCustomer.TaxRuleID = resp.TaxRuleID;\r\n                $scope.newCustomer.EffectivePercentInclusive = resp.EffectivePercentInclusive;\r\n                $scope.newCustomer.EffectivePercentExclusive = resp.EffectivePercentExclusive;\r\n            }\r\n\r\n            $rootScope.$broadcast('addCustomer.selected', { customer: $scope.newCustomer, action: 'create' });\r\n        }, function (err) {\r\n            if($scope.newCustomer.Addresses.length !== 2){\r\n                if($scope.newCustomer.Addresses.length === 0){\r\n                      $scope.newCustomer.Addresses = [\r\n                        {\r\n                            Line1: null,\r\n                            Type: \"Shipping\"\r\n                        },\r\n                        {\r\n                            Line1: null,\r\n                            Type: \"Billing\"\r\n                        }\r\n                    ];\r\n                }else{\r\n                    if($scope.newCustomer.Addresses[0].Type === \"Shipping\"){\r\n                        $scope.newCustomer.Addresses.push({Line1:null, Type: \"Billing\"});\r\n                    }else{\r\n                        $scope.newCustomer.Addresses.unshift({Line1:null, Type: \"Shipping\"});\r\n                    }\r\n                }\r\n            }\r\n            $.unblockUI();\r\n            errorService.showError(err);\r\n        });\r\n\r\n    };\r\n\r\n    $scope.handleDefaultAddress = function (form, type, address) {\r\n        $scope.touchAddress(form, type);\r\n        // Return if any address is set false for default address or \r\n        if (address.DefaultForType === false) {\r\n            return;\r\n        }\r\n\r\n        if (form.$name === 'editCustomerForm') {\r\n            $scope.editedCustomer.Addresses.forEach(ad => {\r\n                if (address.DefaultForType && ad.Type == type && ad.ID !== address.ID) {\r\n                    ad.DefaultForType = false;\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n    $scope.editCustomer = function () {\r\n        $scope.submittedEditTab = $scope.currentTab;\r\n        if(validateModal($scope.editCustomerForm)) {\r\n            return;\r\n        }\r\n        $scope.submittedEditTab = -1;\r\n\r\n        $.blockUI();\r\n        // var d = angular.extend($scope.editedCustomer, { updateMode: 'customer' });\r\n\r\n        var saveMainInfo = false;\r\n        var saveContacts = false;\r\n        var saveShipping = false;\r\n        var saveBilling = false;\r\n        var isContactsTouched = false;\r\n\r\n        $.each($scope.groupValidation, function(idx, el) {\r\n            switch (el.groupName) {\r\n                case 'MainInfo':\r\n                    saveMainInfo = el.isTouched && el.isValid;\r\n                    break;\r\n                case 'Contacts':\r\n                    saveContacts = el.isTouched && el.isValid;\r\n                    isContactsTouched = el.isTouched;\r\n                    break;\r\n                case 'Shipping':\r\n                    saveShipping = el.isTouched && el.isValid;\r\n                    break;\r\n                case 'Billing':\r\n                    saveBilling = el.isTouched && el.isValid;\r\n                    break;\r\n            }\r\n            });\r\n\r\n        var customerToSave = {};\r\n        angular.copy($scope.editedCustomer, customerToSave);\r\n\r\n        var contactsToRemove = [];\r\n        var addressesToRemove = [];\r\n\r\n        $.each(customerToSave.Contacts, function (idx, el) {\r\n            if (!el.ID && !el.Name && !el.MobilePhone && !el.Phone && !el.Email && !isContactsTouched) {\r\n                contactsToRemove.push(el);\r\n            }\r\n        });\r\n\r\n        $.each(customerToSave.Addresses.filter(x => x.Type === 'Shipping' || x.Type === 'Billing'), function (idx, el) {\r\n            if (!el.ID && !el.Line1 && !el.Line2 && !el.City && !el.State && !el.Postcode && !el.Country) {\r\n                addressesToRemove.push(el);\r\n            } else {\r\n                delete el.open;\r\n                el.DefaultForType = !!el.DefaultForType;\r\n            }\r\n        });\r\n\r\n        $.each(contactsToRemove, function (idx, el) {\r\n            var index = customerToSave.Contacts.indexOf(el);\r\n            customerToSave.Contacts.splice(index, 1);\r\n        });\r\n\r\n        $.each(addressesToRemove, function (idx, el) {\r\n            var index = customerToSave.Addresses.indexOf(el);\r\n            customerToSave.Addresses.splice(index, 1);\r\n        });\r\n\r\n        var updateMode = \"\";\r\n        if (saveMainInfo && isContactsTouched)\r\n            updateMode += \"  mainInfo contacts\";\r\n        else\r\n        if (saveMainInfo)\r\n            updateMode += \"  mainInfo\";\r\n        if (saveContacts)\r\n            updateMode += \" contacts\";\r\n        if (saveShipping || saveBilling)\r\n            updateMode += \" addresses\";\r\n\r\n\r\n        var d = angular.extend(customerToSave, { updateMode: updateMode });\r\n\r\n        customerService.updateCustomer(d).then(function (resp) {\r\n            customerService.onCustomerUpdated(d.id || d.ID)\r\n                .finally(function () {\r\n                    if ($scope.mode === 'editCustomerOnSalesPage') {\r\n    \r\n                        if ($scope.currentSale && $scope.currentSale.customer && $scope.currentSale.customer.ID === $scope.editedCustomer.ID) {\r\n                            $scope.currentSale.customer = $scope.editedCustomer;\r\n                        }\r\n    \r\n                        if ($scope.customerSearchList && $scope.customerSearchList.length > 0)\r\n                        {\r\n                            $scope.searchCustomerLoadCustomers($scope.searchText, null, true);    \r\n                        } else {\r\n                            $.unblockUI();\r\n                        }\r\n                        $scope.cancelDialogModal($element);\r\n                    }\r\n                    else {\r\n                        $.unblockUI();\r\n                        helperService.closeDialog($element);\r\n                        $rootScope.$broadcast('addCustomer.selected', { customer: $scope.editedCustomer, action: 'edit' });\r\n                    }\r\n                });\r\n            \r\n        }, function (err) {\r\n            $.unblockUI();\r\n            errorService.showError(err);\r\n        });\r\n    };\r\n    \r\n\r\n    $scope.editCustomerContact = function () {\r\n        $.blockUI();\r\n        $.each($scope.editedCustomerContactObjcet.Customer.Contacts, function (idx, el) {\r\n            if (el.ID === $scope.editedCustomerContact.ID) {\r\n                el.Name = $scope.editedCustomerContact.Name;\r\n                el.MobilePhone = $scope.editedCustomerContact.MobilePhone;\r\n                el.Phone = $scope.editedCustomerContact.Phone;\r\n                el.Email = $scope.editedCustomerContact.Email;\r\n            }\r\n        });\r\n\r\n        var d = angular.extend($scope.editedCustomerContactObjcet.Customer, { updateMode: 'contacts' });\r\n        customerService.updateCustomer(d).then(function (resp) {\r\n            $.unblockUI();\r\n            helperService.closeDialog($element);\r\n            $rootScope.$broadcast('addCustomer.selected', { customer: $scope.editedCustomerContactObjcet.Customer, action: 'edit' });\r\n        }, function (err) {\r\n            $.unblockUI();\r\n            errorService.showError(err);\r\n        });\r\n    };\r\n\r\n\r\n    $scope.editCustomerAddress = function () {\r\n        $.blockUI();\r\n        $.each($scope.editedCustomerAddressObjcet.Customer.Addresses, function (idx, el) {\r\n            if (el.ID === $scope.editedCustomerAddress.ID) {\r\n                el.Line1 = $scope.editedCustomerAddress.Line1;\r\n                el.StateProvince = $scope.editedCustomerAddress.State;\r\n                el.ZipPostCode = $scope.editedCustomerAddress.Postcode;\r\n                el.Country = $scope.editedCustomerAddress.Country;\r\n                el.City = $scope.editedCustomerAddress.City;\r\n                el.Type = $scope.editedCustomerAddress.Type;\r\n            }\r\n        });\r\n        var d = angular.extend($scope.editedCustomerAddressObjcet.Customer, { updateMode: 'addresses' });\r\n\r\n        customerService.updateCustomer(d).then(function (resp) {\r\n            $.unblockUI();\r\n            helperService.closeDialog($element);\r\n            $rootScope.$broadcast('addCustomer.selected', { customer: $scope.editedCustomerAddressObjcet.Customer, action: 'edit' });\r\n        }, function (err) {\r\n            $.unblockUI();\r\n            errorService.showError(err);\r\n        });\r\n    };\r\n\r\n\r\n    $scope.switchMode = function (setAddNew) {\r\n        $scope.mode = setAddNew === true ? 'add' : 'search';\r\n        if ($scope.mode == 'add') {\r\n            $timeout(function () {\r\n                $scope.setFocusToFirstInput();\r\n\r\n            });\r\n        }\r\n        $timeout(function(){\r\n            $rootScope.$broadcast('popup.shown');\r\n        });\r\n        return false;\r\n    };\r\n \r\n    $scope.getNewCustomerAddressClass = function (form, name) {        \r\n\r\n        $scope.validateNewCustomer.validateShippingAdress(form);\r\n        $scope.validateNewCustomer.validateBillingAdress(form);\r\n\r\n        return $scope.getFieldClass(form, name);\r\n    }\r\n\r\n    $scope.getFieldClass = function (form, name, fieldLengthGT) {\r\n        let field = form[name];\r\n\r\n        if(fieldLengthGT === undefined)\r\n        {\r\n            fieldLengthGT = 0;\r\n        }\r\n\r\n        if ((!field.$invalid && field.$dirty) || (!field.$invalid && field.length > fieldLengthGT))\r\n            return 'dp_has-success has-success';\r\n        else if (((field.$invalid || field.$error.required) && (field.$dirty || field.length > fieldLengthGT)))\r\n            return 'has-danger dp_has-danger';\r\n    };\r\n\r\n    //Edit customer\r\n\r\n    $scope.touchMainInfo = function(form, touched) {\r\n        $.each($scope.groupValidation, function (idx, el) {\r\n            if (el.groupName === 'MainInfo') {\r\n                el.isTouched = form.name.$dirty || el.isTouched;\r\n                if (touched)\r\n                    el.isTouched = true;\r\n\r\n                el.isValid = !((form.name.$invalid || form.name.$error.required) && (form.name.$dirty || form.name.length > 0));\r\n            }\r\n\r\n        });\r\n    };\r\n\r\n    $scope.touchContact = function (form, isMarketingConsent = false) {\r\n        if(!$scope.groupValidation)\r\n            return;\r\n\r\n        let concatsGroup = $scope.groupValidation.find(x => x.groupName === 'Contacts');\r\n\r\n        let isTouched = false, isValid = true;\r\n\r\n        if (concatsGroup){\r\n            $.each($scope.editedCustomer.Contacts, (tabIndex, tab) => {\r\n\r\n                let contactName = form[`contactName_${tabIndex}`];\r\n                let phone = form[`phone_${tabIndex}`];\r\n                let mobilePhone = form[`mobilePhone_${tabIndex}`];\r\n                let email = form[`email_${tabIndex}`];\r\n\r\n                let tabIsTouched = contactName.$dirty || phone.$dirty || mobilePhone.$dirty || email.$dirty || isMarketingConsent;\r\n                let tabIsValid = !((contactName.$invalid || contactName.$error.required) && (contactName.$dirty || contactName.length > 0))\r\n                && !((phone.$invalid || phone.$error.required) && (phone.$dirty || phone.length > 0))\r\n                && !((mobilePhone.$invalid || mobilePhone.$error.required) && (mobilePhone.$dirty || mobilePhone.length > 0))\r\n                    && !((email.$invalid || email.$error.required) && (email.$dirty || email.length > 0)) \r\n                    && (!isMarketingConsent || (isMarketingConsent && contactName.$valid));\r\n\r\n                isTouched = isTouched || tabIsTouched;\r\n                isValid = isValid && tabIsValid;               \r\n\r\n                if (tabIsTouched && contactName.$error.required) {\r\n                    //concatsGroup.isValid = false;\r\n                    contactName.$setDirty();\r\n                }\r\n            })\r\n\r\n            concatsGroup.isTouched = isTouched;\r\n            concatsGroup.isValid = isValid;          \r\n        }\r\n    }\r\n\r\n    $scope.touchAddress = function (form, type) {\r\n        if(!$scope.groupValidation)\r\n            return;\r\n\r\n        let group = $scope.groupValidation.find(x => x.groupName === type);\r\n\r\n        let isTouched = false, isValid = true;\r\n\r\n        if (group){\r\n            $.each($scope.editedCustomer.Addresses.filter(x => x.Type === type), (tabIndex, tab) => {\r\n\r\n                let line1 = form[`line1${type}_${tabIndex}`];\r\n                let line2 = form[`line2${type}_${tabIndex}`];\r\n                let city = form[`city${type}_${tabIndex}`];\r\n                let state = form[`state${type}_${tabIndex}`];\r\n                let zipCode = form[`zipCode${type}_${tabIndex}`];\r\n                let country = form[`country${type}_${tabIndex}`];\r\n                let defaultForType = form[`defaultForType${type}_${tabIndex}`];\r\n\r\n                let tabIsTouched = line1.$dirty || line2.$dirty || city.$dirty || state.$dirty || zipCode.$dirty || country.$dirty || defaultForType.$dirty;\r\n                let tabIsValid =\r\n                    !((line1.$invalid || line1.$error.required) && (line1.$dirty || line1.length > 0)) &&\r\n                    !((city.$invalid || city.$error.required) && (line1.$dirty || city.$dirty || city.length > 0));\r\n\r\n                isTouched = isTouched || tabIsTouched;\r\n                isValid = isValid && tabIsValid;               \r\n\r\n                if (tabIsTouched) {\r\n                    if(line1.$error.required) {\r\n                        line1.$setDirty();    \r\n                    }\r\n                    if(city.$error.required) {\r\n                        city.$setDirty();    \r\n                    }\r\n                }\r\n            })\r\n\r\n            group.isTouched = isTouched;\r\n            group.isValid = isValid;          \r\n        }    \r\n    }  \r\n\r\n    $scope.validateForm = function (form) {\r\n       if (form.$invalid && !form.$dirty) {\r\n            return false;\r\n        }\r\n\r\n        var valid = true;\r\n        $.each($scope.groupValidation, function(idx, el) {\r\n            if (el.isValid === false)\r\n                valid = false;\r\n        });\r\n        return !valid;\r\n    }\r\n\r\n    $scope.setFocusToFirstInput = function () {\r\n        if ($scope.mode == 'add') {\r\n            if(!configService.isMobile)\r\n                $('#name').focus();\r\n        }\r\n        else if ($scope.mode == 'editCustomerContact') {\r\n            if(!configService.isMobile)\r\n                $('#contactNameEdit').focus();\r\n        }\r\n        else if ($scope.mode == 'editCustomer' || $scope.mode == 'editCustomerOnSalesPage') {\r\n            if(!configService.isMobile)\r\n                $('#nameEdit').focus();\r\n        }\r\n        else if ($scope.mode == 'editCustomerAddress') {\r\n            if(!configService.isMobile)\r\n                $('#eline1').focus();\r\n        }\r\n    };\r\n\r\n\r\n\r\n    function getNextItem(type, currentIdx) {\r\n        return $scope.editedCustomer && $scope.editedCustomer.Addresses.some((x, index) => x.Type === type && index > currentIdx) ? currentIdx + 1 : -1;\r\n    }\r\n\r\n    function getPrevItem(type, currentIdx) {\r\n        return $scope.editedCustomer && $scope.editedCustomer.Addresses.reverse().some((x, index) => x.Type === type && index < currentIdx) ? currentIdx - 1 : -1;\r\n    }\r\n\r\n    $scope.existPrevNumber = function () {\r\n        switch ($scope.currentTab) {\r\n        case 0:\r\n            if ($scope.contractSelected === 0)\r\n                return false;\r\n            else\r\n                return true;\r\n            break;\r\n        case 1:\r\n            return getPrevItem('Shipping', $scope.tabs.shippingSelected) !== -1;\r\n            break;\r\n        case 2:\r\n            return getPrevItem('Billing', $scope.tabs.billingSelected) !== -1;\r\n            break;\r\n        default:\r\n            return false;\r\n        }\r\n    }\r\n\r\n    $scope.existNextNumber = function() {\r\n        switch ($scope.currentTab) {\r\n            case 0:\r\n                if ($scope.editedCustomer && $scope.contractSelected === $scope.editedCustomer.Contacts.length - 1)\r\n                    return false;\r\n                else\r\n                    return true;\r\n                break;\r\n            case 1:\r\n                return getNextItem('Shipping', $scope.tabs.shippingSelected) !== -1;\r\n                break;\r\n            case 2:\r\n                return getNextItem('Billing', $scope.tabs.billingSelected) !== -1;\r\n                break;\r\n            default:\r\n                return false;\r\n        }\r\n    };\r\n\r\n    $scope.changeTab = function (tabNumber, form, event) {\r\n        $scope.submittedEditTab = $scope.currentTab;\r\n        if (validateModal(form) === false) {\r\n            $scope.submittedEditTab = -1;\r\n            if (tabNumber === 0)\r\n                form.email_0.$setPristine();\r\n            $scope.prevTab = tabNumber === $scope.currentTab ? $scope.currentTab : $scope.prevTab;\r\n            $scope.currentTab = tabNumber;\r\n        } else {\r\n            $scope.currentTab = $scope.prevTab;\r\n        }\r\n\r\n        $scope.resetTabdrop();\r\n        $scope.updateTabdrop();\r\n    }\r\n\r\n    $scope.changeTabCreate = function (tabNumber, form, event){\r\n        if (validateCreateModal(form, $scope.prevTabCreate) === false && !$scope.newCustomer.UseSameForBilling) {\r\n            $scope.prevTabCreate = $scope.currentTabCreate;\r\n            $scope.currentTabCreate = tabNumber;\r\n        } else {\r\n            $scope.currentTabCreate = $scope.prevTabCreate;\r\n        }\r\n    }\r\n\r\n    $scope.prevPane = function (form) {\r\n        $scope.submittedEditTab = $scope.currentTab;\r\n        if (validateModal(form)) {\r\n            return;\r\n        }\r\n        $scope.submittedEditTab = -1;\r\n\r\n        if ($scope.currentTab === 0) {\r\n            form.email_0.$setPristine();\r\n            $scope.contractSelected -= 1;\r\n        }\r\n        if ($scope.currentTab === 1) {\r\n            $scope.tabs.shippingSelected = getPrevItem('Shipping', $scope.tabs.shippingSelected);\r\n        }\r\n        if ($scope.currentTab === 2) {\r\n            $scope.tabs.billingSelected = getPrevItem('Billing', $scope.tabs.billingSelected);\r\n        }\r\n    };\r\n\r\n    $scope.nextPane = function (form) {\r\n        $scope.submittedEditTab = $scope.currentTab;\r\n        if (validateModal(form)) {\r\n            return;\r\n        }\r\n        $scope.submittedEditTab = -1;\r\n        \r\n        if ($scope.currentTab === 0) {\r\n            form.email_0.$setPristine();\r\n            $scope.contractSelected += 1;\r\n        }\r\n        if ($scope.currentTab === 1) {\r\n            $scope.tabs.shippingSelected = getNextItem('Shipping', $scope.tabs.shippingSelected);\r\n        }\r\n        if ($scope.currentTab === 2) {\r\n            $scope.tabs.billingSelected = getNextItem('Billing', $scope.tabs.billingSelected);\r\n        }\r\n    };\r\n\r\n     $scope.shippingAddressRequired = false;\r\n     $scope.billingAddressRequired = false;\r\n\r\n    $scope.validateNewCustomer = {};\r\n    $scope.validateNewCustomer.validateShippingAdress  = function(form){\r\n        if((form.addressS.$viewValue &&  form.addressS.$viewValue.length > 0)\r\n        || (form.astateS.$viewValue && form.astateS.$viewValue.length > 0)\r\n        || form.acountryS.$viewValue && (form.acountryS.$viewValue.length > 0)\r\n        || (form.azipPostCodeS.$viewValue && form.azipPostCodeS.$viewValue.length > 0)\r\n        || (form.acityS.$viewValue && form.acityS.$viewValue.length > 0)\r\n        || ($scope.newCustomer.UseSameForBilling))  {\r\n            $scope.shippingAddressRequired = true;\r\n        }\r\n        else{\r\n            $scope.shippingAddressRequired = false;\r\n        }\r\n        return  $scope.shippingAddressRequired;\r\n    }\r\n    $scope.validateNewCustomer.validateBillingAdress  = function(form){\r\n        if((form.addressB.$viewValue &&  form.addressB.$viewValue.length > 0)\r\n        || (form.astateB.$viewValue && form.astateB.$viewValue.length > 0)\r\n        || form.acountryB.$viewValue && (form.acountryB.$viewValue.length > 0)\r\n        || (form.azipPostCodeB.$viewValue && form.azipPostCodeB.$viewValue.length > 0)\r\n        || (form.acityB.$viewValue && form.acityB.$viewValue.length > 0)){\r\n            $scope.billingAddressRequired = true;\r\n        }\r\n        else{\r\n            $scope.billingAddressRequired = false;\r\n        }\r\n        return  $scope.billingAddressRequired;\r\n    }\r\n\r\n\r\n    function validateCreateModal(form,tab){\r\n        var title = gettextCatalog.getString('Error');\r\n        var err = \"\";\r\n        var hasError = false;\r\n\r\n        if(tab === 0){\r\n            var isRequired = $scope.validateNewCustomer.validateShippingAdress(form);\r\n\r\n            if (isRequired && ((form.addressS.$invalid\r\n                || form.addressS.$error.required) ||\r\n                (form.acityS.$invalid\r\n                    || form.acityS.$error.required)\r\n            )) {\r\n                hasError = true;\r\n            }\r\n        }\r\n        else if(tab === 1){\r\n            var isRequired = $scope.validateNewCustomer.validateBillingAdress(form);\r\n\r\n            if (isRequired && ((form.addressB.$invalid\r\n                || form.addressB.$error.required)||\r\n                (form.acityB.$invalid\r\n                    || form.acityB.$error.required))) {\r\n                hasError = true;\r\n            }\r\n        }\r\n\r\n        return hasError;\r\n    }\r\n\r\n    function validateModal(form) {\r\n        var title = gettextCatalog.getString('Error');\r\n        var errors = [];\r\n        var hasError = false;\r\n\r\n        $.each($scope.editedCustomer.Addresses.filter(x => x.Type === 'Shipping' || x.Type === 'Billing'), (i, address) => {\r\n            \r\n            let type = address.Type;\r\n\r\n            let tabIndex = $scope.editedCustomer.Addresses.filter(x => x.Type === type).indexOf(address);\r\n\r\n            let line1 = form[`line1${type}_${tabIndex}`];\r\n            let city = form[`city${type}_${tabIndex}`];\r\n            let state = form[`state${type}_${tabIndex}`];\r\n            let zipCode = form[`zipCode${type}_${tabIndex}`];\r\n            let country = form[`country${type}_${tabIndex}`];\r\n            \r\n            if (((line1.$invalid || line1.$error.required) && (line1.$dirty || line1.length > 0))) {\r\n                errors.push(gettextCatalog.getString(`Address #${tabIndex + 1}. 'Address line' is required.`));\r\n                hasError = true;\r\n            }\r\n\r\n            if (((city.$invalid || city.$error.required) && (city.$dirty || city.length > 0))) {\r\n                errors.push(gettextCatalog.getString(`Address #${tabIndex + 1}. 'City' is required.`));\r\n                hasError = true;\r\n            }\r\n        })\r\n\r\n        $.each($scope.editedCustomer.Contacts, (tabIndex, contact) => {\r\n\r\n            let contactName = form[`contactName_${tabIndex}`];\r\n            let email = form[`email_${tabIndex}`];\r\n            \r\n            if (((email.$invalid || email.$error.required) && (email.$dirty || email.length > 0))) {\r\n                hasError = true;\r\n                errors.push(gettextCatalog.getString(`Contact #${tabIndex + 1}. Please enter a valid email.`));\r\n            }\r\n\r\n            if (((contactName.$invalid || contactName.$error.required) && (contactName.$dirty || contactName.length > 0))) {\r\n                hasError = true;\r\n                errors.push(gettextCatalog.getString(`Contact #${tabIndex + 1}. 'Name' is required.`));\r\n            }\r\n\r\n        })\r\n\r\n        if (hasError)\r\n            errorService.showError(errors.filter((v, i, a) => a.indexOf(v) === i).join('\\n'), function () {}, title);\r\n\r\n        return hasError;\r\n    };\r\n\r\n    $scope.cancelEditCustomerDialogModal = function () {\r\n        $scope.mode = 'search';\r\n   \r\n        if($scope.searchText){\r\n            $(\"#searchCustomerText\").val($scope.searchText).trigger('input')\r\n        }\r\n    }\r\n\r\n    $scope.cancelDialogModal = function (form) {\r\n        if (form.$dirty) {\r\n            $timeout(function() {\r\n                $rootScope.$broadcast('header.confirmCancelDialog');\r\n            });\r\n\r\n            return;            \r\n        }\r\n\r\n        if($scope.mode === 'editCustomerOnSalesPage'){\r\n            $scope.cancelEditCustomerDialogModal();\r\n        }\r\n        else {\r\n            $scope.cancelDialog();\r\n        }\r\n    };\r\n\r\n    $scope.$on('header.confirmedCancelDialog', function () {\r\n        $scope.cancelDialog();\r\n    });\r\n\r\n    $scope.$watch('tabs.shippingSelected',\r\n        function (newValue, oldValue) {\r\n            console.log('tabs.shippingSelected = ' + newValue);\r\n        }\r\n    );\r\n\r\n    $scope.$watch('tabs.billingSelected',\r\n        function (newValue, oldValue) {\r\n            console.log('tabs.billingSelected = ' + newValue);\r\n        }\r\n    );\r\n\r\n    $scope.$watch('tabs.contactTabIndex',\r\n        function (newValue, oldValue) {\r\n            console.log('tabs.contactTabIndex = ' + newValue);\r\n        }\r\n    );\r\n}]);\r\n","angular.module(\"mainApp\").controller('addSalesRepresentativeController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'userManagementService', 'helperService', 'localDBProvider', 'jsStoreProvider',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'deviceInfo',\r\nfunction ($scope, $rootScope, configService, errorService, userManagementService, helperService, localDBProvider, jsStoreProvider,\r\n    $element, constants, $timeout, gettextCatalog, deviceInfo) {\r\n\r\n    $scope.settingsProvider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n    $scope.hideUsersAssignedToAllLocations = false;\r\n    $scope.salesRepresentative = null;\r\n    $scope.searchText = null;\r\n    $scope.salesRepresentativeSearchList = [];\r\n    $scope.searchLimit = constants.customerSearchLimit;\r\n    $scope.mode = 'search';\r\n    $scope.isOnline = configService.isOnline;\r\n    $scope.minSymbolsToStartSearch = 0;\r\n    $scope.minSymbolsMessage = gettextCatalog.getString(\"Enter no less than {{cnt}} symbols to start searching.\", { cnt: $scope.minSymbolsToStartSearch });\r\n\r\n    $scope.firstShow = true;\r\n\r\n    $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n\r\n    $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n        $scope.isOnline = object;\r\n    });\r\n   \r\n\r\n    $scope.$on('header.setOutletInfo', function (event, object) {\r\n        $scope.salesRepresentative = null;\r\n        $scope.searchText = null;\r\n        $scope.salesRepresentativeSearchList = [];\r\n    });\r\n   \r\n    $scope.hideUsersAssignedToAllLocationsChanged = function (value)\r\n    {        \r\n        $scope.settingsProvider.setHideUsersAssignedToAllLocations(value).then(res => {\r\n            $scope.searchSalesRepresentative();\r\n        });        \r\n    }    \r\n\r\n    $timeout(function () {\r\n        initSelects();\r\n    }, 0);\r\n    \r\n\r\n    $scope.$on('addSalesRepresentative.show', function (event, data) {\r\n        $scope.searchText = null;\r\n        $scope.mode = 'search';\r\n\r\n        $scope.settingsProvider.getHideUsersAssignedToAllLocations().then(r => {\r\n            $scope.hideUsersAssignedToAllLocations = r && r.Value === 'true';\r\n\r\n            if($scope.salesRepresentativeSearchList.length === 0){\r\n                $scope.searchSalesRepresentative();\r\n            }\r\n        });       \r\n\r\n        helperService.showDialog($element, function() {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n                $('.addSalesRepresentativeScrollWrapper').show();\r\n            }\r\n\r\n            if ($scope.mode == 'search') {\r\n                $('#searchSalesRepresentativeText').focus();\r\n            }\r\n        });\r\n    });\r\n    \r\n\r\n    $scope.canShowErrors = false;\r\n\r\n    $scope.searchSalesRepresentative = function () {\r\n        $scope.canShowErrors = $scope.searchSalesRepresentativeForm.$invalid;\r\n        var id = $scope.searchSalesRepresentativeID;\r\n\r\n        $scope.searchSalesRepresentativeID = null;\r\n\r\n        if ($scope.searchSalesRepresentativeForm.$invalid) {\r\n            return false;\r\n        }\r\n\r\n        $scope.canShowErrors = false;\r\n        $.blockUI();\r\n\r\n        let filters = (!!id ? { ID: id } : {Name: $scope.searchText});\r\n\r\n        if($scope.hideUsersAssignedToAllLocations)\r\n        {\r\n            filters.HideAllLocations = true;\r\n        }\r\n\r\n        userManagementService.searchSaleRepresentatives(1, $scope.searchLimit, filters).then(function (resp) {\r\n            $scope.salesRepresentativeSearchList = resp.SaleRepresentatives;\r\n            $.unblockUI();\r\n            if (!!resp.SaleRepresentatives && resp.SaleRepresentatives.length > 0) {\r\n                if (!configService.isSite) {\r\n                    Keyboard.hide();\r\n                }\r\n                else {\r\n                    helperService.hideKeyboard();\r\n                }\r\n\r\n                // when from live search simply select him\r\n                if (!!id && resp.SaleRepresentatives.length == 1) {\r\n                    $scope.selectSalesRepresentative(resp.SaleRepresentatives[0]);\r\n                    $scope.addSalesRepresentative();\r\n                    return;\r\n                }\r\n            }\r\n\r\n            $timeout(function () {\r\n                if (!!$scope.salesRepresentativeSearchList && $scope.salesRepresentativeSearchList.length > 0) {\r\n                    if (configService.isMobile) {\r\n                        Keyboard.hide();\r\n                    }\r\n                    else {\r\n                        helperService.hideKeyboard();\r\n                    }\r\n                }\r\n            }, 0);\r\n        },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        return false;\r\n    };\r\n\r\n    $scope.cancelDialog = function () {\r\n        helperService.closeDialog($element);\r\n\r\n    };\r\n\r\n    $scope.selectSalesRepresentative = function (item) {\r\n        $scope.salesRepresentative = item;\r\n    };\r\n\r\n\r\n    $scope.addSalesRepresentative = function () {\r\n        helperService.closeDialog($element);\r\n        $rootScope.$broadcast('addSalesRepresentative.selected', { salesRepresentative: $scope.salesRepresentative, action: 'search' });\r\n    };\r\n\r\n\r\n}]);","angular.module(\"mainApp\").controller('addSalesShippingAddressController',\r\n    ['$scope', '$rootScope', 'configService', 'helperService',\r\n        '$element', '$timeout', 'gettextCatalog',\r\nfunction ($scope, $rootScope, configService, helperService,\r\n    $element,  $timeout, gettextCatalog) {\r\n\r\n    $scope.shippingAddressSearchList = [];\r\n    $scope.emptyText = '';\r\n    $scope.resultCount = 0;\r\n    $scope.searchText = null;\r\n    $scope.salesShippingAddress = null;\r\n\r\n    $scope.$on('header.setOutletInfo', function (event, object) {\r\n        $scope.searchText = null;\r\n        $scope.resultCount = 0;\r\n        $scope.emptyText = '';\r\n        $scope.shippingAddressSearchList = [];\r\n    });\r\n\r\n    $timeout(function () {\r\n        initSelects();\r\n    }, 0);\r\n    \r\n    $scope.$on('addShippingAddress.show', function (event, data) {\r\n        const customerAddressData = data.customerAddressData || [];\r\n        \r\n        $scope.salesShippingAddress = null;\r\n        $scope.searchText = null;\r\n        $scope.shippingAddressList = customerAddressData.filter(address => address.Type === \"Shipping\")\r\n        \r\n        // Prioritize default shipping address\r\n        const defaultShippingAddressIndex = $scope.shippingAddressList.findIndex(ad => ad.DefaultForType);\r\n        if (defaultShippingAddressIndex > 0) {\r\n            const el = $scope.shippingAddressList.splice(defaultShippingAddressIndex, 1);\r\n            $scope.shippingAddressList.unshift(el.pop());\r\n        }\r\n        \r\n        $scope.shippingAddressSearchList = $scope.shippingAddressList.map(address => {\r\n            return {\r\n                ...address,\r\n                displayText: `${address.Line1} ${address.Line2} ${address.City} ${address.State} ${address.Postcode} ${address.Country}`,\r\n                displayAddress: true\r\n            };\r\n        });\r\n        $scope.resultCount = $scope.shippingAddressSearchList.length;\r\n        \r\n        // If previous selected address available then set it selected from the list.\r\n        const prvSelectedAddressData = data.selectedAddressData;\r\n        if (prvSelectedAddressData) {\r\n            const selectedAddress = $scope.shippingAddressSearchList.find(address => { \r\n                return address.Line1 === prvSelectedAddressData.Line1 && \r\n                    address.Line2 === prvSelectedAddressData.Line2 &&\r\n                    address.City === prvSelectedAddressData.City &&\r\n                    address.State === prvSelectedAddressData.State &&\r\n                    address.Postcode === prvSelectedAddressData.Postcode &&\r\n                    address.Country === prvSelectedAddressData.Country;\r\n            });\r\n\r\n            if (selectedAddress) {\r\n                $scope.salesShippingAddress = selectedAddress;\r\n            }\r\n        }\r\n\r\n        helperService.showDialog($element, function() {\r\n            $('#searchSalesShippingAddressText').focus();\r\n        });\r\n    });\r\n    \r\n    $scope.getEmptyText = function() {\r\n        return $scope.shippingAddressSearchList.length ? gettextCatalog.getString('No results found') : gettextCatalog.getString('No shipping address available')\r\n    }\r\n\r\n    $scope.searchShippingAddress = function () {\r\n\r\n        $.blockUI();\r\n\r\n        const filterText = $scope.searchText.toLowerCase();\r\n        $scope.resultCount = 0;\r\n\r\n        $scope.shippingAddressSearchList.forEach(address => {\r\n            address.displayAddress = address.displayText.toLowerCase().indexOf(filterText) >= 0;\r\n            \r\n            if (address.displayAddress) {\r\n                $scope.resultCount++;\r\n            }\r\n        });\r\n\r\n        $.unblockUI();\r\n\r\n        if ($scope.resultCount && $scope.shippingAddressSearchList.length > 0) {\r\n            $scope.closeKeyboard();\r\n        } else {\r\n            $timeout($scope.closeKeyboard, 0);\r\n        }\r\n    };\r\n\r\n    $scope.closeKeyboard = function () {\r\n        if (!!$scope.shippingAddressSearchList && $scope.shippingAddressSearchList.length > 0) {\r\n            if (configService.isMobile) {\r\n                Keyboard.hide();\r\n            }\r\n            else {\r\n                helperService.hideKeyboard();\r\n            }\r\n        }\r\n    };\r\n\r\n    $scope.cancelDialog = function () {\r\n        helperService.closeDialog($element);\r\n\r\n    };\r\n\r\n    $scope.selectSalesShippingAddress = function (item) {\r\n        $scope.salesShippingAddress = item;\r\n    };\r\n\r\n    $scope.addSalesShippingAddress = function () {\r\n        helperService.closeDialog($element);\r\n        $rootScope.$broadcast('addSalesShippingAddress.selected', { selectedSalesShippingAddress:  $scope.salesShippingAddress, action: 'search' });\r\n    };\r\n}]);","angular.module(\"mainApp\").controller('addStockOrderLineController',\r\n    ['$scope', '$rootScope', 'gettextCatalog',\r\n     'helperService', '$timeout', 'configService',\r\n        'soundService', '$q', 'printService', 'errorService',\r\n     function ($scope, $rootScope, gettextCatalog,\r\n               helperService, $timeout, configService,\r\n         soundService, $q, printService, errorService) {\r\n\r\n                const STATUS_DRAFT = 'DRAFT';\r\n                $scope.QuantityPropName = 'TransferQuantity';\r\n                $scope.ShowAtLocations = true;\r\n\r\n                $scope.availableProducts = [];\r\n                $scope.groupedAvailableProducts = [];\r\n                $scope.displayAvailableProducts = [];\r\n                $scope.firstScanFormShow = true;\r\n\r\n                $scope.firstAddFormShow = true;\r\n                $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n                $scope.firstShow = true;\r\n\r\n                $scope.currentOrder = {};\r\n\r\n                $scope.firstScanStart = true;\r\n                $scope.isScanDlgVisible = false;\r\n                $scope.fcss = { 'height': (window.innerHeight*0.85 - 250)  + 'px' };\r\n\r\n                $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n                $scope.quantityObject = {};\r\n\r\n                $scope.scanGridProducts = [];\r\n\r\n                $scope.$on(\"stockTransferOrder.addLine\", function(event, data) {\r\n                    $scope.currentOrder = data.currentOrder;\r\n                    $scope.availableProducts = data.availableProducts;\r\n                    $scope.groupedAvailableProducts = data.groupedAvailableProducts;\r\n                    $scope.QuantityPropName = 'TransferQuantity';\r\n\r\n                    $scope.modifyTransferItemFunc = data.modifyTransferItemFunc;\r\n\r\n                    $scope.showScanDlg();\r\n                });\r\n\r\n                $scope.$on(\"purchaseOrder.addLine\", function(event, data) {\r\n                    $scope.currentOrder = data.currentOrder;\r\n                    $scope.availableProducts = data.availableProducts;\r\n                    $scope.groupedAvailableProducts = data.groupedAvailableProducts;\r\n                    $scope.QuantityPropName = 'Quantity';\r\n\r\n                    $scope.modifyTransferItemFunc = data.modifyTransferItemFunc;\r\n\r\n                    $scope.showScanDlg();\r\n                });\r\n\r\n                $scope.$on('view.loaded', function (evt) {       \r\n                    $timeout(function () {\r\n                        if ($scope.firstAddFormShow) {\r\n                            $scope.firstAddFormShow = false;\r\n                            initSelects();\r\n                        }\r\n       \r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n\r\n                $scope.showScanDlg = function () {\r\n                    $scope.scanError = null;\r\n                    $scope.scanSuccess = null;\r\n                    $scope.quantityObject = {};\r\n                    $scope.setMultiscan('');\r\n                    $scope.stockTakeScanData = [];\r\n\r\n                    // if (!$scope.currentOrder.supplierID) {\r\n                    //     errorService.showError(\"Please select Supplier\");\r\n                    //     $.unblockUI();\r\n                    //     return;\r\n                    // }\r\n\r\n                    // no items at all\r\n                    if ($scope.availableProducts.length === 0 && $scope.totalCount === 0) {\r\n                        errorService.showError(gettextCatalog.getString('There are no available products in this location.'));\r\n                        //helperService.showCustomDialog('',\r\n                        //                               gettextCatalog.getString('There are no available products in this location'),\r\n                        //                               gettextCatalog.getString('OK'), null, false);\r\n                        return;\r\n                    }\r\n                    else\r\n                    // this condition is actually impossible but leave it for 'just in case'\r\n                        if ($scope.availableProducts.length > 0 && $scope.inStocktransferCount > 0) {\r\n                            errorService.showError(gettextCatalog.getString('There are more products in this location but some of them are under stocktake.'));\r\n                            //helperService.showCustomDialog('',\r\n                            //                               gettextCatalog.getString('There are more products in this location but some of them are under stocktake.'),\r\n                            //                               gettextCatalog.getString('OK'), null, false);\r\n                        }\r\n       \r\n       \r\n                    helperService.showDialog('#stockTransferAddDlg', function () {\r\n                        if ($scope.firstScanFormShow) {\r\n                            $scope.firstScanFormShow = false;\r\n                            $('.stocktransferScanGridScrollWrapper').show();\r\n                        } else {\r\n                            if (configService.isMobileDesign) {                                \r\n                                $scope.firstScanFormShow = true;\r\n                            }\r\n                        }\r\n\r\n                        $scope.isScanDlgVisible = true;\r\n                    });\r\n       \r\n                    printService.reconnect();\r\n       \r\n                    if ($scope.firstScanStart) {\r\n                        $scope.firstScanStart = false;\r\n                        $('#stockTransferAddDlg').find(\"ul li a\").click(function (evt) {\r\n                            var v = Number($(this).parent().attr('index'));\r\n       \r\n                            $timeout(function () {\r\n                                $scope.stockTransferActiveTab = v;\r\n                            });\r\n                        });\r\n                    }\r\n       \r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n       \r\n                    $scope.stocktakeScanActiveTab = 0;\r\n                    $scope.clearScanData();\r\n                };\r\n\r\n                $scope.clearScanData = function () {\r\n                    $scope.scanError = null;\r\n                    $scope.scanSuccess = null;\r\n                    $scope.quantityObject = {};\r\n                    $scope.scanGridProducts = [];\r\n                };\r\n                \r\n                $scope.setMultiscan = function (v) {\r\n                    $scope.multiScanText = v;\r\n                    $('#scanArea').val(v);\r\n                };\r\n\r\n                $scope.getMultiscan = function () {\r\n                    $scope.multiScanText = $('#scanArea').val();\r\n                    return $scope.multiScanText;\r\n                };\r\n\r\n                $scope.hideScanDlg = function () {\r\n                    $scope.isScanDlgVisible = false;\r\n                    helperService.closeDialog('#stockTransferAddDlg');\r\n                    $(\"#manualScanInput\").val(\"\");\r\n                };\r\n\r\n                $scope.modifyTransferItem = function (row, isAbsolute) {\r\n                    if(typeof $scope.modifyTransferItemFunc === \"function\"){\r\n                        $scope.modifyTransferItemFunc(row, isAbsolute, $scope.currentOrder, $scope.quantityObject, $scope.stockTransferActiveTab === 3);\r\n                    }\r\n                };\r\n\r\n                $scope.manualPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        var v = $('#manualScanInput').val();\r\n                        if (!!v && v.length > 0) {\r\n                            $rootScope.$broadcast('scan.barcode', v);\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.comparator = function(a,b){\r\n                    if (a === null || typeof (a) !== 'string')\r\n                        return false;\r\n                    if (b === null || typeof (b) !== 'string')\r\n                        return false;\r\n       \r\n                    return a.toLowerCase() === b.toLowerCase();\r\n                };\r\n       \r\n\r\n                $scope.searchProductList = function (text) {\r\n                    return $scope.availableProducts.filter(function (el) {\r\n                        return $scope.comparator(el.Barcode, text) ||\r\n                               $scope.comparator(el.ProductCode, text);\r\n                    });\r\n                };\r\n       \r\n                $scope.$on('scan.barcode', function (event, barcode) {\r\n                    if ($scope.stockTransferActiveTab !== 0 && $scope.stockTransferActiveTab !== 2 && $scope.isScanDlgVisible) {\r\n                        $scope.clearScanData();\r\n       \r\n                        $.blockUI();\r\n                        var rows = $scope.searchProductList(barcode);\r\n                        $scope.scanGridProducts = angular.copy(rows);\r\n                        $scope.$broadcast('refreshScanTable');\r\n                        $.unblockUI();\r\n       \r\n                        if (rows.length === 0) {\r\n                            // $scope.scanError = 'Product not found. Scan another barcode';\r\n                            var msg = gettextCatalog.getString(\"Product not found. Please, scan another barcode.\");\r\n                            $rootScope.$broadcast('snackbar.show', {\r\n                                message: msg,\r\n                                type: 'error'\r\n                            });\r\n        \r\n                            return soundService.playBad();\r\n                        }\r\n                        else if ($scope.stockTransferActiveTab === 1) {\r\n                            if (rows.length > 1) {\r\n                                $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                                return soundService.playBad();\r\n                            }\r\n                            else {\r\n                                $scope.scanSuccess = 'Product ' + barcode + ' has been added';\r\n                                $scope.modifyTransferItem(rows[0]);\r\n                                return soundService.playGood();\r\n                            }\r\n                        }\r\n                        else if ($scope.stockTransferActiveTab === 3) {\r\n                            if (rows.length > 1) {\r\n                                $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                                return soundService.playBad();\r\n                            }\r\n                            else {\r\n                                $scope.scanSuccess = 'Product ' + barcode + ' has been found';\r\n                                $scope.makeQuantityObject(rows[0]);\r\n                            }\r\n       \r\n                        }\r\n                    }\r\n                    else if ($scope.stockTransferActiveTab === 2 && $scope.isScanDlgVisible) {\r\n                        $timeout(function () {\r\n                            var v = $scope.getMultiscan();\r\n                            $('#scanArea').focus().val('').val(v);\r\n                            $scope.setMultiscan(v + barcode + String.fromCharCode(13, 10));\r\n                        });\r\n                    }\r\n                });\r\n       \r\n                $scope.scanStockTransfer = function () {\r\n       \r\n                    if ($scope.stockTransferActiveTab === 2 && $scope.isScanDlgVisible &&\r\n                        !!$scope.getMultiscan() && $scope.getMultiscan().length > 0) {\r\n       \r\n                        var arr = $scope.getMultiscan().split(String.fromCharCode(10));\r\n       \r\n                        $scope.setMultiscan('');\r\n                        if (arr.length > 0) {\r\n                            $.blockUI();\r\n       \r\n                            angular.forEach(arr, function (br) {\r\n                                br = br.trim();\r\n                                if (!!br) {\r\n                                    var rows = $scope.availableProducts.filter(function (el) { \r\n                                        if(!el.Barcode || !br)\r\n                                            return false;\r\n                                        return el.Barcode.toLowerCase() == br.toLowerCase();   \r\n                                    });\r\n                                    if (rows.length !== 1) {\r\n                                        $scope.setMultiscan($scope.getMultiscan() + br + String.fromCharCode(13, 10));\r\n                                    }\r\n                                    else {\r\n                                        $scope.modifyTransferItem(rows[0]);\r\n                                    }\r\n       \r\n                                }\r\n                                    \r\n                            });\r\n       \r\n                            $.unblockUI();\r\n       \r\n                            if (!!$scope.getMultiscan()) // error\r\n                            {\r\n                                // $scope.scanError = 'Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Not processed barcodes are listed in the box below.';\r\n                                var msg = gettextCatalog.getString(\"Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Unprocessed barcodes are listed in the box below.\");\r\n                                $rootScope.$broadcast('snackbar.show', {\r\n                                    message: msg,\r\n                                    type: 'error'\r\n                                });\r\n    \r\n                                return soundService.playBad();\r\n                            }\r\n                            else {\r\n                                $scope.scanSuccess = 'All barcodes were recognised and stocktake quantity has been incremented for products related to these barcodes';\r\n                                return soundService.playGood();\r\n                            }\r\n                        }\r\n       \r\n                        $scope.clearScanData();\r\n                    }\r\n                };\r\n\r\n                $scope.showSetQuantityDlg = function (row) {\r\n                    if($scope.currentOrder.dataStatus === STATUS_DRAFT) {\r\n                        $scope.makeQuantityObject(row);\r\n                        $scope.showItemQuantityDlg(row.refID);\r\n                    }\r\n                };\r\n       \r\n                $scope.makeQuantityObject = function (row) {\r\n                    $scope.quantityObject = {};\r\n                    angular.copy(row, $scope.quantityObject);\r\n                    $scope.quantityObject.Adjustment = !!$scope.quantityObject[$scope.QuantityPropName] ? $scope.quantityObject[$scope.QuantityPropName] : 1;\r\n                    $scope.quantityObject.QuantityOnHand = !!row.QuantityOnHand ? row.QuantityOnHand : row.OnHand;\r\n                    $scope.quantityObject.OnOrder = !!row.OnOrder ? row.OnOrder : row.OnOrder;\r\n                    $scope.quantityObject.QuantityAvailable = !!row.QuantityAvailable ? row.QuantityAvailable : row.Available;\r\n                    $scope.quantityObject.showOnHand = true;\r\n                    $scope.quantityObject.hideBarcode = true;\r\n                    $scope.quantityObject.readOnly = true;\r\n                    if (!$scope.quantityObject.ID) {\r\n                        $scope.quantityObject.ID = row.ProductID;\r\n                    }\r\n                };\r\n       \r\n                $scope.showItemQuantityDlg = function (elID) {\r\n                    $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n                    $timeout(function () {\r\n                            $scope.itemQuantityDlg.show(!elID ? '#quantityObject' : '#'+elID);\r\n                    });\r\n                };\r\n       \r\n                // callback\r\n                $scope.setQuantity = function (prm, event) {\r\n       \r\n                    $timeout(function () { $scope.itemQuantityDlg.hide(true); });\r\n       \r\n                    if (prm === true) {\r\n                        $timeout(function () {\r\n                            $scope.quantityObject.Adjustment = $scope.quantityObject.value;\r\n                            $scope.adjustStockTransfer();\r\n                        });\r\n                    }       \r\n                };\r\n       \r\n                $scope.adjustStockTransfer = function () {\r\n                    angular.forEach($scope.currentOrder.data, function (el) {\r\n                        if (el.ID === $scope.quantityObject.ID) {\r\n                            processed = true;\r\n                            el[$scope.QuantityPropName] = $scope.quantityObject.Adjustment;\r\n                            return false;\r\n                        }\r\n                    });\r\n                };\r\n\r\n                //-------------- LIVE SEARCH -----------------------------------------\r\n                $scope.minSymbolsToStartSearch = configService.minSymbolsToStartSearch;\r\n                $scope.minSymbolsMessage = gettextCatalog.getString(\"Only the first {{cnt}} products are shown.\", { cnt: 7 });\r\n                $scope.liveSearchIsOpen = false;\r\n                $scope.liveSearch = {\r\n                    liveSearchIsOpen: false\r\n                };\r\n                $scope.showMaxVisibleLiveSearchCountMsg = false;\r\n                $scope.searchProductID = null;\r\n                $scope.filter = {};\r\n                $scope.filter.scanGridSearchText = null;\r\n                \r\n                $scope.$watch('liveSearch.liveSearchIsOpen',\r\n                    function (newValue, oldValue) {\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n                        if (newValue) {\r\n                            $timeout(function() {\r\n                                helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), true, '#stockorderingAddItemModalContent');\r\n                            },400);\r\n                        }\r\n                    }\r\n                );\r\n\r\n                \r\n                $scope.placeMaxVisibleLiveSearchCountMsg = function () {\r\n                        if ($scope.showMaxVisibleLiveSearchCountMsg && $scope.liveSearchIsOpen) {\r\n                            $timeout(function () {\r\n                                var lst = $('.autoCompleteBox ul')[0].getBoundingClientRect();\r\n                                if (lst.width > 0 && lst.height > 0) {\r\n                                    console.log('lst: ' + lst.width + ' ' + lst.height);\r\n                                    $('#minProdMessage').css('left', lst.left);\r\n                                    $('#minProdMessage').css('top', lst.bottom - 10);\r\n                                    $('#minProdMessage').show();\r\n                                }\r\n                                else\r\n                                    $('#minProdMessage').hide();\r\n\r\n                            });\r\n                        }\r\n                        else\r\n                            $('#minProdMessage').hide();\r\n                    };\r\n\r\n                \r\n                $scope.liveSearch = function (val) {\r\n                        $scope.searchType = 'live';\r\n                        $scope.filter.scanGridSearchText = val;\r\n                        \r\n                        var filter = $scope.filter.scanGridSearchText ? $scope.filter.scanGridSearchText.toLowerCase() : '';\r\n                        var filtered = $scope.groupedAvailableProducts.filter(function(item) {\r\n                            return !filter || (item.Name && item.Name.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.ProductCode && item.ProductCode.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.Barcode && item.Barcode.toLowerCase().indexOf(filter) !== -1);\r\n                        });\r\n                        var res = filtered.length > 7 ? filtered.slice(0, 7) : filtered;\r\n\r\n                        $scope.showMaxVisibleLiveSearchCountMsg = !!res && res.length > 0;\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n\r\n                        return res;\r\n                    };\r\n\r\n                $scope.liveSearchFinished = function (val) {\r\n                        return !!val ? val.name : null;\r\n                    };\r\n\r\n                $scope.liveSearchSelected = function (item, model, label, event) {\r\n                    // make search by product id and add product to order\r\n                    $scope.searchProductID = model.ProductID;\r\n                    $scope.searchLocationID = model.LocationID;\r\n                    $scope.searchExpiryDate = model.ExpiryDate;\r\n                    $scope.searchBatchSN = model.BatchSN;\r\n                    $scope.filter.scanGridSearchText = item.Name;\r\n                    $scope.scanGridSearch();\r\n                };\r\n\r\n                $scope.liveKeyPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        $scope.searchProductID = null;\r\n                        $scope.scanGridSearch();\r\n                    }\r\n                };\r\n\r\n                $scope.scanGridSearch = function () { \r\n                        if (configService.isMobile)\r\n                            Keyboard.hide();\r\n                \r\n                        $.blockUI();\r\n                        var filter = $scope.filter.scanGridSearchText ? $scope.filter.scanGridSearchText.toLowerCase() : '';\r\n                        var filtered = $scope.groupedAvailableProducts.filter(function(item) {\r\n                            return ($scope.searchProductID && item.ProductID === $scope.searchProductID) || \r\n                            (!$scope.searchProductID && (!filter \r\n                            || (item.Name && item.Name.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.ProductCode && item.ProductCode.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.Barcode && item.Barcode.toLowerCase().indexOf(filter) !== -1)));\r\n                        });\r\n\r\n                        if (filtered.length > 1 && ($scope.searchBatchSN || $scope.searchLocationID || $scope.searchExpiryDate)) {\r\n                            filtered = filtered.filter(function (item) {\r\n                                return (!$scope.searchBatchSN || $scope.searchBatchSN === item.BatchSN) && \r\n                                        (!$scope.searchLocationID || $scope.searchLocationID === item.LocationID) &&\r\n                                        (!$scope.searchExpiryDate || $scope.searchExpiryDate === item.ExpiryDate);\r\n                            });\r\n                        }\r\n\r\n                        if(filtered.length === 1) {\r\n                            $scope.modifyTransferItem(filtered[0]);\r\n                        }\r\n                        $scope.displayAvailableProducts = filtered;\r\n\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(true);\r\n                        $.unblockUI();\r\n                        return deferred2.promise;\r\n                    };\r\n\r\n                $scope.scanGridCancelSearchMode = function () {\r\n                        $scope.searchProductID = null;\r\n                        $scope.filter.scanGridSearchText = null;\r\n                        $scope.displayAvailableProducts = [];\r\n                    };\r\n}]);","angular.module(\"mainApp\").controller('addSurchargeController',\r\n    ['$scope', '$rootScope', 'configService', 'helperService',\r\n        '$element', '$timeout', 'saleService', 'surchargeService',\r\n        function ($scope, $rootScope, configService, helperService,\r\n            $element, $timeout, saleService, surchargeService) {\r\n\r\n            $scope.isOnline = configService.isOnline;\r\n            $scope.surcharge = null;\r\n            $scope.surcharges = [];\r\n            $scope.isCustom = false;\r\n            $scope.paymentProcessorID = null;\r\n//            $scope.amount\r\n\r\n            $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n\r\n            $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n                $scope.isOnline = object;\r\n            });\r\n\r\n\r\n            $timeout(function () {\r\n                initSelects();\r\n            }, 0);\r\n\r\n            $scope.$on('addSurcharge.show', function (event, data) {\r\n                \r\n                $scope.surcharges = [];// data.surcharges;\r\n                $scope.realSum = data.realSum;\r\n                $scope.isCustom = data.isCustom === true;\r\n                $scope.paymentProcessorID = data.paymentProcessorID;\r\n\r\n                $scope.surcharges = surchargeService.calculateSurcharges(data);\r\n\r\n                helperService.showDialog($element);\r\n            });\r\n\r\n\r\n            $scope.canShowErrors = false;\r\n\r\n            $scope.cancelDialog = function () {\r\n                helperService.closeDialog($element);\r\n                $rootScope.$broadcast('addSurcharge.selected', { surcharge: null, action: 'cancel' });\r\n            };\r\n\r\n            $scope.selectSurcharge = function (item) {\r\n                $scope.surcharge = item;\r\n            };\r\n\r\n\r\n            $scope.addSurcharge = function () {\r\n                helperService.closeDialog($element);\r\n                if (!!$scope.surcharge) {\r\n                    $scope.surcharge.PaymentRealAmount = $scope.realSum;\r\n                }\r\n                $rootScope.$broadcast('addSurcharge.selected',\r\n                    {\r\n                        isCustom: $scope.isCustom,\r\n                        paymentProcessorID: $scope.paymentProcessorID,\r\n                        surcharge: $scope.surcharge,\r\n                        action: 'selected'\r\n                    });\r\n            };\r\n        }]);","//import BWIPJS from 'bwip-js'; TODO\r\n//import BWIPP from 'bwip-js/bwipp';\r\n//import bwipjs_fonts from 'bwip-js/browser-fonts';\r\n//const {bwipjs_fonts} = require.resolve('bwip-js/browser-fonts');\r\n\r\n\r\nangular.module('services').service('barcodeService', [\r\n    '$q', '$timeout', '$rootScope', 'configService', 'helperService',\r\n    function ($q, $timeout, $rootScope, configService, helperService) {\r\n\r\n        this.type = \"gs1-128\"; // used by default\r\n        this.monochrome = true;\r\n        this.scaleX = 2;\r\n        this.scaleY = 1;\r\n        this.rotation = \"N\";\r\n        this.arrBarcodes = [];\r\n\r\n\r\n        this.clearBarcodes = function () {\r\n            this.arrBarcodes = [];//\r\n        };\r\n\r\n        this.initBarcode = function (elemID, type, text, altText, opts, scaleX) {\r\n\r\n            var imgDiv = $('.barcode_img.img_' + elemID);\r\n            imgDiv.html(\"\");\r\n\r\n            if (!!text) {\r\n                var barcodeText = text.replace(/^\\s+/, '').replace(/\\s+$/, '');\r\n                var barcodeAltText = barcodeText;\r\n                var options = opts;\r\n                var scaleX = scaleX ? scaleX : this.scaleX;\r\n                var scaleY = this.scaleY;\r\n                var rotation = this.rotation;\r\n                var monochrome = this.monochrome;\r\n                var initArr = this.arrBarcodes;\r\n\r\n                var elt = { id: elemID, sym: type, desc: type, text: barcodeText, altText: barcodeAltText, opt: options };\r\n\r\n                var bw = new BWIPJS(bwipjs_fonts, monochrome);\r\n\r\n                var canvas = document.getElementById(elemID);\r\n                canvas.height = 1;\r\n                canvas.width = 1;\r\n                canvas.style.visibility = 'hidden';\r\n\r\n                // Convert the options to a dictionary object, so we can pass alttext with\r\n                // spaces.\r\n                var opts = options;\r\n\r\n                var tmp = opts.split(' ');\r\n                opts = {};\r\n                for (var i = 0; i < tmp.length; i++) {\r\n                    if (!tmp[i]) {\r\n                        continue;\r\n                    }\r\n                    var eq = tmp[i].indexOf('=');\r\n                    if (eq == -1) {\r\n                        opts[tmp[i]] = true;\r\n                    } else {\r\n                        opts[tmp[i].substr(0, eq)] = tmp[i].substr(eq + 1);\r\n                    }\r\n                }\r\n\r\n                // Add the alternate text\r\n                if (barcodeAltText) {\r\n                    opts.alttext = barcodeAltText;\r\n                    opts.includetext = true;\r\n                }\r\n                // We use mm rather than inches for height - except pharmacode2 height\r\n                // which is expected to be in mm\r\n                if (+opts.height && elt.sym != 'pharmacode2') {\r\n                    opts.height = opts.height / 25.4 || 0.5;\r\n                }\r\n                // Likewise, width.\r\n                if (+opts.width) {\r\n                    opts.width = opts.width / 25.4 || 0;\r\n                }\r\n                // BWIPP does not extend the background color into the\r\n                // human readable text.  Fix that in the bitmap interface.\r\n\r\n                if (opts.backgroundcolor) {\r\n                    bw.bitmap(new Bitmap(canvas, rotation, opts.backgroundcolor));\r\n                    delete opts.backgroundcolor;\r\n                } else {\r\n                    bw.bitmap(new Bitmap(canvas, rotation));\r\n                }\r\n\r\n                // Set the scaling factors\r\n                bw.scale(scaleX, scaleY);\r\n\r\n                // Add optional padding to the image\r\n                bw.bitmap().pad(+opts.paddingwidth * scaleX || 0,\r\n                    +opts.paddingheight * scaleY || 0);\r\n\r\n                try {\r\n                    BWIPP()(bw, elt.sym, text, opts);\r\n                } catch (e) {\r\n                    // Watch for BWIPP generated raiseerror's.\r\n                    canvas.style.display = 'none';\r\n                    imgDiv.css(\"width\", \"inherit\").css(\"word-wrap\", \"break-word\");\r\n                    var msg = '' + e;\r\n                    if (msg.indexOf(\"bwipp.\") >= 0) {\r\n                        var errorText = msg.split(':');\r\n                        imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                    } else if (e.stack) {\r\n                        var errorText = e.stack.split(':');\r\n                        imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                    } else {\r\n                        var errorText = e.split(':');\r\n                        imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                    }\r\n                    return;\r\n                }\r\n                initArr.push({ obj: bw, elt: elt, opts: opts, canvas: canvas });\r\n\r\n                this.arrBarcodes = initArr;\r\n            } else {\r\n                var canvas = document.getElementById(elemID).style.display = 'none';\r\n                imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode. Barcode has no value.</div>\");\r\n            }\r\n\r\n        };\r\n\r\n        this.renderBarcodes = function () {\r\n\r\n            var elemID = \"\";\r\n            var arrBarcodes = this.arrBarcodes;\r\n            var barcodeText = \"\";\r\n\r\n            try {\r\n                // Allow the font manager to demand-load any required fonts\r\n                // before calling render().\r\n                bwipjs_fonts.loadfonts(function (e) {\r\n                    if (e) {\r\n                        $('#' + elemID).text(e.stack || ('' + e));\r\n                    } else {\r\n                        for (let index = 0, len = arrBarcodes.length; index < len; ++index) {\r\n                            barcodeText = arrBarcodes[index].elt.text;\r\n                            elemID = arrBarcodes[index].elt.id;\r\n\r\n                            arrBarcodes[index].obj.render();\r\n\r\n                            //arrBarcodes[index].canvas.style.visibility = 'visible';\r\n                            arrBarcodes[index].canvas.style.display = 'none';\r\n\r\n                            var dataURL = arrBarcodes[index].canvas.toDataURL();\r\n\r\n                            var imgDiv = $('.barcode_img.img_' + elemID);\r\n                            imgDiv.html(\"<img src='\" + dataURL + \"' style='max-width:100%;height:auto;'/>\");\r\n                        }\r\n                        /*\r\n                        // Show proofs?\r\n                        if (location.search.indexOf('proofs=1') != -1) {\r\n                            var img = document.getElementById('proof-img');\r\n                            if (img) {\r\n                                img.src = 'proofs/' + elt.sym + '.png';\r\n                                img.style.visibility = 'visible';\r\n                            }\r\n                        }\r\n                        */\r\n                    }\r\n                });\r\n            } catch (e) {\r\n                arrBarcodes[index].canvas.style.display = 'none';\r\n                var imgDiv = $('.barcode_img.img_' + elemID);\r\n                imgDiv.css(\"width\", \"inherit\").css(\"word-wrap\", \"break-word\");\r\n                // Watch for BWIPP generated raiseerror's.\r\n                var msg = '' + e;\r\n                if (msg.indexOf(\"bwipp.\") >= 0) {\r\n                    var errorText = msg.split(':');\r\n                    imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                } else if (e.stack) {\r\n                    var errorText = e.stack.split(':');\r\n                    imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                } else {\r\n                    var errorText = e.split(':');\r\n                    imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                }\r\n                return;\r\n            }\r\n        };\r\n\r\n        this.clearFonts = function () {\r\n            $.each(bwipjs_fonts.fontsets, function (idx, f) {\r\n                f.fonts = {};\r\n            });\r\n        };\r\n\r\n        this.loadAllFonts = function () {\r\n            bwipjs_fonts.monocolor = true;\r\n\r\n            for (let i = 0; i < bwipjs_fonts.fontsets.length; i++) {\r\n                var fst = bwipjs_fonts.fontsets[i];\r\n                $.each(Object.getOwnPropertyNames(fst.sizes), function (j, sz) {\r\n                    bwipjs_fonts.getglyph(i, fst.minchar, fst.sizes[sz], fst.sizes[sz]);\r\n                });\r\n            }\r\n\r\n            var deferred = $q.defer();\r\n            bwipjs_fonts.loadfonts(function () {\r\n                deferred.resolve(true);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.initForReceiptInProgress = false; // protection for simultaneous execution. Wrapper :(\r\n        this.initForReceipt = function (receiptSaleModel) {\r\n            console.log('barcode lock 1: '+this.initForReceiptInProgress);\r\n            if(this.initForReceiptInProgress) return;\r\n\r\n            this.initForReceiptInProgress = true;\r\n            console.log('barcode lock 3: '+this.initForReceiptInProgress);\r\n            this.clearBarcodes();\r\n\r\n            if ($(\"canvas.barcode\").is(\"#code93\")) {\r\n                this.initBarcode(\"code93\", \"code93\", receiptSaleModel.Barcode.toUpperCase(), receiptSaleModel.Barcode.toUpperCase(), \"includetext includecheck\");\r\n            }\r\n            if ($(\"canvas.barcode\").is(\"#code128\")) {\r\n                this.initBarcode(\"code128\", \"code128\", receiptSaleModel.Barcode, receiptSaleModel.Barcode, \"includetext\");\r\n            }\r\n\r\n            /* /generating barcodes for reciept */\r\n            var THIS = this;\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('receipt.template', $('.receipt-template'));\r\n\r\n                try{\r\n                    /* generating barcodes for product */\r\n                    $(\"canvas.product_barcode\").each(function (i, elem) {\r\n                        var type = $(this).attr(\"type\");\r\n                        var id = $(this).attr(\"id\");\r\n                        var text = $(this).attr(\"b_value\");\r\n\r\n                        THIS.initBarcode(id, type, text, text, \"includetext\");\r\n                    });\r\n                    /* /generating barcodes for product */\r\n\r\n                    /* Draw generated barcodes */\r\n                    THIS.renderBarcodes();\r\n                    THIS.initForReceiptInProgress = false;\r\n                    console.log('barcode lock 3: '+THIS.initForReceiptInProgress);\r\n\r\n                } catch(e) {\r\n                    THIS.initForReceiptInProgress = false;\r\n                    console.log('barcode lock 4: '+THIS.initForReceiptInProgress);\r\n                }\r\n            });\r\n        };\r\n\r\n        // below is a set of functions to work with weight based barcodes\r\n        // also support GS1 barcode specification\r\n        this.parceBarcodeWeightBased = function (barcode) {\r\n            var res = {\r\n                SKU: null,\r\n                Value: null\r\n            };\r\n\r\n            if (configService.advancedBarcodeMode === 0) return null; // weight based mode is turned off\r\n\r\n            var isGS1Mode = configService.advancedBarcodeMode === 3;\r\n\r\n            /*\r\n             In GS1 mode decimal point is defined by second digit as well as weight/price mode\r\n             EAN:\r\n                20IIIIIVPPPPC       Price based on /100 \r\n                21IIIIIVPPPPC       Price based on /10 \r\n                22IIIIIVPPPPC       Price \r\n                23IIIIIVWWWWC       Weight based on /1000  \r\n                24IIIIIVWWWWC       Weight based on /100\r\n                25IIIIIVWWWWC       Weight based on /10\r\n                28RRRRRPPPPPC       Price based on 5 digit/100       \r\n             Where  \r\n                := I represents product code         \r\n                 := V verifier         \r\n                 := P Price         \r\n                 := C Barcode check digit            \r\n             UPC:\r\n                 2IIIIIVPPPPC        Price based on /10\r\n             */\r\n\r\n            if (!barcode || barcode.length < 12 || barcode.length > 13) return null; // length is incompatibe\r\n            if (barcode.length === 12 && barcode.substr(0, 1) !== '2') return null; // not a weight based\r\n\r\n            var decimalPoint = configService.advancedBarcodeValueDecimalPoint;\r\n\r\n            if (!isGS1Mode) {\r\n                if (barcode.length === 13 && barcode.substr(0, 2) !== '20' && barcode.substr(0, 2) !== '02') return null; // not a weight based\r\n\r\n            } else {\r\n                // GS1 mode parsing\r\n                res.IsDS1 = true;\r\n\r\n                var prefix = parseInt(barcode.substr(0, 2));\r\n                if (barcode.length === 13 && ((prefix < 20 || prefix > 25) && prefix != 28)) return null; // not a GS1 format\r\n                if (barcode.length === 13) {\r\n                    if (prefix >= 20 && prefix <= 22) {\r\n                        res.IsDS1PriceBased = true;\r\n                        decimalPoint = 22 - prefix;\r\n                    } else if (prefix >= 23 && prefix <= 25) {\r\n                        decimalPoint = 26 - prefix;\r\n                    } else\r\n                        decimalPoint = 2;\r\n                }\r\n                else {\r\n                    res.IsDS1PriceBased = true;\r\n                }\r\n            }\r\n\r\n            // parse string\r\n            if (barcode.length === 13)\r\n                barcode = barcode.substr(2, barcode.length - 3);\r\n            else\r\n                barcode = barcode.substr(1, barcode.length - 2);\r\n\r\n            // split content\r\n            res.SKU = barcode.substr(0, configService.advancedBarcodeSKULength);\r\n            var value = barcode.substr(-configService.advancedBarcodeValueLength);\r\n\r\n            value = parseInt(value);\r\n            if (isNaN(value)) return null;\r\n            var dec = parseInt('10000000000'.substr(0, decimalPoint + 1));\r\n            res.Value = value / dec;\r\n\r\n            res.UseOutletSKU = configService.advancedBarcodeUseOutletSKU === true;\r\n\r\n            if (isNaN(res.Value)) return null;\r\n\r\n            return res;\r\n        };\r\n\r\n        this.getWeightAmount = function (el, amount, barcode) {\r\n            var SpecAmount = !amount ? null : parseFloat(amount);\r\n            if (isNaN(SpecAmount))\r\n                SpecAmount = null;\r\n\r\n            var cnt = 1;\r\n            if (SpecAmount) {\r\n                if (configService.advancedBarcodeMode === 1 ||\r\n                    (barcode.IsDS1 === true && barcode.IsDS1PriceBased !== true)) { // weight based\r\n                    cnt = SpecAmount;\r\n                }\r\n\r\n                //                else { // price based\r\n                //                    var prc = helperService.DEARRound(!!el.DefaultPrice ? el.DefaultPrice : el.Price, 4);\r\n                //                    if (prc)\r\n                //                        cnt = helperService.DEARRound(SpecAmount / prc, 4);\r\n                //                    else\r\n                //                      cnt = 1;\r\n                //                }\r\n            }\r\n\r\n            return cnt;\r\n        };\r\n\r\n        this.setPriceBasedItemValue = function (elAdded, amount) {\r\n            // convert to price based\r\n            //(handles complex scenarios where item already exists and we are adding more by price based value\r\n            if (!elAdded.PriceBasedValue) {\r\n                elAdded.PriceBasedValue = elAdded.Amount + amount;\r\n            } else {\r\n                // item is already price based\r\n                elAdded.PriceBasedValue = elAdded.PriceBasedValue + amount;\r\n            }\r\n            // will recalculate in calculator service\r\n            elAdded.Count = 1;\r\n        };\r\n\r\n    }]);\r\n","import sjcl from 'sjcl';\r\nimport { unpackStr } from './unpackWorkerHelper';\r\n\r\nangular.module('services').service('cacheService', [\r\n    '$q', '$http', 'configService',\r\n    function ($q, $http, configService) {\r\n\r\n        /*\r\n         taking url to file|image this function should convert url to hash,\r\n         check file by hash as file name. If file doesn't exist then load it and save as file\r\n         \r\n         returns promise and resolve to file content\r\n        */\r\n        this.getNCache = function (url) {\r\n            var bitArray = sjcl.hash.sha256.hash(url);\r\n            var fileName = sjcl.codec.hex.fromBits(bitArray);\r\n            var fileEntry = null;\r\n            var THIS = this;\r\n            var res = this.prepareFolder()\r\n                        .then(function (fl) {\r\n                            return THIS.getFile(fl, fileName);\r\n                        })\r\n                        .then(function (fe) {\r\n                            fileEntry = fe;\r\n                            return THIS.readFile(fileEntry);\r\n                        })\r\n                        .then(function (res) {\r\n                            if (!res || res.length == 0) {\r\n                                \r\n                                var requestConfig = {\r\n                                    method: 'GET',\r\n                                    url: url,\r\n                                    cache: 'false'\r\n                                };\r\n\r\n                               return $http(requestConfig)\r\n                                 .then(function (res) {\r\n                                             var type = res.data.ContentType;\r\n                                             var hash = res.data.Hash;\r\n\r\n                                             console.log('hash is:' + hash + ' for src:' + url);\r\n\r\n                                             let objStr = unpackStr(res.data.Image);\r\n\r\n                                             objStr = \"data:\" + type + \";base64,\" + objStr;\r\n                                            \r\n                                             return THIS.writeFile(fileEntry, objStr);\r\n                                             \r\n                                         },\r\n                                         function (err) {\r\n                                             console.log('error loading: ' + url);\r\n                                             var deffered = $q.defer();\r\n                                             deffered.reject(err);\r\n                                             return deffered.promise;\r\n                                         }\r\n                                     );\r\n                                \r\n                            } else {\r\n                                var deffered = $q.defer();\r\n                                deffered.resolve(res);\r\n                                return deffered.promise;\r\n                            }\r\n                        });\r\n\r\n            return res;\r\n        };\r\n\r\n        this.prepareFolder = function () {\r\n            var deffered = $q.defer();\r\n\r\n            window.resolveLocalFileSystemURL(cordova.file.cacheDirectory,\r\n                function (folder) {\r\n                    folder.getDirectory('posCache', { create: true },\r\n                        function (dirEntry) {\r\n                            deffered.resolve(dirEntry);\r\n                        }, function (err) {\r\n                            deffered.reject(err);\r\n                        });\r\n                });\r\n\r\n            return deffered.promise;\r\n        }\r\n\r\n        this.getFile = function (dirEntry, fileName) {\r\n            var deffered = $q.defer();\r\n            dirEntry.getFile(fileName, { create: true, exclusive: false },\r\n                function (fileEntry) {\r\n                    deffered.resolve(fileEntry);\r\n                }, function () {\r\n                    deffered.reject();\r\n                });\r\n            return deffered.promise;\r\n        };\r\n\r\n        this.readFile = function (fileEntry) {\r\n            var deffered = $q.defer();\r\n            fileEntry.file(function (file) {\r\n                var reader = new FileReader();\r\n\r\n                reader.onloadend = function () {\r\n                    deffered.resolve(this.result);\r\n                    //console.log(\"Successful file read: \" + this.result);\r\n                };\r\n\r\n                reader.readAsText(file);\r\n\r\n            }, function (err) {\r\n                deffered.reject(err);\r\n            });\r\n\r\n            return deffered.promise;\r\n        };\r\n\r\n        this.writeFile = function (fileEntry, dataObj) {\r\n            var deffered = $q.defer();\r\n            fileEntry.createWriter(function (fileWriter) {\r\n\r\n                fileWriter.onwriteend = function () {\r\n                    console.log(\"Successful file write...\");\r\n                    deffered.resolve(dataObj);\r\n                };\r\n\r\n                fileWriter.onerror = function (e) {\r\n                    console.log(\"Failed file write: \" + e.toString());\r\n                    deffered.resolve(dataObj);\r\n                };\r\n\r\n                // If data object is not passed in,\r\n                // create a new Blob instead.\r\n                var blb = new Blob([dataObj], { type: 'text/plain' });\r\n                fileWriter.seek(0);\r\n                fileWriter.write(blb);\r\n            });\r\n\r\n            return deffered.promise;\r\n        };\r\n\r\n        /*\r\n         clear entire cache\r\n        */\r\n        this.clearCache = function () {\r\n            window.resolveLocalFileSystemURL(cordova.file.cacheDirectory,\r\n                function (folder) {\r\n                    folder.getDirectory('posCache', { create: true },\r\n                        function (dirEntry) {\r\n                            dirEntry.removeRecursively(function () {\r\n                                console.log('Successful deleted all files');\r\n                            });\r\n                        }, function (err) {\r\n                            console.log('Error when deleting files');\r\n                        });\r\n                });\r\n        };\r\n\r\n    }]);","angular.module(\"mainApp\").controller('cameraScanController',\r\n    ['$scope', '$rootScope', 'configService', 'helperService', '$element', 'errorService', '$q', 'soundService',\r\n        function ($scope, $rootScope, configService, helperService, $element, errorService, $q, soundService) {\r\n\r\n            $scope.isSequential = false;\r\n            $scope.fireEvent = false;\r\n            $scope.barcode = \"\";\r\n\r\n            $scope.$on('cameraScan.show', function (_, data) {\r\n\r\n                $scope.isSequential = data.isSequential;\r\n                $scope.fireEvent = data.needFireEvent;\r\n\r\n                if ($scope.isSequential === true) {\r\n                    helperService.showDialog($element);\r\n                }\r\n\r\n                return $scope.scan2();\r\n            });\r\n\r\n            $scope.finishScan = function () {\r\n                helperService.closeDialog($element);\r\n            };\r\n\r\n            $scope.nextScan = function () {\r\n                return $scope.scan2();\r\n            };\r\n\r\n            $scope.scan2 = function () {\r\n                var SCOPE = $scope;\r\n                // get current factive element\r\n\r\n                \r\n                $.blockUI();\r\n                return $scope.scan().then(function (res) {\r\n                    SCOPE.barcode = res.text;\r\n                    $.unblockUI();\r\n                    // send message with barcode here\r\n                    if(SCOPE.fireEvent) {\r\n                        $rootScope.$broadcast('scan.barcode', SCOPE.barcode);\r\n                    } else {\r\n                        if(!!window.lastFocusedElement) {\r\n                            var el = $(window.lastFocusedElement);\r\n                            el.focus();\r\n                            el.val(SCOPE.barcode);\r\n                        }\r\n                    }\r\n\r\n                }).catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.scan = function () {\r\n                var deferred = $q.defer();\r\n                if (configService.isSite || configService.isEmulator) {\r\n                    var result = {\r\n//                        text: '3eff-r0fprr-1cg',\r\n                        text: 'test_scan',\r\n                        format: 'QRCODE',\r\n                        cancelled: false\r\n                    };\r\n\r\n                    console.log(\"We got a emulated barcode\\n\" +\r\n                    \"Result: \" + result.text + \"\\n\" +\r\n                    \"Format: \" + result.format + \"\\n\" +\r\n                    \"Cancelled: \" + result.cancelled);\r\n\r\n                    deferred.resolve(result);\r\n                }\r\n                else {\r\n                    cordova.plugins.barcodeScanner.scan(\r\n                        function (result) {\r\n                            soundService.playGood();\r\n                            console.log(\"We got a barcode\\n\" +\r\n                                \"Result: \" + result.text + \"\\n\" +\r\n                                \"Format: \" + result.format + \"\\n\" +\r\n                                \"Cancelled: \" + result.cancelled);\r\n                            deferred.resolve(result);\r\n                        },\r\n                        function (error) {\r\n                            soundService.playBad();\r\n                            console.log(\"Scanning failed: \" + error);\r\n                            deferred.reject(error);\r\n                        },\r\n                        {\r\n                            resultDisplayDuration: 0,\r\n                            disableSuccessBeep: true // iOS and Android\r\n                        }\r\n                    );\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n        }\r\n    ]);","angular.module(\"mainApp\").controller('cashManagementController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', 'registryService', 'reportService',\r\n        'uuid2', '$uibModal', '$location', 'helperService', '$locale', 'cashManagementService', 'printService', 'gettextCatalog', '$filter', '$q',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, registryService,reportService,\r\n        uuid2, $uibModal, $location, helperService, $locale, cashManagementService, printService, gettextCatalog, $filter, $q) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSellSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constCashManagementViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        $scope.EmptyReason = gettextCatalog.getString(\"Select reason\");\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n        // array for sales\r\n        $scope.closeRegistryObj = {};\r\n        $scope.closeRegistryObj.OutletName = configService.lastOutlet;\r\n        $scope.closeRegistryObj.RegistryNumber = configService.lastRegistry;\r\n        $scope.closeRegistryObj.ID = null;\r\n        $scope.movement = {\r\n            Amount: 0,\r\n            PettyAmount: 0,\r\n            Type: 'Add',\r\n            CustomReason: null,\r\n            Reason: null\r\n        };\r\n\r\n        $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n        $scope.fixDropdownHeight = function () {\r\n            var el = $('div.jq-selectbox__dropdown:visible');\r\n            var off = el.offset();\r\n            var prn = el.closest('.select-parent');\r\n            if (prn.length > 0) {\r\n                var prnOff = prn.offset();\r\n                var height = prn.height();\r\n                var newHeight = height - (off.top - prnOff.top);\r\n                el.find('ul').css('height', newHeight + 'px');\r\n            }\r\n        };\r\n\r\n        $scope.onLoad = function () {\r\n            initSelects($scope.fixDropdownHeight);\r\n            $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n            //printService.disconnect().then(function () { return printService.connect(true); });\r\n//            printService.connect(true);\r\n            printService.reconnect(true).then(function (res) {\r\n                return $scope.checkOpenCashDrawer();\r\n            });\r\n\r\n            $.blockUI();\r\n            registryService.getActiveRegistrySales(configService.lastRegistryID, configService.lastUserName).then(function (resp) {\r\n                if (resp[0]) {\r\n                    var total = resp[0];\r\n                    $scope.closeRegistryObj = total;\r\n                    $scope.closeRegistryObj.OutletName = configService.lastOutlet;\r\n                    $scope.closeRegistryObj.RegistryNumber = configService.lastRegistry;\r\n                    $scope.closeRegistryObj.GiftCardCounted = $scope.closeRegistryObj.GiftCardExpected;\r\n                    $scope.closeRegistryObj.StoreCreditCounted = $scope.closeRegistryObj.StoreCreditExpected;\r\n                    $scope.closeRegistryObj.LoyaltyCounted = $scope.closeRegistryObj.LoyaltyExpected;\r\n                    $scope.closeRegistryObj.CreditCardCounted = $scope.closeRegistryObj.CreditCardExpected;\r\n                    cashManagementService.getCashMovements($scope.closeRegistryObj.ID).then(function (operations) {\r\n\r\n                        $scope.operations = operations;\r\n                        //$.each(operations, function(idx, el) {\r\n                        //    updateReasons(el.Reasons);\r\n                        //});\r\n\r\n                        $scope.movement.Reason = '@@noreason@@';\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                        $.unblockUI();\r\n\r\n                        $scope.raiseViewChanged();\r\n                    });\r\n                } else {\r\n                    $.unblockUI();\r\n                    $location.path('/opencloseregistry');\r\n                    $scope.raiseViewChanged();\r\n                }\r\n            },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        $scope.calculateTotal = function(count, expected) {\r\n            if (!count) {\r\n                return '-';\r\n            } else {\r\n                return count - expected;\r\n            }\r\n        };\r\n\r\n        $scope.removeCash = function () {\r\n            $scope.movement = { Type: \"Remove\", OperationType: \"Cash out\" };\r\n            $scope.movement.checkBoxes = { RemoveNotPetty: true, RemovePetty: false };\r\n            editPosUserDialog();\r\n        };\r\n\r\n        $scope.addCash = function () {\r\n            $scope.movement = { Type: \"Add\", OperationType: \"Cash in\" };\r\n            $scope.movement.checkBoxes = { AddNotPetty: true, AddPetty: false };\r\n            editPosUserDialog();\r\n        };\r\n\r\n        $scope.checkFields = function () {\r\n            var reason = !$scope.movement.CustomReason ? $scope.movement.Reason : $scope.movement.CustomReason;\r\n            var err = null;\r\n            if (reason && reason.length > 256) {\r\n                err = gettextCatalog.getString(\"Maximum reason field length is 256 characters.\");\r\n            }\r\n            if (err) {\r\n                errorService.showError(err);\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        };\r\n\r\n        function editPosUserDialog() {\r\n            $scope.movement.Amount = 0;\r\n            $scope.movement.PettyAmount = 0;\r\n            \r\n            var $windowElement = $('#cashMovementModal');\r\n            helperService.showDialog($windowElement, function() { });\r\n        }\r\n\r\n        $scope.cancelDialog = function () {\r\n            var $windowElement = $('#cashMovementModal');\r\n            helperService.closeDialog($windowElement);\r\n            \r\n        };\r\n\r\n        $scope.setType = function () {\r\n            if ($scope.movement.Type === 'Add') {\r\n                if (!$scope.movement.Amount)\r\n                    $scope.movement.OperationType = 'Petty cash in';\r\n                else\r\n                    $scope.movement.OperationType = 'Cash in';\r\n            } else {\r\n                if (!$scope.movement.Amount)\r\n                    $scope.movement.OperationType = 'Petty cash out';\r\n                else\r\n                    $scope.movement.OperationType = 'Cash out';\r\n            }\r\n        };\r\n\r\n        $scope.addMovement = function () {\r\n            var SCOPE = $scope;\r\n\r\n            var tempAmount = $scope.movement.Amount == 0 ? $scope.movement.PettyAmount : $scope.movement.Amount;\r\n            var reason = !$scope.movement.CustomReason ? $scope.movement.Reason : $scope.movement.CustomReason;\r\n            $scope.setType();\r\n            if (!$scope.checkFields())\r\n                return;\r\n\r\n            $.blockUI();\r\n            cashManagementService.addCashMovement(uuid2.newguid(), $scope.closeRegistryObj.ID, configService.lastRegistryID,\r\n                configService.userName, tempAmount,\r\n                reason,\r\n                $scope.movement.OperationType)\r\n             .then(function (res) {\r\n                var amount = $scope.movement.Type === \"Add\" ? tempAmount : tempAmount * -1;\r\n                return registryService.updateRegistryCash(configService.registrySalesID, amount);\r\n             })\r\n            .then(function () {\r\n               // updateReasons(SCOPE.movement.Reason);\r\n                var movement = {\r\n                    OperationType: SCOPE.movement.OperationType,\r\n                    Amount: tempAmount,\r\n                    Reasons: reason\r\n                };\r\n                $scope.cancelDialog();\r\n                $scope.onLoad();\r\n                $.unblockUI();\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(movement);\r\n                return deferred.promise;\r\n            })\r\n            .then(function (mvm) {\r\n                return reportService.printCashManagementReport(SCOPE, [mvm]);\r\n            })\r\n            .catch(function (err) {\r\n                errorService.showError(err);\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        function updateReasons(reasonName) {\r\n            var addReason = true;\r\n            $.each($scope.reasons, function(idx, el) {\r\n                if (el === reasonName) {\r\n                    addReason = false;\r\n                    return false;\r\n                }\r\n                \r\n            });\r\n\r\n            if (addReason) {\r\n                configService.cashManagementOparationReasons.push(reasonName);\r\n            }\r\n        }\r\n\r\n        $scope.getOperationType = function (type) {\r\n            return cashManagementService.getOperationType(type);\r\n        };\r\n\r\n        $scope.getOperationSign = function (type) {\r\n            return cashManagementService.getOperationSign(type);\r\n        };\r\n\r\n        $scope.getMovementAmount = function (form) {\r\n            if ($scope.isValidAddMovementForm(form) === true)\r\n                return 'dp_has-success has-success';\r\n            else if ($scope.isValidAddMovementForm(form) === false)\r\n                return 'has-danger dp_has-danger';\r\n        };\r\n\r\n        $scope.isValidAddMovementForm = function (form) {\r\n            if (form) {\r\n\r\n                var amount = $scope.movement.Amount == 0 ? $scope.movement.PettyAmount : $scope.movement.Amount;\r\n                var value = helperService.DEARRound(parseFloat(amount), 2);\r\n\r\n                var maxValue = helperService.DEARRound(parseFloat($scope.closeRegistryObj.CashExpected), 2);\r\n                var checkMaxValue = $scope.movement.Type === 'Remove';\r\n\r\n                if ((!$scope.movement.Reason || $scope.movement.Reason === '@@noreason@@') && !$scope.movement.CustomReason)\r\n                    return false;\r\n\r\n                if (value > 0 && ((checkMaxValue === true && value <= maxValue) || checkMaxValue === false))\r\n                    return true;\r\n\r\n                else if ((value >= maxValue && checkMaxValue === true) || value === 0)\r\n                    return false;\r\n\r\n            }\r\n        };\r\n\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n\r\n        $scope.cashManagementAmountDlg = null; // is bound to discount popover object with methods from directive\r\n        $scope.cashManagementPettyAmountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n        $scope.tempAmount = 0;\r\n        $scope.tempPettyAmount = 0;\r\n\r\n        $scope.showCasgManagementAmountDlg = function () {\r\n            $scope.tempAmount = $scope.movement.Amount;\r\n            if (!$scope.tempAmount)\r\n                $scope.tempAmount = 0;\r\n            $timeout(function () {\r\n                $scope.cashManagementAmountDlg.toggle();\r\n            });\r\n\r\n        };\r\n        $scope.showCasgManagementPettyAmountDlg = function () {\r\n            $scope.tempPettyAmount = $scope.movement.PettyAmount;\r\n            if (!$scope.tempPettyAmount)\r\n                $scope.tempPettyAmount = 0;\r\n            $timeout(function () {\r\n                $scope.cashManagementPettyAmountDlg.toggle();\r\n            });\r\n\r\n        };\r\n\r\n        // callback\r\n        $scope.setCashManagementAmount = function (prm) {\r\n            $scope.cashManagementAmountDlg.hide(true);\r\n            $timeout(function () {\r\n                if (prm === true) {\r\n                    $scope.movement.Amount = $scope.tempAmount;\r\n                    $scope.movement.PettyAmount = 0;\r\n                    if ($scope.movement.Type === 'Add') {\r\n                        $scope.movement.checkBoxes.AddNotPetty = true;\r\n                        $scope.movement.checkBoxes.AddPetty = false;\r\n                    } else if ($scope.movement.Type === 'Remove') {\r\n                        $scope.movement.checkBoxes.RemoveNotPetty = true;\r\n                        $scope.movement.checkBoxes.RemovePetty = false;\r\n                    }\r\n                }\r\n            });\r\n        };\r\n\r\n        $scope.setCashManagementPettyAmount = function (prm) {\r\n            $scope.cashManagementPettyAmountDlg.hide(true);\r\n            $timeout(function () {\r\n                if (prm === true) {\r\n                    $scope.movement.Amount = 0;\r\n                    $scope.movement.PettyAmount = $scope.tempPettyAmount;\r\n                    if ($scope.movement.Type === 'Add') {\r\n                        $scope.movement.checkBoxes.AddNotPetty = false;\r\n                        $scope.movement.checkBoxes.AddPetty = true;\r\n                    } else if ($scope.movement.Type === 'Remove') {\r\n                        $scope.movement.checkBoxes.RemoveNotPetty = false;\r\n                        $scope.movement.checkBoxes.RemovePetty = true;\r\n                    }\r\n                }\r\n            });\r\n        };\r\n        \r\n        $scope.changeAmountType = function () {\r\n            if ($scope.movement.checkBoxes.RemoveNotPetty === true) {\r\n                $scope.movement.OperationType = 'Cash out';\r\n            }\r\n            if ($scope.movement.checkBoxes.RemovePetty === true) {\r\n                $scope.movement.OperationType = 'Petty cash out';\r\n            }\r\n            if ($scope.movement.checkBoxes.AddNotPetty === true) {\r\n                $scope.movement.OperationType = 'Cash in';\r\n            }\r\n            if ($scope.movement.checkBoxes.AddPetty === true) {\r\n                $scope.movement.OperationType = 'Petty cash in';\r\n            }\r\n        };\r\n\r\n        $scope.reasons = configService.cashManagementOparationReasons;\r\n\r\n        $scope.getReasons = function (searchText) {\r\n            var result = $filter('filter')($scope.reasons, searchText);\r\n            return result;\r\n        };\r\n\r\n        $scope.showOpenCashDrawer = false;\r\n\r\n        $scope.checkOpenCashDrawer = function () {\r\n            printService.hasCashDrawer().then(function (hasDrawer) {\r\n                $scope.showOpenCashDrawer = hasDrawer;\r\n            });\r\n        };\r\n\r\n        $scope.openCashDrawer = function () {\r\n            $.blockUI();\r\n            printService.openCashDrawer()\r\n                .finally(function (res) {\r\n                    $.unblockUI();\r\n            });\r\n        }\r\n    }]);\r\n","angular.module('services').service('cashManagementService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', 'constants', 'webOnlyProvider','gettextCatalog', 'deviceInfo',\r\nfunction ($q, configService, remoteRequestProvider, localDBProvider, constants, webOnlyProvider, gettextCatalog, deviceInfo) {\r\n\r\n\r\n    this.addCashMovement = function (id, closeRegistryID, registryID, userName, amount, reason, operationType) {\r\n        var provider = configService.isSite || deviceInfo.isSimulator ? remoteRequestProvider : localDBProvider;\r\n\r\n        var objArr = [\r\n            {\r\n                ID: id,\r\n                CloseRegistryID: closeRegistryID,\r\n                RegistryID: registryID,\r\n                OperationTime: moment.utc(),\r\n                SalesRepresentative: userName,\r\n                OperationType: operationType,\r\n                Amount: amount? amount : 0,\r\n                Reasons: reason\r\n            }\r\n        ];\r\n        var pr = configService.isSite || deviceInfo.isSimulator ? provider.addCashMovements(objArr) : provider.addCashMovement(id, closeRegistryID, registryID, userName, amount, reason, operationType);\r\n        pr = pr.then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    this.getCashMovements = function (closeRegistryID) {\r\n        var provider = configService.isSite || deviceInfo.isSimulator ? webOnlyProvider : localDBProvider;\r\n        var pr = provider.getCashMovements(closeRegistryID).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    this.getOperationType = function (type) {\r\n        switch (type) {\r\n            case \"Cash in\":\r\n                return gettextCatalog.getString(\"Cash in\");\r\n            case \"Opening float\":\r\n                return gettextCatalog.getString(\"Opening float\");\r\n            case \"Cash out\":\r\n                return gettextCatalog.getString(\"Cash out\");\r\n            case \"Petty cash in\":\r\n                return gettextCatalog.getString(\"Petty cash in\");\r\n            case \"Petty cash out\":\r\n                return gettextCatalog.getString(\"Petty cash out\");\r\n        }\r\n    }\r\n\r\n    this.getOperationSign = function (type) {\r\n        switch (type) {\r\n            case \"Cash out\":\r\n            case \"Petty cash out\":\r\n                return \"-\";\r\n\r\n            default:\r\n                return \" \";\r\n        }\r\n    };\r\n\r\n\r\n    this.sendOfflineCashManagement = function (registryID) {\r\n        return localDBProvider.getCashMovementsToSend(registryID).then(function (data) {\r\n            var arr = [];\r\n            $.each(data, function (idx, el) {\r\n                var objArr = {\r\n                    ID: el.ID,\r\n                    CloseRegistryID: el.CloseRegistryID,\r\n                    RegistryID: el.RegistryID,\r\n                    OperationTime: el.OperationTime,\r\n                    SalesRepresentative: el.SalesRepresentative,\r\n                    OperationType: el.OperationType,\r\n                    Amount: el.Amount ? el.Amount : 0,\r\n                    Reasons: el.Reasons\r\n                };\r\n                arr.push(objArr);\r\n            });\r\n\r\n            if (arr.length > 0) {\r\n                return remoteRequestProvider.addCashMovements(arr)\r\n                    .then(function (resp) {\r\n                        var promises = [];\r\n                        $.each(resp.data.Success, function (idx, el) {\r\n                            var ppr = localDBProvider.markCashMovementsAsSent(el.ID);\r\n                            promises.push(ppr);\r\n                        });\r\n\r\n                        $.each(resp.data.Errors, function (idx, el) {\r\n                            if (el.Exist === true) {\r\n                                var ppr = localDBProvider.markCashMovementsAsSent(el.ID);\r\n                                promises.push(ppr);\r\n                            }\r\n                        });\r\n\r\n                        return Promise.all(promises);\r\n                    });\r\n            }\r\n            else {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n        });\r\n    }\r\n\r\n    var THIS = this;\r\n    this.sendDelayedOfflineCashManagement = function() {\r\n        return THIS.sendOfflineCashManagement(configService.lastRegistryID);\r\n    }\r\n\r\n    this.addCallback = function () {\r\n        if (!(configService.isSite || deviceInfo.isSimulator)) {\r\n            configService.addCallbackFunction(THIS.sendDelayedOfflineCashManagement);\r\n        }\r\n    };\r\n\r\n}]);\r\n","angular.module(\"mainApp\").controller('changePasswordController',\r\n    ['$scope', '$rootScope', 'configService', '$element', 'loginService', 'errorService', 'helperService',\r\nfunction ($scope, $rootScope, configService, $element, loginService, errorService, helperService) {\r\n\r\n    $scope.password1 = null;\r\n    $scope.password2 = null;\r\n    $scope.userName = null;\r\n    $scope.dearPosName = null;\r\n    $scope.userID = null;\r\n    $scope.oldPassword = null;\r\n\r\n    $scope.warningVisibility = {\r\n        Password1: false,\r\n        Password2: false        \r\n    };\r\n\r\n    $scope.$on('changepassword.show', function (event, data) {\r\n        $scope.userName = data.userName;\r\n        $scope.dearPosName = data.dearPosName;\r\n        $scope.userID = data.userID;\r\n        $scope.oldPassword = data.password;\r\n        $scope.showDialog();\r\n    });\r\n\r\n    $scope.showDialog = function () {\r\n        helperService.showDialog($element, function () {\r\n            if(!configService.isMobile)\r\n                $('#firstPasswordField').focus();\r\n        });\r\n    };\r\n\r\n    $scope.canShowErrors = false;\r\n\r\n    // Confirm button was pressed\r\n    $scope.confirm = function () {\r\n\r\n        $scope.warningVisibility.Password2 = false;\r\n        $scope.warningVisibility.Password1 = false;\r\n\r\n        $scope.canShowErrors = !!$scope.confirmPasswordForm.$invalid;\r\n        if ($scope.canShowErrors)\r\n            return false;\r\n\r\n        $.blockUI();\r\n        helperService.closeDialog($element);\r\n\r\n        loginService.changePassword($scope.userID, $scope.oldPassword, $scope.password1).then(\r\n        function (data) {\r\n            //$.unblockUI();\r\n            $rootScope.$broadcast('login.silent',\r\n                {\r\n                    dearPosName: $scope.dearPosName,\r\n                    userName: $scope.userName,\r\n                    password: $scope.password1\r\n                });\r\n        },\r\n            function (err) {\r\n                // process error\r\n                $.unblockUI();\r\n\r\n                // show error and login page once more\r\n                errorService.showError(err, function () { $scope.showDialog(); });\r\n\r\n            });\r\n    }\r\n\r\n    $scope.showPassword1Warning = function() {\r\n        $scope.warningVisibility.Password1 = !$scope.warningVisibility.Password1;\r\n        $scope.warningVisibility.Password2 = false;\r\n    };\r\n\r\n    $scope.showPassword2Warning = function() {\r\n        $scope.warningVisibility.Password2 = !$scope.warningVisibility.Password2;\r\n        $scope.warningVisibility.Password1 = false;\r\n    };\r\n\r\n}]);","angular.module(\"mainApp\").controller('clickAndCollectDialogController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'clickAndCollectService', 'helperService',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'keyPressDelayService', '$filter', 'productsService', \r\n        '$location', 'soundService', '$locale',\r\nfunction ($scope, $rootScope, configService, errorService, clickAndCollectService, helperService,\r\n    $element, constants, $timeout, gettextCatalog, keyPressDelayService, $filter, productsService, \r\n    $location, soundService, $locale) {\r\n\r\n    $scope.fulfillment = {};\r\n   \r\n    $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n\r\n    $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n        $scope.isOnline = object;\r\n    });\r\n\r\n    $scope.formatBalance = helperService.formatBalance;\r\n    $scope.dateFormat = helperService.getDateByFormatForMoment();\r\n    $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n    $scope.getImageUrl = function (imageID) {\r\n        if (imageID) {\r\n            var subUrl = 'PosProductImage';\r\n            var size = '&width=' + configService.imagesX + '&height=' + configService.imagesY\r\n            return configService.baseImageURL + '?ID=' + imageID + size;\r\n\r\n        }\r\n        return null;\r\n    };\r\n\r\n    $scope.$on('clickAndCollectDialog.show', function (event, data) {\r\n        $.blockUI();\r\n        clickAndCollectService.loadClickAndCollectSale(data.taskID, data.fromOrderLines).then(function(resp){\r\n            $scope.fulfillment = resp;\r\n            $scope.fulfillment.PickedLines = [];\r\n            $scope.fulfillment.fromOrderLines = data.fromOrderLines;\r\n\r\n            $scope.fulfillment.InvoiceDateFormated = $scope.getDateByFormat($scope.fulfillment.InvoiceDate, $scope.dateFormat);\r\n            $scope.fulfillment.DueDateFormated = $scope.getDateByFormat($scope.fulfillment.DueDate, $scope.dateFormat);\r\n\r\n            helperService.showDialog($element, function() { });\r\n            \r\n            $.unblockUI();\r\n\r\n        },function(){\r\n            $.unblockUI();\r\n\r\n            var error = gettextCatalog.getString(\"Failed to load sale, please try again later or contact support.\");\r\n\r\n            errorService.showError(error);\r\n        });\r\n    });\r\n\r\n    $scope.firstRunEditDialog = [true, true, true];\r\n      \r\n\r\n    $scope.cancelDialog = function () {\r\n        helperService.closeDialog($element);\r\n    };\r\n\r\n    $scope.getPickItemColor = function(item){\r\n        if(item.Available < item.Quantity){\r\n            return {'background-color':'rgb(255,104,104)'};\r\n        }\r\n    };\r\n\r\n    $scope.pickItemFunc = function(item, scanedValue, available, newQuantity, expiryDateDistribution){\r\n        if(item.Available <= 0)\r\n            return;        \r\n\r\n        if(item.CostingMethod === \"FIFO\" || item.skipScanDialog === true){\r\n            var productFound = false;\r\n            var skip = false;\r\n\r\n            $.each($scope.fulfillment.PickedLines, function(idx, el){\r\n                if(el.ProductID === item.ProductID && el.BatchSN === scanedValue){\r\n\r\n                    if(el.CostingMethod === \"FESN\" || el.CostingMethod === \"SN\" || el.CostingMethod === \"FISN\"){\r\n                        $scope.closeScanBatchDialog(true);\r\n                        errorService.showError(gettextCatalog.getString(\"Product with this serial number has been already added to pick.\"));\r\n                        skip = true;\r\n                        return;\r\n                    }\r\n\r\n                    if(item.skipScanDialog === true && scanedValue && scanedValue.length> 0 && item.CostingMethod !== \"FIFO\"){\r\n                        if(el.Available === 0 || (newQuantity &&  el.Available + el.Quantity - newQuantity < 0)){\r\n                            errorService.showError(gettextCatalog.getString(\"Insufficient stock level for this batch.\"));\r\n                            skip = true;\r\n                            return;\r\n                        }else{\r\n                            el.Available -=1;\r\n                        }\r\n                    }\r\n\r\n                    if(newQuantity){           \r\n                        \r\n                        if(item.Quantity - newQuantity + el.Quantity < 0){\r\n                            errorService.showError(gettextCatalog.getString(\"Product has insufficient stock level.\"));\r\n                            skip = true;\r\n                            return;\r\n                        }\r\n                        \r\n                        item.Quantity -= newQuantity - el.Quantity;\r\n                        item.Available -= newQuantity - el.Quantity;\r\n                        el.Quantity += newQuantity - el.Quantity;\r\n                    }else{\r\n                        el.Quantity += 1;\r\n                        item.Quantity -= 1;\r\n                        item.Available -= 1;\r\n                    }\r\n\r\n                    productFound = true;\r\n                    return;                   \r\n                }\r\n            });\r\n\r\n\r\n\r\n            if(skip){\r\n                if(item.skipScanDialog)\r\n                    item.skipScanDialog = false;\r\n                return;\r\n            }\r\n                \r\n\r\n            if(!productFound){\r\n                var pickItem = {};\r\n                angular.copy(item, pickItem);\r\n\r\n                if(newQuantity){\r\n                    item.Quantity -=newQuantity;\r\n                    item.Available -= newQuantity;\r\n                    pickItem.Quantity = newQuantity;\r\n                }else{\r\n                    item.Quantity -=1;\r\n                    item.Available -= 1;\r\n                    pickItem.Quantity = 1;\r\n                }\r\n\r\n                \r\n\r\n                if(item.skipScanDialog === true && scanedValue && scanedValue.length> 0 && item.CostingMethod !== \"FIFO\"){\r\n                    if(!available) \r\n                        available = pickItem.Available;\r\n\r\n                    if(newQuantity){\r\n                        pickItem.Available = available - newQuantity;\r\n                    }else{\r\n                        pickItem.Available = available - 1;\r\n                    }                   \r\n                    \r\n                    pickItem.BatchSN = scanedValue;\r\n                    pickItem.ExpiryDateDistribution = expiryDateDistribution;                    \r\n                }                    \r\n\r\n                $scope.fulfillment.PickedLines.push(pickItem);\r\n            }\r\n\r\n            if(item.skipScanDialog)\r\n                item.skipScanDialog = false;\r\n\r\n\r\n\r\n            if(item.Quantity === 0){\r\n                var index = $scope.fulfillment.PickLines.indexOf(item);\r\n                $scope.fulfillment.PickLines.splice(index, 1);                  \r\n            }\r\n        }else{\r\n\r\n            item.skipScanDialog = true; \r\n            $scope.showScanBatchDialog(item);\r\n        }\r\n    };\r\n\r\n    $scope.removePickedItemFunc = function(item, newQuantity){\r\n        var productFound = false;\r\n\r\n\r\n        $.each($scope.fulfillment.PickLines, function(idx, el){\r\n            if(el.ProductID === item.ProductID){\r\n                if(newQuantity){\r\n                    el.Quantity += item.Quantity - newQuantity;\r\n                    el.Available += item.Quantity - newQuantity;  \r\n    \r\n                    item.Available += item.Quantity - newQuantity;\r\n                    item.Quantity = newQuantity;\r\n                } \r\n                else{\r\n                    el.Quantity += item.Quantity;\r\n                    el.Available += item.Quantity;  \r\n                    item.Quantity = 0;\r\n                }               \r\n\r\n                productFound = true;  \r\n                return;                 \r\n            }\r\n        });\r\n\r\n        if(!productFound){\r\n            var pickItem = {};\r\n            angular.copy(item, pickItem);\r\n\r\n            if(newQuantity){\r\n                pickItem.Quantity = item.Quantity - newQuantity;\r\n                pickItem.Available = item.Available - newQuantity;\r\n\r\n                item.Available += item.Quantity - newQuantity;\r\n                item.Quantity = newQuantity;\r\n            }else{\r\n                item.Quantity = 0;\r\n                pickItem.Available = pickItem.BaseAvailable;\r\n            }\r\n\r\n\r\n            if(pickItem.skipScanDialog)\r\n                pickItem.skipScanDialog = false;\r\n\r\n            $scope.fulfillment.PickLines.push(pickItem);\r\n        }\r\n\r\n        if(item.Quantity === 0){\r\n            var index = $scope.fulfillment.PickedLines.indexOf(item);\r\n            $scope.fulfillment.PickedLines.splice(index, 1);  \r\n        }                          \r\n        \r\n    };\r\n\r\n\r\n\r\n\r\n    //#region SerialNumbers\r\n\r\n    $scope.showScanBatchDialog = function (item) {\r\n        $scope.scanedBatch = {value: \"\"};\r\n        $scope.scanBatchSelectedItem = item;\r\n        var $windowElement = $('#scanBatchDialogPartial');\r\n        helperService.showDialog($windowElement, function(){\r\n            if(!configService.isMobile)\r\n                $('#scanBatchInput').focus();\r\n        });\r\n    }\r\n\r\n    $scope.closeScanBatchDialog = function(cancelPressed){\r\n        var $windowElement = $('#scanBatchDialogPartial');\r\n        helperService.closeDialog($windowElement);\r\n\r\n        if(cancelPressed){\r\n            $scope.scanBatchSelectedItem.skipScanDialog = false;\r\n            $scope.scanedBatch = {value: \"\"};\r\n        }            \r\n    }\r\n\r\n\r\n    $scope.showFulfillmentCompletedDialog = function(){\r\n        var $windowElement = $(\"#fulfillmentCompletedDialogPartial\");\r\n        helperService.showDialog($windowElement);        \r\n    }\r\n\r\n    $scope.closefulfillmentCompletedDialog = function(){\r\n        var $windowElement = $(\"#fulfillmentCompletedDialogPartial\");\r\n        helperService.closeDialog($windowElement);\r\n        $scope.cancelDialog();\r\n    }\r\n\r\n\r\n\r\n    $scope.submitScanBatch = function(){\r\n        $.blockUI();\r\n        productsService.checkProductSerialNumber($scope.scanBatchSelectedItem.ProductID, configService.lastOutletID , $scope.scanedBatch.value)\r\n            .then(function(resp){\r\n                if(resp.found){\r\n\r\n                    var expiryDateDistribution = [];\r\n                    $.each(resp.data,function(ids,respRow){\r\n                        expiryDateDistribution.push({Available: respRow.Quantity, ExpiryDate: respRow.ExpiryDate});\r\n                    }); \r\n                    \r\n//                    $scope.pickItemFunc($scope.scanBatchSelectedItem, $scope.scanedBatch.value, resp.data.sum(\"Quantity\"), null, expiryDateDistribution);\r\n                    $scope.pickItemFunc($scope.scanBatchSelectedItem, $scope.scanedBatch.value, null, null, expiryDateDistribution);\r\n                    \r\n                    $scope.closeScanBatchDialog();\r\n                }else{\r\n                    var msg = gettextCatalog.getString(\"Batch/serial number not found.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg,\r\n                        type: 'error'\r\n                    });\r\n                    soundService.playBad();\r\n                }\r\n                $.unblockUI();\r\n            }, function(){\r\n                $.unblockUI();\r\n                var msg = gettextCatalog.getString(\"Batch/serial number not found.\");\r\n                $rootScope.$broadcast('snackbar.show', {\r\n                    message: msg,\r\n                    type: 'error'\r\n                });\r\n                soundService.playBad();\r\n            });\r\n        \r\n    }\r\n\r\n    //#endregion\r\n\r\n\r\n    //#region ChangePickedQuantity\r\n\r\n    $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n    $scope.showItemQuantityDlg = function (item, el) {\r\n        if (item.CostingMethod !== \"FESN\" && item.CostingMethod !== \"SN\" && item.CostingMethod !== \"FISN\") {\r\n            $scope.pickedItem = {};\r\n            angular.copy(item, $scope.pickedItem);\r\n            \r\n            $timeout(function () {\r\n                $scope.itemQuantityDlg.show(el);\r\n            });\r\n            \r\n        }\r\n\r\n    };\r\n\r\n    // callback\r\n    $scope.setQuantity = function (prm, event) {\r\n\r\n        $timeout(function () { $scope.itemQuantityDlg.hide(true); });\r\n\r\n        if (prm === true) {\r\n            $timeout(function () {\r\n                $.each($scope.fulfillment.PickedLines, function (idx, el) {\r\n                    if (el.ProductID === $scope.pickedItem.ProductID && el.BatchSN == $scope.pickedItem.BatchSN) {\r\n                        if ($scope.pickedItem.Quantity > 0) {\r\n                            $scope.changePickedItemQuantity(el, $scope.pickedItem.Quantity);\r\n                        }\r\n                        else{\r\n                            $scope.removePickedItemFunc(el);\r\n                        }\r\n                        return false;\r\n                    }\r\n                });\r\n            });\r\n        }\r\n        else if (typeof (prm) == 'string') {\r\n            if (prm === 'clean') {\r\n                $scope.removePickedItemFunc(el);\r\n            }\r\n        }\r\n\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n    };\r\n\r\n    $scope.changePickedItemQuantity = function(pickedItem, newQuantity){\r\n        var item = null;\r\n\r\n        newQuantityValue = parseInt(newQuantity);\r\n\r\n        $.each($scope.fulfillment.PickLines, function (idx, el) {\r\n            if(el.ProductID == pickedItem.ProductID){\r\n                item = el;\r\n                return;\r\n            }\r\n        });\r\n\r\n        if(item){\r\n            if(newQuantityValue > pickedItem.Quantity){\r\n                item.skipScanDialog = true;\r\n                $scope.pickItemFunc(item, pickedItem.BatchSN, pickedItem.Available, newQuantityValue);\r\n            }                \r\n            else\r\n                $scope.removePickedItemFunc(pickedItem, newQuantityValue);\r\n        }else if(newQuantityValue < pickedItem.Quantity)\r\n            $scope.removePickedItemFunc(pickedItem, newQuantityValue);\r\n    };\r\n\r\n\r\n    //#endregion\r\n\r\n    //#region Scanning\r\n\r\n    $scope.$on('scan.barcode', function (event, barcode) {\r\n        if($(\"#clickAndCollectModel:visible\").length <= 0)\r\n            return;\r\n\r\n        var isScanBatchDialogVisible = $('#scanBatchDialogPartial:visible').length > 0;\r\n        \r\n        if(isScanBatchDialogVisible){\r\n            $scope.scanedBatch = {value: barcode};\r\n            $scope.submitScanBatch();\r\n        }\r\n        else{\r\n            var found = false;\r\n            $.each($scope.fulfillment.PickLines, function(idx, el){\r\n                if(el.Barcode && el.Barcode.toLowerCase() === barcode.toLowerCase()){\r\n                    $scope.pickItemFunc(el);\r\n                    found = true;\r\n                    return;\r\n                }\r\n            });\r\n            if(!found)\r\n                $.each($scope.fulfillment.PickLines, function(idx, el){\r\n                    if(el.SKU.toLowerCase() === barcode.toLowerCase()){\r\n                        $scope.pickItemFunc(el);\r\n                        found = true;\r\n                        return;\r\n                    }\r\n                });\r\n\r\n                if(!found){\r\n                    var msg = gettextCatalog.getString(\"Product is not found in this sale.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg,\r\n                        type: 'error'\r\n                    });\r\n                    soundService.playBad();\r\n                }\r\n        }\r\n    });\r\n\r\n    //#endregion\r\n\r\n\r\n    //#region  AutoPicking\r\n\r\n    \r\n    $scope.autoPick = function(){\r\n        $.blockUI();\r\n        clickAndCollectService.autoPick($scope.fulfillment.TaskID, $scope.fulfillment.fromOrderLines)\r\n        .then(function(resp){\r\n\r\n            var itemsToRemove = [];\r\n            angular.copy($scope.fulfillment.PickedLines, itemsToRemove);\r\n\r\n            $.each(itemsToRemove, function(idx, el){\r\n                $scope.removePickedItemFunc(el);\r\n            });\r\n\r\n            var processedProducts = [];\r\n            $.each(resp, function(idx, el){\r\n                if(!processedProducts[el.ProductID]){\r\n                    processedProducts[el.ProductID] = true;\r\n\r\n                    var item = $scope.fulfillment.PickLines.filter(function(pickItem){return pickItem.ProductID === el.ProductID})[0];\r\n\r\n                    var batchNumbers = [];\r\n\r\n                    $.each(resp, function(id, batchItem){\r\n                        if(batchItem.ProductID === el.ProductID){\r\n                            var found = false;\r\n                            $.each(batchNumbers, function(i,b){\r\n                                if(b.BatchSN === batchItem.BatchSN){\r\n                                    b.Available += batchItem.Quantity;\r\n                                    b.expiryDateDistribution.push({Available: batchItem.Quantity, ExpiryDate: batchItem.ExpiryDate});\r\n                                    found = true;\r\n                                    return;\r\n                                }                                \r\n                            });\r\n\r\n                            if(!found){\r\n                                var batch = {BatchSN: batchItem.BatchSN, Available: batchItem.Quantity\r\n                                    , expiryDateDistribution: [{Available: batchItem.Quantity, ExpiryDate: batchItem.ExpiryDate}]};\r\n                                batchNumbers.push(batch);\r\n                            }                            \r\n                        }\r\n                    });\r\n                    \r\n                    $.each(batchNumbers, function(i, b){     \r\n                        item.skipScanDialog = true;                   \r\n//                        $scope.pickItemFunc(item, b.BatchSN, b.Available, b.Available, b.expiryDateDistribution);\r\n                        $scope.pickItemFunc(item, b.BatchSN, null, b.Available, b.expiryDateDistribution);\r\n                    });                   \r\n\r\n                }\r\n            });\r\n\r\n            $.unblockUI();\r\n        }, function(){\r\n            $.unblockUI();\r\n\r\n            var error = gettextCatalog.getString(\"Failed to perform auto fulfillment, please try again later or contact support.\");\r\n\r\n            errorService.showError(error);\r\n        });\r\n    };\r\n\r\n    //#endregion\r\n\r\n\r\n    //#region CompleteFulfillment\r\n    $scope.completeFulfillment = function(){\r\n\r\n        if($scope.fulfillment.PickedLines.length === 0){\r\n            var error = gettextCatalog.getString(\"Please, pick at least one item to complete fulfillment.\");\r\n            errorService.showError(error);\r\n\r\n\r\n        }\r\n        else{\r\n            $.blockUI();\r\n\r\n            var payload = {SaleID: $scope.fulfillment.SaleID, Lines: [], UserName: 'POS: ' + configService.userName};\r\n    \r\n            var pickedLines = [];\r\n            \r\n            angular.copy($scope.fulfillment.PickedLines, pickedLines);\r\n    \r\n            $.each(pickedLines, function(pId, pLine){\r\n    \r\n                if(pLine.ExpiryDateDistribution && pLine.ExpiryDateDistribution.length > 0){\r\n    \r\n                    $.each(pLine.ExpiryDateDistribution, function(eId, exp){\r\n                        \r\n                        if(pLine.Quantity <= 0)\r\n                            return;\r\n    \r\n                        var quantity = pLine.Quantity > exp.Available? exp.Available : pLine.Quantity;\r\n    \r\n                        pLine.Quantity -= exp.Available;\r\n    \r\n                        var pickItem = {\r\n                            ProductID: pLine.ProductID,\r\n                            SKU: pLine.SKU,\r\n                            Name: pLine.Name,\r\n                            LocationID: configService.lastOutletID,\r\n                            Quantity: quantity,\r\n                            BatchSN: pLine.BatchSN,\r\n                            ExpiryDate: exp.ExpiryDate                      \r\n                        };\r\n    \r\n                        payload.Lines.push(pickItem);\r\n                        \r\n                    });\r\n                    \r\n                }else{\r\n                    var pickItem = {\r\n                        ProductID: pLine.ProductID,\r\n                        SKU: pLine.SKU,\r\n                        Name: pLine.Name,\r\n                        LocationID: configService.lastOutletID,\r\n                        Quantity: pLine.Quantity,\r\n                        BatchSN: pLine.BatchSN                        \r\n                    };\r\n    \r\n                    if(pLine.CostingMethod === \"FIFO\")\r\n                        pickItem.BatchSN = null;\r\n    \r\n                    payload.Lines.push(pickItem);\r\n                }\r\n    \r\n            });\r\n    \r\n            clickAndCollectService.clickAndCollectFulfill(payload)\r\n            .then(function(resp){\r\n    \r\n                if(resp.Success && !$scope.fulfillment.fromOrderLines){\r\n                    if($scope.fulfillment.PosOrderID){\r\n\r\n                        $.unblockUI();\r\n                        var isPartialPayment = true;\r\n                        window.localStorage.setItem('continueSale', JSON.stringify({ saleID: $scope.fulfillment.PosOrderID, type: 'continue', subType: isPartialPayment,\r\n                                toPaymentPage: true,\r\n                                isFullyPaid: $scope.fulfillment.IsPaid\r\n                            }));\r\n                        $location.path('/sell'); \r\n\r\n                    }else{\r\n                        var posSale = clickAndCollectService.convertDearSaleIntoPOSSale($scope.fulfillment);\r\n      \r\n                        var currentSaleObject = clickAndCollectService.convertCurrentSaleForAPI(posSale, 'CLOSED', null, posSale.TaxInclusive);        \r\n    \r\n                        currentSaleObject.OrderNumber = $scope.fulfillment.InvoiceNumber;\r\n    \r\n                        currentSaleObject.IsFromDearSale = true;\r\n    \r\n                        clickAndCollectService.saveSale(currentSaleObject, posSale, null , true)\r\n                                .then(function(resp){   \r\n                                    if(resp.Errors && resp.Errors.length > 0){\r\n                                        var errorMessage = \"\";\r\n                                        $.each(resp.Errors, function(ids,error){\r\n                                            $.each(error.Errors, function(ids,error2){\r\n                                                errorMessage += error2.ErrorMessage + \"<br/>\";\r\n                                            });\r\n                                        });\r\n                                        $.unblockUI();\r\n                                        errorService.showError(errorMessage, function(){$scope.cancelDialog();});\r\n                                    }else{\r\n                                        var paidAmount = 0;\r\n                                        $.each(posSale.Payments,function(idx, el){\r\n                                            paidAmount += el.Amount;\r\n                                        });\r\n            \r\n                                        $.unblockUI();\r\n                                        \r\n                                        var isPartialPayment = true;\r\n                                        window.localStorage.setItem('continueSale', JSON.stringify({ saleID: posSale.ID, type: 'continue', subType: isPartialPayment,\r\n                                                toPaymentPage: true,\r\n                                                isFullyPaid: helperService.DEARRound(posSale.Total, 2) <= helperService.DEARRound(paidAmount, 2)\r\n                                            }));\r\n                                        $location.path('/sell'); \r\n                                    }\r\n            \r\n                                },function(err){\r\n                                    $.unblockUI();\r\n                                    var error = gettextCatalog.getString(\"Failed to complete fulfillment, please try again later or contact support.\");\r\n                                    errorService.showError(error, function(){$scope.cancelDialog();});                    \r\n                                });\r\n                    }\r\n                }\r\n                else if(resp.Success){      \r\n                    $.unblockUI();\r\n                    $scope.showFulfillmentCompletedDialog();                   \r\n                }\r\n                else{\r\n                    $.unblockUI();\r\n                    var errorMessage = \"\";\r\n                    $.each(resp, function(ids,error){\r\n                        errorMessage += error.Exception + \"<br/>\";\r\n                    });\r\n                    errorService.showError(errorMessage, function(){$scope.cancelDialog();});\r\n                }               \r\n    \r\n                \r\n            },function(){\r\n                $.unblockUI();\r\n                var error = gettextCatalog.getString(\"Failed to complete fulfillment, please try again later or contact support.\");\r\n                errorService.showError(error, function(){$scope.cancelDialog();});\r\n            });   \r\n        }                 \r\n        \r\n    }\r\n\r\n\r\n    //#endregion\r\n    \r\n\r\n}]);\r\n","angular.module(\"mainApp\").controller('clickAndCollectGridController',\r\n    ['$rootScope', '$scope', 'constants', 'loginService',\r\n        '$timeout', 'errorService', 'gettextCatalog', 'helperService', 'clickAndCollectService', '$location',\r\n        '$locale',\r\n    function ($rootScope, $scope, constants, loginService,\r\n        $timeout, errorService, gettextCatalog, helperService, clickAndCollectService, $location,\r\n        $locale) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constClickAndCollectViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n        $scope.dateFormat = helperService.getDateByFormatForMoment();\r\n\r\n        $scope.fullFilters = false;\r\n        $scope.filters = {CustomerSearch: null, SaleNumberSearch: null};\r\n\r\n        $scope.selectedPage = 1;\r\n        $scope.totalPages = 1;\r\n        $scope.itemsByPage = 20;\r\n        $scope.isLoading = false;\r\n        $scope.totalRecords = null;\r\n        $scope.ordersTotal = 0;\r\n        $scope.searchText = null;\r\n        $scope.showNoInvoicesMessage = false;\r\n\r\n        $scope.selectedRow = null;\r\n\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n        $scope.abs = function (x) {\r\n            if (x)\r\n                return helperService.DEARRound(Math.abs(x), 2);\r\n            return 0;\r\n        }\r\n\r\n        // array for customers\r\n        $scope.data = [];\r\n        \r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages) {\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                $scope.selectedPage ++;\r\n                \r\n                clickAndCollectService.loadClickAndCollectSales(\r\n                    $scope.selectedPage,\r\n                    $scope.itemsByPage,\r\n                    $scope.filters,\r\n                ).then(function (resp) {\r\n                    $.each(resp.Orders, function(idx,el){\r\n                        el.OrderDateFormated = $scope.getDateByFormat(el.SaleOrderDate, 'LL');\r\n\r\n                        if(!$scope.data.filter(function(fEl){\r\n                            return fEl.TaskID === el.TaskID;\r\n                        }).length > 0){                            \r\n                            $scope.data.push(el)                            \r\n                        }\r\n                    });\r\n    \r\n                    getPages(resp.Total);\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                }, function(err) {\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            }\r\n        }\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            $scope.raiseViewChanged();\r\n        };\r\n\r\n        $scope.search = function () {\r\n            $scope.showNoInvoicesMessage=true;\r\n            $.blockUI();\r\n            clickAndCollectService.loadClickAndCollectSales(1, $scope.itemsByPage, $scope.filters).then(function (resp) {\r\n                $.each(resp.Orders, function(idx,el){\r\n                    el.OrderDateFormated = $scope.getDateByFormat(el.SaleOrderDate, 'LL');\r\n                });\r\n                \r\n                $scope.data = resp.Orders;\r\n                $scope.selectedPage = 1;\r\n\r\n                getPages(resp.Total);\r\n                    $.unblockUI();\r\n                },\r\n                function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        function getPages(total) {\r\n            $scope.ordersTotal = total;\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectRow = function(row){\r\n            if(row.Status === \"Ready for Fulfillment\" || row.Status === \"Partially Fulfilled\")\r\n                $rootScope.$broadcast('clickAndCollectDialog.show', { taskID: row.TaskID, fromOrderLines: false });\r\n            else if(row.Status === \"Fulfilled, Not Paid\"){\r\n\r\n                $scope.selectedRow = row;\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                    gettextCatalog.getString('Do you want to add payments to this sale?'),\r\n                    gettextCatalog.getString('Yes'),\r\n                    gettextCatalog.getString('No'));\r\n            } else if(row.Status === \"Fulfilled\"){\r\n                $scope.selectedRow = row;\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                    gettextCatalog.getString('Would you like to convert this sale into a POS sale?'),\r\n                    gettextCatalog.getString('Yes'),\r\n                    gettextCatalog.getString('No'));\r\n            }\r\n            else{\r\n                var error = gettextCatalog.getString(\"Selected invoice cannot be fulfilled.\");\r\n                errorService.showError(error); \r\n            }\r\n        }\r\n\r\n        $scope.callbackModal = function () {\r\n            $.blockUI();\r\n            clickAndCollectService.loadClickAndCollectSale($scope.selectedRow.TaskID, false).then(function(resp){\r\n                if(resp.PosOrderID){\r\n\r\n                    $.unblockUI();\r\n                    var isPartialPayment = true;\r\n                    window.localStorage.setItem('continueSale', JSON.stringify({ saleID: resp.PosOrderID, type: 'continue', subType: isPartialPayment,\r\n                        toPaymentPage: true,\r\n                        isFullyPaid: resp.IsPaid\r\n                    }));\r\n                    $location.path('/sell'); \r\n\r\n                }else{\r\n                    $scope.fulfillment = resp;\r\n                    $scope.fulfillment.PickedLines = [];\r\n                    $scope.fulfillment.fromOrderLines = false;\r\n        \r\n                    $scope.fulfillment.InvoiceDateFormated = $scope.getDateByFormat($scope.fulfillment.InvoiceDate, $scope.dateFormat);\r\n                    $scope.fulfillment.DueDateFormated = $scope.getDateByFormat($scope.fulfillment.DueDate, $scope.dateFormat);    \r\n    \r\n                    var posSale = clickAndCollectService.convertDearSaleIntoPOSSale($scope.fulfillment);\r\n                    // posSale.IsFromDearSale = true;\r\n\r\n                    var currentSaleObject = clickAndCollectService.convertCurrentSaleForAPI(posSale, 'CLOSED', null, posSale.TaxInclusive);        \r\n    \r\n                    currentSaleObject.OrderNumber = $scope.fulfillment.InvoiceNumber;\r\n    \r\n                    currentSaleObject.IsFromDearSale = true;\r\n    \r\n                    clickAndCollectService.saveSale(currentSaleObject, posSale, null , true)\r\n                            .then(function(resp){   \r\n                                if(resp.Errors && resp.Errors.length > 0){\r\n                                    var errorMessage = \"\";\r\n                                    $.each(resp.Errors, function(ids,error){\r\n                                        $.each(error.Errors, function(ids,error2){\r\n                                            errorMessage += error2.ErrorMessage + \"<br/>\";\r\n                                        });\r\n                                    });\r\n                                    $.unblockUI();\r\n                                    errorService.showError(errorMessage);\r\n                                }else{\r\n                                    var paidAmount = 0;\r\n                                    $.each(posSale.Payments,function(idx, el){\r\n                                        paidAmount += el.Amount;\r\n                                    });\r\n        \r\n                                    $.unblockUI();\r\n                                    \r\n                                    var isPartialPayment = true;\r\n                                    window.localStorage.setItem('continueSale', JSON.stringify({ saleID: posSale.ID, type: 'continue', subType: isPartialPayment,\r\n                                            toPaymentPage: true,\r\n                                            isFullyPaid: helperService.DEARRound(posSale.Total, 2) <= helperService.DEARRound(paidAmount, 2)\r\n                                        }));\r\n                                    $location.path('/sell'); \r\n                                }\r\n        \r\n                            },function(err){\r\n                                $.unblockUI();\r\n                                var error = gettextCatalog.getString(\"Failed to convert sale, please try again later or contact support.\");\r\n                                errorService.showError(error);                    \r\n                            });\r\n                }\r\n            },function(){\r\n                $.unblockUI();\r\n    \r\n                var error = gettextCatalog.getString(\"Failed to convert sale, please try again later or contact support.\");\r\n    \r\n                errorService.showError(error);\r\n            });\r\n        }\r\n\r\n\r\n        \r\n        $scope.raiseViewChanged = function () {\r\n            //$rootScope.$broadcast('view.loaded');\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            });\r\n        };\r\n\r\n        $scope.getStatusColor = function(row){\r\n            if(row.Status === \"Fulfilled\"){\r\n                return {'background-color':'#a1a1a1'};\r\n            } else if(row.Status === \"Partially Fulfilled\"){\r\n                return {'background-color':'#60c2a0'};\r\n            } else if(row.Status === \"Ready for Fulfillment\"){\r\n                return {'background-color':'#60c2a0'};\r\n            } else if(row.Status === \"Fulfilled, Not Paid\"){\r\n                return {'background-color':'rgb(115, 186, 225)'};\r\n            } else if(row.Status === \"Not Ready for Fulfillment\"){\r\n                return {'background-color':'rgb(255,104,104)'};\r\n            }\r\n        }\r\n\r\n\r\n    }]);\r\n","import { convertFromOld } from '../../TypePosScripts/ConverterService';\r\nimport { CalculatorHelperService } from '../../TypePosScripts/CalculatorHelperService';\r\nimport { AddressType, StartCalcLevel } from '../../TypePosScripts/Enums';\r\nimport Enumerable from 'linq';\r\n\r\nangular.module('services').service('clickAndCollectService', [\r\n    '$q', 'configService', 'remoteRequestProvider', '$interval', 'uuid2', 'saleService', 'helperService',\r\nfunction ($q, configService, remoteRequestProvider, $interval, uuid2, saleService, helperService) {\r\n\r\n\r\n    this.stopLoadCheck = null;\r\n    // make search \r\n    this.loadClickAndCollectSales = function (page, limit, filters) {\r\n        var provider = remoteRequestProvider;\r\n        var pr = provider.loadClickAndCollectSales(configService.lastOutletID, page, limit, filters).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res.data);\r\n            return deferred.promise;\r\n        });\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.loadClickAndCollectSale = function (taskID, fromOrderLines) {\r\n        var provider = remoteRequestProvider;\r\n        var pr = provider.loadClickAndCollectSale(configService.lastOutletID, taskID, fromOrderLines).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res.data);\r\n            return deferred.promise;\r\n        });\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.autoPick = function(taskID, fromOrderLines){\r\n        var provider = remoteRequestProvider;\r\n        var pr = provider.clickAndCollectAutoPick(configService.lastOutletID, taskID, fromOrderLines).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res.data);\r\n            return deferred.promise;\r\n        });\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.clickAndCollectFulfill = function(payload){\r\n        var provider = remoteRequestProvider;\r\n        var pr = provider.clickAndCollectFulfill(payload).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res.data);\r\n            return deferred.promise;\r\n        });\r\n\r\n        return pr;\r\n    };\r\n    \r\n    var calculateTax = saleService.calculateTax;\r\n    this.convertDearSaleIntoPOSSale = function(dearSale){\r\n        var posSale = {             \r\n            ID: dearSale.TaskID,\r\n            Date: new Date(),\r\n            ReturnID: null,\r\n            CheckoutItems: [],\r\n            Payments: [], // all payments for this sale with payment method guid references\r\n            isDiscountPercent: false,\r\n            Discount: 0,\r\n            DiscountTax: 0,\r\n            comment: dearSale.CustomerNote,\r\n            RealPaySum: 0,\r\n            CalculatedTax: 0,\r\n            customer: {\r\n                ID: dearSale.CustomerID,\r\n                Name: dearSale.CustomerName,\r\n                LoyaltyPoints: dearSale.CustomerLoyaltyPoints,\r\n                StoreCredits: dearSale.CustomerStoreCredits,\r\n                EnableLoyaltyPoints: dearSale.CustomerEnableLoyaltyPoints                               \r\n            },\r\n            CheckoutItemCount: 0,\r\n            Balance: 0,\r\n            LoyaltyPoints: 0,\r\n            LoyaltyPointsTotal: 0,\r\n            OrderNumber: dearSale.InvoiceNumber,\r\n            ClearOrderNumber: null,\r\n            OrderType: '',\r\n            CashChangeAmount: 0,\r\n            itemDiscount: 0,\r\n            selectedCoupon: null,\r\n            manuallyAppliedDiscount : false,\r\n            TaxInclusive: dearSale.TaxInclusive,\r\n            Total: 0,\r\n            SalesRepresentative : dearSale.SalesRepresentative,\r\n            CashRounding: 0\r\n        };\r\n\r\n        if(dearSale.CustomerEmail){\r\n            posSale.customer.Contacts = [{\r\n                Email: dearSale.CustomerEmail,\r\n                Phone: dearSale.CustomerPhone\r\n            }];\r\n            posSale.customer.DontReloadContacts = true;\r\n        }\r\n\r\n        if(dearSale.ShippingAddress){\r\n            posSale.customer.Addresses  = [{\r\n                City : dearSale.ShippingAddress.City,\r\n                Country  : dearSale.ShippingAddress.Country ,\r\n                Line1  : dearSale.ShippingAddress.Line1 ,\r\n                Line2  : dearSale.ShippingAddress.Line2 ,\r\n                Postcode  : dearSale.ShippingAddress.Postcode,\r\n                State  : dearSale.ShippingAddress.State,\r\n                Type: AddressType.Shipping \r\n            }];\r\n            posSale.customer.DontReloadAddresses = true;\r\n        }\r\n\r\n        $.each(dearSale.SaleLines, function(idx, el){\r\n            if(el.ProductID !== \"00000000-0000-0000-0000-000000000000\"){\r\n\r\n                var taxObject = {\r\n                    effectivePercentExclusive: el.Tax,\r\n                    effectivePercentInclusive: el.Tax,\r\n                    ruleID: el.TaxRule\r\n                };   \r\n\r\n                var price = el.Price;\r\n                var itemDiscount = helperService.DEARRound(price/100*el.Discount, 4);\r\n                var priceWithDiscount = price - itemDiscount;\r\n                var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n                var priceWithT = dearSale.TaxInclusive ? priceWithDiscount : priceWithDiscount + calculateTax(taxObject, priceWithDiscount);\r\n           \r\n                \r\n\r\n                var pl = {\r\n                    ID: uuid2.newguid(),\r\n                    ProductID: el.ProductID,\r\n                    Tags: el.Tags,\r\n                    BrandID: el.BrandID,\r\n                    CategoryID: el.CategoryID,\r\n                    FamilyID: el.FamilyID,\r\n                    Name: el.Name,\r\n                    Count: el.Quantity,\r\n                    Price: price, //price,\r\n                    Amount: priceWithDiscount * el.Quantity,\r\n                    Discount: null, //discount,\r\n                    itemDiscount: itemDiscount,\r\n                    Note: '',\r\n                    Tax: calculateTax(taxObject, priceWithDiscount * el.Quantity),\r\n                    TaxRuleID: taxObject.ruleID,\r\n                    LoyaltyPoints: loyaltyEarning ? (priceWithT * el.Quantity * loyaltyEarning) : 0,\r\n                    LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                    PriceWithTax: priceWithT,\r\n                    CanEdit: false,\r\n                    CanDelete: false,\r\n                    SaleType: 'sale',\r\n                    Taxes: taxObject,\r\n                    LoyaltyEarning: el.LoyaltyEarning,\r\n                    BasePrice: price,\r\n                    BasePriceWithDiscount: priceWithDiscount,\r\n                    Sku: el.SKU,\r\n                    BarCode: el.Barcode,\r\n                    ImageID: el.ImageID,\r\n                    Discounts: null,\r\n                    Option1: el.Option1,\r\n                    Option2: el.Option2,\r\n                    Option3: el.Option3,\r\n                    ProductShortDescription: el.ProductShortDescription,\r\n                    ProductType: el.ProductType,\r\n                    SerialNumber: !el.SerialNumber ? null : el.SerialNumber,\r\n                    CF1: el.CF1,\r\n                    CF2: el.CF2,\r\n                    CF3: el.CF3,\r\n                    CF4: el.CF4,\r\n                    CF5: el.CF5,\r\n                    CF6: el.CF6,\r\n                    CF7: el.CF7,\r\n                    CF8: el.CF8,\r\n                    CF9: el.CF9,\r\n                    CF10: el.CF10,\r\n                    DefaultPrice: el.price,\r\n                    deals:[]\r\n                };\r\n\r\n                posSale.CheckoutItems.push(pl);\r\n\r\n            }else if(el.Price >= 0){\r\n\r\n                var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n\r\n                var taxObject = {\r\n                    effectivePercentExclusive: el.Tax,\r\n                    effectivePercentInclusive: el.Tax,\r\n                    ruleID: el.TaxRule\r\n                };     \r\n        \r\n                var price = parseFloat(el.Price);                \r\n                var itemDiscount = price/100*el.Discount;\r\n\r\n                var priceWithDiscount = price - itemDiscount;\r\n\r\n                var priceWithTax = dearSale.TaxInclusive ? priceWithDiscount : priceWithDiscount + calculateTax(taxObject, priceWithDiscount);\r\n\r\n        \r\n                var pl = {\r\n                    ID: uuid2.newguid(),\r\n                    ProductID: uuid2.newguid(),\r\n                    Name: el.SKU,\r\n                    Count: el.Quantity,\r\n                    Price: price,//price,\r\n                    BasePrice: price,\r\n                    Amount: el.Quantity * priceWithDiscount,\r\n                    Discount: null,//discount,\r\n                    itemDiscount: itemDiscount,\r\n                    Note: '',\r\n                    Tax: calculateTax(taxObject, parseFloat(priceWithDiscount * el.Quantity)),\r\n                    TaxRuleID: taxObject.ruleID,\r\n                    Taxes: taxObject,\r\n                    LoyaltyPoints: loyaltyEarning ? (priceWithTax * loyaltyEarning) : 0,\r\n                    LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                    LoyaltyEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                    PriceWithTax: priceWithTax,\r\n                    CanEdit: false,\r\n                    CanDelete: false,\r\n                    SaleType: 'customsale',\r\n                    BasePriceWithDiscount: priceWithDiscount,\r\n                    deals:[]\r\n                };\r\n                \r\n                posSale.CheckoutItems.push(pl);\r\n\r\n            }\r\n            else{\r\n                var taxObject = {\r\n                    effectivePercentExclusive: el.Tax,\r\n                    effectivePercentInclusive: el.Tax,\r\n                    ruleID: el.TaxRule\r\n                }; \r\n\r\n                posSale.isDiscountPercent = false;\r\n\r\n                if(!posSale.Discount){\r\n                    posSale.Discount = 0;\r\n                }\r\n\r\n                var itemDiscount =  el.Price/100 * el.Discount;\r\n                var price = el.Price - itemDiscount;\r\n\r\n                var discount = price * el.Quantity;\r\n\r\n                posSale.Discount += Math.abs(discount);\r\n            }\r\n                \r\n        });\r\n\r\n        $.each(dearSale.Payments, function(idx, el){\r\n\r\n            var payment = {\r\n                ID: el.ID,\r\n                PaymentProcessorID: \"BackofficePayment\",\r\n                Amount: el.Amount,\r\n                Date: el.DatePaid,\r\n                ShortName: 'BackofficePayment_',\r\n                PaymentTypeName: \"Non-POS\",\r\n                Loyalty: 0,\r\n                Reference: null,\r\n                Surcharge: null\r\n            };\r\n            posSale.Payments.push(payment);\r\n        });\r\n\r\n        \r\n        if (helperService.showNewCheckoutUI(posSale)){\r\n            posSale = convertFromOld(posSale, dearSale.TaxInclusive);\r\n            CalculatorHelperService.calculateCheckout(posSale, null, null, StartCalcLevel.Total);\r\n        }\r\n        else \r\n            posSale.Total = saleService.totalSum(posSale, dearSale.TaxInclusive, true);\r\n\r\n        posSale.Total = helperService.DEARRound(posSale.Total,2)\r\n        \r\n        return posSale;\r\n    };\r\n\r\n\r\n    this.convertDearSaleIntoPOSSaleWithRefunds = function(dearSale){\r\n        var originalSale = this.convertDearSaleIntoPOSSale(dearSale);\r\n\r\n        originalSale.GroupedSale =\r\n        {\r\n            TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n            GhostSurcharge: 0,\r\n            TotalSale: 0,\r\n            ExchangeAmount: 0,\r\n            PaymentsMap: {},\r\n            LoyaltyRefundCoeff: 0 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n        };\r\n\r\n        originalSale.cantProcessOffline = true;\r\n\r\n        var result = [];\r\n        result.push({sale: originalSale, refundID: null});\r\n\r\n        var ReturnPayments = [];\r\n\r\n        $.each(dearSale.Refunds, function(refundId, refund){\r\n            var posSale = {             \r\n                ID: dearSale.TaskID,\r\n                Date: new Date(),\r\n                ReturnID: uuid2.newguid(),\r\n                CheckoutItems: [],\r\n                Payments: [], // all payments for this sale with payment method guid references\r\n                isDiscountPercent: false,\r\n                Discount: 0,\r\n                DiscountTax: 0,\r\n                comment: dearSale.CustomerNote,\r\n                RealPaySum: 0,\r\n                CalculatedTax: 0,\r\n                customer: {\r\n                    ID: dearSale.CustomerID,\r\n                    Name: dearSale.CustomerName,\r\n                    LoyaltyPoints: dearSale.CustomerLoyaltyPoints,\r\n                    StoreCredits: dearSale.CustomerStoreCredits,\r\n                    EnableLoyaltyPoints: dearSale.CustomerEnableLoyaltyPoints                               \r\n                },\r\n                CheckoutItemCount: 0,\r\n                Balance: 0,\r\n                LoyaltyPoints: 0,\r\n                LoyaltyPointsTotal: 0,\r\n                OrderNumber: dearSale.InvoiceNumber,\r\n                ClearOrderNumber: null,\r\n                OrderType: '',\r\n                CashChangeAmount: 0,\r\n                itemDiscount: 0,\r\n                selectedCoupon: null,\r\n                manuallyAppliedDiscount : false,\r\n                TaxInclusive: dearSale.TaxInclusive,\r\n                Total: 0,\r\n                SalesRepresentative : dearSale.SalesRepresentative,\r\n                CashRounding: 0,\r\n                cantProcessOffline: true,\r\n                IsPartialPaid: refund.IsPartiallyPaid,\r\n                newRefundOrder: refund.RefundID\r\n            };\r\n\r\n            posSale.GroupedSale =\r\n                                {\r\n                                    TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n                                    GhostSurcharge: 0,\r\n                                    TotalSale: 0,\r\n                                    ExchangeAmount: 0,\r\n                                    PaymentsMap: {},\r\n                                    LoyaltyRefundCoeff: 0 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n                                };\r\n\r\n            if(dearSale.CustomerEmail){\r\n                posSale.customer.Contacts = [{\r\n                    Email: dearSale.CustomerEmail,\r\n                    Phone: dearSale.CustomerPhone\r\n                }];\r\n                posSale.customer.DontReloadContacts = true;\r\n            }\r\n    \r\n            if(dearSale.ShippingAddress){\r\n                posSale.customer.Addresses  = [{\r\n                    City : dearSale.ShippingAddress.City,\r\n                    Country  : dearSale.ShippingAddress.Country ,\r\n                    Line1  : dearSale.ShippingAddress.Line1 ,\r\n                    Line2  : dearSale.ShippingAddress.Line2 ,\r\n                    Postcode  : dearSale.ShippingAddress.Postcode,\r\n                    State  : dearSale.ShippingAddress.State,\r\n                    Type: AddressType.Shipping \r\n                }];\r\n                posSale.customer.DontReloadAddresses = true;\r\n            }\r\n\r\n            $.each(refund.RefundLines, function(idx, el){\r\n                if(el.ProductID !== \"00000000-0000-0000-0000-000000000000\"){\r\n    \r\n                    var taxObject = {\r\n                        effectivePercentExclusive: el.Tax,\r\n                        effectivePercentInclusive: el.Tax,\r\n                        ruleID: el.TaxRule\r\n                    };   \r\n    \r\n                    var price = el.Price;\r\n                    var itemDiscount = price/100*el.Discount;\r\n                    var priceWithDiscount = price - itemDiscount;\r\n                    var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n                    var priceWithT = dearSale.TaxInclusive ? priceWithDiscount : priceWithDiscount + calculateTax(taxObject, priceWithDiscount);\r\n               \r\n                    \r\n    \r\n                    var pl = {\r\n                        ID: uuid2.newguid(),\r\n                        ProductID: el.ProductID,\r\n                        Tags: el.Tags,\r\n                        BrandID: el.BrandID,\r\n                        CategoryID: el.CategoryID,\r\n                        FamilyID: el.FamilyID,\r\n                        Name: el.Name,\r\n                        Count: el.Quantity,\r\n                        Price: price, //price,\r\n                        Amount: priceWithDiscount * el.Quantity,\r\n                        Discount: null, //discount,\r\n                        itemDiscount: itemDiscount,\r\n                        Note: '',\r\n                        Tax: calculateTax(taxObject, priceWithDiscount * el.Quantity),\r\n                        TaxRuleID: taxObject.ruleID,\r\n                        LoyaltyPoints: loyaltyEarning ? (priceWithT * el.Quantity * loyaltyEarning) : 0,\r\n                        LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        PriceWithTax: priceWithT,\r\n                        CanEdit: false,\r\n                        CanDelete: false,\r\n                        SaleType: 'sale',\r\n                        Taxes: taxObject,\r\n                        LoyaltyEarning: el.LoyaltyEarning,\r\n                        BasePrice: price,\r\n                        BasePriceWithDiscount: priceWithDiscount,\r\n                        PriceWithDiscount: priceWithDiscount,\r\n                        Sku: el.SKU,\r\n                        BarCode: el.Barcode,\r\n                        ImageID: el.ImageID,\r\n                        Discounts: null,\r\n                        Option1: el.Option1,\r\n                        Option2: el.Option2,\r\n                        Option3: el.Option3,\r\n                        ProductShortDescription: el.ProductShortDescription,\r\n                        ProductType: el.ProductType,\r\n                        SerialNumber: null,\r\n                        CF1: el.CF1,\r\n                        CF2: el.CF2,\r\n                        CF3: el.CF3,\r\n                        CF4: el.CF4,\r\n                        CF5: el.CF5,\r\n                        CF6: el.CF6,\r\n                        CF7: el.CF7,\r\n                        CF8: el.CF8,\r\n                        CF9: el.CF9,\r\n                        CF10: el.CF10,\r\n                        DefaultPrice: el.price,\r\n                        deals:[],\r\n                        MissingInInvoice: el.MissingInInvoice\r\n                    };\r\n    \r\n                    posSale.CheckoutItems.push(pl);\r\n    \r\n                }else if(el.Price <= 0){\r\n    \r\n                    var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n    \r\n                    var taxObject = {\r\n                        effectivePercentExclusive: el.Tax,\r\n                        effectivePercentInclusive: el.Tax,\r\n                        ruleID: el.TaxRule\r\n                    };     \r\n            \r\n                    var price = parseFloat(el.Price);                \r\n                    var itemDiscount = price/100*el.Discount;\r\n    \r\n                    var priceWithDiscount = price - itemDiscount;\r\n    \r\n                    var priceWithTax = dearSale.TaxInclusive ? priceWithDiscount : priceWithDiscount + calculateTax(taxObject, priceWithDiscount);\r\n    \r\n            \r\n                    var pl = {\r\n                        ID: uuid2.newguid(),\r\n                        ProductID: uuid2.newguid(),\r\n                        Name: el.SKU,\r\n                        Count: el.Quantity,\r\n                        Price: price,//price,\r\n                        BasePrice: price,\r\n                        Amount: el.Quantity * priceWithDiscount,\r\n                        Discount: null,//discount,\r\n                        itemDiscount: itemDiscount,\r\n                        Note: '',\r\n                        Tax: calculateTax(taxObject, parseFloat(priceWithDiscount * el.Quantity)),\r\n                        TaxRuleID: taxObject.ruleID,\r\n                        Taxes: taxObject,\r\n                        LoyaltyPoints: loyaltyEarning ? (priceWithTax * loyaltyEarning) : 0,\r\n                        LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        LoyaltyEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        PriceWithTax: priceWithTax,\r\n                        CanEdit: false,\r\n                        CanDelete: false,\r\n                        SaleType: 'customsale',\r\n                        BasePriceWithDiscount: priceWithDiscount,\r\n                        PriceWithDiscount: priceWithDiscount,\r\n                        deals:[],\r\n                        MissingInInvoice: el.MissingInInvoice\r\n                    };\r\n                    \r\n                    posSale.CheckoutItems.push(pl);\r\n    \r\n                }\r\n                else{\r\n                    var taxObject = {\r\n                        effectivePercentExclusive: el.Tax,\r\n                        effectivePercentInclusive: el.Tax,\r\n                        ruleID: el.TaxRule\r\n                    }; \r\n    \r\n                    posSale.isDiscountPercent = false;\r\n    \r\n                    if(!posSale.Discount){\r\n                        posSale.Discount = 0;\r\n                    }\r\n    \r\n                    var itemDiscount =  el.Price/100 * el.Discount;\r\n                    var price = el.Price - itemDiscount;\r\n    \r\n                    var discount = price * el.Quantity;\r\n    \r\n                    posSale.Discount += Math.abs(discount);\r\n                }\r\n                    \r\n            });\r\n    \r\n            $.each(refund.RefundPayments, function(idx, el){\r\n    \r\n                var payment = {\r\n                    ID: el.ID,\r\n                    PaymentProcessorID: \"BackofficePayment\",\r\n                    Amount: el.Amount,\r\n                    Date: el.DatePaid,\r\n                    ShortName: 'BackofficePayment_',\r\n                    PaymentTypeName: \"Non-POS\",\r\n                    Loyalty: 0,\r\n                    Reference: null,\r\n                    Surcharge: null\r\n                };\r\n                posSale.Payments.push(payment);\r\n\r\n                ReturnPayments.push(payment)\r\n            });\r\n\r\n            if (helperService.showNewCheckoutUI(posSale)){\r\n                posSale = convertFromOld(posSale, dearSale.TaxInclusive);\r\n                CalculatorHelperService.calculateCheckout(posSale, null, null, StartCalcLevel.Total);\r\n            }\r\n            else \r\n                posSale.Total = saleService.totalSum(posSale, dearSale.TaxInclusive, true);\r\n    \r\n            posSale.Total = helperService.DEARRound(posSale.Total,2)\r\n            \r\n            result.push({sale: posSale, refundID: refund.RefundID})\r\n        });\r\n        /*????????????**/\r\n        //threre is not way to us propelry know how refund goes in future \r\n        //if we have 3 credit notes and 10 $ to refund, we will be able to to it for each credit not\r\n        //so, maybe in case if sale is not fully paid, we should combine refunds into 1 refund?\r\n        $.each(result, function(idx,el){\r\n            if(el.refundID){\r\n                el.sale.ReturnPayments = angular.copy(originalSale.Payments);\r\n                \r\n                $.each(ReturnPayments,function(r,refPay){\r\n                    var found = false;\r\n                    $.each(el.sale.Payments,function(pi, pay){\r\n                        if(pay.ID === refPay.ID){\r\n                            found = true;\r\n                        }\r\n                    });\r\n\r\n                    if(!found){\r\n                        el.sale.ReturnPayments.push(refPay);\r\n                    }\r\n                });\r\n                \r\n                var s1 = Enumerable.from(el.sale.ReturnPayments).sum(function (p) { return p.Amount; });\r\n                var s2 = Enumerable.from(el.sale.Payments).sum(function (p) { return p.Amount; });\r\n                el.sale.Balance = (!s1 ? 0 : s1) + (!s2 ? 0 : s2);\r\n                // (Enumerable.from(el.sale.ReturnPayments).sum(function (p) { return p.Amount; }) ?? 0) +\r\n                // (Enumerable.from(el.sale.Payments).sum(function (p) { return p.Amount; }) ?? 0);\r\n\r\n                $.each(el.sale.CheckoutItems, function(chIdx, chkItem){\r\n                    chkItem.FinalPrice = Math.abs(chkItem.FinalPrice);\r\n                    chkItem.FinalAmount = Math.abs(chkItem.FinalAmount) * -1;\r\n                    chkItem.FinalTaxAmount = Math.abs(chkItem.FinalTaxAmount) * - 1;\r\n                });\r\n            }\r\n        });\r\n        \r\n\r\n        return result;\r\n    };\r\n\r\n    this.convertCurrentSaleForAPI = saleService.convertCurrentSaleForAPI;\r\n    this.saveSale = saleService.saveSale;\r\n}]);","angular.module('services').service('cloverReaderProvider',\r\n    ['$q',\r\n        function ($q) {\r\n\r\n            this.makePayment = function (options) {\r\n                var opts = {\r\n                    metadata: options.metadata\r\n                };\r\n\r\n                var deferred = $q.defer();\r\n\r\n                // sum should be in cents\r\n                window.plugins.starPrinter.requestCharge(options.amount * 100, opts,\r\n                   function (err, res) {\r\n                       if (err) {\r\n                           console.log('error: ');\r\n                           console.log(err);\r\n                           deferred.reject({\r\n                               response: {\r\n                                   errorDescription: err\r\n                               }\r\n                           });\r\n                       }\r\n                       else {\r\n                           console.log('success: '+JSON.stringify(res));\r\n                           deferred.resolve({\r\n                               response: {\r\n                                   ServerTransactionID: res.paymentID\r\n                               }\r\n                           });\r\n                       }\r\n                   });\r\n\r\n                return deferred.promise;\r\n            };\r\n        }]);","\r\nimport buildConfiguration from './configEnvironment';\r\n/*\r\n Configuration service. Contains settings that are used by all other modules\r\n*/\r\nangular.module('services').service('configService', ['$rootScope', '$q', '$timeout', '$interval',\r\n    function ($rootScope, $q, $timeout, $interval) {\r\n\r\n        this.payloadVersion = '1';\r\n        this.bypassOutletRegistry = true;\r\n        this.applicationID = null;\r\n        this.applicationKey = null;\r\n        this.loginUserID = null;\r\n        this.tenantID = null;\r\n        this.UserName = null;\r\n        this.password = null;\r\n        this.posName = null;\r\n        this.role = null;\r\n        this.taxCalculationMethod = null;\r\n        this.taxInclucive = null;\r\n        this.tenantTaxRule = null;\r\n        this.ignoreCustomerTaxRule = null;\r\n        this.currency = null;\r\n        this.paymentProcessors = null;\r\n        this.posPaymentProcessors = null;\r\n        this.enableLoyalty = false;\r\n        this.registrySalesID = null;\r\n        this.UserHasSelectedOutlet = null;\r\n        this.applyCustomerDiscountAfterOtherDiscounts = null;\r\n        var callbackFunctions = [];\r\n        this.dataSendCount = 10;\r\n        this.dataSendInterval = 10000;\r\n        this.hasNetworkConnection = true;\r\n        this.pingFunction = {};\r\n        this.pingFrequency = 300000;\r\n        this.loginChanges = null;\r\n        this.deliveryTimeInterval = 60;\r\n        this.loadCustomersMode = 3;\r\n        this.lastOutletInfo = {};\r\n\r\n        this.lastPingCall = 0; // to protect from frequent ping calls\r\n        this.pingMinInterval = 4; // min interval between ping calls in sec\r\n\r\n        this.minimalAndroidVersion = \"4.4.2\";\r\n        this.isSite = !window.isSite ? false : true;\r\n        this.isMobile = false; // will be set in device ready event\r\n        this.isEmulator = !this.isSite; // will be set in device ready event\r\n        this.isQAMode = false;\r\n        this.pinSize = 4;\r\n        this.pinEnabled = false;\r\n        this.pinToken = null;\r\n        this.fractionalLimit = 4;\r\n        this.supportMerchantCustomerReceiptPrint = false;\r\n        this.timeZone = null;\r\n        this.posName = 'Cin7 Core POS';\r\n        this.posVendorId = 'PVWnkzmsHtHjMDEGKIOTGDMa8oEgmADfwjFDtPY2rJs';\r\n        this.supportLinklyMerchantCustomerReceiptPrint = false;\r\n        this.isLinklyPairWithTerminal = false;\r\n\r\n        this.requestTimeout = 60000; // 60 sec.\r\n\r\n        this.searchProductLimit = 100; // maximum number of items that could be returned from server\r\n        this.minSymbolsToStartSearch = 2; // if typed symbols are less than this value no search will take place\r\n        this.keyPressDelay = 500; // in ms. Inside this interval nothing happen - only waiting for new key press\r\n\r\n        this.registryPrefix = null;\r\n        this.registrySuffix = null;\r\n        this.dateFormat = null;\r\n        this.roundTo = null;\r\n        this.roundingRule = null;\r\n        this.loyaltyEarning = null;\r\n        this.currencyCulture = null;\r\n        this.blockSales = null;\r\n        this.lastPosChange = null;\r\n        this.cashManagementOparationReasons = [];\r\n        this.imagesX = 136;\r\n        this.imagesY = 68;\r\n        this.getStartedSuffix = '/Account/Register';\r\n        this.connectionURLSuffix = '/ExternalApi/POS';\r\n        this.imageURLSuffix = '/Product/GetImageRatio';\r\n        this.baseURL = buildConfiguration.dearAPIBaseUrl;\r\n        this.baseImageURL = buildConfiguration.dearAPIImageUrl;\r\n        console.log('baseURL:', this.baseURL);\r\n        console.log('baseImageURL:', this.baseImageURL);\r\n\r\n        this.enableSoftKbd = false;\r\n        //        this.enableSoftKbd = true;\r\n        this.isClover = false;\r\n        this.decimalPlaces = 0;\r\n        this.zeroTaxID = null;\r\n\r\n        this.banknoteDenominations = null;\r\n        this.allowNewCalculations = false;\r\n        this.autoLockAfter = null;\r\n\r\n        this.giftCardSettings = {};\r\n\r\n        this.hasCamera = false;\r\n\r\n       \r\n        if (buildConfiguration.configuration == \"Debug\") {\r\n            this.baseURL = window.localStorage.getItem('BaseURL');\r\n\r\n            if (!this.baseURL)\r\n                this.baseURL = 'https://127.0.0.1:444';\r\n        }\r\n        \r\n\r\n        console.log('base url: ' + JSON.stringify(buildConfiguration));\r\n        console.log('base url: ' + this.baseURL);\r\n\r\n        this.getStartedURL = this.baseURL + this.getStartedSuffix;\r\n        this.connectionURL = this.baseURL + this.connectionURLSuffix;\r\n\r\n        //this.isQAMode = function () {\r\n        //    return this.baseURL.indexOf('://inventory.dearsystems.com') < 0;// || buildConfiguration.configuration == 'Debug';\r\n        //};\r\n\r\n        this.setBaseURL = function (newUrl) {\r\n            if (newUrl) {\r\n                this.baseURL = newUrl;\r\n            }\r\n\r\n            var url = this.baseURL;\r\n            if (url.endsWith('/')) {\r\n                url = url.slice(0, url.length - 2);\r\n            }\r\n\r\n            /*if (!url.endsWith('ExternalApi/POS')) {\r\n                url += '/ExternalApi/POS';\r\n            }*/\r\n\r\n            window.localStorage.setItem('BaseURL', url);\r\n            this.connectionURL = url;\r\n            this.getStartedURL = this.baseURL + this.getStartedSuffix;\r\n            this.connectionURL = this.baseURL + this.connectionURLSuffix;\r\n\r\n            if (typeof this.pingFunction === 'function') {\r\n                this.pingFunction();\r\n            }\r\n        };\r\n        this.setImageURL = function () {\r\n\r\n        };\r\n\r\n        this.lastDearPosName = window.localStorage.getItem('LastDearPosName');\r\n        this.setLastDearPosName = function (n) {\r\n\r\n            window.localStorage.setItem('LastDearPosName', n);\r\n            this.lastDearPosName = n;\r\n        };\r\n\r\n        this.lastUserName = window.localStorage.getItem('LastUserName');\r\n        this.setLastUserName = function (n) {\r\n\r\n            window.localStorage.setItem('LastUserName', n);\r\n            this.lastUserName = n;\r\n        };\r\n\r\n        this.lastDisplayUserName = window.localStorage.getItem('LastDisplayUserName');\r\n        this.setLastDisplayUserName = function (n) {\r\n\r\n            window.localStorage.setItem('LastDisplayUserName', n);\r\n            this.lastDisplayUserName = n;\r\n        };\r\n\r\n        this.setPingFunction = function (func) {\r\n            this.pingFunction = func;\r\n        };\r\n\r\n        this.isOnline = true;\r\n\r\n        this.setNetworkMode = function (_isOnline, pingResponse) {\r\n            if (this.isSite === true) {\r\n                var old = this.isOnline;\r\n                this.isOnline = pingResponse;\r\n                if (old !== this.isOnline)\r\n                    $rootScope.$broadcast('config.ConnectionStateChanged', this.isOnline);\r\n\r\n                console.log('inet state was changed to: ', this.isOnline ? 'online' : 'offline');\r\n                var THIS = this;\r\n                if (!this.isOnline)\r\n                    $timeout(function () { THIS.pingFunction(); }, 5000);\r\n            } else {\r\n                this.hasNetworkConnection = _isOnline;\r\n                if (typeof pingResponse === \"undefined\" && _isOnline === true && typeof (this.pingFunction) == 'function') {\r\n                    this.pingFunction();\r\n                } else {\r\n                    var changeState = this.isOnline;\r\n                    this.isOnline = _isOnline && pingResponse;\r\n\r\n                    changeState = changeState !== this.isOnline;\r\n                    if (changeState === true) {\r\n                        $rootScope.$broadcast('config.ConnectionStateChanged', this.isOnline);\r\n                        console.log('inet state was changed to: ', this.isOnline ? 'online' : 'offline');\r\n                    }\r\n                    if (this.isOnline === true && this.applicationKey) {\r\n                        //var proccessedFunctions = [];\r\n                        //callCallbackFunctions(proccessedFunctions, true);\r\n                        this.execCallbackFunctions(this.dataSendCount);\r\n                    }\r\n                }\r\n            }\r\n        };\r\n\r\n        this.addCallbackFunction = function (func) {\r\n            callbackFunctions.push(func);\r\n        };\r\n\r\n        this.updateInProcess = false;\r\n        this.updateInProcessResult = null;\r\n\r\n        this.execCallbackFunctions = function () {\r\n            var THIS = this;\r\n            if (this.updateInProcess) return this.updateInProcessResult;\r\n\r\n            this.updateInProcess = true;\r\n            //        var proccessedFunctions = [];\r\n            //        callCallbackFunctions(proccessedFunctions, true);\r\n            var result = callCallbackFunctions(this.dataSendCount);\r\n\r\n            result.finally(function () {\r\n                THIS.updateInProcess = false;\r\n                THIS.updateInProcessResult = null;\r\n            });\r\n\r\n            this.updateInProcessResult = result;\r\n            return result;\r\n        };\r\n\r\n        function callCallbackFunctions(dataSendCount) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(true);\r\n            var pr = deferred.promise;\r\n\r\n            if (callbackFunctions.length > 0) {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('config.TransmitStateChanged', 'transmit');\r\n                });\r\n\r\n                $.each(callbackFunctions, function (idx, f) {\r\n                    pr = pr.finally(function (res) { return f(dataSendCount); });\r\n                });\r\n\r\n                pr = pr.finally(function () {\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('config.TransmitStateChanged', false);\r\n                    });\r\n                });\r\n            }\r\n\r\n            return pr;\r\n        }\r\n\r\n        this.updateCardPaymentIDsFromOutlet = function (obj) {\r\n            if (this.useTyro === true && obj.TyroMerchantID)\r\n                this.tyroMerchantID = obj.TyroMerchantID;\r\n\r\n            if (this.useTriPOS === true) {\r\n                if (obj.TriPOSAccountID)\r\n                    this.triPOSAccountID = obj.TriPOSAccountID;\r\n                if (obj.TriPOSAcceptorID)\r\n                    this.triPOSAcceptorID = obj.TriPOSAcceptorID;\r\n                if (obj.TriPOSAccountToken)\r\n                    this.triPOSAccountToken = obj.TriPOSAccountToken;\r\n            }\r\n\r\n            if (this.useLinkly === true) {\r\n                if (obj.LinklyUserName)\r\n                    this.linklyUserName = obj.LinklyUserName;\r\n                if (obj.LinklyPassword)\r\n                    this.linklyPassword = obj.LinklyPassword;\r\n            }\r\n\r\n            if (this.useWindcave && obj.WindcaveStation) {\r\n                this.windcaveStation = obj.WindcaveStation;\r\n            }\r\n        };\r\n\r\n        this.lastOutlet = window.localStorage.getItem('LastOutlet');\r\n        this.lastOutletID = window.localStorage.getItem('LastOutletID');\r\n        this.lastECSMappingOutletID = window.localStorage.getItem('LastECSMappingOutletID');\r\n        this.lastOutletTax = window.localStorage.getItem('LastOutletTax');\r\n        this.lastSquareLocationID = window.localStorage.getItem('LastSquareLocationID');\r\n        this.lastSquareIntegrationID = window.localStorage.getItem('LastSquareIntegrationID');\r\n        this.lastPaymentSenseURL = window.localStorage.getItem('LastPaymentSenseURL');\r\n        this.lastPaymentSenseAPIKey = window.localStorage.getItem('LastPaymentSenseAPIKey');\r\n        this.lastSurchargeTax = window.localStorage.getItem('LastSurchargeTax');\r\n        var info = window.localStorage.getItem('LastOutletInfo');\r\n        if (info && typeof info === 'string') {\r\n            this.lastOutletInfo = JSON.parse(info);\r\n        }\r\n\r\n        this.setLastOutlet = function (outletConfig) {\r\n            if (this.loginChanges === 'full') {\r\n                if (this.lastOutletID === outletConfig.PosOutletID &&\r\n                    this.lastECSMappingOutletID === outletConfig.EcsLocationMappingID)\r\n                    this.loginChanges = 'user';\r\n            }\r\n\r\n            this.lastOutlet = outletConfig.OutletName;\r\n            this.lastOutletID = outletConfig.PosOutletID;\r\n            this.lastECSMappingOutletID = outletConfig.EcsLocationMappingID;\r\n            this.lastOutletTax = JSON.stringify(outletConfig.Tax);\r\n            this.lastSquareLocationID = outletConfig.SquareLocationID;\r\n            this.lastSquareIntegrationID = outletConfig.SquareIntegrationID;\r\n            this.lastPaymentSenseURL = outletConfig.PaymentSenseURL;\r\n            this.lastPaymentSenseAPIKey = outletConfig.PaymentSenseAPIKey;\r\n            this.lastSurchargeTax = JSON.stringify(outletConfig.SurchargeTax);\r\n            this.lastOutletInfo = outletConfig.Info ? outletConfig.Info : {};\r\n\r\n            this.customizedSecondScreenUI = outletConfig.CustomizedCustomerDisplayUI;\r\n            this.secondScreenBackground = outletConfig.CustomerDisplayBackground ? '#' + outletConfig.CustomerDisplayBackground : null;\r\n            this.secondScreenLogoUrl =  outletConfig.CustomerDisplayLogo ? `${this.baseURL}/DearPos/GetImage?imageID=${outletConfig.CustomerDisplayLogo}` : null;\r\n\r\n            window.localStorage.setItem('LastOutlet', outletConfig.OutletName);\r\n            window.localStorage.setItem('LastOutletID', outletConfig.PosOutletID);\r\n            window.localStorage.setItem('LastECSMappingOutletID', outletConfig.EcsLocationMappingID);\r\n            window.localStorage.setItem('LastOutletTax', this.lastOutletTax);\r\n            window.localStorage.setItem('LastSquareLocationID', outletConfig.SquareLocationID);\r\n            window.localStorage.setItem('LastSquareIntegrationID', outletConfig.SquareIntegrationID);\r\n            window.localStorage.setItem('LastPaymentSenseURL', outletConfig.PaymentSenseURL);\r\n            window.localStorage.setItem('LastPaymentSenseAPIKey', outletConfig.PaymentSenseAPIKey);\r\n            window.localStorage.setItem('LastSurchargeTax', this.lastSurchargeTax);\r\n            window.localStorage.setItem('LastOutletInfo', JSON.stringify(this.lastOutletInfo));\r\n            window.localStorage.setItem('LastCustomizedSecondScreenUI', this.customizedSecondScreenUI);  \r\n            window.localStorage.setItem('LastSecondScreenBackground', this.secondScreenBackground);  \r\n            window.localStorage.setItem('LastSecondScreenLogoUrl', this.secondScreenLogoUrl);  \r\n        };\r\n\r\n        this.setCurrencyCulture = function (culture) {\r\n            window.localStorage.setItem('currencyCulture', culture);\r\n        };\r\n\r\n        this.lastRegistry = window.localStorage.getItem('LastRegistry');\r\n        this.lastRegistryID = window.localStorage.getItem('LastRegistryID');\r\n        this.cashRegistryPaymentProcessorID = window.localStorage.getItem('CashRegistryPaymentProcessorID');\r\n        this.receiptID = window.localStorage.getItem('receiptID');\r\n        this.labelID = window.localStorage.getItem('labelID');\r\n        this.quickKeyTemplateID = window.localStorage.getItem('quickKeyTemplateID');\r\n        this.quickKeyData = window.localStorage.getItem('quickKeyData');\r\n        this.tyroTerminalID = window.localStorage.getItem('tyroTerminalID');\r\n        this.triPOSLaneID = window.localStorage.getItem('triPOSLaneID');\r\n        this.catalogTilesSize = window.localStorage.getItem('catalogTilesSize');\r\n        this.catalogTilesVisibility = window.localStorage.getItem('catalogTilesVisibility');\r\n        this.showProductAvailability = window.localStorage.getItem('showProductAvailability');\r\n        this.windcaveStation = window.localStorage.getItem('windcaveStation');\r\n\r\n        this.saveReceiptTemplate = function (tpl) {\r\n            window.localStorage.setItem('receiptTemplate', tpl);\r\n        };\r\n\r\n        this.loadReceiptTemplate = function () {\r\n            return window.localStorage.getItem('receiptTemplate');\r\n        };\r\n\r\n        this.saveLabelTemplate = function (tpl) {\r\n            window.localStorage.setItem('labelTemplate', tpl);\r\n        };\r\n\r\n        this.loadLabelTemplate = function () {\r\n            return window.localStorage.getItem('labelTemplate');\r\n        };\r\n\r\n        this.setLabelTemplate = function (labelID) {\r\n            this.labelID = labelID;\r\n            window.localStorage.setItem('labelID', labelID);\r\n        };\r\n\r\n        this.setLastRegistry = function (registryName, id, cashRegistryPaymentProcessorId, receiptID, registryPrefix, registrySuffix,\r\n            quickKeyTemplateID, quickKeyData, tyroTerminalID, triPOSLaneID, catalogTilesSize, catalogTilesVisibility,\r\n            showProductAvailability, windcaveStation) {\r\n            this.lastRegistry = registryName;\r\n            this.lastRegistryID = id;\r\n            this.cashRegistryPaymentProcessorID = cashRegistryPaymentProcessorId;\r\n            this.receiptID = receiptID;\r\n            this.registryPrefix = registryPrefix;\r\n            this.registrySuffix = registrySuffix;\r\n            this.quickKeyTemplateID = quickKeyTemplateID;\r\n            this.quickKeyData = quickKeyData;\r\n            this.tyroTerminalID = tyroTerminalID;\r\n            this.triPOSLaneID = triPOSLaneID;\r\n            this.catalogTilesSize = catalogTilesSize;\r\n            this.catalogTilesVisibility = catalogTilesVisibility;\r\n            this.showProductAvailability = showProductAvailability;\r\n            this.windcaveStation = windcaveStation;\r\n            window.localStorage.setItem('LastRegistry', registryName);\r\n            window.localStorage.setItem('LastRegistryID', id);\r\n            window.localStorage.setItem('CashRegistryPaymentProcessorID', cashRegistryPaymentProcessorId);\r\n            window.localStorage.setItem('receiptID', receiptID);\r\n            window.localStorage.setItem('quickKeyTemplateID', quickKeyTemplateID);\r\n            window.localStorage.setItem('quickKeyData', quickKeyData);\r\n            window.localStorage.setItem('tyroTerminalID', tyroTerminalID);\r\n            window.localStorage.setItem('triPOSLaneID', triPOSLaneID);\r\n            window.localStorage.setItem('catalogTilesSize', catalogTilesSize);\r\n            window.localStorage.setItem('catalogTilesVisibility', catalogTilesVisibility);\r\n            window.localStorage.setItem('showProductAvailability', showProductAvailability);\r\n            window.localStorage.setItem('windcaveStation', windcaveStation);\r\n        };\r\n\r\n        this.setPrinterSettings = function (prn) {\r\n            console.log(prn);\r\n            window.localStorage.setItem('PrinterSettings', JSON.stringify(prn));\r\n        };\r\n\r\n        this.setLabelPrinterSettings = function (prn) {\r\n            console.log(prn);\r\n            window.localStorage.setItem('LabelPrinterSettings', JSON.stringify(prn));\r\n        };\r\n\r\n        this.getPrinterSystems = function () {\r\n            var res = [{ name: 'Star Micronics', value: 'star', canSelectModel: true,\r\n            canDiscover: true }];\r\n            res.push({ name: 'Epson', value: 'epson', canSelectModel: false,\r\n            canDiscover: false });\r\n            if (this.isClover === true)\r\n                res.push({ name: 'Clover', value: 'clover', canSelectModel: false,\r\n                canDiscover: true });\r\n\r\n            res.push({ name: 'Embedded Printing', value: 'embedded', canSelectModel: false,\r\n            canDiscover: true });\r\n            return res;\r\n        };\r\n\r\n        this.getLabelPrinterSystems = function () {\r\n            var res = [{ name: 'Dymo', value: 'dymo' }];\r\n            /*\r\n            if (this.isClover === true)\r\n                res.push({ name: 'Clover', value: 'clover' });\r\n            */\r\n            return res;\r\n        };\r\n\r\n        this.getPrinterSettings = function (force) {\r\n            var v = window.localStorage.getItem('PrinterSettings');\r\n            var res = {};\r\n\r\n            if (!v) {\r\n                if (!force)\r\n                    return null;\r\n            }\r\n            else\r\n                res = JSON.parse(v);\r\n\r\n            if (!res.printerWidthCode)\r\n                res.printerWidthCode = 3;\r\n\r\n            if (!res.printerWidthPoints)\r\n                res.printerWidthPoints = 576;\r\n\r\n            if (!res.simulatorMode)\r\n                res.simulatorMode = false;\r\n\r\n            if (!res.printSystem)\r\n                res.printSystem = 'star';\r\n\r\n            if(!res.printerModel) {\r\n                res.printerModel = '';\r\n            }\r\n\r\n            if(res.printerModel && res.printerModel === \"BSC10\" && res.printSystem === 'star') {\r\n                res.printerWidthPoints = 512; //its another type of paper, for ECS POS Printers\r\n            }\r\n\r\n            if (res.printSystem == 'clover' && !this.isClover) {\r\n                //res.printSystem = 'star';\r\n                //res.printerName = 'Star Micronics';\r\n            }\r\n\r\n            if (res.printSystem === 'telpo') {\r\n                res.printSystem = '';\r\n                res.printerName = '';\r\n                res.printerModel = '';\r\n                this.setPrinterSettings(res);\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        this.getLabelPrinterSettings = function (force) {\r\n            var v = window.localStorage.getItem('LabelPrinterSettings');\r\n            var res = {};\r\n\r\n            if (!v) {\r\n                if (!force)\r\n                    return null;\r\n            }\r\n            else\r\n                res = JSON.parse(v);\r\n\r\n            if (!res.labelPrinterWidthCode)\r\n                res.labelPrinterWidthCode = 1;\r\n\r\n            if (!res.labelPrinterWidthPointsX)\r\n                res.labelPrinterWidthPointsX = 420;\r\n\r\n            if (!res.labelPrinterWidthPointsY)\r\n                res.labelPrinterWidthPointsY = 130;\r\n\r\n            if (!res.labelW)\r\n                res.labelW = 420;\r\n\r\n            if (!res.labelH)\r\n                res.labelH = 130;\r\n\r\n            if (!res.simulatorMode)\r\n                res.simulatorMode = false;\r\n\r\n            if (res.labelPrintSystem === 'telpo') {\r\n                res.labelPrintSystem = '';\r\n                res.labelPrinterName = '';\r\n                this.setLabelPrinterSettings(res);\r\n            }\r\n            /*\r\n            if (!res.labelPrintSystem)\r\n                res.labelPrintSystem = 'star';\r\n    \r\n            if (res.labelPrintSystem == 'clover' && !this.isClover) {\r\n                //res.printSystem = 'star';\r\n                //res.printerName = 'Star Micronics';\r\n            }\r\n            */\r\n\r\n            return res;\r\n        };\r\n\r\n        this.getScannerSettings = function () {\r\n            var v = window.localStorage.getItem('ScannerSettings');\r\n            let res = {};\r\n            if (!v)\r\n                res = {};\r\n            else\r\n                res = JSON.parse(v);\r\n\r\n            // by default set to true\r\n            if (!res.hasOwnProperty(\"enableSoftKbd\"))\r\n                //            res.enableSoftKbd = true;\r\n                res.enableSoftKbd = false;\r\n\r\n            if (!res.hasOwnProperty(\"enableCameraScan\"))\r\n                res.enableCameraScan = true;\r\n\r\n            return res;\r\n        };\r\n\r\n        this.setScannerSettings = function (cfg) {\r\n            window.localStorage.setItem('ScannerSettings', JSON.stringify(cfg));\r\n        };\r\n\r\n        this.setCardPaymentSettings = function (cfg) {\r\n            window.localStorage.setItem('CardPaymentSettings', JSON.stringify(cfg));\r\n        };\r\n\r\n        this.getCardPaymentSettings = function () {\r\n            var v = window.localStorage.getItem('CardPaymentSettings');\r\n            let res = {};\r\n            if (!v)\r\n                res = {};\r\n            else\r\n                res = JSON.parse(v);\r\n\r\n            // by default set to true\r\n            if (!res.hasOwnProperty(\"providerKey\")) {\r\n                res.providerKey = 'emptyProvider';\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        this.isAdmin = function () {\r\n            return this.role == \"Administrator\";\r\n        };\r\n\r\n        this.isManagerAndHigher = function () {\r\n            return this.role == \"Manager\" ||\r\n                this.role == \"Administrator\";\r\n        };\r\n\r\n        this.isAdminAndConnected = function () {\r\n            return this.isAdmin() && this.isOnline;\r\n        };\r\n\r\n        this.isManagerAndHigherAndConnected = function () {\r\n            return this.isManagerAndHigher() && this.isOnline;\r\n        };\r\n\r\n        this.getCardPaymentProcessor = function () {\r\n            var lst = this.paymentProcessors.filter(function (el) { return el.loweredPaymentMethodName === 'credit card'; });\r\n            if (lst.length > 0)\r\n                return lst[0];\r\n        };\r\n        this.getPaymentMethods = function (destScope) {\r\n            destScope.customPaymentMethods = [];\r\n\r\n            destScope.cashRegistryPaymentProcessorID = this.cashRegistryPaymentProcessorID;\r\n            $.each(this.paymentProcessors, function (idx, el) {\r\n                switch (el.loweredPaymentMethodName) {\r\n                    case 'store credits':\r\n                        destScope.storeCreditsPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n                    case 'credit card':\r\n                        destScope.creditCardPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n                    case 'layby':\r\n                        destScope.laybyPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n                    case 'gift card':\r\n                        destScope.giftCardPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n                    case 'loyalty':\r\n                        destScope.loyaltyPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n\r\n                    default:\r\n                        if (el.isCustom === true) {\r\n                            destScope.customPaymentMethods.push(el);\r\n                        }\r\n                        break;\r\n                }\r\n            });\r\n        };\r\n\r\n        this.isGiftCardEnabled = function () {\r\n            return !!this.giftCardSettings && this.giftCardSettings.IsGiftCardEnabled === true;\r\n        };\r\n\r\n        this.isGiftCardExpirationDateEnabled = function () {\r\n            return this.isGiftCardEnabled() && this.giftCardSettings.CanGiftCardExpire === true;\r\n        };\r\n\r\n        this.isGiftCardRefundable = function () {\r\n            return this.isGiftCardEnabled() && this.giftCardSettings.CanGiftCardRefund === true;\r\n        };\r\n\r\n        this.getCatalogPageSize = function () {\r\n            if (!!this.catalogTilesSize && this.catalogTilesSize.length > 0) {\r\n                var p = this.catalogTilesSize.split('x');\r\n                return parseInt(p[0]) * parseInt(p[1]);\r\n            }\r\n            else {\r\n                return 9;\r\n            }\r\n        };\r\n\r\n        this.getCatalogPageRows = function () {\r\n            if (!!this.catalogTilesSize && this.catalogTilesSize.length > 0) {\r\n                var p = this.catalogTilesSize.split('x');\r\n                return parseInt(p[0]);\r\n            }\r\n            else {\r\n                return 3;\r\n            }\r\n        };\r\n        this.getCatalogPageCols = function () {\r\n            if (!!this.catalogTilesSize && this.catalogTilesSize.length > 0) {\r\n                var p = this.catalogTilesSize.split('x');\r\n                return parseInt(p[1]);\r\n            }\r\n            else {\r\n                return 3;\r\n            }\r\n        };\r\n        this.getCatalogTilesVisibility = function () {\r\n            if (!!this.catalogTilesVisibility && this.catalogTilesVisibility.length > 0) {\r\n                return this.catalogTilesVisibility;\r\n            }\r\n            else {\r\n                return 'image_text';\r\n            }\r\n        };\r\n        this.getShowProductAvailability = function () {\r\n            if (this.showProductAvailability == false) {\r\n                return false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        /* This method should be use in Web vesion only */\r\n        /* Save next registry number in local storage */\r\n        this.setNextSequenceNumber = function (v) {\r\n            window.localStorage.setItem('registrySequenceNumber', v);\r\n        };\r\n\r\n        /* This method should be use in Web vesion only */\r\n        /* Return next registry number and save new value in local storage */\r\n        this.getNextSequenceNumber = function (helperService) {\r\n            var v = window.localStorage.getItem('registrySequenceNumber');\r\n            var intV = parseInt(v);\r\n            window.localStorage.setItem('registrySequenceNumber', helperService.pad(intV + 1, 6));\r\n            return v;\r\n        };\r\n\r\n        this.getTriPOSUrl = function () {\r\n            return this.isQAMode ? 'https://triposcert.vantiv.com/api/v1' : 'https://tripos.vantiv.com/api/v1';\r\n        };\r\n\r\n        this.getTriPOSLaneUrl = function () {\r\n            return this.isQAMode ? 'https://triposcert.vantiv.com/cloudapi/v1' : 'https://tripos.vantiv.com/cloudapi/v1';\r\n        };\r\n\r\n        this.isMobileDesign = false;\r\n\r\n    }]);\r\n\r\nexport default 'configService';","/*\r\n Localized set of constants\r\n*/\r\nimport { events } from './eventConstants';\r\n\r\nangular.module('services').service('constants', ['gettextCatalog', function (gettextCatalog) {\r\n\r\n    var UpdateLanguage = function () {\r\n        return {\r\n            constHomeViewName: gettextCatalog.getString(\"Home\"),\r\n            constSellViewName: gettextCatalog.getString(\"Register\"),\r\n            constSessionViewName: gettextCatalog.getString(\"Session\"),\r\n            constOfflineSalesViewName: gettextCatalog.getString(\"Offline sales\"),\r\n            constSalesHistoryViewName: gettextCatalog.getString(\"Sales history\"),\r\n            constClickAndCollectViewName: gettextCatalog.getString(\"Click & collect\"),\r\n            constCloseRegistryViewName: gettextCatalog.getString(\"Close register\"),\r\n            constCashManagementViewName: gettextCatalog.getString(\"Cash management\"),\r\n            constSalesParkedViewName: gettextCatalog.getString(\"Parked sales\"),\r\n            constProductsViewName: gettextCatalog.getString(\"Products\"),\r\n            constCustomersViewName: gettextCatalog.getString(\"Customers\"),\r\n            constUserManagementViewName: gettextCatalog.getString(\"User management\"),\r\n            constDashboardViewName: gettextCatalog.getString(\"Dashboard\"),\r\n            constProductManagementViewName: gettextCatalog.getString(\"Product management\"),\r\n            constSetupViewName: gettextCatalog.getString(\"Setup\"),\r\n            constPrinterSetupViewName: gettextCatalog.getString(\"Printer\"),\r\n            constLabelPrinterSetupViewName: gettextCatalog.getString(\"Label printer\"),\r\n            constInventoryViewName: gettextCatalog.getString(\"Inventory\"),\r\n            constInTransitViewName: gettextCatalog.getString(\"In transit\"),\r\n            constReportsViewName: gettextCatalog.getString(\"Reports\"),\r\n            constPaymentTypeSummaryViewName: gettextCatalog.getString(\"Payment Type Summary\"),\r\n            constProductPerformanceViewName: gettextCatalog.getString(\"Product Performance\"),\r\n            constSalesSummaryViewName: gettextCatalog.getString(\"Sales Summary\"),\r\n            constGiftCardViewName: gettextCatalog.getString(\"Gift card\"),\r\n            constDeliveryViewName: gettextCatalog.getString(\"Scheduled deliveries\"),\r\n        };\r\n    };\r\n\r\n    return {\r\n        UpdateLanguageFunction: UpdateLanguage,\r\n        constHomeViewName: gettextCatalog.getString(\"Home\"),\r\n        constHomeSectionName: 'home',\r\n\r\n        constSessionSectionName: 'session',\r\n        constSessionViewName: gettextCatalog.getString(\"Session\"),\r\n\r\n        constInventorySectionName: 'inventory',\r\n        constInventoryViewName: gettextCatalog.getString(\"Inventory\"),\r\n\r\n        constReportsSectionName: 'reports',\r\n        constReportsViewName: gettextCatalog.getString(\"Reports\"),\r\n\r\n        constSellSectionName: 'sales',\r\n        constSellViewName: gettextCatalog.getString(\"Register\"),\r\n        constOfflineSalesViewName: gettextCatalog.getString(\"Offline sales\"),\r\n        constSalesHistoryViewName: gettextCatalog.getString(\"Sales history\"),\r\n        constClickAndCollectViewName: gettextCatalog.getString(\"Click & collect\"),\r\n        constDeliveryViewName: gettextCatalog.getString(\"Scheduled deliveries\"),\r\n        constCloseRegistryViewName: gettextCatalog.getString(\"Close register\"),\r\n        constSalesParkedViewName: gettextCatalog.getString(\"Parked sales\"),\r\n\r\n        constProductsSectionName: 'products',\r\n        constProductsViewName: gettextCatalog.getString(\"Products\"),\r\n\r\n        constCustomersSectionName: 'customers',\r\n        constCustomersViewName: gettextCatalog.getString(\"Customers\"),\r\n\r\n        constUsersSectionName: 'users',\r\n        constUserManagementViewName: gettextCatalog.getString(\"User management\"),\r\n\r\n        constDashboardSectionName: 'dashboard',\r\n        constDashboardViewName: gettextCatalog.getString(\"Dashboard\"),\r\n\r\n        constProductSectionName: 'products',\r\n        constProductManagementViewName: gettextCatalog.getString(\"Product management\"),\r\n\r\n        constSetupSectionName: 'setup',\r\n        constSetupViewName: gettextCatalog.getString(\"Setup\"),\r\n        constPrinterSetupViewName: gettextCatalog.getString(\"Printer\"),\r\n        constLabelPrinterSetupViewName: gettextCatalog.getString(\"Label printer\"),\r\n\r\n        pageSize: 9,\r\n        customerSearchLimit: 10,\r\n\r\n        parkStatuses: {\r\n            parked: 'Parked',\r\n            layby: 'Layby',\r\n            onaccount: 'On Account',\r\n            pending: 'Pending'\r\n        },\r\n\r\n        minScreenHeight: 320,\r\n        newGuid: '00000000-0000-0000-0000-000000000000',\r\n        backofficePayment: 'BackofficePayment',\r\n\r\n        newSaleTotalCountName: 'newSaleTotal',\r\n        newSaleCountName: 'newSale',\r\n        giftCardSaleCountName: 'giftCardSales',\r\n\r\n        newOnAccountCountName: 'newOnAccount',\r\n        newLaybyCountName: 'newLayby',\r\n        newTaxCountName: 'newSaleTax',\r\n        newSaleDiscountName: 'newSaleDiscount',\r\n        refundTotalName: 'refundTotal',\r\n        roundingTotalName: 'roundingTotal',\r\n        newPaymentCountName: 'newPayment',\r\n        maxAllowedPrice: 999999999999,\r\n        maxAllowedTotalPrice: 99000000000000000,\r\n        customKeyboardMaxLenth: 12,\r\n        playStoreAppLink: \"https://play.google.com/store/apps/details?id=\",\r\n        appleStoreAppLink: \"https://apps.apple.com/app/\",\r\n\r\n        // event/status constants\r\n        events: events,\r\n    }\r\n}]);","angular.module('services').service('csvService', ['$rootScope', '$q',\r\n    function ($rootScope, $q) {\r\n\r\n        this.escapeString = function (s) {\r\n            if (!s || typeof (s) !== 'string' || s.length == 0)\r\n                return s;\r\n\r\n            var b = s.replace(/\"/g, '\"\"');\r\n            return b;\r\n        };\r\n\r\n        this.exportTableToCSV = function (tableSelector) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            var csv = [];\r\n            $(tableSelector).find(\"tr\").each(function () {\r\n                var row = [];\r\n                var ignore = $(this).attr(\"data-ignore\");\r\n                if (ignore == null) {\r\n                    $(this).find(\"td, th\").each(function () {\r\n                        var col = $(this);\r\n                        var val = col.attr(\"data-value\");\r\n\r\n                        var isAsIs = val != null && val != undefined;\r\n                        var txt = isAsIs ? val : col.text();\r\n                        if (!isAsIs && !!txt)\r\n                            txt = '\"' + THIS.escapeString(txt.trim()) + '\"';\r\n\r\n                        row.push(txt);\r\n                    });\r\n\r\n                    csv.push(row.join(\",\"));\r\n                }\r\n            });\r\n\r\n            deferred.resolve(csv.join(\"\\r\\n\"));\r\n            return deferred.promise;\r\n        }\r\n\r\n        this.exportNewTableToCSV = function (tableSelector) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            var csv = [];\r\n            $(tableSelector).find(\".grid-content-table__row\").each(function () {\r\n                var row = [];\r\n                var ignore = $(this).attr(\"data-ignore\");\r\n                if (ignore == null) {\r\n                    $(this).find(\".grid-content-table__col\").each(function () {\r\n                        var col = $(this);\r\n                        var val = col.attr(\"data-value\");\r\n\r\n                        var isAsIs = val != null && val != undefined;\r\n                        var txt = isAsIs ? val : col.text();\r\n                        if (!isAsIs && !!txt)\r\n                            txt = '\"' + THIS.escapeString(txt.trim()) + '\"';\r\n\r\n                        row.push(txt);\r\n                    });\r\n\r\n                    csv.push(row.join(\",\"));\r\n                }\r\n            });\r\n\r\n            deferred.resolve(csv.join(\"\\r\\n\"));\r\n            return deferred.promise;\r\n        }\r\n\r\n        this.downloadCSV = function (csv, filename) {\r\n            var deferred = $q.defer();\r\n\r\n            var csvFile;\r\n            var downloadLink;\r\n\r\n            // CSV file\r\n            csvFile = new Blob([csv], { type: \"plain/text\" });\r\n\r\n            //hint for IE\r\n            if (navigator.msSaveBlob) {\r\n                navigator.msSaveBlob(csvFile, filename);\r\n            }else{\r\n                \r\n                // Download link\r\n                downloadLink = document.createElement(\"a\");\r\n\r\n                // File name\r\n                downloadLink.download = filename;\r\n\r\n                // Create a link to the file\r\n                downloadLink.href = window.URL.createObjectURL(csvFile);\r\n\r\n                // Hide download link\r\n                downloadLink.style.display = \"none\";\r\n\r\n                // Add the link to DOM\r\n                document.body.appendChild(downloadLink);\r\n\r\n                // Click download link\r\n                downloadLink.click();\r\n            }\r\n\r\n            deferred.resolve(filename);\r\n            return deferred.promise;\r\n        }\r\n\r\n        this.writeCSVToFile = function (csv, filename) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            var nativeURL = null;\r\n            window.resolveLocalFileSystemURL(device.platform === 'Android' ? cordova.file.externalDataDirectory : cordova.file.documentsDirectory, \r\n             function (dir) {\r\n                 dir.getFile(filename, { create: true, exclusive: false },\r\n                   function (file) {\r\n                       if (file == null) {\r\n                           deferred.reject(\"Can't create file\");\r\n                       }\r\n\r\n                       nativeURL = file.nativeURL;\r\n\r\n                       file.createWriter(function (fileWriter) {\r\n                           fileWriter.onwriteend = function () {\r\n                               console.log(\"Successful file write...\");\r\n                               deferred.resolve(nativeURL);\r\n                           };\r\n\r\n                           fileWriter.onerror = function (e) {\r\n                               console.log(\"Failed file write: \" + e.toString());\r\n                               deferred.reject(e);\r\n                           };\r\n\r\n                           fileWriter.seek(0);\r\n\r\n                           var blob = new Blob([csv], { type: \"plain/text\" });\r\n\r\n                           fileWriter.write(blob);\r\n                       },\r\n                       function (err) {\r\n                           deferred.reject(err);\r\n                       });\r\n                   },\r\n                   function (err) {\r\n                       deferred.reject(err);\r\n                   });\r\n             });\r\n\r\n            return deferred.promise;\r\n        }\r\n\r\n    }]);","angular.module('services').service('customerService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', '$interval', 'liveSearchService', 'jsStoreProvider','helperService','$timeout', 'deviceInfo',\r\n    function ($q, configService, remoteRequestProvider, localDBProvider, $interval, liveSearchService, jsStoreProvider, helperService, $timeout, deviceInfo) {\r\n\r\n        this.hybridModeLoadOnline = false;\r\n\r\n        this.stopLoadCheck = null;\r\n        this.startCustomersAutoUpdate = function () {\r\n\r\n            if (!this.stopLoadCheck) {\r\n                this.stopLoadCheck = $interval(function (p) {\r\n                    if (configService.isOnline) {\r\n                        // refrech data\r\n                        var injector = angular.element('body').injector();\r\n                        var me = injector.get('customerService');\r\n\r\n                       // $.blockUI();\r\n\r\n                        return me.loadCustomersAll(false);\r\n                         //   .finally(function () { $.unblockUI(); });\r\n                    }\r\n                }, 60000 * 5);\r\n            }\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadOnline = function () {\r\n            return configService.loadCustomersMode === 1 ||\r\n                configService.loadCustomersMode === 3 && this.hybridModeLoadOnline === true;\r\n        }\r\n\r\n        this.loadMode = function() {\r\n            return configService.loadCustomersMode;\r\n        }\r\n\r\n        this._getLoadCustomerProvider = function(forceOnline) {\r\n            // in online load mode we do not have any data so if device if offline error will be throwed\r\n            if (!configService.isOnline && (this.loadOnline() || forceOnline)) {\r\n                return remoteRequestProvider;\r\n            }\r\n            return (configService.isSite && !window.isSupported)\r\n                ? remoteRequestProvider\r\n                : configService.isOnline\r\n                    ? remoteRequestProvider\r\n                    : configService.isSite || deviceInfo.isSimulator\r\n                        ? jsStoreProvider\r\n                        : localDBProvider;\r\n        }\r\n\r\n        // make search\r\n        this.loadCustomers = function (text, page, limit, filters, forceOnline = false) {\r\n            if(filters && !!filters.SaleBarcode) { // this request by receipt barcode and we should find sale and get customer from that sale\r\n                forceOnline = true;\r\n            }\r\n\r\n            var provider = this._getLoadCustomerProvider(forceOnline);\r\n            var isOnlineOnStart = (configService.isSite && !window.isSupported) ? false : configService.isOnline && this.loadOnline();\r\n\r\n            var pr = provider.loadCustomers(text, page, limit, filters).then(function (res) {\r\n                console.log(provider === remoteRequestProvider ? 'loading data online' : 'loading data locally')\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            }).catch(function (err) {\r\n                if (!isOnlineOnStart)\r\n                    throw err;\r\n\r\n                if (err.status !== -1)\r\n                    throw err;\r\n                else {\r\n                    var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                    return provider.loadCustomers(text, page, limit, filters).then(function (res) {\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(res.data);\r\n                        return deferred.promise;\r\n                    });\r\n                }\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        // TODO\r\n        this.getCustomer = function (Id) {\r\n            // var provider = this._getLoadCustomerProvider();\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.getCustomer(Id).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.createCustomer = function (customer) {\r\n\r\n            var pr = remoteRequestProvider.createCustomer(customer).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.loadCountries = function () {\r\n            return remoteRequestProvider.loadCountries().then(function (res) {\r\n                return helperService.resolvePromise(res);\r\n            }).catch(function (err) {\r\n                return helperService.rejectPromise(err);\r\n            });\r\n        }\r\n\r\n        this.updateCustomer = function (customer) {\r\n            // remove unneeded fields\r\n            var cp = JSON.parse(JSON.stringify(customer));\r\n            delete cp.StoreCredits;\r\n            delete cp.LoyaltyPoints;\r\n            delete cp.Currency;\r\n            delete cp.Discount;\r\n            delete cp.TaxRule;\r\n            delete cp.AccountReceivable;\r\n            delete cp.RevenueAccount;\r\n            delete cp.PriceTier;\r\n            delete cp.AdditionalAttribute1;\r\n            delete cp.AdditionalAttribute2;\r\n            delete cp.AdditionalAttribute3;\r\n            delete cp.AdditionalAttribute4;\r\n            delete cp.AdditionalAttribute5;\r\n            delete cp.AdditionalAttribute6;\r\n            delete cp.AdditionalAttribute7;\r\n            delete cp.AdditionalAttribute8;\r\n            delete cp.AdditionalAttribute9;\r\n            delete cp.AdditionalAttribute10;\r\n            delete cp.Tags;\r\n            delete cp.CreditLimit;\r\n            delete cp.Account;\r\n            delete cp.Comments;\r\n\r\n            var pr = remoteRequestProvider.updateCustomer(cp).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.removeCustomer = function (customerID) {\r\n\r\n            var pr = remoteRequestProvider.removeCustomer(customerID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        // critical section to escape from duplication\r\n        this.lockCustomersUpdate = false;\r\n\r\n        /**\r\n         * @return {Promise<boolean>} - true if loaded\r\n         */\r\n        this.loadCustomersOnInit = function (getHash) {\r\n            console.time('Load customers');\r\n            let pr = this.loadCustomersAll(true, getHash);\r\n            const needLoad = (!configService.isSite || window.isSupported) && (this.loadMode() === 2 || this.loadMode() === 3)\r\n            if (needLoad) {\r\n                pr = pr.then((function (res) {\r\n                    console.timeEnd('Load customers');\r\n                    let prUpdate;\r\n                    if (res && typeof res === 'object' && 'LoadOnline' in res) {\r\n                        return helperService.resolvePromise(true);\r\n                    } else {\r\n                        prUpdate = this.startCustomersAutoUpdate();\r\n                    }\r\n                    prUpdate = prUpdate.then(function () {return  helperService.resolvePromise(true)});\r\n                    return prUpdate\r\n                }).bind(this));\r\n            } else {\r\n                pr = pr.then(function () {\r\n                    console.timeEnd('Load customers');\r\n                    return helperService.resolvePromise(false);\r\n                });\r\n            }\r\n\r\n            return pr;\r\n        }\r\n\r\n        this.loadCustomersAll = function (force, getHash) {\r\n            if (this.lockCustomersUpdate) {\r\n                return helperService.resolvePromise(null);\r\n            }\r\n\r\n            if (this.loadMode() === 1) {\r\n                console.log('load mode is online: not loading on init')\r\n                return helperService.resolvePromise(false);\r\n            }\r\n            const needCheckCount = this.loadMode() === 3;\r\n\r\n            THIS = this;\r\n            var pr;\r\n            var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n\r\n            // in web mode for old browser\r\n            if (configService.isSite && !window.isSupported) {\r\n                pr = remoteRequestProvider.loadLiveCustomers(needCheckCount)\r\n                    .then(function (data) {\r\n                        if (needCheckCount && data.LoadOnline) {\r\n                            THIS.hybridModeLoadOnline = true;\r\n                            console.log('hybrid mode indicator is true, will load online')\r\n                            return helperService.resolvePromise({LoadOnline: true});\r\n                        }\r\n                        return liveSearchService.fillCustomersData(data);\r\n                    });\r\n            } else {\r\n                if (configService.isSite || configService.isOnline) {\r\n                    pr = provider.checkCustomersOld(force)\r\n                        .then(function (res) {\r\n                            if (res) {\r\n                                return provider.getCustomersHash(getHash === true ? false : force)\r\n                                    .then(function (hash) {\r\n                                        return remoteRequestProvider.loadCostomersAll(hash, needCheckCount).then(function (loadRes) {\r\n                                            if (needCheckCount && loadRes.data.LoadOnline) {\r\n                                                THIS.hybridModeLoadOnline = true;\r\n                                                console.log('hybrid mode indicator is true, will load online')\r\n                                                return helperService.resolvePromise({LoadOnline: true});\r\n                                            }\r\n                                            return helperService.resolvePromise(loadRes);\r\n                                        });\r\n                                    })\r\n                                    .then(function (resp) {\r\n                                        if (resp && resp.LoadOnline) {\r\n                                            return helperService.resolvePromise(resp);\r\n                                        }\r\n                                        if (!resp.data || resp.data.CompareResult)\r\n                                            return helperService.resolvePromise(false);\r\n                                       \r\n\r\n                                        return helperService.unpack(THIS, resp.data.Customers)\r\n                                            .then(function (restored) {\r\n                                                resp.data.Customers = null;\r\n                                                const data = {\r\n                                                    hash: resp.data.CustomerHash,\r\n                                                    arr: Array.isArray(restored) ? restored : []\r\n                                                };\r\n\r\n                                                return provider.refreshCustomers(data);\r\n                                            });\r\n                                    });\r\n                            }\r\n\r\n                            return helperService.resolvePromise(false);\r\n                        });\r\n                }\r\n                else {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(false);\r\n                    pr = deferred.promise;\r\n                }\r\n\r\n                // fill live customer data\r\n                pr = pr.then(function (data) {\r\n                    if (typeof data === 'object' && 'LoadOnline' in data) {\r\n                        return helperService.resolvePromise(data);\r\n                    }\r\n\r\n                    return provider.loadLiveCustomers(data).then(function (data) {\r\n                            return liveSearchService.fillCustomersData(data);\r\n                    });\r\n                });\r\n            }\r\n\r\n            return pr.then(function (res) {\r\n                THIS.lockCustomersUpdate = false;\r\n                return helperService.resolvePromise(res);\r\n            }).catch(function (err) {\r\n                THIS.lockCustomersUpdate = false;\r\n                return helperService.rejectPromise(err);\r\n            });\r\n        };\r\n\r\n        this.onCustomerUpdated = function (id) {\r\n            try {\r\n                var THIS = this;\r\n                const needLoad = this.loadOnline() && !(configService.isSite && !window.isSupported);\r\n                var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                if (needLoad || !id) {\r\n                    return helperService.resolvePromise();\r\n                }\r\n                return remoteRequestProvider.getCustomer(id).then(function (resp) {\r\n                    var customers = resp.data.Customers.map(function (c) {\r\n                        var contact = c.Contacts.find(x => !!x.Default)\r\n                        if (!contact) {\r\n                            contact = c.Contacts.length ? c.Contacts[0] : {}; \r\n                        }\r\n                        var mapped = helperService.toLowerCamelCase(c);\r\n                        mapped.id = c.ID;\r\n                        mapped.phone = contact && !!contact.Phone ? contact.Phone : '';\r\n                        mapped.email = contact && !!contact.Email ? contact.Email : '';\r\n                        mapped.mobilePhone = contact && !!contact.MobilePhone ? contact.MobilePhone : '';\r\n                        mapped.addresses = helperService.toLowerCamelCase(c.Addresses);\r\n                        mapped.mattrixDiscounts = helperService.toLowerCamelCase(c.MatrixDiscounts);\r\n                        mapped.discounts = helperService.toLowerCamelCase(c.Discounts);\r\n\r\n                        return mapped;\r\n                    });\r\n\r\n                    const data = {\r\n                        arr: customers\r\n                    };\r\n\r\n                    // partial update\r\n                    return provider.refreshCustomers(data, true).then(function () {\r\n                        return provider.loadLiveCustomers(null, id).then(function (data) {\r\n                            return liveSearchService.fillCustomersData(data, true);\r\n                        });\r\n                    });\r\n                });\r\n            } catch (e) {\r\n                console.error(e);\r\n                return helperService.rejectPromise(e);\r\n            }\r\n        };\r\n    }]);\r\n","angular.module(\"mainApp\").controller('customersController',\r\n    ['$rootScope', '$scope', 'constants', 'loginService',\r\n        '$timeout', 'customerService', 'errorService', 'gettextCatalog', 'helperService', 'configService', 'soundService',\r\n    function ($rootScope, $scope, constants, loginService,\r\n        $timeout, customerService, errorService, gettextCatalog, helperService, configService, soundService) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constCustomersSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constCustomersViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        $scope.fullFilters = false;\r\n        $scope.filters = {};\r\n\r\n        $scope.selectedPage = 1;\r\n        $scope.totalPages = 1;\r\n        $scope.itemsByPage = 20;\r\n        $scope.totalRecords = null;\r\n        $scope.searchParameters = \"\";\r\n        $scope.allCustomers = \"\";\r\n        $scope.customersTotal = 0;\r\n        //$scope.searchParameters = gettextCatalog.getString(\"All customers\");\r\n        //$scope.allCustomers = gettextCatalog.getString(\"All customers\");\r\n        $scope.searchText = null;\r\n\r\n        $scope.tabs = [{ tabName: gettextCatalog.getString(\"Addresses\") }, { tabName: gettextCatalog.getString(\"Contacts\") }];\r\n\r\n        $scope.abs = function (x) {\r\n            if (x)\r\n                return helperService.DEARRound(Math.abs(x), 2);\r\n            return 0;\r\n        }\r\n\r\n        // array for customers\r\n        $scope.data = [];\r\n        $scope.isLoading = false;\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () { \r\n            $.blockUI();\r\n            customerService.loadCustomers(\r\n                \"\", $scope.selectedPage, $scope.itemsByPage\r\n            ).then(function (resp) {\r\n                $scope.data = resp.Customers;\r\n                getPages(resp.Total);\r\n                $.unblockUI();\r\n                const scrollReachBottomCallback = function (){\r\n                    if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages) {\r\n                        $.blockUI();\r\n                        $scope.isLoading = true;\r\n                        $scope.selectedPage ++;\r\n                        \r\n                        customerService.loadCustomers(\r\n                            $scope.searchText,\r\n                            $scope.selectedPage,\r\n                            $scope.itemsByPage,\r\n                            $scope.filters,\r\n                        ).then((resp) => {\r\n                            resp.Customers.forEach((el) => {\r\n                                if (!$scope.data.filter((fEl) => fEl.ID === el.ID).length > 0) {\r\n                                    $scope.data.push(el);\r\n                                }\r\n                            });\r\n                            getPages(resp.Total);\r\n        \r\n                            $scope.isLoading = false;\r\n                            $.unblockUI();\r\n                        }, function(err) {\r\n                            $scope.isLoading = false;\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        });\r\n                    }\r\n                }\r\n                \r\n                initPagerOnScroll(scrollReachBottomCallback);\r\n                \r\n                $scope.raiseViewChanged();\r\n            },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.search = function () {\r\n            $.blockUI();\r\n            if ($scope.searchText) {\r\n                $scope.searchParameters = gettextCatalog.getString(\"Search results for \") + \"'\" + $scope.searchText + \"'\";\r\n            } else {\r\n                $scope.searchParameters = $scope.allCustomers;\r\n            }\r\n            customerService.loadCustomers(\r\n                $scope.searchText, 1, $scope.itemsByPage, $scope.filters\r\n            ).then(function (resp) {\r\n                $scope.data = resp.Customers;\r\n                $scope.selectedPage = 1;\r\n\r\n                getPages(resp.Total);\r\n                $.unblockUI();\r\n\r\n                if(resp.Total == 0) {\r\n                    var msg = gettextCatalog.getString(\"No customers found.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg,\r\n                        type: 'error'\r\n                    });\r\n\r\n                    soundService.playBad();\r\n                }\r\n\r\n            }, function(err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        function getPages(total) {\r\n            $scope.customersTotal = total;\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n\r\n        $scope.addCustomer = function () {\r\n            $rootScope.$broadcast('addCustomer.show', { mode: \"add\", isCustomersGrid : true});\r\n        };\r\n\r\n        $scope.editCustomer = function (customer) {\r\n            $rootScope.$broadcast('editCustomer.show', customer);\r\n        };\r\n\r\n        $scope.editCustomerContact = function (customer) {\r\n            //            $rootScope.$broadcast('editCustomerContact.show', { Customer: customer, Contact: contact });\r\n            var contact = {};\r\n            if (!customer.Contacts || customer.Contacts.length == 0) {\r\n                contact = {\r\n                    Name: customer.Name,\r\n                    JobTitle: null,\r\n                    Phone: null,\r\n                    MobilePhone: null,\r\n                    Fax: null,\r\n                    Email: null,\r\n                    Default: true,\r\n                    IncludeInEmail: false,\r\n                    ID: null\r\n                };\r\n\r\n                customer.Contacts.push(contact);\r\n            }\r\n\r\n            contact = customer.Contacts[0];\r\n            $rootScope.$broadcast('editCustomerContact.show', { Customer: customer, Contact: contact });\r\n        };\r\n\r\n        $scope.editCustomerAddress = function (customer, type) {\r\n            //            $rootScope.$broadcast('editCustomerAddress.show', { Customer: customer, Address: address });\r\n            var address = null;\r\n\r\n            if (!!customer.Addresses)\r\n                address = customer.Addresses.filter(function (el) { return el.Type == type; })[0];\r\n\r\n            if (!address) {\r\n                address = {\r\n                    Line1: null,\r\n                    Line2: null,\r\n                    City: null,\r\n                    State: null,\r\n                    Postcode: null,\r\n                    Country: null,\r\n                    Type: type,\r\n                    DefaultForType: true,\r\n                    ID: null\r\n                };\r\n\r\n                customer.Addresses.push(address);\r\n            }\r\n\r\n            address = customer.Addresses.filter(function (el) { return el.Type == type; })[0];\r\n\r\n            $rootScope.$broadcast('editCustomerAddress.show', { Customer: customer, Address: address });\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            //$rootScope.$broadcast('view.loaded');\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            });\r\n        };\r\n\r\n        $scope.$on('addCustomer.selected', function (event, data) {\r\n            customerService.loadCustomersAll(true).then(res => {\r\n                $scope.search();\r\n            });\r\n        });\r\n\r\n        $scope.collapseObject = {};\r\n\r\n        $scope.showCollapse = function (event, el) {\r\n            $scope.collapseObject = el + ' ' + new Date();\r\n            \r\n            $(\"[name='\" + el + \"']\").collapse('toggle');\r\n            return false;\r\n        };\r\n\r\n        $scope.getAddressString = function(city, country, line1, line2) {\r\n            return $.grep([city, country, line1, line2], Boolean).join(\", \"); \r\n        }\r\n\r\n        $scope.toggleRow = function (active) {\r\n            if (active === true)\r\n               return false;\r\n            else\r\n              return true;\r\n        }\r\n\r\n        $scope.lockSearch = false;\r\n\r\n        $scope.$on('scan.barcode', function (event, barcode) {\r\n            $scope.checkSearchAndWait(barcode);\r\n        });\r\n\r\n        $scope.checkSearchAndWait = function (barcode) {\r\n            if ($scope.lockSearch) {\r\n                $timeout(function () {\r\n                    $scope.checkSearchAndWait(barcode);\r\n                }, 100);\r\n            }\r\n            else {\r\n                $scope.processBarcodeSearch(barcode);\r\n            }\r\n        };\r\n\r\n        $scope.processBarcodeSearch = function (barcode) {\r\n            $.blockUI();\r\n\r\n            $scope.lockSearch = true;\r\n            $scope.filters.SaleBarcode = barcode;\r\n            $scope.searchParameters = gettextCatalog.getString(\"Search results for barcode \") + \"'\" + $scope.filters.SaleBarcode + \"'\";\r\n\r\n            $scope.searchText = barcode;\r\n            $('#customerSearchName').val(barcode);\r\n            var el = $('#customerSearchName')[0];\r\n            el.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n            el.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n\r\n            $scope.search();\r\n\r\n            $scope.filters.SaleBarcode = \"\";\r\n\r\n            $scope.lockSearch = false;\r\n        };\r\n\r\n        $scope.showInMobileDesign = function() {\r\n            return configService.isMobileDesign ? '' : 'desktop-hide';\r\n        };\r\n\r\n        $scope.showInDesktopDesign = function() {\r\n            return configService.isMobileDesign ? 'mobile-hide' : '';\r\n        };\r\n\r\n    }]);\r\n","import Chart from 'chart.js';\r\n\r\nangular.module(\"mainApp\").controller('dashboardController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService',\r\n        '$uibModal', 'outletService', 'configService', 'helperService', 'remoteRequestProvider', 'stockTakeService', 'gettextCatalog',\r\n        '$filter', '$locale',\r\n        function ($scope, $rootScope, constants, loginService, $timeout, errorService,\r\n            $uibModal, outletService, configService, helperService, remoteRequestProvider, stockTakeService, gettextCatalog,\r\n            $filter, $locale) {\r\n\r\n            $scope.firstShow = true;\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constUserManagementSectionName }); // to hide sidebar details\r\n            $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constDashboardViewName }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            };\r\n\r\n            // CC-25044: When false, hide Revenue / Gross profit / COGS (aligned with CanSeeStockValue from PosAccount).\r\n            $scope.canSeeProfitabilityMetrics = configService.CanSeeStockValue !== false;\r\n            \r\n            \r\n            $scope.fcss = { 'height': window.innerHeight * 0.8 + 'px' };\r\n\r\n            $scope.onLoad = function () {\r\n                $scope.raiseViewChanged();\r\n\r\n                $scope.chartObj = {};\r\n\r\n                $scope.filters = {\r\n                    viewMode: 'days',\r\n                    startDate: moment().add(-6, 'days').startOf('day'),\r\n                    endDate: moment().startOf('day'),\r\n                    periodLabel: '',\r\n                    OutletID: '0'\r\n                };\r\n\r\n                $scope.outleDetails = {\r\n                    Revenue: [],\r\n                    SaleCount: [],\r\n                    CustomerCount: [],\r\n                    GrossProfit: [],\r\n                    DiscountValue: [],\r\n                    DiscountPercent: [],\r\n                    BasketValue: [],\r\n                    BasketSize: [],\r\n                    ReturnCount: [],\r\n                    COGS: []\r\n                };\r\n\r\n                $scope.totalValue = {\r\n                    Revenue: 0,\r\n                    SaleCount: 0,\r\n                    CustomerCount: 0,\r\n                    GrossProfit: 0,\r\n                    DiscountValue: 0,\r\n                    DiscountPercent: 0,\r\n                    BasketValue: 0,\r\n                    BasketSize: 0,\r\n                    ReturnCount: 0,\r\n                    COGS: 0\r\n                };\r\n\r\n                $.blockUI();\r\n                stockTakeService.loadUserAvailableOutletsWithoutRegister()\r\n                    .then(function (res) {\r\n\r\n                        if (res.data.locations.length > 1) {\r\n                            //$scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                            $scope.locations = res.data.locations;\r\n                            $scope.filters.allowSelectOutlet = true;\r\n                        }\r\n                        else {\r\n                            $scope.locations = res.data.locations;\r\n                            $scope.filters.allowSelectOutlet = false;\r\n                            if (res.data.locations.length == 1) {\r\n                                $scope.filters.OutletID = res.data.locations[0].PosOutletID;\r\n                            }\r\n                        }\r\n\r\n                        // code below is important. Async execution means that comboboxes can be initialized before actual data will have come\r\n                        // so we need to refresh comboboxes after actual data is loaded to scope\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                        reloadData();\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                    });\r\n\r\n                updatePeriodLabel();\r\n            };\r\n\r\n            $scope.$watch('filters.OutletID', function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    reloadData();\r\n                }\r\n            });\r\n\r\n            $scope.$watch('filters.viewMode',\r\n                function (newValue, oldValue) {                \r\n                    \r\n                    $scope.setViewMode(newValue);\r\n                }\r\n            );\r\n\r\n            $scope.setViewMode = function (viewModeName) {\r\n                \r\n                $scope.filters.viewMode = viewModeName;\r\n\r\n                var currentDate = moment().startOf('day');\r\n\r\n                switch ($scope.filters.viewMode) {\r\n                    case 'days':\r\n                        $scope.filters.endDate = currentDate;\r\n                        $scope.filters.startDate = $scope.filters.endDate.clone().add(-6, $scope.filters.viewMode).startOf('day');\r\n                        break;\r\n                    case 'weeks':\r\n                        // $scope.filters.endDate = currentDate.endOf('week').startOf('day');\r\n                        // $scope.filters.startDate = $scope.filters.endDate.clone().add(-6, $scope.filters.viewMode).startOf('day').add(-1, 'days');\r\n                        $scope.filters.startDate = currentDate.clone().startOf('week').add(-6, $scope.filters.viewMode).startOf('day');\r\n                        $scope.filters.endDate = currentDate.clone().endOf('week').startOf('day');\r\n                        break;\r\n                    case 'months':\r\n                        $scope.filters.startDate = currentDate.clone().startOf('month').add(-6, $scope.filters.viewMode).startOf('day');\r\n                        $scope.filters.endDate = currentDate.clone().endOf('month').startOf('day');\r\n                        break;\r\n                }\r\n\r\n                updatePeriodLabel();\r\n\r\n                reloadData();\r\n            }\r\n\r\n            $scope.prevPeriod = function () {\r\n                $scope.filters.startDate = $scope.filters.startDate.clone().add(-1, $scope.filters.viewMode).startOf('day');\r\n\r\n                switch ($scope.filters.viewMode) {\r\n                    case 'days':\r\n                        $scope.filters.endDate = $scope.filters.startDate.clone().add(6, $scope.filters.viewMode).startOf('day');\r\n                        break;\r\n                    case 'weeks':\r\n                        $scope.filters.endDate = $scope.filters.startDate.clone().add(6, $scope.filters.viewMode).endOf('week').startOf('day');\r\n                        break;\r\n                    case 'months':\r\n                        $scope.filters.endDate = $scope.filters.startDate.clone().add(6, $scope.filters.viewMode).endOf('month').startOf('day');\r\n                        break;\r\n                }\r\n\r\n\r\n                updatePeriodLabel();\r\n\r\n                reloadData();\r\n            };\r\n            $scope.nextPeriod = function () {\r\n                var currentDate = null;\r\n\r\n                var startDate = $scope.filters.startDate.clone().add(1, $scope.filters.viewMode);\r\n                var endDate = startDate.clone().add(6, $scope.filters.viewMode);\r\n\r\n                switch ($scope.filters.viewMode) {\r\n                    case 'days':\r\n                        endDate = endDate.startOf('day');\r\n                        currentDate = moment().startOf('day')\r\n                        break;\r\n                    case 'weeks':\r\n                        endDate = endDate.endOf('week').startOf('day');\r\n                        currentDate = moment().endOf('week').startOf('day')\r\n                        break;\r\n                    case 'months':\r\n                        endDate = endDate.endOf('month').startOf('day');\r\n                        currentDate = moment().endOf('month').startOf('day')\r\n                        break;\r\n                }\r\n\r\n                if (endDate <= currentDate) {\r\n                    $scope.filters.endDate = endDate;\r\n                    $scope.filters.startDate = startDate;\r\n\r\n                    updatePeriodLabel();\r\n\r\n                    reloadData();\r\n                }\r\n            };\r\n\r\n            $scope.raiseViewChanged = function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            };\r\n\r\n            $scope.$on('view.loaded', function (evt) {\r\n                if ($scope.firstShow) {\r\n                    $scope.firstShow = false;\r\n                    // init controls\r\n\r\n                    $timeout(function () {\r\n                        initSelects();\r\n\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n                    });\r\n                }\r\n            });\r\n\r\n            $scope.showDetails = function (chartName) {\r\n\r\n                $scope.chartDetails = {};\r\n                switch (chartName) {\r\n                    case 'Revenue':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Revenue');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n\r\n                    case 'SaleCount':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Sale count');\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'CustomerCount':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Customer count');\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'GrossProfit':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Gross profit');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n\r\n                    case 'DiscountValue':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Discount value');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n\r\n                    case 'DiscountPercent':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Discount percent') + ' %';\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'BasketValue':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Basket value');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n\r\n                    case 'BasketSize':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Basket size');\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'ReturnCount':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Return count');\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'COGS':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('COGS');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n                }\r\n                $scope.chartDetails.Outlets = $scope.outleDetails[chartName];\r\n\r\n                $scope.chartObj.Details = initChart('divDetailsChart', $scope.chartData.Labels, $scope.chartData[chartName]);\r\n\r\n                //$scope.chartObj.Details.canvas.parentNode.style.height = '300px';\r\n\r\n                helperService.showDialog('#dashboardDetailsDialogPartial');\r\n            };\r\n\r\n            $scope.closeDashboardDetailsDialog = function () {\r\n                helperService.closeDialog('#dashboardDetailsDialogPartial');\r\n\r\n                $scope.chartObj.Details.destroy();\r\n                delete $scope.chartObj.Details;\r\n            };\r\n\r\n            function reloadData() {\r\n                $.blockUI();\r\n\r\n                var outletID = $scope.filters.OutletID;\r\n                if (outletID === null) {\r\n                    outletID = '0';\r\n                }\r\n\r\n                var _startDate = helperService.toDateWithCurrentTimeZone($scope.filters.startDate);\r\n                var _endDate = helperService.toDateWithCurrentTimeZone($scope.filters.endDate);\r\n\r\n                remoteRequestProvider.getDashboardData(_startDate, _endDate, $scope.filters.viewMode, outletID)\r\n                    .then(function (response) {\r\n                        console.log(response.data);\r\n\r\n                        var ranges = response.data.Ranges;\r\n                        var outlets = response.data.Outlets;\r\n                        var lastPeriodData = response.data.LastPeriodData;\r\n\r\n                        $scope.chartData = {};\r\n                        $scope.chartData.Labels = [];\r\n                        $scope.chartData.Revenue = [];\r\n                        $scope.chartData.SaleCount = [];\r\n                        $scope.chartData.CustomerCount = [];\r\n                        $scope.chartData.GrossProfit = [];\r\n                        $scope.chartData.DiscountValue = [];\r\n                        $scope.chartData.DiscountPercent = [];\r\n                        $scope.chartData.BasketValue = [];\r\n                        $scope.chartData.BasketSize = [];\r\n                        $scope.chartData.ReturnCount = [];\r\n                        $scope.chartData.COGS = [];\r\n\r\n                        for (var label in ranges) {\r\n                            var element = ranges[label];\r\n\r\n                            $scope.chartData.Labels.push(label);\r\n\r\n                            $scope.chartData.Revenue.push(element.SalesRevenue);\r\n                            $scope.chartData.SaleCount.push(element.SalesCount);\r\n                            $scope.chartData.CustomerCount.push(element.CustomerCount);\r\n                            $scope.chartData.GrossProfit.push(element.GrossProfit);\r\n                            $scope.chartData.DiscountValue.push(element.DiscountValue);\r\n                            $scope.chartData.DiscountPercent.push(element.DiscountPercent);\r\n                            $scope.chartData.BasketValue.push(element.BasketValue);\r\n                            $scope.chartData.BasketSize.push(element.BasketSize);\r\n                            $scope.chartData.ReturnCount.push(element.ReturnCount);\r\n                            $scope.chartData.COGS.push(element.COGS);\r\n                        }\r\n\r\n                        for (var key in $scope.chartObj) {\r\n                            if ($scope.chartObj.hasOwnProperty(key)) {\r\n                                $scope.chartObj[key].destroy();\r\n                                delete $scope.chartObj[key];\r\n                            }\r\n                        }\r\n\r\n                        if ($scope.canSeeProfitabilityMetrics) {\r\n                            $scope.chartObj['Revenue'] = initChart('divRevenueChart', $scope.chartData.Labels, $scope.chartData.Revenue);\r\n                        }\r\n                        $scope.chartObj['SaleCount'] = initChart('divSaleCountChart', $scope.chartData.Labels, $scope.chartData.SaleCount);\r\n                        $scope.chartObj['CustomerCount'] = initChart('divCustomerCount', $scope.chartData.Labels, $scope.chartData.CustomerCount);\r\n                        if ($scope.canSeeProfitabilityMetrics) {\r\n                            $scope.chartObj['GrossProfit'] = initChart('divGrossProfitChart', $scope.chartData.Labels, $scope.chartData.GrossProfit);\r\n                        }\r\n                        $scope.chartObj['DiscountValue'] = initChart('divDiscountValueChart', $scope.chartData.Labels, $scope.chartData.DiscountValue);\r\n                        $scope.chartObj['DiscountPercent'] = initChart('divDiscountPercentChart', $scope.chartData.Labels, $scope.chartData.DiscountPercent);\r\n                        $scope.chartObj['BasketValue'] = initChart('divBasketValueChart', $scope.chartData.Labels, $scope.chartData.BasketValue);\r\n                        $scope.chartObj['BasketSize'] = initChart('divBasketSizeChart', $scope.chartData.Labels, $scope.chartData.BasketSize);\r\n                        $scope.chartObj['ReturnCount'] = initChart('divReturnCountChart', $scope.chartData.Labels, $scope.chartData.ReturnCount);\r\n                        if ($scope.canSeeProfitabilityMetrics) {\r\n                            $scope.chartObj['COGS'] = initChart('divCOGSChart', $scope.chartData.Labels, $scope.chartData.COGS);\r\n                        }\r\n\r\n\r\n                        $scope.totalValue.Revenue = lastPeriodData.SalesRevenue;\r\n                        $scope.totalValue.SaleCount = lastPeriodData.SalesCount;\r\n                        $scope.totalValue.CustomerCount = lastPeriodData.CustomerCount;\r\n                        $scope.totalValue.GrossProfit = lastPeriodData.GrossProfit;\r\n                        $scope.totalValue.DiscountValue = lastPeriodData.DiscountValue;\r\n                        $scope.totalValue.DiscountPercent = lastPeriodData.DiscountPercent;\r\n                        $scope.totalValue.BasketValue = lastPeriodData.BasketValue;\r\n                        $scope.totalValue.BasketSize = lastPeriodData.BasketSize;\r\n                        $scope.totalValue.ReturnCount = lastPeriodData.ReturnCount;\r\n                        $scope.totalValue.COGS = lastPeriodData.COGS;\r\n\r\n\r\n                        $scope.outleDetails.Revenue = [];\r\n                        $scope.outleDetails.SaleCount = [];\r\n                        $scope.outleDetails.CustomerCount = [];\r\n                        $scope.outleDetails.GrossProfit = [];\r\n                        $scope.outleDetails.DiscountValue = [];\r\n                        $scope.outleDetails.DiscountPercent = [];\r\n                        $scope.outleDetails.BasketValue = [];\r\n                        $scope.outleDetails.BasketSize = [];\r\n                        $scope.outleDetails.ReturnCount = [];\r\n                        $scope.outleDetails.COGS = [];\r\n\r\n                        if ((!$scope.filters.OutletID || $scope.filters.OutletID == '0') && outlets.length > 1) {\r\n                            for (var i = 0; i < outlets.length; i++) {\r\n                                var outletData = outlets[i];\r\n\r\n                                $scope.outleDetails.Revenue.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.SalesRevenue,\r\n                                    Percent: getPercent(lastPeriodData.SalesRevenue, outletData.SalesRevenue)\r\n                                });\r\n                                $scope.outleDetails.SaleCount.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.SalesCount,\r\n                                    Percent: getPercent(lastPeriodData.SalesCount, outletData.SalesCount)\r\n                                });\r\n                                $scope.outleDetails.CustomerCount.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.CustomerCount,\r\n                                    Percent: getPercent(lastPeriodData.CustomerCount, outletData.CustomerCount)\r\n                                });\r\n                                $scope.outleDetails.GrossProfit.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.GrossProfit,\r\n                                    Percent: getAvgPercent(outlets, 'GrossProfit', outletData.GrossProfit)\r\n                                });\r\n                                $scope.outleDetails.DiscountValue.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.DiscountValue,\r\n                                    Percent: getPercent(lastPeriodData.DiscountValue, outletData.DiscountValue)\r\n                                });\r\n                                $scope.outleDetails.DiscountPercent.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.DiscountPercent,\r\n                                    Percent: getPercent(lastPeriodData.DiscountPercent, outletData.DiscountPercent)\r\n                                });\r\n                                $scope.outleDetails.BasketValue.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.BasketValue,\r\n                                    Percent: getAvgPercent(outlets, 'BasketValue', outletData.BasketValue)\r\n                                });\r\n                                $scope.outleDetails.BasketSize.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.BasketSize,\r\n                                    Percent: getAvgPercent(outlets, 'BasketSize', outletData.BasketSize)\r\n                                });\r\n                                $scope.outleDetails.ReturnCount.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.ReturnCount,\r\n                                    Percent: getPercent(lastPeriodData.ReturnCount, outletData.ReturnCount)\r\n                                });\r\n                                $scope.outleDetails.COGS.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.COGS,\r\n                                    Percent: getPercent(lastPeriodData.COGS, outletData.COGS)\r\n                                });\r\n                            }\r\n                        }\r\n\r\n                        $scope.outleDetails.Revenue.sort(compareOutlets);\r\n                        $scope.outleDetails.SaleCount.sort(compareOutlets);\r\n                        $scope.outleDetails.CustomerCount.sort(compareOutlets);\r\n                        $scope.outleDetails.GrossProfit.sort(compareOutlets);\r\n                        $scope.outleDetails.DiscountValue.sort(compareOutlets);\r\n                        $scope.outleDetails.DiscountPercent.sort(compareOutlets);\r\n                        $scope.outleDetails.BasketValue.sort(compareOutlets);\r\n                        $scope.outleDetails.BasketSize.sort(compareOutlets);\r\n                        $scope.outleDetails.ReturnCount.sort(compareOutlets);\r\n                        $scope.outleDetails.COGS.sort(compareOutlets);\r\n\r\n                        $.unblockUI();\r\n                    }, function (err) {\r\n                        // process error\r\n                        $.unblockUI();\r\n                        // show error and login page once more\r\n                        errorService.showError(err);\r\n                    });\r\n            }\r\n\r\n            function updatePeriodLabel() {\r\n                $scope.filters.periodLabel = '';\r\n\r\n                var format = configService.dateFormat;\r\n                format = format.replace('yyyy', 'YYYY');\r\n                format = format.replace('dd', 'DD');\r\n\r\n                switch ($scope.filters.viewMode) {\r\n                    case 'days':\r\n                        $scope.filters.periodLabel = $scope.filters.endDate.format(format);\r\n                        break;\r\n                    case 'weeks':\r\n                        $scope.filters.periodLabel = $scope.filters.endDate.clone().startOf('week').format(format) + '-' + $scope.filters.endDate.clone().endOf('week').format(format);\r\n                        break;\r\n                    case 'months':\r\n                        $scope.filters.periodLabel = $scope.filters.endDate.clone().startOf('month').format(format) + '-' + $scope.filters.endDate.clone().endOf('month').format(format);\r\n                        break;\r\n                }\r\n            }\r\n\r\n            function initChart(selector, labels, values) {\r\n                $('#' + selector).empty();\r\n\r\n                var ctx = document.getElementById(selector).getContext('2d');\r\n                var myChart = new Chart(ctx, {\r\n                    type: 'line',\r\n                    data: {\r\n                        labels: labels,\r\n                        datasets: [{\r\n                            data: values,\r\n                            backgroundColor: 'rgb(5, 203, 191, .1)',\r\n                            borderColor: 'rgb(5, 203, 191)',\r\n                            fill: true,\r\n                            lineTension: 0,\r\n                            pointRadius: 5,\r\n                            pointBackgroundColor: 'rgb(5, 203, 191)',\r\n                            pointBorderWidth: 2,\r\n                            pointBorderColor: 'rgb(255, 255, 255)',\r\n                            pointHoverRadius: 5,\r\n                            pointHoverBackgroundColor: 'rgb(5, 203, 191)',\r\n                            pointHoverBorderWidth: 2,\r\n                            pointHoverBorderColor: 'rgb(255, 255, 255)'\r\n                        }]\r\n                    },\r\n                    options: {\r\n                        responsive: true,\r\n                        legend: {\r\n                            display: false\r\n                        },\r\n                        title: {\r\n                            display: false\r\n                        },\r\n                        tooltips: {\r\n                            enabled: true\r\n                        },\r\n                        elements: {\r\n                            point: {\r\n                                pointStyle: 'circle'\r\n                            }\r\n                        },\r\n                        scales: {\r\n                            xAxes: [{\r\n                                display: true,\r\n                                gridLines: {\r\n                                    display: false\r\n                                },\r\n                                scaleLabel: {\r\n                                    display: true\r\n                                }\r\n                            }],\r\n                            yAxes: [{\r\n                                display: true,\r\n                                scaleLabel: {\r\n                                    display: false\r\n                                },\r\n                                ticks: {\r\n                                    suggestedMin: 0\r\n                                }\r\n                            }]\r\n                        }\r\n                    }\r\n                });\r\n\r\n                return myChart;\r\n            }\r\n\r\n            function getPercent(total, value) {\r\n                if (total > 0) {\r\n                    return Math.round(value / total * 100, 0);\r\n                }\r\n                return 0;\r\n            }\r\n\r\n            function getAvgPercent(values, propName, value) {\r\n\r\n                var total = 0;\r\n                for (var i = 0; i < values.length; i++) {\r\n                    total += Math.abs(values[i][propName]);\r\n                }\r\n\r\n                if (total > 0) {\r\n                    return Math.round(Math.abs(value) / total * 100, 0);\r\n                }\r\n\r\n                return 0;\r\n            }\r\n\r\n            function compareOutlets(outlet1, outlet2) {\r\n                return (outlet1.Value > outlet2.Value) ? -1 : ((outlet2.Value > outlet1.Value) ? 1 : 0);;\r\n            }\r\n        }]);","angular.module('services').factory('dataChangeNotificationService',\r\n    ['$q', 'remoteRequestProvider', '$interval', '$rootScope', 'loginService',\r\n        function ($q, remoteRequestProvider, $interval, $rootScope, loginService) {\r\n\r\n            var dataChangeNotificationService = {};\r\n\r\n            dataChangeNotificationService.lastEvents = null;\r\n            dataChangeNotificationService.timer=null;\r\n            dataChangeNotificationService.isInited = false;\r\n\r\n            dataChangeNotificationService.init = function () {\r\n                return remoteRequestProvider.dataChangeStatuses()\r\n                    .then(function (res) {\r\n                        var deffered = $q.defer();\r\n                        if (!res) {\r\n                            deffered.reject('empty status data');\r\n                        } else {\r\n                            dataChangeNotificationService.lastEvents = res.data;\r\n                            deffered.resolve(null);\r\n                        }\r\n\r\n                        return deffered.promise;\r\n                    })\r\n                    .catch(function (err) {\r\n                        var deffered = $q.defer();\r\n                        deffered.resolve(null);\r\n                        return deffered.promise;\r\n                    })\r\n                    .finally(function () {\r\n                        if (!dataChangeNotificationService.isInited) {\r\n                            dataChangeNotificationService.isInited = true;\r\n\r\n                            dataChangeNotificationService.timer = $interval(function () {\r\n                                if (loginService.isLoggedIn()) {\r\n                                    remoteRequestProvider.dataChangeStatuses()\r\n                                        .then(function (res) {\r\n                                            if (dataChangeNotificationService.lastEvents == null) {\r\n                                                dataChangeNotificationService.lastEvents = res.data;\r\n                                            }\r\n                                            else if (!!res && !!res.data) {\r\n                                                var mp = {};\r\n                                                angular.forEach(res.data, function (el) { mp[el.name] = el.lastChange; });\r\n                                                angular.forEach(dataChangeNotificationService.lastEvents,\r\n                                                    function (el) {\r\n                                                        if (mp[el.name] != el.lastChange) {\r\n                                                            $rootScope.$broadcast('dataChanged.' + el.name);\r\n                                                        }\r\n                                                    });\r\n                                                dataChangeNotificationService.lastEvents = res.data;\r\n                                            }\r\n                                        });\r\n                                }\r\n                            }, 60 * 1000);\r\n\r\n                            var deffered = $q.defer();\r\n                            deffered.resolve(null);\r\n                            return deffered.promise;\r\n                        }\r\n                    });\r\n\r\n            };\r\n\r\n            dataChangeNotificationService.stop = function () {\r\n                if (dataChangeNotificationService.isInited) {\r\n                    $interval.cancel(dataChangeNotificationService.timer);\r\n                    dataChangeNotificationService.timer = null;\r\n                    dataChangeNotificationService.lastEvents = null;\r\n                    dataChangeNotificationService.timer = null;\r\n                    dataChangeNotificationService.isInited = false;\r\n                }\r\n            };\r\n\r\n            return dataChangeNotificationService;\r\n        }\r\n\r\n\r\n    ]);\r\n","import * as JsStore from 'jsstore';\r\n\r\nangular.module('services').service('dbUpdatesService', [\r\n    function () {\r\n        this.initialDBCreationScript = function () {\r\n            var script = [];\r\n            script.push('CREATE TABLE if not exists logins(PosName text not null, UserName text not null, Token text not null, lastModified datetime not null, PRIMARY KEY (PosName, UserName))');\r\n            script.push('CREATE TABLE if not exists outlets(PosName text not null, UserID text not null, OutletName text not null, OutletID text not null, Packed text not null, lastModified datetime not null, Taxes text null, PRIMARY KEY (PosName, UserID, OutletName))');\r\n            script.push('CREATE TABLE if not exists settings(Name text not null, [Value] text null, lastModified datetime not null, PRIMARY KEY (Name))');\r\n            script.push('CREATE TABLE if not exists products(ProductID text not null, ProductCode text not null, Name text null, Barcode text null, Family text null, FamilyID text null, Category text null, CategoryID text null, DiscountName text null, DiscountID text null, Price real not null, Option1 text null, Option2 text null, Option3 text null, Discounts text null, Taxes text null, LoyaltyEarning text null, PRIMARY KEY (ProductID))');\r\n            script.push('CREATE TABLE if not exists receipts(ReceiptID text not null, Template text not null, EmailTemplate text not null, EmailSubject text not null, PRIMARY KEY (ReceiptID))');\r\n            script.push('CREATE TABLE if not exists labels(ReceiptID text not null, Template text not null, PRIMARY KEY (ReceiptID))');\r\n            script.push('CREATE index idxProductCode on products(ProductCode asc)');\r\n            script.push('CREATE index idxName on products(Name asc)');\r\n            script.push('CREATE index idxFamily on products(Family asc)');\r\n            script.push('CREATE index idxBarcode on products(Barcode asc)');\r\n\r\n            // temporary table to hold product search - for performance aims\r\n            script.push('CREATE TABLE if not exists productsSearchTemp(ProductID text not null, ProductCode text not null, Name text null, Barcode text null, Family text null, FamilyID text null, Category text null, CategoryID text null, DiscountName text null, DiscountID text null, Price real not null, Option1 text null, Option2 text null, Option3 text null, Discounts text null, Taxes text null, LoyaltyEarning text null, PRIMARY KEY (ProductID))');\r\n            script.push('CREATE index idxProductCodeTemp on productsSearchTemp(ProductCode asc)');\r\n            script.push('CREATE index idxNameTemp on productsSearchTemp(Name asc)');\r\n            script.push('CREATE index idxBarcodeTemp on productsSearchTemp(Barcode asc)');\r\n            script.push('CREATE index idxFamilyTemp on productsSearchTemp(Family asc)');\r\n\r\n            // offline payments\r\n            script.push('CREATE TABLE if not exists offSales(PosName text not null, SaleID text not null, StatusID text not null, Packed text not null, InfoPacked text not null, lastModified datetime not null, PRIMARY KEY (PosName, SaleID))');\r\n\r\n            script.push('CREATE TABLE if not exists closeRegistrySales(ID text not null,RegistryID text not null, OpeningTime datetime not null, SalesRepresentative text not null, IsActive bit not null, CashExpected decimal(18,2) null, CashCounted decimal(18,2) null, CreditCardExpected decimal(18,2) null, CreditCardCounted decimal(18,2) null, GiftCardExpected decimal(18,2) null, GiftCardCounted decimal(18,2) null, LoyaltyExpected decimal(18,2) null, LoyaltyCounted decimal(18,2) null, StoreCreditExpected decimal(18,2) null, StoreCreditCounted decimal(18,2) null , Note text null, SendedToServer bit not null, PRIMARY KEY (ID))');\r\n\r\n            //Customers\r\n            script.push('CREATE TABLE if not exists customers(ID text not null, Name text not null, Phone text null, MobilePhone text null, Email text null, EnableLoyaltyPoints bit not null, PRIMARY KEY (ID))');\r\n\r\n            script.push('CREATE TABLE if not exists versions([Version] integer PRIMARY KEY not null, [Description] text null)');\r\n            script.push('INSERT INTO versions(Version,Description) VALUES (\"1\",\"Initial version\")');\r\n\r\n            return script;\r\n        };\r\n\r\n        this.update2 = function (tx) {\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN Option1Name text null');\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN Option2Name text null');\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN Option3Name text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Option1Name text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Option2Name text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Option3Name text null');\r\n            return 'add family option names';\r\n        };\r\n\r\n        this.update3 = function (tx) {\r\n            tx.executeSql('CREATE TABLE if not exists cashManagement(ID text not null,CloseRegistryID text not null,RegistryID text not null, OperationTime datetime not null, SalesRepresentative text not null,Reasons text null,OperationType text not null, Amount decimal(18,2) null, PRIMARY KEY (ID))');\r\n            return 'add cash management table';\r\n        };\r\n\r\n        this.update4 = function (tx) {\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN ImageID text null');\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN FamilyImageID text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN ImageID text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN FamilyImageID text null');\r\n\r\n            return 'add ImageID column and FamilyImageID column to the Product table and to ';\r\n        };\r\n        this.update5 = function (tx) {\r\n            tx.executeSql('CREATE TABLE if not exists PosDiscounts(ProductID text not null,TargetProductID text not null,' +\r\n                'BuyValue decimal(18,6) null, GetValue decimal(18,6) null, DateFrom datetime null, DateTo datetime null, Type text null, MinValue decimal(18,6) null, MaxValue decimal(18,6) null, DiscountLineType text null,  Amount decimal(18,6) null)');\r\n\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN Tags text null');\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN BrandID text null');\r\n            tx.executeSql('ALTER TABLE customers ADD COLUMN Discounts text null');\r\n            tx.executeSql('drop table if exists PosDiscounts');\r\n            tx.executeSql('CREATE TABLE if not exists PosDiscounts(posName text not null, productID text null,tagName text null,' +\r\n                'brandID text null, categoryID text null,dealDiscountID text null, discountID text null,getValue decimal(18,6) null,buyValue decimal(18,6) null,buyMore bit null,  customersGroup text null, dealID text null,' +\r\n                ' dateFrom datetime null, dateTo datetime null, minValue decimal(18,6) null, maxValue decimal(18,6) null, discountLineType text null,  amount decimal(18,6) null, targets text null, type text null)');\r\n\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Tags text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN BrandID text null');\r\n\r\n            tx.executeSql('ALTER TABLE customers ADD COLUMN MatrixDiscounts text null');\r\n            tx.executeSql('ALTER TABLE customers ADD COLUMN Discount decimal(18,6) null');\r\n\r\n            return 'add columns to handle discounts';\r\n        };\r\n\r\n        this.update6 = function (tx) {\r\n            tx.executeSql('ALTER TABLE PosDiscounts ADD COLUMN isFamily bit null');\r\n\r\n            return 'add columns to handle discounts';\r\n        };\r\n\r\n        this.update7 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN Brand text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Brand text null');\r\n\r\n            return 'add Brand column the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update8 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN Addresses text null');\r\n\r\n            return 'add Addresses column the customers table';\r\n        };\r\n\r\n        this.update9 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN PinToken text null');\r\n\r\n            return 'add PinToken column the logins table';\r\n        };\r\n\r\n        this.update10 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN Info text null');\r\n\r\n            return 'add Info column the logins table';\r\n        };\r\n\r\n        this.update11 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN ProductShortDescription text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN ProductShortDescription text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN FamilyShortDescription text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN FamilyShortDescription text null');\r\n\r\n            return 'add ProductShortDescription, FamilyShortDescription columns the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update12 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN StocktakeLocked bit null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN StocktakeLocked bit null');\r\n\r\n            return 'add ProductShortDescription, FamilyShortDescription columns the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update13 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists closeRegistrySalesAdditionalTotals(CloseRegistrySalesID text not null, CounterName text not null, Counter decimal(18,2) not null, PRIMARY KEY (CloseRegistrySalesID, CounterName))');\r\n            return 'create closeRegistrySalesAdditionalTotals table';\r\n        };\r\n\r\n        this.update14 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE closeRegistrySalesAdditionalTotals ADD COLUMN CounterType text null');\r\n            return 'alter closeRegistrySalesAdditionalTotals table';\r\n        };\r\n\r\n        this.update15 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE cashManagement ADD COLUMN SendedToServer bit not null default 0');\r\n            return 'alter cashManagement table';\r\n        };\r\n\r\n        this.update16 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE offSales ADD COLUMN OperationID text null');\r\n            return 'alter offSales table';\r\n        };\r\n\r\n        this.update17 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE closeRegistrySales ADD COLUMN Additionals text null');\r\n            return 'alter closeRegistrySales table';\r\n        };\r\n\r\n        this.update18 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE saleCoupon(ID text not null, DealID text not null, CouponCode text not null, PRIMARY KEY (ID))');\r\n            return 'create saleCoupon table';\r\n        };\r\n\r\n        this.update19 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE PosDiscounts add column ext text null');\r\n            return 'alter PosDiscounts table';\r\n        };\r\n\r\n        this.update20 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN ProductType text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN ProductType text null');\r\n\r\n            return 'add ProductType column to the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update21 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN Taxes text null');\r\n\r\n            return 'add Taxes column to the customers table';\r\n        };\r\n\r\n        this.update22 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CostingMethod text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CostingMethod text null');\r\n\r\n            return 'add CostingMethod column to the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update23 = function (ctx) {\r\n            //SaleRepresentatives\r\n            ctx.executeSql('CREATE TABLE if not exists saleRepresentatives(ID text not null, Name text not null, PosOutletID text null, PRIMARY KEY (ID))');\r\n            return 'create salesRepresentatives table';\r\n        };\r\n\r\n        this.update24 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN Account decimal(18,6) null');\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN CreditLimit decimal(18,6) null');\r\n            ctx.executeSql('ALTER TABLE offSales ADD COLUMN CustomerID text null');\r\n            ctx.executeSql('ALTER TABLE offSales ADD COLUMN TotalSum decimal(18,6) null');\r\n\r\n            return 'modify customers, offSales tables';\r\n        };\r\n\r\n        this.update25 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE closeRegistrySales ADD COLUMN  EndOfDayReport text null');\r\n            return 'add column to closeRegistrySales table';\r\n        };\r\n\r\n        this.update26 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN ExtraInfo text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN ExtraInfo text null');\r\n\r\n            return 'add ExtraInfo column to the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update27 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanChangePrice bit not null default 0');\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanGiveDiscount bit not null default 0');\r\n\r\n            return 'added user permission fields CanChangePrice and CanGiveDiscount';\r\n        };\r\n\r\n        this.update28 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists posSatellites(POSID text not null, [Key] text not null,  [Data] text not null, PRIMARY KEY (POSID, Key)) ');\r\n\r\n            return 'added posSatellites table to save POS related data for full offline mode';\r\n        };\r\n\r\n        this.update29 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists saleTaxRules(TenantID text not null, RuleID text not null, Description text not null, Rule text not null, PRIMARY KEY (RuleID))');\r\n            return 'added sale tax rules table';\r\n        };\r\n\r\n        this.update30 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSeeDashboard bit not null default 0');\r\n\r\n            return 'added user permission field CanSeeDashboard';\r\n        };\r\n\r\n        this.update31 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN IsOnCreditHold bit not null default 0');\r\n\r\n            return 'added customers field IsOnCreditHold';\r\n        };\r\n\r\n        this.update32 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN OutletSKU text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN OutletSKU text null');\r\n\r\n            return 'add OutletSKU column to the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update33 = function(ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF1 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF2 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF3 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF4 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF5 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF6 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF7 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF8 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF9 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF10 text null');\r\n            ctx.executeSql('CREATE index idxCF1 on products(CF1 asc)');\r\n            ctx.executeSql('CREATE index idxCF2 on products(CF2 asc)');\r\n            ctx.executeSql('CREATE index idxCF3 on products(CF3 asc)');\r\n            ctx.executeSql('CREATE index idxCF4 on products(CF4 asc)');\r\n            ctx.executeSql('CREATE index idxCF5 on products(CF5 asc)');\r\n            ctx.executeSql('CREATE index idxCF6 on products(CF6 asc)');\r\n            ctx.executeSql('CREATE index idxCF7 on products(CF7 asc)');\r\n            ctx.executeSql('CREATE index idxCF8 on products(CF8 asc)');\r\n            ctx.executeSql('CREATE index idxCF9 on products(CF9 asc)');\r\n            ctx.executeSql('CREATE index idxCF10 on products(CF10 asc)');\r\n \r\n            return 'add custom attributes to the Product table';\r\n        };\r\n\r\n        this.update34 = function(ctx) {\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF1 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF2 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF3 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF4 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF5 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF6 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF7 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF8 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF9 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF10 text null');\r\n \r\n            return 'add custom attributes to the productsSearchTemp table';\r\n        };\r\n\r\n        this.update35 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSeeAllSales bit not null default 0');\r\n\r\n            return 'added user permission field CanSeeAllSales';\r\n        };\r\n\r\n\r\n        this.update36 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN PriceTier text null');\r\n\r\n            return 'added PriceTier customers column';\r\n        };\r\n\r\n        this.update37 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanDoLayby bit not null default 0');\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSeeStockValue bit not null default 0');\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSeeItemValue bit not null default 0');\r\n\r\n            return 'added user permission fields CanDoLayby, CanSeeStockValue, CanSeeItemValue';\r\n        };\r\n\r\n        this.update38 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE offSales ADD COLUMN ErrorText text null');\r\n            return 'added ErrorText for offSales table';\r\n        };\r\n\r\n        this.update39 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanVoidSales bit not null default 0');\r\n\r\n            return 'added user permission fields CanVoidSales';\r\n        };\r\n\r\n        this.update40 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSaleRep bit not null default 1');\r\n\r\n            return 'added user permission fields CanSaleRep';\r\n        };\r\n\r\n        this.update41 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanClearOfflineSales bit not null default 0');\r\n\r\n            return 'added user permission field CanClearOfflineSales';\r\n        };\r\n\r\n        this.update42 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists registryOrders(OrderID text not null, RegistryCloseID text not null, Status text not null, CreatedDate datetime not null)');\r\n\r\n            return 'add registryOrders table for order status tracking';\r\n        };\r\n\r\n        this.update43 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists orderPayments(OrderID text not null, Refunds text, Payments text, CreatedDate datetime not null)');\r\n\r\n            return 'add orderPayments table for tracking refunds and payments';\r\n        };\r\n\r\n        // all updates should be sequential without any gap\r\n        this.registeredUpdates = {\r\n            2: this.update2,\r\n            3: this.update3,\r\n            4: this.update4,\r\n            5: this.update5,\r\n            6: this.update6,\r\n            7: this.update7,\r\n            8: this.update8,\r\n            9: this.update9,\r\n            10: this.update10,\r\n            11: this.update11,\r\n            12: this.update12,\r\n            13: this.update13,\r\n            14: this.update14,\r\n            15: this.update15,\r\n            16: this.update16,\r\n            17: this.update17,\r\n            18: this.update18,\r\n            19: this.update19,\r\n            20: this.update20,\r\n            21: this.update21,\r\n            22: this.update22,\r\n            23: this.update23,\r\n            24: this.update24,\r\n            25: this.update25,\r\n            26: this.update26,\r\n            27: this.update27,\r\n            28: this.update28,\r\n            29: this.update29,\r\n            30: this.update30,\r\n            31: this.update31,\r\n            32: this.update32,\r\n            33: this.update33,\r\n            34: this.update34,\r\n            35: this.update35,\r\n            36: this.update36,\r\n            37: this.update37,\r\n            38: this.update38,\r\n            39: this.update39,\r\n            40: this.update40,\r\n            41: this.update41,\r\n            42: this.update42,\r\n            43: this.update43\r\n        };\r\n\r\n        this.appplyUpdates = function (currentVersion, tx) {\r\n            var version = currentVersion;\r\n            if (typeof tx.executeSql === 'function') {\r\n                while (this.registeredUpdates.hasOwnProperty(version + 1)) {\r\n\r\n                    var desc = this.registeredUpdates[version + 1](tx);\r\n\r\n                    version++;\r\n\r\n                    tx.executeSql(\"INSERT INTO versions (Version,Description) VALUES (\" + version + \",'\" + (!desc ? '' : desc) + \"')\");\r\n                }\r\n            }\r\n\r\n            return version;\r\n        };\r\n\r\n        this.getSchema = function () {\r\n\r\n            var settingsTable = {\r\n                name: 'settings',\r\n                columns: [\r\n                    {\r\n                        name: \"Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true\r\n                    },\r\n                    {\r\n                        name: \"Value\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"lastModified\",\r\n                        dataType: JsStore.DATA_TYPE.DateTime,\r\n                        notNull: true,\r\n                        enableSearch: false\r\n                    }\r\n                ],\r\n                version: 2\r\n            };\r\n\r\n            var productsTable = {\r\n                name: 'products',\r\n                columns: [\r\n                    {\r\n                        name: 'ProductID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true,\r\n                        multiEntry: true\r\n                    },\r\n                    {\r\n                        name: \"ProductCode\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"OutletSKU\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Barcode\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Family\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"FamilyID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: \"Category\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: \"CategoryID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"DiscountName\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"DiscountID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Price\",\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        notNull: true,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option1\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option2\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option3\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Discounts\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Taxes\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"LoyaltyEarning\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option1Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option2Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option3Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"ImageID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"FamilyImageID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Tags\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"BrandID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Brand\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: \"ProductShortDescription\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"FamilyShortDescription\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"StocktakeLocked\",\r\n                        dataType: JsStore.DATA_TYPE.Boolean,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"ProductType\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"CostingMethod\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"ExtraInfo\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    }\r\n                ],\r\n                version: 2\r\n            };\r\n\r\n            var customersTable = {\r\n                name: 'customers',\r\n                columns: [\r\n                    {\r\n                        name: 'ID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true,\r\n                        multiEntry: true\r\n                    },\r\n                    {\r\n                        name: 'Name',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: 'Phone',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'MobilePhone',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Email',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'EnableLoyaltyPoints',\r\n                        dataType: JsStore.DATA_TYPE.Boolean,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Discounts',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'MatrixDiscounts',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Discount',\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Addresses',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Taxes',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Account',\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'CreditLimit',\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        enableSearch: false\r\n                    }\r\n                ],\r\n                version: 1\r\n            };\r\n\r\n            var saleRepresentativesTable = {\r\n                name: 'saleRepresentatives',\r\n                columns: [\r\n                    {\r\n                        name: 'ID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true //,\r\n                        //multiEntry: true\r\n                    },\r\n                    {\r\n                        name: 'Name',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'PosOutletID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    }\r\n                ],\r\n                version: 1\r\n            };\r\n            var offlineSalesTable = {\r\n                name: 'offSales',\r\n                version: 3,\r\n                columns: [\r\n                    {\r\n                        name: 'PosName',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'SaleID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'StatusID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'Packed',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'InfoPacked',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'lastModified',\r\n                        dataType: JsStore.DATA_TYPE.DateTime,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'OperationID',\r\n                        dataType: JsStore.DATA_TYPE.String\r\n                    },\r\n                    {\r\n                        name: 'CustomerID',\r\n                        dataType: JsStore.DATA_TYPE.String\r\n                    },\r\n                    {\r\n                        name: 'TotalSum',\r\n                        dataType: JsStore.DATA_TYPE.Number\r\n                    },\r\n                    {\r\n                        name: 'ErrorText',\r\n                        dataType: JsStore.DATA_TYPE.String\r\n                    },\r\n                ],\r\n                version: 1\r\n            }\r\n\r\n            var productsSearchTempTable = angular.copy(productsTable);\r\n            productsSearchTempTable.name = \"productsSearchTemp\";\r\n\r\n            angular.forEach(productsSearchTempTable.columns, function (c) {\r\n                if (c.name === 'Category' || c.name === 'Brand') {\r\n                    c.enableSearch = false;\r\n                }\r\n            });\r\n\r\n            var registryOrdersTable = {\r\n                name: 'registryOrders',\r\n                columns: [\r\n                    {\r\n                        name: 'OrderID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'RegistryCloseID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'Status',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'CreatedDate',\r\n                        dataType: JsStore.DATA_TYPE.DateTime,\r\n                        notNull: true\r\n                    }\r\n                ]\r\n            };\r\n\r\n            var dbVersionTable = {\r\n                name: 'dbVersion',\r\n                columns: [\r\n                    {\r\n                        name: 'version',\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        notNull: true\r\n                    }\r\n                ],\r\n                version: 1\r\n            };\r\n\r\n            var orderPaymentsTable = {\r\n                name: 'orderPayments',\r\n                columns: [\r\n                    {\r\n                        name: 'OrderID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'Refunds',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: 'Payments',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: 'CreatedDate',\r\n                        dataType: JsStore.DATA_TYPE.DateTime,\r\n                        notNull: true\r\n                    }\r\n                ]\r\n            };\r\n\r\n            var res = {\r\n                name: 'crddb',\r\n                tables:\r\n                    [\r\n                        settingsTable,\r\n                        productsTable,\r\n                        customersTable,\r\n                        saleRepresentativesTable,\r\n                        offlineSalesTable,\r\n                        registryOrdersTable,\r\n                        dbVersionTable,\r\n                        orderPaymentsTable\r\n                    ],\r\n                version: 5,\r\n                canMigrateData: true\r\n            };\r\n\r\n            return res;\r\n        };\r\n    }]);","import {DeliveryHelper} from '../../TypePosScripts/Delivery/DeliveryHelper';\r\nimport {Calendar} from '@fullcalendar/core'\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\n\r\nangular.module(\"mainApp\").controller('deliveryCalendarController',\r\n    ['$rootScope', '$scope', 'constants', 'loginService',\r\n        '$timeout', 'errorService', 'gettextCatalog', 'helperService',\r\n        '$locale', 'configService', '$location', '$templateCache', '$compile', '$element',\r\n        function ($rootScope, $scope, constants, loginService,\r\n            $timeout, errorService, gettextCatalog, helperService,\r\n            $locale, configService, $location, $templateCache, $compile, $element) {\r\n\r\n            $scope.showCompleted = true;\r\n            $scope.setStatuses = function() {\r\n                return $scope.showCompleted ? 'Pending,InTransit,Delivered': 'Pending,InTransit';\r\n            };\r\n\r\n            $scope.searchFilter = {\r\n                status: $scope.setStatuses()\r\n             };\r\n\r\n            $scope.$watch('showCompleted',function (newValue, oldValue) {\r\n                if (newValue != oldValue) {\r\n                    $scope.calendar.refetchEvents();\r\n                }\r\n            });\r\n\r\n            $scope.calendar = null;\r\n\r\n            $scope.deliveryHelper = DeliveryHelper.CreateDeliveryHelper(); // must be destoyed when controller goes away\r\n\r\n            $scope.processParams = function() {\r\n                // get filer\r\n                var cs = window.localStorage.getItem('fullCalendarFilters');\r\n                window.localStorage.removeItem('fullCalendarFilters');\r\n                $scope.searchFilter = cs ? JSON.parse(cs) : {};\r\n                if(!$scope.searchFilter)\r\n                    $scope.searchFilter = {};\r\n\r\n                // and clear\r\n                window.localStorage.removeItem('fullCalendarFilters');\r\n\r\n                if($scope.searchFilter.toDate)\r\n                    $scope.searchFilter.toDate = new Date($scope.searchFilter.toDate);\r\n                if($scope.searchFilter.fromDate)\r\n                    $scope.searchFilter.fromDate = new Date($scope.searchFilter.fromDate);\r\n            };\r\n\r\n            $scope.firstTime = true;\r\n\r\n            $scope.loadData = function() {\r\n                $scope.processParams();\r\n\r\n                if($scope.firstTime) {\r\n                    $scope.firstTime = false;\r\n                    var SCOPE = $scope;\r\n                    var calendarEl = document.getElementById('fullCalendar');\r\n                    $scope.calendar = new Calendar(calendarEl, {\r\n                        plugins: [dayGridPlugin],\r\n                        initialView: 'dayGridMonth',\r\n                        firstDay: 1,\r\n                        dayMaxEventRows: 3,\r\n                        events: $scope.loadCalendar,\r\n                        visibleRange: {\r\n                            start: $scope.searchFilter.fromDate,\r\n                            end: $scope.searchFilter.toDate\r\n                        },\r\n                        eventClick: function(info) {\r\n                            SCOPE.gotoDeliveryList(info);\r\n                        },\r\n                        viewDidMount: function(evt) {\r\n                            var toolbar = $('#fullCalendar .fc-toolbar-chunk:last-child');\r\n                            var tpl = $templateCache.get('calendarToolbar');\r\n                            var el = $compile(tpl)(SCOPE);\r\n                            toolbar.prepend(el);\r\n                        },\r\n                    });\r\n\r\n                    $scope.calendar.render();\r\n\r\n                    if ($('.fc-today-button.fc-button.fc-button-primary').length > 0) {\r\n                        $('.fc-today-button.fc-button.fc-button-primary').addClass('btn btn-small btn-primary-outline');\r\n                    }\r\n\r\n                    if ($('.fc-prev-button.fc-button.fc-button-primary').length > 0 && $('.fc-next-button.fc-button.fc-button-primary').length > 0) {\r\n                        $('.fc-prev-button.fc-button.fc-button-primary').addClass('btn btn-small btn-primary-outline');\r\n                        $('.fc-next-button.fc-button.fc-button-primary').addClass('btn btn-small btn-primary-outline');\r\n                    }\r\n\r\n                } else {\r\n                    $scope.calendar.refetchEvents();\r\n                    $scope.calendar.render();\r\n                }\r\n            };\r\n\r\n            $scope.$on('deliveryCalendar.show', function (event, data) {\r\n\r\n                helperService.showDialog($element, function () {\r\n                    $timeout(function () {\r\n                        $scope.loadData();\r\n                    }, 0);\r\n                });\r\n            });\r\n\r\n            $scope.$on(\"$destroy\", function () {\r\n                delete $scope.deliveryHelper;\r\n            });\r\n\r\n            $scope.loadCalendar = function (prms, successCallback, failCallback) {\r\n                   // load data for\r\n                var flt = angular.copy($scope.searchFilter);\r\n                   flt.fromDate = prms.start;\r\n                   flt.toDate = prms.end;\r\n                   flt.status = $scope.setStatuses();\r\n\r\n                   $.blockUI();\r\n                   $scope.deliveryHelper.loadDeliveries(1,\r\n                                10000,\r\n                                flt)\r\n                       .then(function (resp) {\r\n\r\n                           $.unblockUI();\r\n                           return $scope.deliveryHelper.prepareCalendarData(resp.Rows);\r\n                       })\r\n                       .then(function (res) {\r\n                        successCallback(res);\r\n                       })\r\n                       .catch(function (err) {\r\n                           $.unblockUI();\r\n                           failCallback();\r\n                           errorService.showError(err);\r\n                       });\r\n            };\r\n\r\n            $scope.gotoDeliveryList = function(info) {\r\n                helperService.closeDialog('#deliveryCalendarPage');\r\n                helperService.closeDialog('#deliveryDialogModel');\r\n\r\n                $timeout(function(){\r\n                    var filter = {\r\n                        fromDate: info.event.start\r\n                    };\r\n\r\n                    // save filter\r\n                    window.localStorage.setItem('deliveryFilters', JSON.stringify(filter));\r\n                    // $location.path( \"/delivery\" );\r\n                    $rootScope.$broadcast('delivery.reload');\r\n                });\r\n            };\r\n        }\r\n    ]\r\n);","import {DeliveryHelper} from '../../TypePosScripts/Delivery/DeliveryHelper';\r\nimport Enumerable from 'linq';\r\n\r\nangular.module(\"mainApp\").controller('deliveryController',\r\n    ['$rootScope', '$scope', 'constants', 'loginService',\r\n        '$timeout', 'errorService', 'gettextCatalog', 'helperService',\r\n        '$locale', 'stockTakeService', 'soundService', '$location',\r\n        function ($rootScope, $scope, constants, loginService,\r\n            $timeout, errorService, gettextCatalog, helperService, \r\n            $locale, stockTakeService, soundService, $location) {\r\n\r\n            $scope.currentFilter = {\r\n                fromDate: helperService.getFormatedDate2(new Date()),\r\n                toDate: helperService.getFormatedDate2(new Date()),\r\n                outletID: '0',\r\n                status: 'Pending', // can be Pending\r\n                searchText:''\r\n            };\r\n\r\n            $scope.selectedPage = 1;\r\n            $scope.totalPages = 1;\r\n            $scope.itemsByPage = 50;\r\n            $scope.totalRecords = 0;\r\n            $scope.cantExport = false; // always we can //configService.isMobile === true;\r\n            $scope.searchText = '';\r\n\r\n            $scope.data = [];\r\n\r\n            $scope.deliveryHelper = DeliveryHelper.CreateDeliveryHelper(); // must be destoyed when controller goes away\r\n\r\n            $rootScope.$broadcast('header.setCurrentView', {\r\n                viewName: constants.constDeliveryViewName\r\n            }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n            $scope.getDateByFormat = helperService.getDateByFormat;\r\n\r\n            $scope.raiseViewChanged = function () {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('view.loaded');\r\n                });\r\n            };\r\n\r\n            $scope.onLoad = function () {\r\n                $scope.scrollEvent();\r\n                $scope.processParams();\r\n                $.blockUI();\r\n                return helperService.resolvePromise(true)\r\n                    .then(function () {\r\n                        initSelects();\r\n                        return helperService.resolvePromise(true);\r\n                    })\r\n                    .then(function () {\r\n                        $('input, select').trigger('refresh');\r\n                        return helperService.resolvePromise(true);\r\n                    })\r\n                    .then(function () {\r\n                        return stockTakeService.loadUserAvailableOutletsAndRegistries();\r\n                    })\r\n                    .then(function (res) {\r\n                        if (res.data.singleLocation === true) {\r\n                            $scope.locations = res.data.locations;\r\n                            if ($scope.locations.length > 0)\r\n                                $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                        } else {\r\n                            $scope.locations = [{\r\n                                PosOutletID: '0',\r\n                                OutletName: gettextCatalog.getString('All outlets')\r\n                            }].concat(res.data.locations);\r\n                        }\r\n                        return helperService.resolvePromise(true);\r\n                    })\r\n                    .then(function () {\r\n                        return $scope.search(); // load data in according with default filter\r\n                    })\r\n                    .then(function(){\r\n                        $.unblockUI();\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    })\r\n                    .finally(function () {\r\n                        var SCOPE = $scope;\r\n                        $timeout(function () {\r\n                            $('input, select').trigger('refresh');\r\n                        });\r\n                    });\r\n            };\r\n\r\n            $scope.$on(\"delivery.reload\", function () {\r\n                $scope.onLoad();\r\n            });\r\n\r\n            $scope.$watch('currentFilter', function (newVal, oldVal) {\r\n                var nv = angular.copy(newVal);\r\n                delete nv.limit;\r\n                delete nv.page;\r\n                var ov = angular.copy(oldVal);\r\n                delete ov.limit;\r\n                delete ov.page;\r\n                if (angular.equals(nv, ov) !== true)\r\n                    $scope.search();\r\n            }, true);\r\n\r\n            $scope.searchPress = function (event) {\r\n                if (event.which === 13) {\r\n                    $scope.currentFilter.searchText = $scope.searchText;\r\n                }\r\n            };\r\n\r\n            $scope.blur = function(){\r\n                $scope.currentFilter.searchText = $scope.searchText;\r\n            };\r\n\r\n            $scope.$on(\"$destroy\", function () {\r\n                delete $scope.deliveryHelper;\r\n            });\r\n\r\n\r\n            $scope.scrollReachBottomCallback = function (isNewSearch) {\r\n                var SCOPE = $scope;\r\n\r\n                if(!isNewSearch) {\r\n                    if ($scope.selectedPage < $scope.totalPages) {\r\n                        $scope.selectedPage++;\r\n                    } else {\r\n                        return helperService.resolvePromise(true);\r\n                    }\r\n                }\r\n\r\n                var cpy = angular.copy($scope.currentFilter);\r\n\r\n                // fix current filter. set location id\r\n                if($scope.currentFilter.outletID === '0') {\r\n                    cpy.LocationID = '0';\r\n                } else {\r\n                    cpy.LocationID = $scope.getLocationID($scope.currentFilter.outletID);\r\n                }\r\n                    \r\n                $.blockUI();\r\n                return this.deliveryHelper.loadDeliveries(\r\n                             (isNewSearch ? 1 : $scope.selectedPage),\r\n                             $scope.itemsByPage,\r\n                             cpy)\r\n                    .then(function (resp) {\r\n\r\n                        if (isNewSearch) {\r\n                            SCOPE.selectedPage = 1;\r\n                            SCOPE.totalPages = 1;\r\n                            SCOPE.totalRecords = 0;\r\n                            SCOPE.data = [];\r\n                        }\r\n\r\n                        $.each(resp.Rows, function (idx, el) {\r\n                            SCOPE.formatRow(el);\r\n                            SCOPE.data.push(el);\r\n                        });\r\n\r\n                        SCOPE.getPages(resp.Total);\r\n                        $.unblockUI();\r\n                        return helperService.resolvePromise(true);\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.getPages = function (total) {\r\n                $scope.ordersTotal = total;\r\n                var step = $scope.itemsByPage;\r\n                $scope.totalPages = Math.ceil(total / step);\r\n                $scope.totalRecords = total;\r\n                if ($scope.totalPages === 0) {\r\n                    $scope.totalPages = 1;\r\n                }\r\n            };\r\n\r\n            $scope.getLocationID = function(outletID) {\r\n                var d = Enumerable.from($scope.locations)\r\n                .where(function(d) {return d.PosOutletID === outletID;})\r\n                .select(function(d) {return d.LocationID;})\r\n                .firstOrDefault();\r\n\r\n                return d;\r\n            };\r\n\r\n            // Search data by changed filter\r\n            $scope.search = function () {\r\n                return $scope.scrollReachBottomCallback(true);\r\n            };\r\n\r\n            $scope.dateSelectedCallback = function (from, to) {\r\n                $scope.currentFilter.fromDate = from;\r\n                $scope.currentFilter.toDate = to;\r\n            };\r\n\r\n            $scope.formatRow = function (row) {\r\n                var rtm = helperService.getFormatedLocalDateTime(row.StatusDate);\r\n                row.FormattedDate = rtm.date;\r\n                row.FormattedTime = helperService.formatTime(rtm.time);\r\n                if(row.VoidDate) {\r\n                    rtm = helperService.getFormatedLocalDateTime(row.VoidDate);\r\n                    row.FormattedVoidDate = rtm.date;\r\n                }\r\n            };\r\n\r\n            $scope.deactivateSchedule = function(row) {\r\n                /** cancel  */\r\n                $scope.dialogMode = 'cancelDelivery';\r\n                $scope.currentRow = row;\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        gettextCatalog.getString('Delivery task will be cancelled. Would you like to continue?'),\r\n                        gettextCatalog.getString('Yes, cancel'),\r\n                        gettextCatalog.getString('No'));\r\n                return false;\r\n            };\r\n\r\n            $scope.changeDeliveryStatus = function(row) {\r\n                /** complete */\r\n                $scope.dialogMode = 'completeDelivery';\r\n                $scope.currentRow = row;\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        gettextCatalog.getString('Delivery task will be completed. Would you like to continue?'),\r\n                        gettextCatalog.getString('Yes, complete'),\r\n                        gettextCatalog.getString('No'));\r\n\r\n                return false;\r\n            };\r\n\r\n            /** edit delivery */\r\n            $scope.editRow = function(row){\r\n                $rootScope.$broadcast('deliveryDialog.show', \r\n                { \r\n                    sale: {\r\n                        ID: row.EntityID\r\n                    }, \r\n                    addNew: false\r\n                });\r\n            };\r\n\r\n            $scope.print = function(){\r\n                $.blockUI();\r\n                return this.deliveryHelper.printDeliveries($scope.currentFilter)\r\n                    .then(function (resp) {\r\n                        $.unblockUI();\r\n\r\n                        // returned data to pdf\r\n                        return helperService.printPdfReport(resp, 'DeliveryReport.pdf');\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.CompleteDeliveryTask = function(taskID, locationID) {\r\n                $.blockUI();\r\n\r\n                return this.deliveryHelper.UpdateDeliveryTaskStatus(taskID, locationID, 'Completed')\r\n                .then(function(){\r\n                    $.unblockUI();\r\n                    var msg = gettextCatalog.getString(\"Delivery task was completed.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg\r\n                    });\r\n                    soundService.playGood();\r\n                    return $scope.search();\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.CancelDeliveryTask = function(taskID, locationID) {\r\n                $.blockUI();\r\n                return this.deliveryHelper.UpdateDeliveryTaskStatus(taskID, locationID, 'Void')\r\n                .then(function(){\r\n                    $.unblockUI();\r\n                    var msg = gettextCatalog.getString(\"Delivery task was cancelled.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg\r\n                    });\r\n                    soundService.playGood();\r\n                    return $scope.search();\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.processParams = function() {\r\n                // get filer\r\n                var cs = window.localStorage.getItem('deliveryFilters');\r\n                window.localStorage.removeItem('deliveryFilters');\r\n\r\n                if(cs) {\r\n                    var flt = JSON.parse(cs);\r\n                    if(flt){\r\n\r\n                        if(flt.fromDate)\r\n                            flt.fromDate = new Date(flt.fromDate);\r\n                        else\r\n                            flt.fromDate = new Date();\r\n\r\n                        // and clear\r\n                        window.localStorage.setItem('deliveryFilters', null);\r\n\r\n                        $scope.currentFilter = {\r\n                            fromDate: helperService.getFormatedDate2(flt.fromDate),\r\n                            toDate: helperService.getFormatedDate2(flt.fromDate),\r\n                            outletID: '0',\r\n                            status: 'Pending'\r\n                        };\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.scrollEvent = function() {\r\n                var SCOPE = $scope;\r\n                var $this = angular.element(document.querySelector('.flex-body'));\r\n                    $this.bind('scroll', function() {\r\n                        if($this.scrollTop() + $this.innerHeight() >= $this[0].scrollHeight) {\r\n                            console.log('end reached');\r\n                            SCOPE.scrollReachBottomCallback();\r\n                        }\r\n                    });\r\n            };\r\n\r\n            $scope.dialogMode = '';\r\n            $scope.currentRow = null;\r\n            $scope.callbackModal = function () {\r\n                var mode = $scope.dialogMode;\r\n                var row =  $scope.currentRow;\r\n\r\n                $scope.dialogMode = '';\r\n                $scope.currentRow = null;\r\n                if (mode === 'completeDelivery') {\r\n                    $scope.CompleteDeliveryTask(row.TaskID, row.LocationID);\r\n                } else if(mode === 'cancelDelivery') {\r\n                    $scope.CancelDeliveryTask(row.TaskID, row.LocationID);\r\n                }\r\n\r\n            };\r\n\r\n            $scope.fullCalendar = function() {\r\n                // get minimal date for pending items\r\n                var dt = new Date();\r\n                var start = new Date(dt.getFullYear(), dt.getMonth(), 1, 0, 0, 0);\r\n                var end = new Date(dt.getFullYear(), dt.getMonth() + 1, 1, 23, 59, 59);\r\n                var filter = {\r\n                    fromDate: start,\r\n                    toDate: end,\r\n                };\r\n                window.localStorage.setItem('fullCalendarFilters', JSON.stringify(filter));\r\n\r\n                $rootScope.$broadcast('deliveryCalendar.show');\r\n\r\n                // save filter\r\n                // $location.path( \"/deliveryCalendar\" );\r\n            };\r\n\r\n        }\r\n    ]\r\n);","import {DeliveryHelper} from '../../TypePosScripts/Delivery/DeliveryHelper';\r\nimport Enumerable from 'linq';\r\n\r\nangular.module(\"mainApp\").controller('deliveryDialogController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'helperService',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'keyPressDelayService', '$filter',\r\n        'productsService', '$location', 'soundService', '$locale', 'webOnlyProvider', 'uuid2',\r\n        function ($scope, $rootScope, configService, errorService, helperService,\r\n            $element, constants, $timeout, gettextCatalog, keyPressDelayService, $filter, productsService,\r\n            $location, soundService, $locale, webOnlyProvider, uuid2Service) {\r\n\r\n            $scope.dateFormat = helperService.getDateByFormatForMoment();\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            $scope.isContact = true;\r\n            $scope.mode = 'add'; // may be 'edit'\r\n            $scope.caption = '';\r\n            $scope.sale = null;\r\n            $scope.customer = null;\r\n            $scope.deliveryHelper = DeliveryHelper.CreateDeliveryHelper(); // must be destoyed when controller goes away\r\n            $scope.deliveryInterval = configService.deliveryTimeInterval;\r\n            $scope.firstAddFormShow = true;\r\n\r\n            /** form field models */\r\n            $scope.form = {\r\n                customerName: null,\r\n                customerID:  null,\r\n                contactName: null,\r\n                contactID: null,\r\n                phone: null,\r\n                mobilePhone: null,\r\n                email: null,\r\n                addressID: null,\r\n                addressLine1: null,\r\n                addressLine2: null,\r\n                city: null,\r\n                state: null,\r\n                country: null,\r\n                postCode: null,\r\n                deliveryCurrentTime: 0,\r\n                deliveryCurrentRow: null,\r\n                deliveryItems: []\r\n            };\r\n\r\n            $scope.clearDelivery = function(){\r\n                $scope.form.customerName = null;\r\n                $scope.form.customerID =  null;\r\n                $scope.form.deliveryItems = [];\r\n                $scope.clearContact();\r\n                $scope.clearAddress();\r\n            };\r\n\r\n            $scope.clearAddress = function() {\r\n                $scope.form.addressID = null;\r\n                $scope.form.addressLine1 = null;\r\n                $scope.form.addressLine2 = null;\r\n                $scope.form.city = null;\r\n                $scope.form.state = null;\r\n                $scope.form.country = null;\r\n                $scope.form.postCode = null;\r\n            };\r\n\r\n            $scope.clearContact = function() {\r\n                $scope.form.contactName = null;\r\n                $scope.form.contactID = null;\r\n                $scope.form.phone = null;\r\n                $scope.form.mobilePhone = null;\r\n                $scope.form.email = null;\r\n            };\r\n\r\n            $scope.deliveryTimes = [];\r\n            $scope.contacts = [];\r\n            $scope.addresses = [];\r\n\r\n            $scope.generateTime = function(dtStr) {\r\n                $scope.deliveryTimes = $scope.deliveryHelper.generateTime(dtStr);\r\n            };\r\n\r\n            $scope.selectTimeList = false;\r\n            $scope.selectTime = function(id, row) {\r\n                if(row.TaskStatus === 'Completed' || row.TaskStatus === 'Void') return; \r\n\r\n                var el = $('#'+id);\r\n                $('#timePicker').css({\r\n                    top: el[0].offsetTop - 154,\r\n                    left: el[0].offsetLeft\r\n                });\r\n\r\n                try {\r\n                    $scope.form.deliveryCurrentTime = row.DeliveryTime;\r\n                    $scope.form.deliveryCurrentRow = row;\r\n                    $scope.generateTime(row.DeliveryDate);\r\n                    if($scope.deliveryTimes.length > 0) {\r\n                        $scope.selectTimeList = true;\r\n                    }\r\n                } catch(ex){\r\n                    errorService.showError(ex);\r\n                }\r\n            };\r\n\r\n            $scope.setTime = function(value) {\r\n                if(value!=$scope.form.deliveryCurrentRow.DeliveryTime) {\r\n                    $scope.form.deliveryCurrentRow.DeliveryTime = value;\r\n                    $scope.form.deliveryCurrentRow.DeliveryTimeDisplay = helperService.formatTime(value);\r\n                    $scope.form.deliveryCurrentRow.TaskID = null;\r\n                    $scope.form.deliveryCurrentRow.DeliveryNumber = null;\r\n                    $scope.form.deliveryCurrentRow = null;\r\n                }\r\n\r\n                $scope.selectTimeList = false;\r\n            };\r\n\r\n            $scope.$on(\"time-selector.hide\", function () {\r\n                $scope.form.deliveryCurrentRow = null;\r\n                $scope.selectTimeList = false;\r\n            });\r\n\r\n            // show dialog, get some initial data from delivery if required\r\n            $scope.$on('deliveryDialog.show', function (event, data) {\r\n                $scope.sale = data.sale;\r\n                $scope.caption = gettextCatalog.getString('Schedule delivery');\r\n                $scope.clearDelivery();\r\n\r\n                helperService.showDialog($element, function () {\r\n                    $timeout(function () {\r\n                        $scope.loadData();\r\n                    }, 2);\r\n                });\r\n\r\n                $scope.generateTime();\r\n            });\r\n\r\n            $scope.$on(\"$destroy\", function () {\r\n                delete $scope.deliveryHelper;\r\n            });\r\n\r\n            $scope.cancelDialog = function () {\r\n                helperService.closeDialog($element);\r\n                if($scope.wasSaved) {\r\n                    $scope.wasSaved = false;\r\n\r\n                    $rootScope.$broadcast('deliveryDialog.closed', \r\n                    { \r\n                        sale: $scope.sale.ID\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.loadData = function(){\r\n                $.blockUI();\r\n\r\n                // first, try to find and load delivery by ID\r\n                return $scope.deliveryHelper.loadDeliveryBySaleOrder($scope.sale)\r\n                .then(function(res) {\r\n\r\n                    $scope.form.deliveryItems = res.DeliveryItems;\r\n\r\n                    // also isNew flag will be set here\r\n                    $scope.mode = res.IsNew ? 'add' : 'edit';\r\n                    var editDeliveryCaption = 'Schedule Delivery';\r\n\r\n                    if(!res.IsNew) {\r\n                        $scope.form.customerID = res.CustomerID;\r\n                        $scope.form.customerName = res.CustomerName;\r\n                        $scope.fillContactObject(res.ContactDetails);\r\n                        $scope.fillAddressObject(res.ShipAddressDetails);\r\n\r\n                        editDeliveryCaption = 'Schedule Delivery for ' + res.CustomerName;\r\n                    } else if($scope.sale.customer){\r\n                        $scope.processCustomerData($scope.sale.customer);\r\n                    }\r\n\r\n                    $scope.caption = res.IsNew ?\r\n                        gettextCatalog.getString('Schedule delivery') :\r\n                        gettextCatalog.getString(editDeliveryCaption);\r\n\r\n                    $.unblockUI();\r\n                    $scope.updateControls();\r\n                })\r\n                .then(function(){\r\n                    var datePickerFormat = helperService.getDateByFormatForDatePickers();\r\n                    for(var idx = 0; idx<$scope.form.deliveryItems.length; idx++) {\r\n                        $scope.form.deliveryItems[idx].DeliveryDateOld = $scope.form.deliveryItems[idx].DeliveryDate;\r\n                        helperService.setDatepicker(datePickerFormat, '#deliveryDate_'+idx, null, 1,\r\n                                    $scope.clearTime, $scope.form.deliveryItems[idx]);\r\n                    }\r\n\r\n                    $('.scopeID').focus();\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.clearTime = function(obj) {\r\n                if(obj.DeliveryDateOld != obj.DeliveryDate) {\r\n                    $timeout(function(){\r\n                        obj.DeliveryTimeDisplay = null;\r\n                        obj.DeliveryTime = null;\r\n                        obj.DeliveryNumber = null;\r\n                        obj.TaskID = null;\r\n                        obj.DeliveryDateOld = obj.DeliveryDate;\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.updateControls = function() {\r\n                $timeout(function() { \r\n                    if ($scope.firstAddFormShow) {\r\n                        $scope.firstAddFormShow = false;\r\n    \r\n                        initSelects();\r\n                    } else {\r\n                        $('input, select').trigger('refresh');\r\n                    }\r\n                }, 0);\r\n            };\r\n    \r\n            $scope.addCustomer = function () {\r\n                if ($scope.mode === 'add') {\r\n                    var customer = $scope.customer;\r\n\r\n                    $rootScope.$broadcast('addCustomer.show', {\r\n                        mode: 'search'\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.fillContactObject = function(contact) {\r\n                if(contact) {\r\n                    $scope.form.contactName = contact.Name;\r\n                    $scope.form.contactID = !contact.ID ? contact.ContactID : contact.ID;\r\n                    $scope.form.phone = contact.Phone;\r\n                    $scope.form.mobilePhone = contact.MobilePhone;\r\n                    $scope.form.email = contact.Email;   \r\n                }\r\n            };\r\n\r\n            $scope.fillAddressObject = function(address) {\r\n                if(address) {\r\n                    $scope.form.addressID = !address.ID ? address.AddressID : address.ID;\r\n                    $scope.form.addressLine1 = address.Line1;\r\n                    $scope.form.addressLine2 = address.Line2;\r\n                    $scope.form.city = !address.City ? address.CitySuburb : address.City;\r\n                    $scope.form.state = !address.State ? address.StateProvince: address.State;\r\n                    $scope.form.country = address.Country;\r\n                    $scope.form.postCode = !address.Postcode ? address.ZipPostCode : address.Postcode;\r\n                }\r\n            };\r\n\r\n            $scope.fillAddress = function(id) {\r\n                if($scope.customer && $scope.mode === 'add') {\r\n                    var address = Enumerable.from($scope.customer.Addresses)\r\n                    .where(function(x) {return x.ID === id;})\r\n                    .firstOrDefault();\r\n\r\n                    $scope.clearAddress();\r\n                    $scope.fillAddressObject(address);\r\n                }\r\n            };\r\n\r\n            $scope.fillContact = function(id) {\r\n                if($scope.customer && $scope.mode === 'add') {\r\n                    var contact = Enumerable.from($scope.customer.Contacts)\r\n                    .where(function(x) {return x.ID === id;})\r\n                    .firstOrDefault();\r\n\r\n                    $scope.clearContact();\r\n                    $scope.fillContactObject(contact);\r\n                }\r\n            };\r\n\r\n            $scope.$watch(\"form.contactID\", function(newVal, oldVal){\r\n                if(newVal && newVal != oldVal) {\r\n                    $scope.fillContact(newVal);\r\n                }\r\n            });\r\n    \r\n\r\n            $scope.$watch(\"form.addressID\", function(newVal, oldVal){\r\n                if(newVal && newVal != oldVal) {\r\n                    $scope.fillAddress(newVal);\r\n                }\r\n            });\r\n\r\n            $scope.processCustomerData = function(customer) {\r\n                $scope.customer = customer;\r\n                $scope.form.customerID = $scope.customer.ID;\r\n                $scope.form.customerName = $scope.customer.Name;\r\n\r\n                // fill in address\r\n                $scope.clearAddress();\r\n\r\n                if($scope.customer && $scope.customer.Addresses) {\r\n                    $scope.addresses = Enumerable.from($scope.customer.Addresses)\r\n                             .orderBy(function (x) { \r\n                                 var order = 0;\r\n                                 switch(x.Type) {\r\n                                    case 'Shipping':\r\n                                        order+=10;\r\n                                        break;\r\n                                    case 'Billing':\r\n                                        order+=20;\r\n                                        break;\r\n                                    case 'Business':\r\n                                        order+=30;\r\n                                        break;\r\n                                }\r\n\r\n                                if(!x.DefaultForType) order++;\r\n                                return order; \r\n                             }).orderBy(function(x){return x.Type;}).toArray();\r\n\r\n                    var arr = $scope.addresses.filter(function(x){return x.Type === 'Shipping';});\r\n\r\n                    if(arr.length > 0)\r\n                        $scope.addresses = arr;\r\n                    if($scope.addresses.length > 0)\r\n                        $scope.fillAddress($scope.addresses[0].ID);\r\n                }\r\n\r\n                if($scope.customer && $scope.customer.Contacts) {\r\n                    $scope.clearContact();\r\n                    $scope.contacts = Enumerable.from($scope.customer.Contacts)\r\n                                        .orderByDescending(function (x) { return x.Default;})\r\n                                        .select(function(x) {return  { Name: x.Name, ID: x.ID};})\r\n                                        .toArray();\r\n\r\n                    if($scope.contacts.length > 0) {\r\n                        if ($scope.customer.SelectedContact)\r\n                            $scope.fillContact($scope.customer.SelectedContact.ID);\r\n                        else\r\n                            $scope.fillContact($scope.contacts[0].ID);\r\n                    }\r\n                }\r\n\r\n                $scope.updateControls();\r\n            };\r\n\r\n            $scope.$on('addCustomer.selected', function (event, data) {\r\n                let customer = data.customer;\r\n                customer.SelectedContact = null;\r\n\r\n                let searchCustomerText = $('#searchCustomerText').val();\r\n\r\n                if (data.customer && data.customer.Contacts && data.customer.Contacts.length > 0) {\r\n                    searchCustomerText = !!searchCustomerText ? searchCustomerText.toLowerCase().trim() : '';\r\n                    const email = !!data.email ? data.email : '';\r\n\r\n                    const foundContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.Email.toLowerCase() === email) ||\r\n                        (!!temp.Email && temp.Email.toLowerCase() === searchCustomerText) ||\r\n                        (!!temp.Phone && temp.Phone.toLowerCase() === searchCustomerText) ||\r\n                        (!!temp.MobilePhone && temp.MobilePhone.toLowerCase() === searchCustomerText));\r\n\r\n                    if (foundContact)\r\n                        customer.SelectedContact = foundContact;\r\n                    else {\r\n                        const defaultContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.IncludeInEmail));\r\n                        if (defaultContact)\r\n                            customer.SelectedContact = defaultContact;\r\n                        else\r\n                            customer.SelectedContact = data.customer.Contacts[0];\r\n                    }\r\n                }\r\n                $scope.processCustomerData(customer);\r\n                return helperService.resolvePromise(true);\r\n            });\r\n\r\n            $scope.Save = function() {\r\n               // fill deliveryHelper.currentDelivery object with new values\r\n               var delivery = $scope.deliveryHelper.currentDelivery;\r\n\r\n               // common info\r\n               if(!delivery.DeliveryID) delivery.DeliveryID = uuid2Service.newguid();\r\n               delivery.CustomerID = $scope.form.customerID;\r\n               delivery.CustomerName = $scope.form.customerName;\r\n\r\n               // contact\r\n               delivery.ContactDetails.ContactID = $scope.form.contactID;\r\n               if(!delivery.ContactDetails.ContactID)\r\n                    delivery.ContactDetails.ContactID = '00000000-0000-0000-0000-000000000000';\r\n               delivery.ContactDetails.Name = $scope.form.contactName;\r\n               delivery.ContactDetails.Email = $scope.form.email;\r\n               delivery.ContactDetails.Phone = $scope.form.phone;\r\n               delivery.ContactDetails.MobilePhone = $scope.form.mobilePhone;\r\n\r\n               // address\r\n               delivery.ShipAddressDetails.AddressID = $scope.form.addressID;\r\n               if(!delivery.ShipAddressDetails.AddressID)\r\n                    delivery.ShipAddressDetails.AddressID = '00000000-0000-0000-0000-000000000000';\r\n               delivery.ShipAddressDetails.Line1 = $scope.form.addressLine1;\r\n               delivery.ShipAddressDetails.Line2 = $scope.form.addressLine2;\r\n               delivery.ShipAddressDetails.CitySuburb = $scope.form.city;\r\n               delivery.ShipAddressDetails.StateProvince = $scope.form.state;\r\n               delivery.ShipAddressDetails.ZipPostCode = $scope.form.postCode;\r\n               delivery.ShipAddressDetails.Country = $scope.form.country;\r\n\r\n               delivery.DeliveryItems = $scope.form.deliveryItems;\r\n               \r\n               delivery.DeliveryItems.forEach(function(d) {\r\n                    if(d.DeliveryDate && d.DeliveryTime)\r\n                        d.DeliveryDateStr = helperService.toDateFromDatepickerParameter(d.DeliveryDate, \r\n                                                    helperService.formatTime(d.DeliveryTime, true));\r\n                    else {\r\n                        d.DeliveryDateStr = null;\r\n                        d.DeliveryDate = null;\r\n                        d.DeliveryTime = null;\r\n                    }\r\n               });\r\n\r\n               if(delivery.DeliveryItems.filter(function(f){ return f.DeliveryDateStr != null; }).length === 0) {\r\n\r\n                    if($scope.mode === 'add') {\r\n                        errorService.showError(gettextCatalog.getString('Delivery should contain at least one item with a date and time filled in before saving.'));\r\n                    } else {\r\n                        $scope.dialogMode = 'deleteDelivery';\r\n\r\n                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('Delivery without items will be removed. Would you like to continue?'),\r\n                                gettextCatalog.getString('Yes, remove delivery'),\r\n                                gettextCatalog.getString('No'));\r\n                    }\r\n               } else {\r\n                    $scope.SaveInternal();       \r\n               }\r\n            };\r\n\r\n            $scope.wasSaved = false;\r\n\r\n            $scope.SaveInternal = function(exit) {\r\n                $.blockUI();\r\n                var ret = $scope.deliveryHelper.SaveDelivery();\r\n                if(exit) {\r\n                    ret = ret.then(function(){\r\n                        $scope.wasSaved = true;\r\n                        $.unblockUI();\r\n                        $scope.cancelDialog();\r\n                        var msg = gettextCatalog.getString(\"Delivery was successfully saved.\");\r\n                        $rootScope.$broadcast('snackbar.show', {\r\n                            message: msg\r\n                        });\r\n                        soundService.playGood();\r\n    \r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        this.cancelDialog();\r\n                        $scope.showError(err);\r\n                    });\r\n                } else {\r\n                    ret = ret.then(function(res) {\r\n                        $scope.wasSaved = true;\r\n                        $.unblockUI();\r\n                        var msg = gettextCatalog.getString(\"Delivery was successfully saved.\");\r\n                        $rootScope.$broadcast('snackbar.show', {\r\n                            message: msg\r\n                        });\r\n                        soundService.playGood();\r\n                        return $scope.loadData();\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n                    }\r\n\r\n                return ret;\r\n            };\r\n\r\n            $scope.dialogMode = '';\r\n\r\n            $scope.callbackModal = function () {\r\n                var mode = $scope.dialogMode;\r\n                $scope.dialogMode = '';\r\n                if (mode === 'deleteDelivery') {\r\n                    $scope.SaveInternal(true);\r\n                }\r\n\r\n            };\r\n        \r\n            $scope.fullCalendar = function() {\r\n                // get minimal date for pending items\r\n                var dt = $scope.deliveryHelper.getMinimalPendingDate();\r\n                var start = new Date(dt.getFullYear(), dt.getMonth(), 1, 0, 0, 0);\r\n                var end = new Date(dt.getFullYear(), dt.getMonth() + 1, 1, 23, 59, 59);\r\n                var filter = {\r\n                    fromDate: start,\r\n                    toDate: end,\r\n                };\r\n\r\n                // save filter\r\n                window.localStorage.setItem('fullCalendarFilters', JSON.stringify(filter));\r\n                $rootScope.$broadcast('deliveryCalendar.show');\r\n                \r\n//                $location.path( \"/deliveryCalendar\" );\r\n            };\r\n\r\n            $scope.getStatusColor = function(row) {\r\n                if(row.TaskStatus === \"Completed\" || row.TaskStatus === \"completed\")\r\n                {\r\n                    return {'background-color': '#F9E491'};\r\n                } \r\n                else if(row.TaskStatus === \"Void\" || row.TaskStatus === \"void\")\r\n                {\r\n                    return {'background-color': '#FE8181'};\r\n                }\r\n                else if(row.TaskStatus === \"In progress\" || row.TaskStatus === \"in progress\")\r\n                {\r\n                    return {'background-color': '#D6E3F3'};\r\n                }\r\n            };\r\n\r\n            $scope.cloneDate = function(row) {\r\n                var lst = $scope.form.deliveryItems.filter(function(d){return d.ProductID !== row.ProductID;});\r\n                lst.forEach(function(d) {\r\n                    d.DeliveryTimeDisplay = row.DeliveryTimeDisplay;\r\n                    d.DeliveryTime = row.DeliveryTime;\r\n                    d.DeliveryDate = row.DeliveryDate;\r\n                    d.DeliveryDateOld = row.DeliveryDateOld;\r\n                    d.DeliveryDateStr = row.DeliveryDateStr;\r\n                    d.DeliveryNumber = null;\r\n                    d.TaskID = null;\r\n            });\r\n            };\r\n        }\r\n    ]);","/*\r\n all directives used through the project\r\n*/\r\nimport { OptionsTreeItem } from './OptionsTreeItem';\r\nimport keyboardPartial from '../PosViews/numberKeyboardPartial.html';\r\nimport dateRangeSelector from '../PosViews/dateRangeSelector.html';\r\n\r\nfunction type(details) {\r\n    details.constructor.prototype = details;\r\n    return details.constructor;\r\n}\r\n\r\nangular.module('mainApp')\r\n.directive('formAutofillFix', function () {\r\n    return function (scope, elem, attrs) {\r\n\r\n        // Fix autofill issues where Angular doesn't know about autofilled inputs\r\n        if (attrs.ngSubmit) {\r\n            setTimeout(function () {\r\n                elem.unbind('submit').submit(function (e) {\r\n                    e.preventDefault();\r\n                    elem.find('input, textarea, select').trigger('input').trigger('change').trigger('keydown');\r\n                    scope.$apply(attrs.ngSubmit);\r\n                });\r\n            }, 0);\r\n        }\r\n    };\r\n})\r\n.directive('showData', function ($compile, $rootScope, printService) {\r\n    return {\r\n        scope: true,\r\n        link: function (scope, element, attrs) {\r\n            attrs.$observe('template', function (tpl) {\r\n                printService.preparePrintTemplate(scope, element, attrs, tpl);\r\n            });\r\n        }\r\n    };\r\n})\r\n.directive('ngmFocus', function ($interval, $rootScope) {\r\n    return {\r\n        scope: {\r\n            trigger: '@ngmFocus'\r\n        },\r\n        link: function (scope, element, attributes) {\r\n            scope.$watch('trigger', function (value) {\r\n                if (value === \"true\") {\r\n                    var stop = $interval(function () {\r\n                        if (document.activeElement === element[0]) {\r\n                            if (angular.isDefined(stop)) {\r\n                                $interval.cancel(stop);\r\n                                stop = undefined;\r\n                            }\r\n\r\n                            scope.$emit('controlFocused');\r\n                            $rootScope.$broadcast(\"autofill.update\");\r\n                        }\r\n                        else {\r\n                            element[0].focus();\r\n                            $(element[0]).select();\r\n\r\n                            scope.trigger = false;\r\n                        }\r\n                    }, 100);\r\n                }\r\n            });\r\n        }\r\n    };\r\n})\r\n.directive(\"ngmAutofill\", function ($interval) {\r\n    return {\r\n        require: \"ngModel\",\r\n        link: function (scope, element, attrs, ngModel) {\r\n            scope.$on(\"autofill.update\", function () {\r\n\r\n                var stop = $interval(function () {\r\n                    if (!!element.val()) {\r\n                        if (angular.isDefined(stop)) {\r\n                            $interval.cancel(stop);\r\n                            stop = undefined;\r\n                        }\r\n                        ngModel.$setViewValue(element.val());\r\n                    }\r\n                }, 100);\r\n\r\n            });\r\n        }\r\n    };\r\n})\r\n.directive('ngmEnter', function () {\r\n    return function (scope, element, attrs) {\r\n        element.bind(\"keydown keypress\", function (event) {\r\n            if (event.which === 13) {\r\n                scope.$apply(function () {\r\n                    scope.$eval(attrs.ngmEnter);\r\n                });\r\n\r\n                event.preventDefault();\r\n            }\r\n        });\r\n    };\r\n})\r\n.directive(\"ngmMakeVisible\", function () {\r\n    return function (scope, element, attrs) {\r\n        $(element).on('shown.bs.collapse', function (evt) {\r\n            var el = $(this).closest('.paymentRow');\r\n            var container = $('#payLines');\r\n\r\n            var containerHeight = container.innerHeight();\r\n            var elHeight = el.outerHeight();\r\n\r\n            var curScroll = container.scrollTop();\r\n            if (el.position()) {\r\n                var elPos = el.position().top;\r\n                var elemBottom = elPos + elHeight;\r\n                if (((elPos - curScroll + elHeight) > containerHeight) ||\r\n                    ((elPos + 4) < curScroll)) {\r\n                    if (elHeight >= containerHeight) {\r\n                        // align top of element to the top of container\r\n                        container.scrollTop(elPos + 4);\r\n                    }\r\n                    else {\r\n                        if ((elPos + 4) < curScroll) {\r\n                            container.scrollTop(elPos + 4);\r\n                        }\r\n                        else {\r\n                            // align bottom of element to the bottom of container\r\n                            container.scrollTop(elPos + 4 - (containerHeight - elHeight));\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n})\r\n.directive('ngmSelectOnClick', function () {\r\n    return {\r\n        restrict: 'A',\r\n        link: function (scope, element) {\r\n            var focusedElement;\r\n            element.on('click', function () {\r\n                if (focusedElement != this) {\r\n                    this.select();\r\n                    focusedElement = this;\r\n                }\r\n            });\r\n            element.on('blur', function () {\r\n                focusedElement = null;\r\n            });\r\n        }\r\n    };\r\n})\r\n.directive('ngmSelect', function () {\r\n    return function (scope, elem, attrs) {\r\n        var el = $(attrs.ngmSelect);\r\n        $(elem).on('shown.bs.collapse', function (evt) {\r\n            el.focus();\r\n            el.select();\r\n        });\r\n    };\r\n})\r\n// .directive('ngmFocusTo', ['configService', '$timeout', function (configService, $timeout) {\r\n//     return function (scope, elem, attrs) {\r\n//         var target = !!attrs.ngmFocusTo ? attrs.ngmFocusTo : null;\r\n//         if (configService.isMobile) {\r\n//             elem.bind('touchstart', function (e) {\r\n//                 var focused = document.activeElement;\r\n//                 if (!!target) {\r\n//                     var t = $(target);\r\n//                     var atr = $(focused).attr('id');\r\n//                     if (!atr || ('#' + atr) !== target) {\r\n//                         e.preventDefault();\r\n//                         t.focus();\r\n//                     }\r\n//                 }\r\n//             });\r\n//         } else {\r\n//             elem.bind('click', function (e) {\r\n//                 $timeout(function () {\r\n//                     var focused = document.activeElement;\r\n//                     if (!!target) {\r\n//                         var t = $(target);\r\n//                         var atr = $(focused).attr('id');\r\n//                         if (!atr || ('#' + atr) !== target) {\r\n//                             e.preventDefault();\r\n//                             t.focus();\r\n//                         }\r\n//                     }\r\n//                 }, 10);\r\n//             });\r\n//         }\r\n//     };\r\n// }])\r\n.directive('ngmClick', ['configService', function (configService) {\r\n    return function (scope, elem, attrs) {\r\n        if (configService.isMobile) {\r\n            elem.bind('touchstart', function (e) {\r\n                e.preventDefault();\r\n                $(e.target).click();\r\n            });\r\n        }\r\n    };\r\n}])\r\n.directive('httpSrc', ['$http', 'cacheService', function ($http, cacheService) {\r\n    var directive = {\r\n        link: link,\r\n        restrict: 'A',\r\n        scope: {\r\n            httpSrc: '@'\r\n        }\r\n    };\r\n    return directive;\r\n\r\n    function link(scope, element, attrs) {\r\n        function getConfig() {\r\n            if (attrs.httpSrc && attrs.takeParentSize) {\r\n                var elem = element.parent();\r\n                var height = parseInt(elem.height());\r\n                var width = parseInt(elem.width());\r\n\r\n                if (width == 0 || height == 0)\r\n                    return {};\r\n\r\n                var isQuickKeyImage = attrs.httpSrc.toLowerCase().indexOf(\"/posquickkeyimages?id\") >= 0;\r\n                if (!isQuickKeyImage)\r\n                    attrs.httpSrc += '&width=' + width + '&height=' + height;\r\n                else\r\n                    attrs.httpSrc += '&Width=' + width + '&Height=' + height;\r\n            }\r\n            var emptyImage = attrs.ngmEmptyImageSrc;\r\n            if (!!emptyImage)\r\n                attrs.$set('src', emptyImage);\r\n\r\n            return {\r\n                method: 'GET',\r\n                url: attrs.httpSrc,\r\n                cache: 'true'\r\n            };\r\n        }\r\n\r\n        function getImage() {\r\n            var config = getConfig();\r\n            if (attrs.httpSrc) {\r\n                attrs.$set('src', config.url);\r\n            }\r\n        }\r\n\r\n        getImage();\r\n\r\n        scope.$on('image.src.update', function (event, data) {\r\n            getImage();\r\n        });\r\n\r\n        scope.$watch('httpSrc', function(val, oldVal){\r\n            if (oldVal != val) {\r\n                getImage();\r\n            }\r\n        });\r\n    }\r\n}])\r\n.directive('getTileImageUrl', ['configService', function (configService) {\r\n    var directive = {\r\n        link: link,\r\n        restrict: 'A',\r\n        scope: {\r\n            isFamily: '=', \r\n            imageId: '=',\r\n            isRealFamily: '=',\r\n            addSize: '=',\r\n            quickImageType: '='\r\n        }\r\n    };\r\n    return directive;\r\n  \r\n\r\n    function link(scope, element, attrs) {\r\n        function getConfig(value) {\r\n            if (value && attrs.takeParentSize) {\r\n                var elem = element.parent();\r\n                var height = parseInt(elem.height());\r\n                var width = parseInt(elem.width());\r\n\r\n                if (width == 0){\r\n                    width = configService.imagesX;\r\n                }\r\n                if (height == 0) {\r\n                    height = configService.imagesY;\r\n                }\r\n\r\n                if (height < 0 || width < 0) {\r\n                    return {};\r\n                }\r\n\r\n                var isQuickKeyImage = value.toLowerCase().indexOf(\"/posquickkeyimages?id\") >= 0;\r\n                if (!isQuickKeyImage)\r\n                    value += '&width=' + width + '&height=' + height;\r\n                else\r\n                    value += '&Width=' + width + '&Height=' + height;\r\n            }\r\n            \r\n            var emptyImage = attrs.ngmEmptyImageSrc;\r\n            \r\n            if (!value && !!emptyImage) {\r\n                return {\r\n                    method: 'GET',\r\n                    url: emptyImage,\r\n                    cache: 'true'\r\n                };\r\n            }                \r\n\r\n            return {\r\n                method: 'GET',\r\n                url: value,\r\n                cache: 'true'\r\n            };\r\n        }\r\n\r\n        function getImageUrl() {\r\n            if (scope.isFamily === scope.isRealFamily && !!scope.imageID) {\r\n                let url = null;\r\n                \r\n                if (!scope.quickImageType) {\r\n                    url = (buildConfiguration.configuration === 'Debug' ? configService.baseURL + '/Product/GetImageRatio' : configService.baseImageURL) + '?id=' + scope.imageID;\r\n                } else {\r\n                    url = configService.connectionURL + '/PosQuickKeyImages?ID=' + scope.imageID + '&imageContentType=' + encodeURIComponent(scope.quickImageType);\r\n                }\r\n                \r\n                if (scope.addSize === true) {\r\n                    url += '&Width=' + configService.imagesX + '&Height=' + configService.imagesY;\r\n                }\r\n\r\n                return url;\r\n            }\r\n            return null;\r\n        };\r\n\r\n        function getImage() {\r\n            // fix because angular adds capital letter onlu after dash\r\n            scope.imageID = scope.imageId;\r\n            const value = getImageUrl();\r\n            var config = getConfig(value);\r\n            if (config.url) {\r\n                attrs.$set('src', config.url);\r\n            }\r\n        };\r\n\r\n        getImage();\r\n\r\n        var onChange = function(val, oldVal){\r\n            //if (oldVal !== val) {\r\n                getImage();\r\n           // }\r\n        };\r\n\r\n        scope.$watch('imageId', onChange)\r\n        scope.$watch('isRealFamily', onChange)\r\n        //scope.$watch('addSize', onChange)\r\n        scope.$watch('quickImageType', onChange)\r\n\r\n        scope.$on('image.src.update', function (event, data) {\r\n            getImage();\r\n        });\r\n    }\r\n}])\r\n.directive('ngmKeyboard', ['$filter', 'helperService', 'configService', '$timeout', 'constants',\r\n    function ($filter, helperService, configService, $timeout, constants) {\r\n        var directive = {\r\n            link: link,\r\n            transclude: true,\r\n            restrict: 'E',\r\n            templateUrl: keyboardPartial,\r\n            scope: {\r\n            }\r\n        };\r\n\r\n        return directive;\r\n\r\n        function link(scope, element, attrs) {\r\n            if (configService.isMobile && helperService.checkDeviceVersion()) {\r\n                var elems = element[0].querySelectorAll('.customKeyboardButton');\r\n                $.each(elems, function (eix, el) {\r\n                    var elem = angular.element(el);\r\n                    elem.on('touchend', function (e) {\r\n                        //console.log('keyboard touchend');\r\n                        e.preventDefault();\r\n                        e.target.click();\r\n                    });\r\n                });\r\n            }\r\n\r\n            scope.model = 0;\r\n            var type = attrs.type;\r\n\r\n            if (!!attrs.floatPrecision) {\r\n                var prn = scope.$parent;\r\n                while (prn != null) {\r\n                    if (prn.hasOwnProperty(attrs.floatPrecision)) {\r\n                        scope.floatPrecision = prn[attrs.floatPrecision];\r\n                        break;\r\n                    }\r\n                    prn = prn.$parent;\r\n                }\r\n            }\r\n\r\n            if (!scope.floatPrecision)\r\n                scope.floatPrecision = 2;\r\n\r\n            scope.type = type;\r\n            scope.firstShow = true;\r\n            scope.selectValue = true;\r\n            scope.positiveSign = true;\r\n\r\n            if (type === 'integer') {\r\n                scope.formattedModel = scope.model;\r\n            } else {\r\n                if (type === 'floatCalculator') {\r\n                    scope.formattedModel = $filter('number')(scope.model, scope.floatPrecision);\r\n                }\r\n                else {\r\n                    var v = scope.model + '';\r\n                    if (!v)\r\n                        v = '0';\r\n                    scope.formattedModel = v;\r\n                }\r\n            }\r\n\r\n            scope.selectSum = function () {\r\n                var el = element.find('div.keybordValue span');\r\n\r\n                var doc = document\r\n                    , text = doc.querySelector(el)\r\n                    , range, selection\r\n                ;\r\n\r\n                if (typeof doc.body.createTextRange === 'function') {\r\n                    range = document.body.createTextRange();\r\n                    range.moveToElementText(text);\r\n                    range.select();\r\n                } else if (window.getSelection) {\r\n                    selection = window.getSelection();\r\n                    range = document.createRange();\r\n                    range.selectNodeContents(text);\r\n                    selection.removeAllRanges();\r\n                    selection.addRange(range);\r\n                }\r\n            };\r\n\r\n            scope.$watch('model', function (newValue, oldValue) {\r\n                if (type === 'integer') {\r\n                    scope.formattedModel = scope.model;\r\n                } else {\r\n                    if (type === 'floatCalculator')\r\n                        scope.formattedModel = $filter('number')(scope.model, scope.floatPrecision);\r\n                    else {\r\n                        var v = scope.model + '';\r\n                        if (!v) {\r\n                            v = '0';\r\n                        }\r\n                        if (v=='0' && scope.formattedModel !== v) {\r\n                            scope.resetFontSize();\r\n                        }\r\n                        scope.formattedModel = v;\r\n                    }\r\n                }\r\n            });\r\n\r\n            scope.AvailablePT = [36, 32, 28, 24, 20];\r\n\r\n            scope.resetFontSize = function() {\r\n                var childClass = 'keyboardValue-Text';\r\n                var defaultSize = 36;\r\n                var children = element.find('.' + childClass);\r\n                childClass += ' ' + 'product-text' + (defaultSize + '').replace('.', '-');\r\n\r\n                children.get(0).className = childClass;\r\n            };\r\n\r\n            scope.fitFontSize = function() {\r\n                // var childClass = child + \"-measure\";\r\n                // var children = $(\".\" + childClass);\r\n                // if (children.length > 0) {\r\n\r\n                    var childClass = 'keyboardValue-Text';\r\n                    var defaultSize = 36;\r\n                    var children = element.find('.' + childClass);\r\n\r\n                    var maxWidth = children.first().closest('.keyboardValue').width()-30;\r\n                    //var maxHeight = children.first().closest('.keyboardValue').height();\r\n\r\n                    children.each(function (idx, el) {\r\n                        var txt = this;\r\n                        for (var i = 0; i < scope.AvailablePT.length; i++) {\r\n                            var v = scope.AvailablePT[i];\r\n                            if (v <= defaultSize) {\r\n                                var className = childClass;\r\n                                if (v != defaultSize)\r\n                                    className += ' ' + 'product-text' + (v + '').replace('.', '-');\r\n                                if (txt.className.trim() != className) {\r\n                                    txt.className = className;\r\n                                }    \r\n\r\n                                var elWidth = el.offsetWidth;\r\n                                //var elHeight = el.offsetHeight;\r\n                                if (elWidth > maxWidth /*|| elHeight > maxHeight*/) {\r\n                                    continue;\r\n                                }\r\n                                else {\r\n                                    console.log(elWidth /*+ '-' + elHeight*/);\r\n                                    break;\r\n                                }\r\n                            }\r\n                        }\r\n                    });\r\n                //}\r\n            };\r\n\r\n            scope.setFocus = function () {\r\n                element.find('button:first').focus();\r\n            };\r\n\r\n            scope.clickFun = function (symb) {\r\n                var SCOPE = scope;\r\n                $timeout(function () {\r\n                    console.log('clickFun posted');\r\n                    if (type === 'integer') {\r\n                        var v = SCOPE.model;\r\n                        if (SCOPE.firstShow) {\r\n                            v = 0;\r\n                            SCOPE.firstShow = false;\r\n                        }\r\n\r\n                        if (symb == 'backspace') {\r\n                            v = Math.floor(parseInt(v) / 10);\r\n                        } else if (symb == '00') {\r\n                            v = parseInt(v) * 100;\r\n                        } else {\r\n                            v = parseInt(v * 10) + parseInt(symb);\r\n                        }\r\n                        SCOPE.model = v;\r\n                    } else {\r\n\r\n                        if (type === 'floatCalculator') {\r\n                            var v = parseFloat('0' + SCOPE.model);\r\n                            if (SCOPE.firstShow) {\r\n                                v = 0;\r\n                                SCOPE.firstShow = false;\r\n                            }\r\n\r\n                            if (symb == 'backspace') {\r\n                                v = Math.floor(v * 10) / 100;\r\n                            } else if (symb == '00') {\r\n                                v = v * 100;\r\n                            }\r\n                            else {\r\n                                v = v * 10 + parseFloat(symb) / 100;\r\n                            }\r\n\r\n                            SCOPE.model = scope.applyFractionalLimit(v + '');\r\n                        }\r\n                        else {\r\n                            var v = SCOPE.model + '';\r\n                            if (SCOPE.firstShow) {\r\n                                v = '0';\r\n                                SCOPE.firstShow = false;\r\n                            }\r\n\r\n                            if (symb == 'backspace') {\r\n                                v = v.substr(0, v.length - 1);\r\n                            }\r\n                            else if (symb == '.') {\r\n                                if (v.indexOf('.') < 0 && v.length > 0) {\r\n                                    v += '.';\r\n                                }\r\n                            }\r\n                            else if (symb >= '0' && symb <= '9') {\r\n                                v = v + symb;\r\n                            }\r\n\r\n                            if (!v)\r\n                                v = '0';\r\n                            else {\r\n                                // remove leading 0, leave only one if point exists\r\n\r\n                                while (v.length > 0 && v[0] == '0')\r\n                                    v = v.substr(1);\r\n\r\n                                if (v.length == 0)\r\n                                    v = '0';\r\n                                if (v[0] == '.')\r\n                                    v = '0' + v;\r\n                            }\r\n\r\n                            var tmpModel = scope.applyFractionalLimit(v);\r\n                            if (tmpModel.length > constants.customKeyboardMaxLenth) {\r\n                                return;\r\n                            }\r\n                            SCOPE.model = scope.applyFractionalLimit(v);\r\n                        }\r\n                    }\r\n                    $timeout(function(){\r\n                        SCOPE.fitFontSize();\r\n                    });                     \r\n                });\r\n            };\r\n\r\n            scope.applyFractionalLimit = function (val) {\r\n                if (scope.floatPrecision > 0 || !val && val.length > 1) {\r\n                    var pointPos = val.indexOf('.');\r\n                    if (pointPos >= 0 && (val.length - pointPos - 1) > scope.floatPrecision) {\r\n                        return val.substring(0, pointPos + 1 + scope.floatPrecision);\r\n                    }\r\n                }\r\n\r\n                return val;\r\n            };\r\n\r\n            scope.pressFun = function (symb) {\r\n                scope.$apply(function () {\r\n                    scope.clickFun(symb);\r\n                });\r\n            };\r\n\r\n            $(window).on(\"resize\", function () {\r\n                $timeout(function () { \r\n                    scope.fitFontSize();\r\n                });\r\n            });\r\n        }\r\n    }\r\n])\r\n.directive('ngmPopoverDialog',\r\n    ['$compile', '$filter', 'helperService', '$timeout', 'configService', '$locale', 'errorService',\r\n    function ($compile, $filter, helperService, $timeout, configService, $locale, errorService) {\r\n        var directive = {\r\n            link: link,\r\n            restrict: 'A',\r\n            scope: {\r\n                //                     ngmPopoverDialog: '=', // used indirectly later\r\n                ngModel: '=',\r\n                ngmPopoverCallback: '&',\r\n                ngmDiscountCodeTextModel: '='\r\n            }\r\n        };\r\n\r\n        return directive;\r\n\r\n        function link(scope, element, attrs) {\r\n            var ht = element.html();\r\n            scope.dlg = $(attrs.ngmPopoverTarget);\r\n            scope.btnVar = attrs.ngActiveButtonModel;\r\n            scope.info1Var = attrs.ngInfo1Model;\r\n            scope.canChangeSignVar = attrs.ngmCanChangeSignModel;\r\n            scope.titleVar = attrs.ngmPopoverTitleModel;\r\n            scope.ngmEnterCallCallback = attrs.ngmEnterCallCallback;\r\n            scope.discountCodeZoneCls = attrs.ngmDiscountCodeZoneClsModel;\r\n            scope.ngmTitleCodeText = attrs.ngmTitleCodeText;\r\n            scope.ngmDiscountCodeTitleText = attrs.ngmDiscountCodeTitleText;\r\n\r\n            scope.discountCode='';\r\n            scope.isValidCode = false;\r\n\r\n            scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            scope.toggleSign = function () {\r\n                scope.$$childHead.signIsPositive = scope.$$childHead.signIsPositive ? false : true;\r\n            };\r\n\r\n            var discountCodeZoneCls = '';\r\n            var titleCodeText='';\r\n            var prnVar = attrs.ngmPopoverDialog;\r\n            var title = attrs.ngmPopoverTitle;\r\n            var placement = attrs.ngmPlacement;\r\n            if (!placement)\r\n                placement = 'auto left';\r\n\r\n            scope.displayMode = attrs.ngmDisplayMode;\r\n            if (!scope.displayMode)\r\n                scope.displayMode = 'popover';\r\n\r\n            scope.inited = false;\r\n            scope.showDialog = function () {\r\n                if (!scope.inited) {\r\n                    scope.inited = true;\r\n                    if (scope.displayMode == 'popover') {\r\n                        scope.dlg.on('show.bs.popover', function (e) {\r\n                            var popel = $('body');\r\n                            popel.prepend('<div class=\"dp_drawer_ex\"></div>');\r\n                            var SCOPE = scope;\r\n                            //$timeout(function () {\r\n                            //    SCOPE.$$childHead.firstShow = true;\r\n                            //});\r\n\r\n                        });\r\n\r\n                        scope.dlg.on('hide.bs.popover', function (e) {\r\n                            var SCOPE = scope;\r\n                            $timeout(function () {\r\n                                $('.dp_drawer_ex').remove();\r\n                            }, 300);\r\n                        });\r\n                    }\r\n                }\r\n\r\n                var SCOPE = scope;\r\n\r\n                $timeout(function () {\r\n                    if (!!SCOPE.titleVar) {\r\n                        title = scope.$parent.$eval(SCOPE.titleVar);\r\n                    }\r\n                    if (!!SCOPE.discountCodeZoneCls) {\r\n                        discountCodeZoneCls = scope.$parent.$eval(SCOPE.discountCodeZoneCls);\r\n                    }\r\n                    if (!!SCOPE.ngmTitleCodeText) {\r\n                        titleCodeText = scope.$parent.$eval(SCOPE.ngmTitleCodeText);\r\n                    }\r\n\r\n                    if (!!SCOPE.canChangeSignVar)\r\n                        scope.canChangeSign = scope.$parent.$eval(scope.canChangeSignVar);\r\n\r\n                    if (!!SCOPE.ngmDiscountCodeTitleText) {\r\n                        scope.LLDiscountType = scope.$parent.$eval(SCOPE.ngmDiscountCodeTitleText);\r\n                    }\r\n\r\n                    if (scope.displayMode == 'popover') {\r\n                        SCOPE.dlg.popover(\r\n                        {\r\n                            placement: placement,\r\n                            html: true,\r\n                            container: 'body',\r\n                            trigger: 'manual',\r\n                            title: title,\r\n                            template: '<div class=\"dp_popover popover dp_modal-select modal-dialog dp_modal-dialog modal-content dp_modal-content popoverKeyboard\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>',\r\n                            content: scope.compiledContent\r\n                        });\r\n                    }\r\n                    else if (scope.displayMode == 'centred-dialog') {\r\n                        if (!SCOPE.$modal) {\r\n\r\n                            var discountCodeFieldTemplate = `\r\n                                <div class=\"${discountCodeZoneCls}\" style=\"margin-right: 20px;\">\r\n                                    <div class=\"cb-fake\">\r\n                                        <span ng-show=\"!ngmDiscountCodeTextModel\">\r\n                                            ${titleCodeText}\r\n                                        </span>\r\n                                        <span ng-show=\"!!ngmDiscountCodeTextModel\">\r\n                                            {{ngmDiscountCodeTextModel}}\r\n                                        </span>\r\n                                    </div>\r\n                                </div>\r\n                            `;\r\n\r\n                            var discountCodeField = !!discountCodeZoneCls ? discountCodeFieldTemplate : '';\r\n\r\n                            var template = `\r\n                                <div class=\"modal keyboard-dialog fade dp_modal custom-modal ifDiscount\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"enterModalLabel1\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"false\">\r\n                                    <div class=\"modal-dialog dp_modal-dialog mobile-dialog-center\" role=\"document\">\r\n                                        <div class=\"modal-content dp_modal-content dialog-gray\">\r\n                                            <div class=\"modal-header dp_modal-header\" style=\"border-bottom: 1px solid #B9BDCE !important;\">\r\n                                                <div class=\"header-container\">\r\n                                                    <div class=\"header-container-row\">\r\n                                                        <div>\r\n                                                            <h4 class=\"modal-title dp_modal-title\" id=\"enterModalLabel1\">${title}</h4>\r\n                                                        </div>\r\n                                                        ${discountCodeField}\r\n                                                        <div class=\"btn-cancel-keyboard-dialog\"></div>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div class=\"modal-body dp_modal-body padding-top-bottom-0 hidden-overflow no-footer\"></div>\r\n                                            <div class=\"modal-footer\"></div>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            `;\r\n\r\n                            // var template =\r\n                            //     '<div class=\"modal keyboard-dialog fade dp_modal custom-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"enterModalLabel1\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"false\">' +\r\n                            //     '    <div class=\"modal-dialog dp_modal-dialog mobile-dialog-center\" role=\"document\">' +\r\n                            //     '        <div class=\"modal-content dp_modal-content dialog-gray\">' +\r\n                            //     '\t\t\t<div class=\"modal-header dp_modal-header\">' +\r\n                            //     '\t\t\t\t<div class=\"header-container\">' +\r\n                            //     '\t\t\t\t\t<div class=\"header-container-row\">' +\r\n                            //     '\t\t\t\t\t\t<div>' +\r\n                            //     '\t\t\t\t\t\t\t<h4 class=\"modal-title dp_modal-title\" id=\"enterModalLabel1\">' + title + '</h4>' +\r\n                            //     '\t\t\t\t\t\t</div>' +\r\n                            //     '                       <div class=\"btn-cancel-keyboard-dialog\">' +\r\n                            //     '                       </div>' +\r\n                                \r\n                            //     (!!discountCodeZoneCls ? \r\n                            //     '                       <div class=\"'+discountCodeZoneCls+'\"><div class=\"cb-fake\"><span ng-show=\"!ngmDiscountCodeTextModel\">'+titleCodeText+'</span><span ng-show=\"!!ngmDiscountCodeTextModel\">{{ngmDiscountCodeTextModel}}</span>'+\r\n                            //     '                       </div></div>' :\r\n                            //     '                       ') +\r\n                            //     '\t\t\t\t\t</div>' +\r\n                            //     '\t\t\t\t</div>' +\r\n                            //     '\t\t\t</div>' +\r\n                            //     '\t\t\t<div class=\"modal-body dp_modal-body padding-top-bottom-0 hidden-overflow no-footer\">' +\r\n                            //     '\t\t\t</div>' +\r\n                            //     '           <div class=\"modal-footer\">' +\r\n                            //     '           </div>' +\r\n                            //     '        </div>' +\r\n                            //     '    </div>' +\r\n                            //     '</div>';\r\n\r\n                            var tpl = $compile($(template))(SCOPE);\r\n                            SCOPE.$modal = tpl;//$(template);\r\n                            SCOPE.$modal.find('.modal-body').append(scope.compiledContent);\r\n                            var btnCancel = $compile('<span class=\"close-modal-dialog-button pointerCursor\" ng-mobile-click=\"callback(\\'cancel\\');\" style=\"color: grey; font-size: 25px; font-weight: 500;\">x</span>')(SCOPE);\r\n                            SCOPE.$modal.find('.btn-cancel-keyboard-dialog').append(btnCancel);\r\n                        }\r\n                        // SCOPE.$modal.find('.modal-body').empty();\r\n                        // SCOPE.$modal.find('.modal-body').append(scope.compiledContent);\r\n                        SCOPE.$modal.modal('show');\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        SCOPE.$$childHead.firstShow = true;\r\n                        if (scope.displayMode == 'popover') {\r\n                            scope.dlg.popover('show');\r\n                        }\r\n                        else if (scope.displayMode == 'centred-dialog') {\r\n                            if (SCOPE.$modal) {\r\n                                SCOPE.$modal.modal('show');\r\n                            }\r\n                        }\r\n                    }, 0);\r\n                });\r\n\r\n            };\r\n\r\n            scope.keyHandler = function (e) {\r\n                var SCOPE = scope;\r\n\r\n                //console.log('pressed');\r\n                console.log('keyCode=' + e.keyCode)\r\n                if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105) || e.keyCode == 190 || e.keyCode == 110) {\r\n                    SCOPE.$$childHead.pressFun(e.key);\r\n                }\r\n                else if (e.keyCode == 8) {\r\n                    SCOPE.$$childHead.pressFun('backspace');\r\n                }\r\n                else if(e.keyCode === 13){\r\n                    if(scope.ngmEnterCallCallback == 'true'){\r\n                        scope.callback(true, e);\r\n                    }\r\n                }else if(e.keyCode === 27){\r\n                    scope.callback('cancel', e);\r\n                }\r\n\r\n                e.preventDefault();\r\n            };\r\n\r\n            scope.ngmPopoverDialog = {\r\n                toggle: function (target) {\r\n\r\n                    if (this.isShown)\r\n                        this.hide(false);\r\n                    else\r\n                        this.show(target);\r\n                },\r\n                isShown: false,\r\n                show: function (target) {\r\n                    var timeout = 1;\r\n                    if (this.isShown) {\r\n                        setTimeout(function(){                                \r\n                            if (scope.displayMode == 'popover') {\r\n                                scope.dlg.popover('hide');\r\n                            }\r\n                            else if (scope.displayMode == 'centred-dialog' && scope.$modal) {\r\n                                scope.$modal.modal('hide');\r\n                            }\r\n                        });\r\n                        timeout = 300;\r\n                    }\r\n                    \r\n                    if (configService.isMobile) {\r\n                        Keyboard.hide();\r\n                    }\r\n\r\n                    scope.activeButton = !!scope.btnVar ? scope.$parent.$eval(scope.btnVar) : null;\r\n                    scope.info1 = !!scope.info1Var ? scope.$parent.$eval(scope.info1Var) : null;\r\n\r\n                    if (!scope.compiledContent) {\r\n                        scope.compiledContent = $compile(ht)(scope);\r\n                    }\r\n\r\n\r\n                    if (target) {\r\n                        scope.dlg = $(target);\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        scope.$$childHead.model = helperService.formatFloatNumber(Math.abs(scope.ngModel));\r\n                        scope.$$childHead.signIsPositive = scope.ngModel < 0 ? false : true;\r\n                    });\r\n\r\n                    $(document).on('keydown', scope.keyHandler);\r\n                    \r\n                    setTimeout(function(){   \r\n                        scope.showDialog();\r\n                        timeout = 1;\r\n                    }, timeout);\r\n                    this.isShown = true;\r\n                \r\n                },\r\n                hide: function (update) {\r\n                    if (update === true)\r\n                    scope.ngModel = scope.$$childHead.signIsPositive ? scope.$$childHead.model : (-1 * scope.$$childHead.model);\r\n                    \r\n                    this.isShown = false;\r\n\r\n                    $(document).off('keydown', scope.keyHandler);\r\n                    if (scope.displayMode == 'popover') {\r\n                        scope.dlg.popover('hide');\r\n                    }\r\n                    else if (scope.displayMode == 'centred-dialog' && scope.$modal) {\r\n                        scope.$modal.modal('hide');\r\n                    }\r\n                    \r\n                },\r\n                getModelValue: function() {\r\n                    return scope.$$childHead.signIsPositive ? scope.$$childHead.model : (-1 * scope.$$childHead.model);\r\n                },\r\n                clean: function () {\r\n                    scope.$$childHead.model = 0;\r\n                    scope.ngmDiscountCodeTextModel = null;\r\n                    this.hide(true);\r\n                },\r\n                getScope: function () {\r\n                    return scope;\r\n                }\r\n            };\r\n\r\n            scope.callback = function () {\r\n                scope.ngmPopoverCallback().apply(this, arguments);\r\n            };\r\n\r\n            var prn = scope.$parent;\r\n            while (prn != null) {\r\n                if (prn.hasOwnProperty(prnVar)) {\r\n                    prn[prnVar] = scope.ngmPopoverDialog;\r\n                    break;\r\n                }\r\n                prn = prn.$parent;\r\n            }\r\n        }\r\n    }\r\n])\r\n.directive('ngmOptionsDialog',\r\n        ['$compile', '$filter', 'helperService', '$timeout', '$templateCache', '$interpolate', '$rootScope', 'configService',\r\n        function ($compile, $filter, helperService, $timeout, $templateCache, $interpolate, $rootScope, configService) {\r\n            var directive = {\r\n                link: link,\r\n                restrict: 'A',\r\n                scope: {\r\n                    //ngmOptionsDialog: '=', // used indirectly later\r\n                    //ngModel: '=',\r\n                    ngmOptionsCallback: '&'\r\n                }\r\n            };\r\n\r\n            return directive;\r\n\r\n            function link(scope, element, attrs) {\r\n                var ht = $templateCache.get(attrs.ngmTemplate);\r\n                var prnVar = attrs.ngmOptionsDialog;\r\n                var prnModel = attrs.ngModel;\r\n                var title = $templateCache.get(attrs.ngmOptionsTitle);\r\n                //var placement = attrs.ngmOptionsPlacement;\r\n                var entireTemplate = $templateCache.get(attrs.ngmEntireTemplate);\r\n\r\n                scope.model = null;\r\n                scope.currentLevel = 0;\r\n                scope.options = null;\r\n                scope.currentValue = null;\r\n                scope.option1 = null;\r\n                scope.option2 = null;\r\n                scope.option3 = null;\r\n\r\n                scope.compiledContent = null;\r\n                scope.compiledTitle = null;\r\n\r\n                scope.isOnline = function () {\r\n                    return configService.isOnline === true;\r\n                };\r\n\r\n                scope.selectOption = function (e, key) {\r\n\r\n                    scope.currentValue = scope.currentValue[key];\r\n\r\n                    switch (scope.currentLevel) {\r\n                        case 0:\r\n                            scope.option1 = key;\r\n                            break;\r\n                        case 1:\r\n                            scope.option2 = key;\r\n                            break;\r\n                        case 2:\r\n                            scope.option3 = key;\r\n                            break;\r\n                    }\r\n\r\n                    // if (helperService.checkClickedElement(e, 'QuestionMark')) {\r\n                    //     $rootScope.$broadcast('popover.dialog.hide');\r\n                    //     // get product info\r\n                    //     $rootScope.$broadcast('showAvailabilityCheckDlg',\r\n                    //                    {\r\n                    //                        option1: scope.option1,\r\n                    //                        option2: scope.option2,\r\n                    //                        option3: scope.option3,\r\n                    //                    });\r\n                    //     return;\r\n                    // }\r\n\r\n\r\n                    if (!!scope.currentValue && !(scope.currentValue instanceof OptionsTreeItem)) {\r\n\r\n                        scope.options = Object.keys(scope.currentValue);\r\n                        scope.currentLevel++;\r\n\r\n                        // scope.$modal.one('hidden.bs.modal', function () {\r\n                        //     scope.options = Object.keys(scope.currentValue);\r\n                        //     scope.currentLevel++;\r\n                        //     $timeout(function () {\r\n                        //         scope.showDialog();\r\n                        //     }, 0);\r\n                        // });\r\n\r\n                        //scope.hideDialog();\r\n                    }\r\n                    else {\r\n                        scope.ngmOptionsCallback().call(this, scope.currentValue);\r\n                    }\r\n                };\r\n\r\n                scope.showDialog = function () {\r\n                    //  scope.dlg.popover(\r\n                    //      {\r\n                    //          placement: placement,\r\n                    //          html: true,\r\n                    //          container: 'body',\r\n                    //          trigger: 'manual',\r\n                    //          title: scope.compiledTitle,\r\n                    //          template: entireTemplate,\r\n                    //          content: scope.compiledContent\r\n                    //      });\r\n\r\n                    //  dp_modal-body padding-top-bottom-0 no-footer | ngm-modal-container-height-mobile ngm-modal-container-height-mobile-koef=\"0.8\" ngm-modal-container-height-mobile-margin=\"30\"\r\n                    \r\n                    if (!scope.$modal) {\r\n                        var template =\r\n                            '<div class=\"modal fade dp_modal custom-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"optionEnterModalLabel1\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"false\">' +\r\n                            '    <div class=\"modal-dialog dp_modal-dialog\" role=\"document\">' +\r\n                            '        <div class=\"modal-content dp_modal-content dialog-gray\">' +\r\n                            '\t\t\t<div class=\"modal-header dp_modal-header\">' +\r\n                            '\t\t\t\t<div class=\"header-container\">' +\r\n                            '\t\t\t\t\t<div class=\"header-container-row\">' +\r\n                            '\t\t\t\t\t\t<div>' +\r\n                            '\t\t\t\t\t\t\t<h4 class=\"modal-title dp_modal-title\" id=\"optionEnterModalLabel1\"></h4>' +\r\n                            '\t\t\t\t\t\t</div>' +\r\n                            '                       <div class=\"btn-cancel-productoptions-dialog\"></div>' +\r\n                            '\t\t\t\t\t</div>' +\r\n                            '\t\t\t\t</div>' +\r\n                            '\t\t\t</div>' +\r\n                            '\t\t\t<div class=\"modal-body\">' +\r\n                            '\t\t\t</div>' +\r\n                            '           <div class=\"modal-footer dp_modal-footer\">' +\r\n                            '               <div class=\"btn-back-productoptions-dialog\">' +\r\n                            '               </div>' +\r\n                            '           </div>' +\r\n                            '        </div>' +\r\n                            '    </div>' +\r\n                            '</div>';\r\n\r\n                        var templateCompiled = $compile(template)(scope);\r\n                        scope.$modal = $(templateCompiled);\r\n                        scope.$modal.find('.modal-body').append(scope.compiledContent);\r\n                        var btnCancel = $compile('<span class=\"close-modal-dialog-button pointerCursor\" ng-mobile-click=\"closeDialog();\">x</span>')(scope);\r\n                        scope.$modal.find('.btn-cancel-productoptions-dialog').append(btnCancel);\r\n\r\n                        var btnBack = $compile('<button type=\"button\" class=\"btn btn-small btn-outline\" ng-mobile-click=\"callback();\">Back</span>')(scope);\r\n                        scope.$modal.find('.btn-back-productoptions-dialog').append(btnBack);\r\n                    }\r\n                    scope.$modal.find('#optionEnterModalLabel1').html(scope.compiledTitle);\r\n                    // SCOPE.$modal.find('.modal-body').empty();\r\n                    // SCOPE.$modal.find('.modal-body').append(scope.compiledContent);\r\n                    //scope.$modal.modal('show');\r\n\r\n                    scope.$modal.on('show.bs.modal', function () { });\r\n                    scope.$modal.on('shown.bs.modal', function () {\r\n                        $rootScope.$broadcast('popup.shown');\r\n                    });\r\n\r\n                    scope.$modal.on('hidden.bs.modal', function () {\r\n                        scope.$modal.off('hidden.bs.modal');\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        scope.$modal.modal('show');\r\n                    });\r\n\r\n                };\r\n\r\n                scope.hideDialog = function () {\r\n                    scope.$modal.off('show.bs.modal');\r\n                    scope.$modal.off('shown.bs.modal');\r\n                    scope.$modal.modal('hide');\r\n                };\r\n\r\n                scope.evtHide = scope.$root.$on(\"modal.dialog.hide\", function () {\r\n                    scope.ngmOptionsDialog.hide();\r\n                });\r\n\r\n                scope.$on(\r\n                   \"$destroy\",\r\n                   function handleDestroyEvent() {\r\n                       scope.evtHide();\r\n                   }\r\n               );\r\n\r\n                scope.ngmOptionsDialog = {\r\n                    toggle: function () {\r\n\r\n                        if (this.isShown)\r\n                            this.hide(false);\r\n                        else\r\n                            this.show();\r\n                    },\r\n                    isShown: false,\r\n\r\n                    show: function (target) {\r\n                        if (!this.isShown) {\r\n\r\n                            var prn = scope.$parent;\r\n                            while (prn != null) {\r\n                                if (prn.hasOwnProperty(prnModel)) {\r\n                                    scope.model = prn[prnModel];\r\n                                    break;\r\n                                }\r\n                                prn = prn.$parent;\r\n                            }\r\n\r\n                            scope.currentValue = scope.model.data;\r\n                            scope.options = Object.keys(scope.model.data);\r\n                            scope.currentLevel = 0;\r\n                            scope.compiledContent = $compile(ht)(scope);\r\n                            scope.compiledTitle = $compile(title)(scope);\r\n                            //scope.dlg = $(target);\r\n\r\n                            scope.showDialog();\r\n                            this.isShown = true;\r\n                        }\r\n                    },\r\n                    hide: function () {\r\n                        if (this.isShown) {\r\n                            scope.hideDialog();\r\n                            this.isShown = false;\r\n                        }\r\n                    }\r\n                };\r\n\r\n                scope.closeDialog = function () {\r\n                    //this.isShown = false;\r\n                    $rootScope.$broadcast('modal.dialog.hide');\r\n                    //scope.hideDialog();\r\n                };\r\n\r\n                scope.callback = function () {\r\n                    if (scope.currentLevel > 0) {\r\n\r\n                        // scope.$modal.one('hidden.bs.modal', function () {\r\n\r\n                        //     if (scope.currentLevel > 1) {\r\n\r\n                        //         var parentOption;\r\n\r\n                        //         for (i in scope.currentValue) {\r\n                        //             if (scope.currentValue[i].hasOwnProperty('el')) {\r\n                        //                 parentOption = scope.currentValue[i]['el']['Option1'];\r\n                        //                 break;\r\n                        //             } else {\r\n                        //                 for (j in scope.currentValue[i]) {\r\n                        //                     parentOption = scope.currentValue[i][j]['el']['Option1'];\r\n                        //                     break;\r\n                        //                 }\r\n                        //                 break;\r\n                        //             }\r\n                        //         }\r\n\r\n                        //         scope.currentValue = scope.model.data[parentOption];\r\n                        //         scope.options = Object.keys(scope.model.data[parentOption]);\r\n                        //     } else {\r\n\r\n                        //         scope.currentValue = scope.model.data;\r\n                        //         scope.options = Object.keys(scope.model.data);\r\n                        //     }\r\n\r\n                        //     scope.currentLevel = scope.currentLevel - 1;\r\n                        //     scope.compiledContent = $compile(ht)(scope);\r\n                        //     scope.compiledTitle = $compile(title)(scope);\r\n\r\n                        //     $timeout(function () {\r\n                        //         scope.showDialog();\r\n                        //     }, 0);\r\n                        // });\r\n\r\n                        // scope.hideDialog();\r\n\r\n                        if (scope.currentLevel > 1) {\r\n\r\n                            var parentOption;\r\n\r\n                            for (i in scope.currentValue) {\r\n                                if (scope.currentValue[i].hasOwnProperty('el')) {\r\n                                    parentOption = scope.currentValue[i]['el']['Option1'];\r\n                                    break;\r\n                                } else {\r\n                                    for (j in scope.currentValue[i]) {\r\n                                        parentOption = scope.currentValue[i][j]['el']['Option1'];\r\n                                        break;\r\n                                    }\r\n                                    break;\r\n                                }\r\n                            }\r\n\r\n                            scope.currentValue = scope.model.data[parentOption];\r\n                            scope.options = Object.keys(scope.model.data[parentOption]);\r\n                        } else {\r\n\r\n                            scope.currentValue = scope.model.data;\r\n                            scope.options = Object.keys(scope.model.data);\r\n                        }\r\n\r\n                        scope.currentLevel = scope.currentLevel - 1;\r\n                        scope.compiledContent = $compile(ht)(scope);\r\n                        scope.compiledTitle = $compile(title)(scope);\r\n\r\n                    } else {\r\n                        scope.ngmOptionsCallback().apply(this, arguments);\r\n                    }\r\n                };\r\n\r\n                var prn = scope.$parent;\r\n                while (prn != null) {\r\n                    if (prn.hasOwnProperty(prnVar)) {\r\n                        prn[prnVar] = scope.ngmOptionsDialog;\r\n                        break;\r\n                    }\r\n                    prn = prn.$parent;\r\n                }\r\n            };\r\n        }\r\n        ])\r\n.directive('overwriteEmail', function () {\r\n    var EMAIL_REGEXP = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\n    return {\r\n        require: '?ngModel',\r\n        link: function (scope, elm, attrs, ctrl) {\r\n            // only apply the validator if ngModel is present and AngularJS has added the email validator\r\n            if (ctrl && ctrl.$validators.email) {\r\n\r\n                // this will overwrite the default AngularJS email validator\r\n                ctrl.$validators.email = function (modelValue) {\r\n                    return ctrl.$isEmpty(modelValue) || EMAIL_REGEXP.test(modelValue);\r\n                };\r\n            }\r\n        }\r\n    };\r\n})\r\n.directive('removeNgEmailValidation', function(){\r\n    return {\r\n        require : 'ngModel',\r\n        link : function(scope, element, attrs, ngModel) {\r\n            ngModel.$validators[\"email\"] = function () {\r\n                return true;\r\n            };\r\n        }\r\n    }\r\n})\r\n.directive('ngmMoveFocusTo', ['configService', '$timeout', function (configService, $timeout) {\r\n    return function (scope, elem, attrs) {\r\n        var target = !!attrs.ngmMoveFocusTo ? $(attrs.ngmMoveFocusTo) : elem;\r\n        console.log('ngmMoveFocusTo: ' + attrs.ngmMoveFocusTo);\r\n        console.log(target);\r\n\r\n        var fun = null;\r\n        if (!!elem.data() && !!elem.data().$scope) {\r\n            fun = elem.data().$scope[attrs.ngmMoveFocusTo];\r\n            if (typeof (fun) !== 'function')\r\n                fun = null;\r\n        }\r\n\r\n        elem.focus(function (e) {\r\n            console.log('element got focus: ');\r\n            console.log(e);\r\n            e.preventDefault();\r\n            if (!!fun) {\r\n                $timeout(function () {\r\n                    fun(e);\r\n                }, 100);\r\n            }\r\n            else\r\n                target.focus();\r\n\r\n            //if (configService.isMobile) {\r\n            //    Keyboard.show();\r\n            //}\r\n        });\r\n    };\r\n}])\r\n.directive('equalToValidator', function () {\r\n    return {\r\n        require: 'ngModel',\r\n        link: function (scope, elm, attrs, ngModelCtrl) {\r\n\r\n            ngModelCtrl.$validators.equalToValidator = function (modelValue, viewValue) {\r\n                var checkedVal = attrs.equalToValidator;\r\n                var thisInputVal = viewValue;\r\n\r\n                if (thisInputVal == checkedVal) {\r\n                    return true; // valid\r\n                } else {\r\n                    return false;\r\n                }\r\n            };\r\n        }\r\n    };\r\n}).directive('ngmClearOnFirstKey', function () {\r\n    return function (scope, element, attrs) {\r\n\r\n        element.attr('ngm-enter-pressed', 'false');\r\n\r\n        element.bind(\"keydown keypress\", function (event) {\r\n            var isEnterPressed = element.attr('ngm-enter-pressed') === 'true';\r\n            console.log('key event: ' + event.which);\r\n\r\n            if (event.which === 13) {\r\n                element.attr('ngm-enter-pressed', 'true');\r\n            }\r\n            else if (isEnterPressed) {\r\n                var idx = [8, 9, 37, 38, 39, 40, 46, 17, 18, 19, 20].indexOf(event.which);\r\n                if (idx < 0) {\r\n                    element.val(\"\");\r\n                }\r\n\r\n                element.attr('ngm-enter-pressed', 'false');\r\n            }\r\n        });\r\n    };\r\n}).directive('ngmRedirectChangeEvent', function () {\r\n    return function (scope, element, attrs, $timeout) {\r\n        var SCOPE = scope;\r\n        var mdl = attrs.ngModel;\r\n        var lst = scope[attrs.ngmRedirectChangeEvent];\r\n\r\n        element.bind(\"change\", function (event) {\r\n            console.log('changed');\r\n            var text = element.parent().find('div.jq-selectbox__select-text').text();\r\n            var sItem = lst.filter(function (el) { return el.name == text; });\r\n            SCOPE[mdl] = sItem[0].value;\r\n            //  SCOPE.$broadcast('select.styled.updated', { id: element[0].id, value:element[0].value });\r\n        });\r\n    };\r\n})\r\n.directive('bootstrapSwitch', ['$timeout', function ($timeout) {\r\n    return {\r\n        restrict: 'A',\r\n        scope: {\r\n            model: '=ngModel'\r\n        },\r\n        link: linker\r\n    }\r\n\r\n    function linker(scope, element, attrs, ngModel) {\r\n\r\n        $timeout(function () {\r\n            var v = scope.model == true;\r\n            element.bootstrapSwitch({ state: v }); // set initial value\r\n            element.bootstrapSwitch('state', v == true);\r\n\r\n            element.on('switchChange.bootstrapSwitch', function (event, state) {\r\n                $timeout(function () {\r\n                    scope.model = state;\r\n                    var frm = $(element).closest('form');\r\n                    var scp = element.scope();\r\n                    if(!!frm) {\r\n                        var n = frm.attr('name');\r\n                        if(!!n && typeof(scp[n].$setDirty) === 'function')\r\n                            scp[n].$setDirty();\r\n                    }\r\n                })\r\n                //scope.$apply(function () {\r\n                //    scope.model = state;\r\n                //});\r\n            });\r\n\r\n            //                        scope.evt = scope.$root.$on('popup.show', function (evt) {\r\n            //                                var model = scope.model;\r\n\r\n            //                                $timeout(function () {\r\n            ////                                    var SCOPE = scope;\r\n            //                                    var mname = attrs.ngModel;\r\n            //                                    var v = model;\r\n            //                                    element.bootstrapSwitch('state', v == true, false);\r\n            //                                    console.log('check: '+mname+' value: '+v);\r\n            //                                });\r\n            //                        });\r\n\r\n            scope.$on(\r\n                \"$destroy\",\r\n                function handleDestroyEvent() {\r\n                    //   scope.evt();\r\n                }\r\n            );\r\n\r\n            scope.$watch('model', function (newValue, oldValue) {\r\n                if (newValue != oldValue)\r\n                    element.bootstrapSwitch('state', newValue == true, false);\r\n            });\r\n        });\r\n\r\n    }\r\n}])\r\n.directive('ngmCollapse', ['$rootScope', 'helperService', function ($rootScope, helperService) {\r\n    return {\r\n        restrict: 'A',\r\n        scope: {\r\n            model: '=ngmCollapse'\r\n        },\r\n        link: linker\r\n    };\r\n\r\n    function linker(scope, element, attrs) {\r\n        scope.THIS = scope;\r\n        scope.el = element;\r\n        scope.showValue = !!attrs.ngmShowValue ? attrs.ngmShowValue.split(\",\") : \"\";\r\n        scope.showModal = attrs.ngmShowModal == 'true';\r\n\r\n        scope.evt = $(element).on('show.bs.collapse', function (evt) {\r\n            if (scope.showModal) {\r\n                //                $('#mainAppContainerBody').css('overflow', 'unset');\r\n                $(element).find('.dp_add-head__wrap').addClass('dp_add-head__wrap_modal_fix');\r\n            }\r\n        });\r\n        scope.evt = $(element).on('shown.bs.collapse', function (evt) {\r\n            $rootScope.$broadcast('view.loaded', scope.model);\r\n        });\r\n\r\n        scope.evt = $(element).on('hidden.bs.collapse', function (evt) {\r\n            if (scope.showModal) {\r\n                //              $('#mainAppContainerBody').css('overflow', 'hidden');\r\n                $(element).find('.dp_add-head__wrap').removeClass('dp_add-head__wrap_modal_fix');\r\n            }\r\n        });\r\n\r\n        scope.$on(\r\n            \"$destroy\",\r\n            function handleDestroyEvent() {\r\n                scope.evt.off();\r\n            }\r\n        );\r\n\r\n        scope.$watch(\"model\", function (newVal, oldVal) {\r\n            //  console.log(\"Changed\");\r\n\r\n            if (newVal != oldVal) {\r\n\r\n                if (scope.showValue.indexOf(newVal) >= 0) { // show\r\n                    scope.el.collapse('show');\r\n                }\r\n                else { // hide\r\n                    scope.el.collapse('hide');\r\n                }\r\n            }\r\n        });\r\n    }\r\n}])\r\n.directive(\"refreshTable\", function () {\r\n    return {\r\n        require: 'stTable',\r\n        restrict: \"A\",\r\n        link: function (scope, elem, attrs, table) {\r\n\r\n            var evtName = !!attrs.refreshTable ? attrs.refreshTable : \"refreshStTable\";\r\n\r\n            scope.$on(evtName, function () {\r\n                table.pipe(table.tableState());\r\n            });\r\n        }\r\n    }\r\n})\r\n .directive('stSelectCombo', [function () {\r\n     return {\r\n         restrict: 'A',\r\n         require: '^stTable',\r\n         scope: {\r\n             ngModel: '=',\r\n             stSelectCombo: '@'\r\n         },\r\n         link: function (scope, element, attr, table) {\r\n\r\n\r\n             scope.$watch('ngModel', function (newValue, oldValue) {\r\n\r\n                 if (newValue != oldValue) {\r\n                     var query = {};\r\n                     if (!!newValue)\r\n                         query.distinct = newValue;\r\n                     else\r\n                         query.distinct = null;\r\n\r\n                     table.search(query, scope.stSelectCombo);\r\n                 }\r\n             }, true);\r\n         }\r\n     }\r\n }])\r\n .directive('stPageSelector', [function () {\r\n     return {\r\n         restrict: 'A',\r\n         require: '^stTable',\r\n         scope: {\r\n             stPageSelector: '=',\r\n             pageSize: '=',\r\n             total: '='\r\n         },\r\n         link: function (scope, element, attr, table) {\r\n             function redraw(paginationState, page) {\r\n                 var pages = Math.floor((paginationState.totalItemCount + scope.pageSize - 1) / scope.pageSize);\r\n\r\n                 if (page > 0 && page <= pages) {\r\n                     table.slice((page - 1) * scope.pageSize, scope.pageSize);\r\n                 }\r\n                 else {\r\n                     table.slice(0, scope.pageSize);\r\n                 }\r\n             };\r\n\r\n             var evtName = !!attr.stPageUpdater ? attr.stPageUpdater : \"updater.event\";\r\n\r\n             scope.$on(evtName, function () {\r\n                 var paginationState = table.tableState().pagination;\r\n                 scope.total = paginationState.totalItemCount;\r\n\r\n                 redraw(paginationState, scope.stPageSelector);\r\n             });\r\n\r\n             scope.$watch('stPageSelector', function (newValue, oldValue) {\r\n\r\n                 if (newValue != oldValue) {\r\n                     var paginationState = table.tableState().pagination;\r\n                     scope.total = paginationState.totalItemCount;\r\n\r\n                     redraw(paginationState, scope.stPageSelector);\r\n                 }\r\n             }, true);\r\n\r\n         }\r\n     }\r\n }])\r\n.directive('ngmShowLoaded', ['constants', function (constants) {\r\n    return function (scope, elem, attrs, $rootScope) {\r\n\r\n        scope.evt = scope.$root.$on('view.ready', function (evt) {\r\n            $(elem).removeClass('hidden');\r\n        });\r\n\r\n        scope.$on(\r\n            \"$destroy\",\r\n            function handleDestroyEvent() {\r\n                if (typeof (scope.evt) == 'function')\r\n                    scope.evt();\r\n            }\r\n        );\r\n    };\r\n}])\r\n.directive(\"ngMobileClick\", ['$location','$timeout','$parse',function ($location,$timeout,$parse) {\r\n    return function (scope, elem, attrs) {\r\n        scope.preventClick = false;\r\n        scope.isTouchmove = false;\r\n        scope.moveMoment = null;\r\n\r\n        elem.bind(\"touchstart\", function (e) {\r\n            scope.isTouchmove = false;\r\n            window.lastFocusedElement = document.activeElement;\r\n            // e.preventDefault();\r\n            // e.stopPropagation();\r\n            // return false;\r\n        });\r\n\r\n        elem.bind(\"touchmove\", function (e) {\r\n            scope.isTouchmove = true;\r\n\r\n            if(scope.moveMoment === null)\r\n                scope.moveMoment = e.timeStamp;\r\n            // e.preventDefault();\r\n            // e.stopPropagation();\r\n            //return false;\r\n        }); \r\n\r\n        elem.bind(\"touchend click\", function (e) {\r\n            if (e.cancelable == true) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n            }\r\n\r\n            if(scope.isTouchmove && e.timeStamp - scope.moveMoment < 80){\r\n                scope.isTouchmove = false;                \r\n            }\r\n            scope.moveMoment = null;\r\n\r\n            var stopPropagation = $(e.target).attr(\"stopPropagation\") === \"true\";\r\n\r\n\r\n            var isDisabled = $(e.currentTarget).is(':disabled');\r\n            if (isDisabled != true && !stopPropagation) {\r\n                var fn = $parse(attrs[\"ngMobileClick\"]);\r\n\r\n                if (e.type == \"touchend\") {\r\n                    \r\n                    if (scope.isTouchmove == false) {    \r\n                        scope.preventClick = true;                    \r\n                        $timeout(function () {\r\n                            \r\n                            scope.$apply(function() {\r\n                                fn(scope, {$event:e});\r\n                            });\r\n\r\n                            var href = attrs[\"href\"];\r\n                            if (href && href !='javascript:;'){\r\n                                $location.path(href.replace('#','/'));\r\n                            }\r\n                        },0);\r\n                    }\r\n\r\n                    scope.isTouchmove = false;\r\n                } else if (e.type == \"click\") {\r\n                    // Handle click event.\r\n                    if (scope.preventClick !== true) {\r\n                        $timeout(function () {\r\n                            scope.$apply(function() {\r\n                                fn(scope, {$event:e});\r\n                            });\r\n                            var href = attrs[\"href\"];\r\n                            if (href && href != 'javascript:;'){\r\n                                \r\n                                    $location.path(href.replace('#','/'));\r\n                            \r\n                            }\r\n                        },0);\r\n                    }\r\n\r\n                    scope.preventClick = false;\r\n                }\r\n            }\r\n\r\n            if (e.cancelable == true) {\r\n                return false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        });\r\n    }\r\n}])\r\n.directive(\"ngmResizeEvent\", ['$rootScope', function ($rootScope) {\r\n    return function (scope, elem, attrs) {\r\n        scope.eventToFire = 'resize.watch.event';\r\n        scope.root = $rootScope;\r\n        scope.resizeFun = function () {\r\n            scope.root.$broadcast(scope.eventToFire, {\r\n                element: elem\r\n            });\r\n        };\r\n\r\n        elem.resize(scope.resizeFun);\r\n\r\n        scope.$on(\"$destroy\", function handleDestroyEvent() {\r\n            elem.removeResize(scope.resizeFun);\r\n        });\r\n    }\r\n}])\r\n.directive('ngmDateRangeSelector',\r\n    ['$filter', 'helperService', 'configService', '$timeout', 'gettextCatalog', 'errorService',\r\n    function ($filter, helperService, configService, $timeout, gettextCatalog, errorService) {\r\n        var directive = {\r\n            link: link,\r\n            transclude: true,\r\n            restrict: 'E',\r\n            templateUrl: dateRangeSelector,\r\n            scope: {\r\n                dateFrom: '=dateFrom',\r\n                dateTo: '=dateTo',\r\n                dateLimit: '=dateLimit',\r\n                dateSelectedCallback: '&'\r\n            }\r\n        };\r\n\r\n        return directive;\r\n\r\n        function link(scope, element, attrs) {\r\n\r\n            scope.filters = {\r\n                FormatedDateRange: null,\r\n                DateFrom: scope.dateFrom,\r\n                DateTo: scope.dateTo\r\n            }\r\n        scope.allowReset = false;\r\n        if(attrs.allowReset === \"true\") {\r\n            scope.allowReset = true;\r\n        }\r\n\r\n\r\n            function checkApplyButtonDisabled() {\r\n                scope.disableApplyButton = attrs.bothDatesRequired === \"true\" && (typeof (scope.filters.DateTo) === \"undefined\" || typeof (scope.filters.DateFrom) === \"undefined\");\r\n            }\r\n\r\n            checkApplyButtonDisabled();\r\n\r\n            scope.dateFormat = helperService.getDateByFormatForMoment();\r\n\r\n            scope.translatePredefinedDateRanges = function () {\r\n            var res;\r\n            \r\n            if (attrs.dateDelivery === \"true\") {\r\n                res = [\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Today\"),\r\n                        Code: \"Today\",\r\n                        DateFrom: moment.utc().format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Yesterday\"),\r\n                        Code: \"Yesterday\",\r\n                        DateFrom: moment.utc().add(-1, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().add(-1, 'd').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Next 7 days\"),\r\n                        Code: \"Next 7 Days\",\r\n                        DateFrom: moment.utc().format(scope.dateFormat),\r\n                        DateTo: moment.utc().add(7, 'd').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 7 days\"),\r\n                        Code: \"Last 7 Days\",\r\n                        DateFrom: moment.utc().add(-7, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Next 30 days\"),\r\n                        Code: \"Next 30 Days\",\r\n                        DateFrom: moment.utc().format(scope.dateFormat),\r\n                        DateTo: moment.utc().add(30, 'd').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 30 days\"),\r\n                        Code: \"Last 30 Days\",\r\n                        DateFrom: moment.utc().add(-30, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    }\r\n                ];\r\n            } else {\r\n                res = [\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Today\"),\r\n                        Code: \"Today\",\r\n                        DateFrom: moment.utc().format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Yesterday\"),\r\n                        Code: \"Yesterday\",\r\n                        DateFrom: moment.utc().add(-1, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().add(-1, 'd').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 7 days\"),\r\n                        Code: \"Last 7 Days\",\r\n                        DateFrom: moment.utc().add(-7, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 30 days\"),\r\n                        Code: \"Last 30 Days\",\r\n                        DateFrom: moment.utc().add(-30, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last month\"),\r\n                        Code: \"Last Month\",\r\n                        DateFrom: moment().subtract(1, 'month').date(1).format(scope.dateFormat),\r\n                        DateTo: moment.utc().date(1).subtract(1, 'day').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 90 days\"),\r\n                        Code: \"Last 90 Days\",\r\n                        DateFrom: moment.utc().add(-90, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last quarter\"),\r\n                        Code: \"Last Quarter\",\r\n                        DateFrom: moment.utc().month(moment.utc().month() - (moment.utc().month() % 3)).subtract(3, 'month').date(1).format(scope.dateFormat),\r\n                        DateTo: moment.utc().month(moment.utc().month() - (moment.utc().month() % 3)).date(1).subtract(1, 'day').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last financial year\"),\r\n                        Code: \"Last Financial Year\",\r\n                        DateFrom: moment().year(moment.utc().year() - 1).month(0).date(1).format(scope.dateFormat),\r\n                        DateTo: moment().year(moment.utc().year()).month(0).date(1).subtract(1, 'day').format(scope.dateFormat),\r\n                    }\r\n                ];\r\n            }\r\n\r\n                if(scope.dateLimit) {\r\n                    var res2 = [];\r\n\r\n                    var idx = 0;\r\n\r\n                    while(idx<res.length) {\r\n                        res2.push(res[idx]);\r\n\r\n                        if(res[idx].Code == scope.dateLimit)\r\n                        break;\r\n\r\n                    idx++;\r\n                    }\r\n\r\n                    res = res2;\r\n                }\r\n\r\n                return res;\r\n            };\r\n\r\n            scope.$on('changeLanguage', function (event) {\r\n                scope.dateRanges = scope.translatePredefinedDateRanges();\r\n            });\r\n\r\n            $timeout(function () {\r\n                var datePickerFormat = helperService.getDateByFormatForDatePickers();\r\n                helperService.setDatepicker(datePickerFormat, '#date-selector-from', 'dateRangeCalendar');\r\n                helperService.setDatepicker(datePickerFormat, '#date-selector-to', 'dateRangeCalendar');\r\n            });\r\n\r\n            scope.dateRanges = scope.translatePredefinedDateRanges();\r\n\r\n            scope.showDateSelector = function () {\r\n                $(\".date-selector\").show();\r\n                $('.jq-selectbox__dropdown').hide();\r\n                $('.jq-selectbox__dropdown').css({ 'display': 'none' });\r\n            }\r\n\r\n            scope.setDateRange = function (range) {\r\n                scope.filters.DateFrom = range.DateFrom;\r\n                scope.filters.DateTo = range.DateTo;\r\n            }\r\n\r\n            scope.hideDateSelector = function (keepData) {\r\n                if (!keepData) {\r\n                    scope.filters.DateFrom = scope.dateFrom;\r\n                    scope.filters.DateTo = scope.dateTo;\r\n                }\r\n                $(\".date-selector\").hide();\r\n            }\r\n\r\n            scope.$watch('dateTo',\r\n                function (newValue, oldValue) {\r\n                    scope.filters.DateTo = newValue;\r\n\r\n                    updateDateRangePlaceholder();\r\n                }\r\n            );\r\n\r\n            scope.$watch('dateFrom',\r\n                function (newValue, oldValue) {\r\n                    scope.filters.DateFrom = newValue;\r\n\r\n                    updateDateRangePlaceholder();\r\n                }\r\n            );\r\n\r\n            scope.$watch('filters.DateFrom',\r\n                function (newValue, oldValue) {\r\n                    checkApplyButtonDisabled();\r\n                }\r\n            );\r\n\r\n            scope.$watch('filters.DateTo',\r\n                function (newValue, oldValue) {\r\n                    checkApplyButtonDisabled();\r\n                }\r\n            );\r\n\r\n            function updateDateRangePlaceholder() {\r\n                if (scope.filters.DateFrom && scope.filters.DateTo)\r\n                    scope.filters.FormatedDateRange = moment(scope.filters.DateFrom, scope.dateFormat).format(\"DD MMM\")\r\n                    + ' - ' + moment(scope.filters.DateTo, scope.dateFormat).format(\"DD MMM\");\r\n                else if (scope.filters.DateTo)\r\n                    scope.filters.FormatedDateRange = 'to ' + moment(scope.filters.DateTo, scope.dateFormat).format(\"DD MMM\");\r\n                else if (scope.filters.DateFrom)\r\n                    scope.filters.FormatedDateRange = 'from ' + moment(scope.filters.DateFrom, scope.dateFormat).format(\"DD MMM\");\r\n                else\r\n                    scope.filters.FormatedDateRange = null;\r\n            }\r\n\r\n            scope.apply = function () {\r\n            if(scope.dateLimit) {\r\n                // TODO implement other filters\r\n                if(scope.dateLimit == 'Last Month') {\r\n                    var days = parseInt((moment(scope.filters.DateTo, scope.dateFormat)-moment(scope.filters.DateFrom, scope.dateFormat))/(24*3600*1000));        \r\n                    if(days>31) {\r\n                        errorService.showError(gettextCatalog.getString(\"Query period should not exceed 31 days.\"));\r\n                        return;\r\n                    }\r\n                }\r\n            }\r\n\r\n                $timeout(function () {\r\n                    scope.dateFrom = scope.filters.DateFrom;\r\n                    scope.dateTo = scope.filters.DateTo;\r\n                    scope.dateSelectedCallback({ from: scope.dateFrom, to: scope.dateTo });\r\n                });\r\n                scope.hideDateSelector(true);\r\n            }\r\n\r\n\r\n            scope.reset = function() {\r\n            $timeout(function(){\r\n                scope.dateFrom = null;\r\n                scope.dateTo = null;\r\n                scope.dateSelectedCallback({from: scope.dateFrom, to: scope.dateTo});   \r\n            });                                     \r\n            scope.hideDateSelector(true);\r\n            };\r\n\r\n            scope.monthLimit = false;\r\n\r\n            scope.setMonthLimit = function(period) {\r\n            scope.monthLimit = true;\r\n            };\r\n        };\r\n    }\r\n])\r\n.directive(\"ngmFilterPanel\", ['helperService',function (helperService) {\r\n    return function (scope, elem, attrs) {\r\n        scope.preventClick = false;\r\n\r\n        var el = elem;\r\n\r\n        elem.find('.m-filter-link-container').bind(\"touchend click\", function (e) {\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n\r\n            if (e.type == \"touchend\") {\r\n                scope.preventClick = true;\r\n                elem.toggleClass('open');\r\n            } else if (e.type == \"click\") {\r\n                // Handle click event.\r\n                if (scope.preventClick !== true) {\r\n                    elem.toggleClass('open');\r\n                }\r\n\r\n                scope.preventClick = false;\r\n            }\r\n\r\n            updateContentHeight();\r\n\r\n            return false;\r\n        });\r\n\r\n        elem.find('.m-filter-overlay, .m-filter-close-button').bind(\"touchend click\", function (e) {\r\n            setTimeout(function(){\r\n                e.preventDefault();\r\n                e.stopPropagation();      \r\n\r\n                if (e.type == \"touchend\") {\r\n                    scope.preventClick = true;\r\n                    elem.removeClass('open');\r\n                } else if (e.type == \"click\") {\r\n                    // Handle click event.\r\n                    if (scope.preventClick !== true) {\r\n                        elem.removeClass('open');\r\n                    }\r\n\r\n                    scope.preventClick = false;\r\n                }\r\n\r\n                return false;\r\n            }, 0);\r\n            \r\n        });\r\n\r\n        elem.find('.m-filter-content-wrapper').bind(\"touchend click\", function (e) {\r\n            setTimeout(function(){\r\n                e.preventDefault();\r\n                e.stopPropagation();      \r\n                return false;\r\n            }, 0);\r\n        });\r\n\r\n        function updateContentHeight() {\r\n            console.log('ngmFilterPanel resize');\r\n            //m-filter-content\r\n            var $content = $(\".m-filter-content\", el);\r\n            var $contentWrapper = $('.m-filter-content-wrapper', el);\r\n            var contentTop = $content.offset().top;\r\n            var contentHeight = $contentWrapper.outerHeight();\r\n            var screenHeight = window.innerHeight;\r\n            var bottomMargin = 5\r\n\r\n            if (contentHeight + contentTop > screenHeight) {\r\n                $content.outerHeight(screenHeight - contentTop - bottomMargin);\r\n            }\r\n            else {\r\n                $content.css('height','');\r\n            }\r\n        }\r\n\r\n        scope.evt1 = $(window).on(\"resize\", updateContentHeight);\r\n    }\r\n}])\r\n.directive(\"inputNoKbd\", [function () {\r\n    return function (scope, elem, attrs) {\r\n\r\n        var el = elem;\r\n\r\n        scope.evt1 = el.on(\"focus\", function () {\r\n          //  console.log('focus');\r\n            if (window.passKeyboard !== true)\r\n                el[0].readOnly = true;\r\n        });\r\n\r\n        scope.evt2 = el.on(\"focusin\", function () {\r\n         //   console.log('focusin');\r\n            setTimeout(function () {\r\n                el[0].readOnly = false;\r\n                window.passKeyboard = false;\r\n            }, 50);\r\n        });\r\n\r\n        scope.evt3 = el.on(\"click\", function () {\r\n         //   console.log('click');\r\n            el[0].readOnly = false;\r\n        });\r\n\r\n        //el.bind(\"keydown\", function (e) {\r\n        //    console.log('keydown');\r\n        //    if (e.which === 9) {\r\n        //        window.passKeyboard = true;\r\n        //    }\r\n        //});\r\n\r\n        scope.$on(\r\n            \"$destroy\",\r\n            function handleDestroyEvent() {\r\n                scope.evt1.off();\r\n                scope.evt2.off();\r\n                if (typeof(scope.evt3.off) === 'function')\r\n                    scope.evt3.off();\r\n            }\r\n        );\r\n    };\r\n}])\r\n.directive(\"afterRender\", [\"$timeout\", function ($timeout) {\r\n    var def = {\r\n        restrict: \"A\",\r\n        terminal: true,\r\n        transclude: false,\r\n        link: function (scope, element, attrs) {\r\n          $timeout(scope.$eval(attrs.afterRender), 0);\r\n        },\r\n    };\r\n    return def;\r\n}])\r\n.directive(\"touchTooltip\", ['$window', function ($window) {\r\n    return function (scope, elem, attrs) {       \r\n        var opacity = 0.7;\r\n\r\n        elem.on('click', function() {\r\n           var tip = $(\"body\").find('.tootip');\r\n            if (!!tip && tip.length) {\r\n                tip.remove();\r\n                tip = null;\r\n            }\r\n            tip = $('<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\">'+ elem.attr('title') +'</div></div>');\r\n            \r\n            $element = $(elem);\r\n            var off = $element.offset();\r\n\r\n            tip.css({visibility: 'hidden'});\r\n            \r\n            tip.appendTo($(\"body\"));\r\n            tip.css({\r\n                left: (off.left + ($element.width() / 2) - (tip.width()/2)) + 'px',\r\n                top: (off.top - tip.height() - 5) + 'px'\r\n            });\r\n            tip.css({opacity: opacity});\r\n            \r\n            tip.css({visibility: 'visible'});\r\n        });\r\n    }\r\n}]);","angular.module('services').service('emailService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider',\r\n    function ($q, $http, configService, remoteRequestProvider, localDBProvider) {\r\n\r\n        this.extractOrderIDs = function(sale) {\r\n            var res = {};\r\n            res.orderID = !!sale.newRefundOrder ? \r\n                            sale.newRefundOrder : \r\n                            sale.ID;\r\n            // sale.ID is always main initial sale. It is required to get sale task \r\n            // except standalone refund, in email controller\r\n            res.baseOrderID = sale.standAloneReturn === true ? sale.newRefundOrder : sale.ID;  \r\n    \r\n            return res;\r\n        };\r\n\r\n\r\n        this.sendEmailReceipt = function (orderID, baseOrderID, email, emailSubject, emailBody, ignoreOrderID, templateID, documentBody) {\r\n            var deffered = $q.defer();\r\n\r\n            var pr;\r\n            if (configService.isOnline || ignoreOrderID===true) {\r\n                pr = remoteRequestProvider.sendEmailReceipt(orderID, baseOrderID, email, emailSubject, emailBody, ignoreOrderID, templateID, documentBody);\r\n            }\r\n            else {\r\n                pr = localDBProvider.storeEmailReceipt(orderID, baseOrderID, email, emailSubject, emailBody, templateID);\r\n            }\r\n\r\n            pr.then(function (result) {\r\n                deffered.resolve(result.data);\r\n            }, function (err) {\r\n                deffered.reject(err);\r\n            });\r\n\r\n            return deffered.promise;\r\n        };\r\n\r\n        this.setEmailToken = function (template) {\r\n            var hiddenToken = $('<div id=\"4631010d-f058-41e8-81d7-0f7c866f9c27\" style=\"display: none;\"></div>');\r\n            var emailTemplate = $(template);\r\n            hiddenToken.appendTo(emailTemplate);\r\n            return emailTemplate;\r\n        }\r\n    }]);\r\n","import './constants.js';\r\n\r\nimport './configEnvironment.js';\r\nimport './directives.js';\r\nimport './pipes.js';\r\n\r\nimport './csvService.js';\r\n\r\nimport './configService.js';\r\nimport './helperService.js';\r\nimport './remoteRequestProvider.js';\r\nimport './localDBProvider.js';\r\nimport './jsStoreProvider.js';\r\nimport { PendoService } from './pendoService';\r\nimport './loginService';\r\n\r\n// load Pendo script \r\nPendoService.loadPendoScript();\r\nimport './errorService.js';\r\nimport './outletService.js';\r\nimport './productsService.js';\r\nimport './saleService.js';\r\nimport './receiptService.js';\r\nimport './customerService.js';\r\nimport './registryService.js';\r\nimport './orderStatusService.js';\r\nimport './emailService.js';\r\nimport './printService.js';\r\nimport './labelPrintService.js';\r\nimport './userManagementService.js';\r\nimport './productManagementService.js';\r\nimport './labelService.js';\r\nimport './dbUpdatesService.js';\r\nimport './cashManagementService.js';\r\nimport './cacheService.js';\r\nimport './webOnlyProvider.js';\r\nimport './cardPayService';\r\nimport './cloverReaderProvider.js';\r\nimport './squareReaderProvider.js';\r\nimport './tyroReaderProvider.js';\r\nimport './triPOSReaderProvider.js';\r\nimport './linklyPaymentReaderProvider.js';\r\nimport './paymentSenseReaderProvider.js';\r\nimport './keyPressDelayService.js';\r\nimport './liveSearchService.js';\r\nimport './stockTakeService.js';\r\nimport './soundService.js';\r\nimport './dataChangeNotificationService.js';\r\nimport './requestInterceptors.js';\r\nimport './reportService.js';\r\nimport './fontMeasureService.js';\r\nimport './fileDownloadService.js';\r\nimport './filtersService.js';\r\nimport './barcodeService.js';\r\nimport './homeController.js';\r\nimport './sideBarController.js';\r\nimport './headerController.js';\r\nimport './sellController.js';\r\nimport './addSurchargeController.js';\r\nimport './loginController';\r\nimport './changePasswordController.js';\r\nimport './selectOutletRegistryController.js';\r\nimport './addCustomerController.js';\r\nimport './offlineSalesController.js';\r\nimport './salesHistoryController.js';\r\nimport './openCloseRegistryController.js';\r\nimport './cashManagementController.js';\r\nimport './salesParkedController.js';\r\nimport './customersController.js';\r\nimport './userManagementController.js';\r\nimport './dashboardController.js';\r\nimport './productManagementController.js';\r\nimport './setupController.js';\r\nimport './setPinController.js';\r\nimport './stockTakeController.js';\r\nimport './stockTransferConroller.js';\r\nimport './stockOrderingController.js';\r\nimport './stockOrderingService.js';\r\nimport './stockPurchaseOrderDetailController.js';\r\nimport './stockTransferOrderDetailController.js';\r\nimport './addStockOrderLineController.js';\r\nimport './stockFamilyProductMatrixController.js';\r\nimport './reportCloseRegistryController.js';\r\nimport './reportPaymentTypeSummaryController.js';\r\nimport './reportSalesSummaryController.js';\r\nimport './reportInventoryController.js';\r\nimport './reportInTransitController.js';\r\nimport './reportProductPerformanceController.js';\r\nimport './reportGiftCardController.js';\r\nimport './reportStoreCreditController.js';\r\nimport './reportSurchargeController.js';\r\nimport './addSalesRepresentativeController.js';\r\nimport './addSalesShippingAddressController.js';\r\nimport './clickAndCollectGridController.js';\r\nimport './clickAndCollectService.js';\r\nimport './clickAndCollectDialogController.js';\r\nimport './selectTaxController.js';\r\nimport './deliveryController.js';\r\nimport './deliveryDialogController.js';\r\nimport './deliveryCalendarController.js';\r\nimport './cameraScanController.js';\r\nimport './loyaltyService.js';\r\nimport './loyaltyLionProvider.js';\r\nimport './loyaltyDEARProvider.js';\r\n//import './setPasswrodController.js';\r\n\r\nimport '../../TypePosScripts/Services/offline-sale.service';\r\nimport '../../TypePosScripts/Services/second-terminal.service';\r\n\r\nimport '../../TypePosScripts/Controllers/second-screen.controller';\r\nimport '../../TypePosScripts/Delivery/DeliveryHelper';\r\nimport '../../TypePosScripts/Services/google-helper.service';\r\nimport '../../TypePosScripts/Services/surcharge.service';\r\nimport '../../TypePosScripts/Services/device-info.service';\r\nimport '../../TypePosScripts/Services/msal.service';\r\nimport '../../TypePosScripts/Components/certificate-error/certificate-error.component';\r\n\r\nimport '../scss/index.scss';\r\n\r\n\r\nfunction requireAll(r) { r.keys().forEach(r); }\r\nrequireAll(require.context('../PosViews/', true, /\\.html$/));\r\nrequireAll(require.context('../PosImages/', true, /\\.(svg|png|jpg)$/));","angular.module('services').factory('errorService', [\r\n    'gettextCatalog', 'helperService',\r\n    function (gettextCatalog, helperService) {\r\n\r\n    var errorService = {};\r\n\r\n    errorService.showError = function (message, onCloseCallback, title, isCriticalError, isHTML) {\r\n        if (isHTML === undefined || isHTML === null)\r\n            isHTML = true;\r\n        var errorObject = {};\r\n        if (title)\r\n            errorObject.title = title;\r\n        else\r\n            errorObject.title = 'Error';\r\n\r\n\r\n        if (typeof message === 'string') {\r\n            errorObject.body = message;\r\n        } else {\r\n            if (!!message.config && message.config.isCancelled === true) {\r\n                errorObject.body = gettextCatalog.getString('Request to the server was cancelled.');\r\n            }\r\n            else if (message.data) {\r\n                var msd = message.data;\r\n                if (typeof (message.data) == 'string') {\r\n                    try{\r\n                        msd = JSON.parse(message.data);\r\n                    }\r\n                    catch (e) {\r\n\r\n                    }\r\n                }\r\n\r\n                if (!!msd.map)\r\n                    errorObject.body = msd.map(function (elem) { return elem.Exception !== undefined ? elem.Exception : elem }).join(', ');\r\n                else if (!!msd.exceptionMessage)\r\n                    errorObject.body = msd.exceptionMessage;\r\n                else {\r\n                    if (typeof (msd) == 'string')\r\n                        errorObject.body = msd;\r\n                    else\r\n                        errorObject.body = JSON.stringify(message.data);\r\n                }\r\n            }\r\n            else if (typeof message.message == 'string')\r\n                errorObject.body = message.message;\r\n            else if(!!message.map)\r\n                errorObject.body = message.map(function (elem) { return elem.Exception }).join(', ');\r\n            else if (!!message && !message.data && message.status == -1 && !message.statusText) {\r\n                errorObject.body = 'There is a connection problem accessing the server.<br/>Please check your internet connection';\r\n                isHTML = true;\r\n            }\r\n            else if (Array.isArray(message)) {\r\n                var text = \"\";\r\n                angular.forEach(message, function (el) {\r\n                    text += (!!text ? '<br/>' : '') + el.Exception;\r\n                });\r\n\r\n                errorObject.body = text;\r\n                isHTML = true;\r\n            }\r\n            else if (!!message.Errors && Array.isArray(message.Errors)) {\r\n                var text = \"\";\r\n                angular.forEach(message.Errors, function (el) {\r\n                    text += (!!text ? '<br/>' : '') + el.ErrorMessage;\r\n                });\r\n\r\n                errorObject.body = text;\r\n                isHTML = true;\r\n            } else if (message.result === false && !!message.response && !!message.response.errorDescription) {\r\n                errorObject.body = message.response.errorDescription;\r\n            } else {\r\n                if(!!message && !!message.config && !! message.config.url){\r\n                    errorObject.body = \"Request [\" + message.config.url + \"] status is: \" + message.status;\r\n                }\r\n                else {\r\n                    errorObject.body = \"Operation error\";\r\n                }\r\n            }\r\n        }\r\n        if (isCriticalError) {\r\n            errorObject.isCriticalError = isCriticalError;\r\n        } else {\r\n            errorObject.isCriticalError = false;\r\n        }\r\n\r\n        helperService.showErrorDialog(errorObject, onCloseCallback, isHTML);\r\n    };\r\n    \r\n    return errorService;\r\n}]);\r\n","/**\r\n * Event constants - extracted to avoid circular dependencies\r\n * These are simple string constants that don't require localization\r\n */\r\nexport const events = {\r\n    HEADER_SYNC_STATUS_EVENT: 'header.syncStatus',\r\n    STATUS_OK_AFTER_ERROR_SEND: 'okAfterErrorSend',\r\n    STATUS_ERROR_SEND_ORDER: 'errorSendOrder',\r\n    STATUS_TOO_LONG: 'tooLong',\r\n    STATUS_OK: 'ok',\r\n};\r\n","angular.module('services').service('fileDownloadService', [\r\n    '$q', 'configService', '$http', 'helperService',\r\n    function ($q, configService, $http, helperService) {\r\n\r\n        this.downloadFile = function (url, fileName, mimeType = 'application/pdf') {\r\n            if (url.indexOf('https://127.0.0.1:444') !== -1) {\r\n                url = url.replace('https://127.0.0.1:444', configService.baseURL)\r\n            }\r\n\r\n            if (configService.isSite) {\r\n                return this._downloadWeb(url, fileName);\r\n            }\r\n\r\n            if (mimeType === 'application/pdf') {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: url,\r\n                    responseType: 'blob'\r\n                });\r\n                var deferred = $q.defer();\r\n                req.then(res => {\r\n                    $.unblockUI();\r\n                    return this._blobToBase64(res.data).then(r =>  {\r\n                        return helperService.printPdf(r, fileName)\r\n                    }).then(r => {\r\n                        deferred.resolve(r);\r\n                    }).catch(err => {\r\n                        deferred.reject(err);\r\n                    });\r\n                }).catch(e => {\r\n                    $.unblockUI();\r\n                    deferred.reject(e)\r\n                    return deferred.promise;\r\n                });\r\n                return deferred.promise;\r\n            }\r\n\r\n            if (device && device.platform === 'iOS') {\r\n                return this._downloadInAppBrowser(url, fileName);\r\n            }\r\n\r\n            return this._downloadMobile(url, fileName, mimeType);\r\n        };\r\n\r\n        this._downloadMobile = function (url, fileName, mimeType) {\r\n            $.blockUI();\r\n            var req = $http({\r\n                method: 'GET',\r\n                url: url,\r\n                responseType: 'blob'\r\n            });\r\n            var deferred = $q.defer();\r\n            return req.then(res => {\r\n                try {\r\n                    var storageLocation = this._getStorageLocation();\r\n                    var folderpath = storageLocation + \"Download\";\r\n                    window.resolveLocalFileSystemURL(folderpath, function (dir) {\r\n                        dir.getFile(fileName, {\r\n                            create: true\r\n                        }, function (file) {\r\n                            file.createWriter(function (fileWriter) {\r\n                                fileWriter.write(res.data);\r\n                                fileWriter.onwriteend = function() {\r\n                                    var url = file.toURL();\r\n                                    $.unblockUI();\r\n                                    cordova.plugins.fileOpener2.open(url, mimeType, {\r\n                                      error: function error(err) {\r\n                                        console.error(err);\r\n                                        deferred.reject(err);\r\n                                      },\r\n                                      success: function success() {\r\n                                        console.log(\"success with opening the file\");\r\n                                        deferred.resolve(url);\r\n                                      }\r\n                                    });\r\n                                }\r\n                            }, function (err) {\r\n                                console.log(err);\r\n                                $.unblockUI();\r\n                                deferred.reject(err);                            \r\n                            });\r\n                        },  function (err) {\r\n                            console.log(err);\r\n                            $.unblockUI();\r\n                            deferred.reject(err);\r\n                        });\r\n                    });\r\n                } catch (e) {\r\n                    $.unblockUI();\r\n                    deferred.reject(e);\r\n                }\r\n               \r\n\r\n                return deferred.promise;\r\n            }).catch(e => {\r\n                $.unblockUI();\r\n                deferred.reject(e)\r\n                return deferred.promise;\r\n            });\r\n        };\r\n\r\n        this._downloadWeb = function (link, filename) {\r\n            var deferred = $q.defer();\r\n\r\n            var downloadLink = document.createElement(\"a\");\r\n            downloadLink.download = filename;\r\n            downloadLink.href = link;\r\n            downloadLink.style.display = \"none\";\r\n            document.body.appendChild(downloadLink);\r\n            downloadLink.click();\r\n            downloadLink.remove();\r\n\r\n            deferred.resolve(filename);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this._downloadInAppBrowser = function (link, filename) {\r\n            var deferred = $q.defer();\r\n\r\n            cordova.InAppBrowser.open(link, '_blank', 'location=no');\r\n\r\n            deferred.resolve(filename);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this._getStorageLocation = function () {\r\n            switch (device.platform) {\r\n                case \"Android\":\r\n                    return 'file:///storage/emulated/0/';\r\n                case \"iOS\":\r\n                    return cordova.file.documentsDirectory;\r\n            }\r\n\r\n            throw new Error('');\r\n        };\r\n\r\n        this._blobToBase64 = function(blob) {\r\n            return new Promise((resolve, _) => {\r\n                const reader = new FileReader();\r\n                reader.onloadend = () => resolve(reader.result);\r\n                reader.readAsDataURL(blob);\r\n              });\r\n        };\r\n    }\r\n]\r\n);","angular.module('services').factory('filterService', ['$filter', '$sce',\r\n    function ($filter, $sce) {\r\n        var filterService = {};\r\n\r\n        //first parameter is filter input\r\n        //other parameters are optional parameters\r\n        filterService.uibTypeaheadHighlightExFunction = function (filterInput, search, m, sel) {\r\n\r\n            var searchu = !search ? '' : search.toUpperCase();\r\n            var filterInputu = !filterInput ? '' : filterInput.toUpperCase();\r\n\r\n            // split search parts\r\n            var searchArr = filterService.splitSearchText(searchu);\r\n\r\n            // get intersections array\r\n            var intersections = filterService.findIntersections(filterInputu, searchArr);\r\n\r\n            // sort intersections\r\n            intersections = filterService.sortIntersections(intersections);\r\n\r\n            // union intersected areas\r\n            var regions = filterService.unionAllIntersections(intersections);\r\n            res = filterService.formatString(filterInput, regions); // format string\r\n            if (m) {\r\n                // init canvas to measure text width\r\n                filterService.initCanvas(m.id, sel);\r\n\r\n                // get splitted string\r\n                var adj = filterService.textToLengthAdjusted(m.model, regions);\r\n                if (adj) {\r\n                    var rhtml = '<div style=\"display:flex;width:100%;\">' +\r\n                        '<div style=\"overflow: hidden; width: 100%; text-overflow: ellipsis;\">' + adj.res + '</div>' +\r\n                        '<div style=\"overflow: hidden; width: ' + adj.w + 'px; text-overflow: ellipsis;\">' + adj.s + '</div>' +\r\n                        '</div>';\r\n\r\n                    return $sce.trustAsHtml(rhtml);\r\n                }\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n\r\n        // this function will find very close strings that differ in nonvisible part\r\n        // and convert visual presentation to show differences\r\n        filterService.canvas = null;\r\n        filterService.context = null;\r\n        filterService.maxLineWidth = 430;\r\n\r\n        filterService.clearCanvas = function () {\r\n            filterService.canvas = null;\r\n            filterService.context = null;\r\n            filterService.maxLineWidth = 430;\r\n        };\r\n\r\n        filterService.initCanvas = function (id, sel) {\r\n            if (!filterService.canvas) {\r\n                var el = $('#' + id + ' ' + sel);\r\n\r\n                if (el.length > 0) {\r\n                    filterService.canvas = document.createElement(\"canvas\");\r\n                    filterService.context = filterService.canvas.getContext(\"2d\");\r\n                    var ff = el.css('font-family');\r\n                    var fs = el.css('font-size');\r\n                    var fw = el.css('font-weight'); // actually it seems font weight doesn't correspond in canvas\r\n                    var sfnt = 'normal ' + fw + ' ' + fs + ' ' + ff;\r\n                    filterService.context.font = sfnt;\r\n                    filterService.maxLineWidth = parseInt(el.css('max-width'));\r\n                }\r\n            }\r\n        };\r\n\r\n        filterService.textToLengthAdjusted = function (el, regions) {\r\n            // will not count <strong>. Simply set weight to sufficient big value\r\n            // for count strong we will need to extract symbols with string and normal weight and measure length separately\r\n            var text = el.name;\r\n            var width = filterService.context.measureText(text).width;\r\n            if (width <= filterService.maxLineWidth) return null;\r\n            var name = el.name;\r\n            var threeDotSpace = 30;\r\n\r\n            // modify text\r\n            // find first space\r\n            var idx = el.diffPos;\r\n            while (idx > 0 && name[idx] !== ' ') idx--;\r\n            if (idx < 0) idx = 0;\r\n            if (name[idx] === ' ') idx++;\r\n\r\n            // find word\r\n            var idx2 = el.diffPos + 1;\r\n            while (idx2 < name.length && name[idx2] !== ' ') idx2++;\r\n            if (idx2 > name.length) idx2 = name.length;\r\n\r\n            // check that first different word is visible\r\n            var s = name.substr(0, idx2);\r\n            if (filterService.context.measureText(s).width <= filterService.maxLineWidth) {\r\n                return null; // there is enough place to show difference, exit\r\n            }\r\n\r\n            s = name.substr(idx, idx2 - idx);\r\n\r\n            width = filterService.context.measureText(s).width + threeDotSpace; // extra space for three dots\r\n\r\n            if (width > filterService.maxLineWidth / 2) {\r\n                var step = Math.floor((el.diffPos + 1 - idx) / 2);\r\n                var increase = false;\r\n\r\n                while (step >= 1) {\r\n                    // there is not enough place to show entire word with difference, so will show part of the word\r\n                    if (!increase)\r\n                        idx += step;\r\n                    else\r\n                        idx -= step;\r\n\r\n                    if (idx < 0) idx = 0;\r\n                    if (idx >= idx2)\r\n                        idx = idx2 - 1;\r\n\r\n                    s = name.substr(idx, el.diffPos + 1 - idx);\r\n                    width = filterService.context.measureText(s).width;\r\n                    increase = width < (filterService.maxLineWidth / 4);\r\n                    step = Math.floor(step / 2);\r\n                }\r\n            }\r\n\r\n            if (idx >= el.diffPos)\r\n                idx = el.diffPos - 1;\r\n            if (idx < 0)\r\n                idx = 0;\r\n\r\n            s = name.substr(idx);\r\n\r\n            width = filterService.context.measureText(s).width + threeDotSpace;\r\n            if (width > filterService.maxLineWidth / 2)\r\n                width = filterService.maxLineWidth / 2;\r\n\r\n            s = filterService.formatString(s, regions, idx);\r\n\r\n            var s1 = name.substr(0, idx);\r\n            s1 = filterService.formatString(s1, regions);\r\n\r\n            return {\r\n                w: width,\r\n                s: s,\r\n                res: s1 + '...'\r\n            };\r\n        };\r\n\r\n        filterService.splitSearchText = function (str) {\r\n            var searchArr = str ? str.split(' ') : [];\r\n            var res = [];\r\n            angular.forEach(searchArr, function (s) {\r\n                if (s && s.trim())\r\n                    res.push(s.trim());\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        filterService.findIntersections = function (src, dst) {\r\n            var res = [];\r\n\r\n            if (!dst || !src) return res;\r\n\r\n            // enum all parts of search string\r\n            angular.forEach(dst, function (p) {\r\n                // find intersections of part and source string\r\n                var idx = 0;\r\n                while ((idx = src.indexOf(p, idx)) >= 0) {\r\n                    res.push({\r\n                        begin: idx, // get first digit match position\r\n                        end: idx + p.length // get last digit match position + 1\r\n                    });\r\n\r\n                    idx += p.length;\r\n                }\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        filterService.sortIntersections = function (arr) {\r\n            return arr.sort(function (a, b) {\r\n                // order by begin position, then by end position\r\n                if (a.begin < b.begin) return -1;\r\n                if (a.begin > b.begin) return 1;\r\n                if (a.end < b.end) return -1;\r\n                if (a.end > b.end) return 1;\r\n                return 0;\r\n            });\r\n        };\r\n\r\n        // to work correctly, all sections should be sorted\r\n        filterService.unionAllIntersections = function (sortedArr) {\r\n            var res = [];\r\n            angular.forEach(sortedArr, function (el) {\r\n                var k = res.length - 1;\r\n\r\n                if (k >= 0) {\r\n                    // if last element in result array intersects with current one for source array, we union them\r\n                    if (filterService.isIntersected(res[k], el)) {\r\n                        res[k] = filterService.unionIntersections(res[k], el);\r\n                    } else { // simply add element to result as it does not intersect with last result element\r\n                        res.push(el);\r\n                    }\r\n                } else { // in case of empty res, simply add first element\r\n                    res.push(el);\r\n                }\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        // a and b should be sorted:  a =< b\r\n        filterService.isIntersected = function (a, b) {\r\n            return a.begin <= b.begin && b.begin <= a.end;\r\n        };\r\n\r\n        filterService.unionIntersections = function (a, b) {\r\n            var el = {\r\n                begin: a.begin,\r\n                end: b.end > a.end ? b.end : a.end\r\n            };\r\n\r\n            return el;\r\n        };\r\n\r\n        filterService.formatString = function (str, regions, offsetStart) {\r\n            var offset = 0;\r\n            var sh = '<span class=\"colDiffer\">';\r\n            var eh = '</span>';\r\n\r\n            offsetStart = offsetStart ? offsetStart : 0;\r\n\r\n            var shLength = sh.length;\r\n            var ehLength = eh.length;\r\n\r\n            angular.forEach(regions, function (r) {\r\n                if (r.begin >= offsetStart || (offsetStart <= r.end && offsetStart > r.begin)) {\r\n                    str = filterService.insertStr(str, Math.max(r.begin, offsetStart) + offset - offsetStart, sh);\r\n                    offset += shLength;\r\n\r\n                    var pend = r.end + offset - offsetStart;\r\n                    if (pend > str.length)\r\n                        pend = str.length;\r\n\r\n                    str = filterService.insertStr(str, pend, eh);\r\n                    offset += ehLength;\r\n                }\r\n            });\r\n\r\n            return str;\r\n        };\r\n\r\n        filterService.insertStr = function (str, index, value) {\r\n            if (index > str.length) return str;\r\n\r\n            return str.substr(0, index) + value + str.substr(index);\r\n        };\r\n\r\n        filterService.isStringContainsSearchArray = function (str, arr) {\r\n            if (!str || !arr || arr.length === 0) return false;\r\n            var contains = true;\r\n\r\n            angular.forEach(arr, function (s) {\r\n                if (!contains) return false;\r\n                else {\r\n                    contains = str.indexOf(s) >= 0;\r\n                }\r\n            });\r\n\r\n            return contains;\r\n        };\r\n\r\n        filterService.checkEquality = function (arr) {\r\n            angular.forEach(arr, function (el) {\r\n                if (el.diffPos)\r\n                    delete el.diffPos;\r\n            });\r\n\r\n            var pos = 0, pos2 = 0, i, j;\r\n            // algorithm compares nearest neighbors\r\n            //for (var i = 1; i < arr.length; i++) {\r\n\r\n            //    if (i === 1) {\r\n            //        pos = filterService.incompatiblePos(arr[i - 1].name, arr[i].name);\r\n            //        arr[i - 1].diffPos = pos;\r\n            //    }\r\n\r\n            //    if (i === (arr.length - 1)) {\r\n            //        pos = filterService.incompatiblePos(arr[i - 1].name, arr[i].name);\r\n            //        arr[i].diffPos = pos;\r\n            //    }\r\n\r\n            //    if (i < (arr.length - 1)) {\r\n            //        pos = filterService.incompatiblePos(arr[i].name, arr[i - 1].name);\r\n            //        pos2 = filterService.incompatiblePos(arr[i].name, arr[i + 1].name);\r\n            //        arr[i].diffPos = Math.max(pos2, pos);\r\n            //    }\r\n\r\n            //}\r\n\r\n            // will think that all records are very close to each other and in this case we will compare all records\r\n            // and get first minimal different pos for all\r\n            var minPos = 0;\r\n\r\n            // set max minPos\r\n            for (i = 0; i < arr.length; i++) {\r\n                if (arr[i].name.length && (arr[i].name.length + 1) > minPos)\r\n                    minPos = arr[i].name.length + 1;\r\n            }\r\n\r\n            for (i = 0; i < (arr.length - 1); i++) {\r\n                for (j = i + 1; j < arr.length; j++) {\r\n                    pos = filterService.incompatiblePos(arr[i].name, arr[j].name);\r\n                    if (pos < minPos)\r\n                        minPos = pos;\r\n                }\r\n            }\r\n\r\n            for (i = 0; i < arr.length; i++) {\r\n                arr[i].diffPos = minPos;\r\n            }\r\n        };\r\n\r\n        filterService.incompatiblePos = function (s1, s2) {\r\n            if ((!s1 && !s2) || (!s1 && s2) || (s1 && !s2)) return 0;\r\n\r\n            var res = Math.min(s1.length, s2.length); // first different symbol position\r\n            for (var i = 0; i < Math.min(s1.length, s2.length); i++) {\r\n                if (s1[i] !== s2[i]) {\r\n                    res = i;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        return filterService;\r\n    }\r\n]);\r\n\r\nangular.module('mainApp').\r\n    filter('uibTypeaheadHighlightEx', function (filterService) {\r\n        return filterService.uibTypeaheadHighlightExFunction;\r\n    });\r\n","angular.module('services').service('fontMeasureService', [\r\n    function () {\r\n        var _MinPT = 7;\r\n        var _AvailablePT = [18, 13.5, 12, 11, 10, 9, 8, 7];\r\n\r\n        var _ww = {};\r\n\r\n        for (var i = 0; i < _AvailablePT.length; i++) {\r\n            var v = _AvailablePT[i];\r\n            _ww['PTMeasure' + v] = new Object();\r\n            _ww['PTTextMeasure' + v] = new Object();\r\n        }\r\n\r\n        function getCharMeasure(currentChar, pt) {\r\n            var measureObject = _ww['PTMeasure' + pt];\r\n            var width = measureObject[currentChar];\r\n            if (typeof (width) == \"undefined\") {\r\n                var canvas = getCharMeasure.canvas || (getCharMeasure.canvas = document.createElement(\"canvas\"));\r\n                var context = canvas.getContext(\"2d\");\r\n                context.font = pt + \"pt 'Open Sans'\";\r\n                var _chTMP = context.measureText(currentChar);\r\n                width = context.measureText(currentChar).width;\r\n                measureObject[currentChar] = width;\r\n            }\r\n            return width;\r\n        }\r\n\r\n        function measureTextWidth(value, maxWidth, defaultSize) {\r\n            maxWidth = maxWidth - 12;\r\n            try {\r\n                for (var i = 0; i < _AvailablePT.length; i++) {\r\n                    var v = _AvailablePT[i];\r\n                    if (v <= defaultSize) {\r\n                        var measureObject = _ww['PTTextMeasure' + v];\r\n                        var width = measureObject[value];\r\n\r\n                        if (typeof (width) == \"undefined\") {\r\n                            width = 0;\r\n                            for (var j = 0; j < value.length; j++)\r\n                                width += getCharMeasure(value.charAt(j), v);\r\n                            width = Math.floor(width) + 1;\r\n                            measureObject[value] = width;\r\n                        }\r\n\r\n                        if (width < maxWidth)\r\n                            return v;\r\n                    }\r\n                }\r\n                return _MinPT;\r\n            }\r\n            catch (e) {\r\n                return defaultSize;\r\n            }\r\n        }\r\n\r\n        function measureTextHeight(value, maxHeight, defaultSize) {\r\n            try {\r\n                for (var i = 0; i < _AvailablePT.length; i++) {\r\n                    var v = _AvailablePT[i];\r\n                    if (v <= defaultSize) {\r\n                        var height = getFontHeight(value, v);\r\n\r\n                        if (height < maxHeight)\r\n                            return v;\r\n                    }\r\n                }\r\n                return _MinPT;\r\n            }\r\n            catch (e) {\r\n                return defaultSize;\r\n            }\r\n        }\r\n\r\n        function getFontHeight(text, pt) {\r\n            var canvas = getFontHeight.canvas || (getFontHeight.canvas = document.createElement(\"canvas\"));\r\n            var context = canvas.getContext(\"2d\");\r\n            context.font = pt + \"pt 'Open Sans'\";\r\n\r\n            var sourceWidth = canvas.width;\r\n            var sourceHeight = canvas.height;\r\n\r\n            // place the text somewhere\r\n            context.textAlign = \"left\";\r\n            context.textBaseline = \"top\";\r\n            context.fillText(text, 25, 5);\r\n\r\n            // returns an array containing the sum of all pixels in a canvas\r\n            // * 4 (red, green, blue, alpha)\r\n            // [pixel1Red, pixel1Green, pixel1Blue, pixel1Alpha, pixel2Red ...]\r\n            var data = context.getImageData(0, 0, sourceWidth, sourceHeight).data;\r\n\r\n            var firstY = -1;\r\n            var lastY = -1;\r\n\r\n            // loop through each row\r\n            for (var y = 0; y < sourceHeight; y++) {\r\n                // loop through each column\r\n                for (var x = 0; x < sourceWidth; x++) {\r\n                    var alpha = data[((sourceWidth * y) + x) * 4 + 3];\r\n\r\n                    if (alpha > 0) {\r\n                        firstY = y;\r\n                        // exit the loop\r\n                        break;\r\n                    }\r\n                }\r\n                if (firstY >= 0) {\r\n                    // exit the loop\r\n                    break;\r\n                }\r\n\r\n            }\r\n\r\n            // loop through each row, this time beginning from the last row\r\n            for (var y = sourceHeight; y > 0; y--) {\r\n                // loop through each column\r\n                for (var x = 0; x < sourceWidth; x++) {\r\n                    var alpha = data[((sourceWidth * y) + x) * 4 + 3];\r\n                    if (alpha > 0) {\r\n                        lastY = y;\r\n                        // exit the loop\r\n                        break;\r\n                    }\r\n                }\r\n                if (lastY >= 0) {\r\n                    // exit the loop\r\n                    break;\r\n                }\r\n\r\n            }\r\n\r\n            return lastY - firstY;\r\n        }\r\n\r\n        this.updateFontSize = function (parent, child, defaultSize, minSize, checkHeight) {\r\n            var prn = $(\".\" + parent + \"-measure\");\r\n\r\n            if (prn.is(':visible')) {\r\n                // console.log('updateFontSize');\r\n\r\n                //console.time('updateFontSize processing');\r\n                if (minSize == null || minSize == undefined) {\r\n                    minSize = 0;\r\n                }\r\n\r\n                if (checkHeight == null || checkHeight == undefined) {\r\n                    checkHeight = false;\r\n                }\r\n\r\n                var childClass = child + \"-measure\";\r\n                //            var children = $(\".\" + childClass);\r\n                var children = $(\".\" + parent + \"-measure .\" + childClass);\r\n                if (children.length > 0) {\r\n                    var prn = children.first().closest('.' + parent + '-measure');\r\n                    var maxWidth = prn.width();\r\n                    var maxHeight = prn.height();\r\n\r\n                    // if (!!parentPercent)\r\n                    //     maxWidth *= parentPercent / 100;\r\n\r\n                    children.each(function () {\r\n                        var txt = this;\r\n                        var val = txt.innerText;\r\n                        if (val != null && val != '') {\r\n                            var widthSize = measureTextWidth(val, maxWidth, defaultSize);\r\n                            var heightSize = 0;\r\n                            var size = 0;\r\n                            if (checkHeight) {\r\n                                heightSize = measureTextHeight(val, maxHeight, defaultSize);\r\n                                size = Math.min(widthSize, heightSize);\r\n                            }\r\n                            else {\r\n                                size = widthSize;\r\n                            }\r\n\r\n                            size = Math.max(size, minSize);\r\n\r\n                            var className = 'product-text' + (size + '').replace('.', '-');\r\n                            var arr = txt.className.trim().split(' ');\r\n                            var fSz = arr.filter(function (s) { return s === className; });\r\n\r\n                            if (fSz.length == 0) {\r\n                                var fArr = arr.filter(function (s) { return s.indexOf('product-text') != 0; });\r\n                                fArr.push(className);\r\n                                txt.className = fArr.join(' ');\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n\r\n                //console.timeEnd('updateFontSize processing');\r\n            } else {\r\n               //  console.log('updateFontSize. Parent ' + \".\" + parent + \"-measure\" +' is invisible');\r\n            }\r\n        };\r\n\r\n        this.fitFontSize = function (parent, child, defaultSize) {\r\n            var childClass = child + \"-measure\";\r\n            var children = $(\".\" + childClass);\r\n            if (children.length > 0) {\r\n                var maxWidth = children.first().closest('.' + parent + '-measure').width();\r\n                var maxHeight = children.first().closest('.' + parent + '-measure').height();\r\n\r\n                children.each(function (idx, el) {\r\n                    var txt = this;\r\n                    for (var i = 0; i < _AvailablePT.length; i++) {\r\n                        var v = _AvailablePT[i];\r\n                        if (v <= defaultSize) {\r\n                            var className = childClass;\r\n                            if (v != defaultSize)\r\n                                className += ' ' + 'product-text' + (v + '').replace('.', '-');\r\n                            if (txt.className.trim() != className) {\r\n                                txt.className = className;\r\n                            }\r\n\r\n                            var elWidth = el.offsetWidth;\r\n                            var elHeight = el.offsetHeight;\r\n                            if (elWidth > maxWidth || elHeight > maxHeight) {\r\n                                continue;\r\n                            }\r\n                            else {\r\n                                //console.log(elWidth + '-' + elHeight);\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n        };\r\n    }]);\r\n","\r\n\r\nfunction jsAddCustomerModalPosition(){\r\n    if($('#jsAddCustomer').length>0){\r\n        var btnPositionTop = $('#jsAddCustomer').offset().top;\r\n        var btnPositionLeft = $('#jsAddCustomer').offset().left;\r\n        var btnHeight = $('#jsAddCustomer').height();\r\n        var modalWidth = $('#jsAddCustomerModal .dp_modal-dialog').width();\r\n        btnPositionTop = btnPositionTop + (btnHeight/2);\r\n        var btnPositionLeftDialog = btnPositionLeft - modalWidth;\r\n        $(\"#jsAddCustomerModal .dp_modal-dialog\").offset({left:btnPositionLeftDialog});\r\n        $(\".dp_modal-customer-arrow\").offset({top:btnPositionTop, left:btnPositionLeft});\r\n    }\r\n}\r\n\r\nexport function initSelects(onSelectOpened, onViewStyled, onSelectClosed) {\r\n    // Note: exclude certain selects using this custom attribute and value \r\n    // to avoid it being included in other components' initSelect() calls\r\n    // e.g. addCustomerPartial\r\n    const sel = $(\"select:not([data-load-later='true'])\");\r\n    if (sel.length > 0) {\r\n        var p = {\r\n        };\r\n        if (typeof (onSelectOpened) === 'function')\r\n            p.onSelectOpened = onSelectOpened;\r\n            if (typeof (onSelectClosed) === 'function')\r\n            p.onSelectClosed = onSelectClosed;\r\n        if (typeof (onViewStyled) === 'function')\r\n            p.onViewStyled = onViewStyled;\r\n        sel.styler(p);\r\n    }\r\n}\r\n\r\nexport function initTogglers() {\r\n   /* if ($(\"[name='dp_checkbox']\").length > 0) {\r\n        $(\"[name='dp_checkbox']\").bootstrapSwitch();\r\n    };*/\r\n\r\n}\r\n\r\nexport function initCustomerForm() {\r\n    jsAddCustomerModalPosition();\r\n    $(window).on('resize', function () { jsAddCustomerModalPosition() });\r\n    $('#jsAddCustomerModal').on('shown.bs.modal', function () { jsAddCustomerModalPosition() });\r\n\r\n    $('.dp_customers-table__item-toggle').click(function () {\r\n        $(this).closest('.dp_customers-table__item').toggleClass('active');\r\n    });\r\n\r\n    initTogglers();\r\n\r\n    initSelects();\r\n}\r\n\r\nexport function initPagerOnScroll(onScrollReachBottomCallback, $div) {\r\n    const $divs = $div || $('.main-content, #gridRow > .grid-content, #productGrid > .grid-content, .grid-content .dp_content.grid-content, .dp_modal-body, #customersGridContainer, .salesParkedPage > .main-content ');\r\n    const onScroll = ($container) => {\r\n        const isEndOfList = $container.scrollTop() && ($container.scrollTop() > $container[0].scrollHeight - $container.outerHeight() - 10);\r\n        if (isEndOfList) {\r\n            onScrollReachBottomCallback();\r\n        }\r\n    };\r\n    $divs.on('scroll', (e) => onScroll($(e.target)));\r\n\r\n    // if when opening page and the screen is bigger and all rows fit screen and we cant scroll\r\n    const table = $('.grid-content');\r\n    if (table.length && (table.height() < table.parent().height())) {\r\n            onScrollReachBottomCallback();\r\n    }\r\n}\r\n\r\nwindow.initSelects = initSelects;\r\nwindow.initPagerOnScroll = initPagerOnScroll;","import {initSelects} from './globals';\r\nimport { events } from './eventConstants';\r\n\r\nimport '../../translations';\r\n\r\nangular.module(\"mainApp\").controller('headerController',\r\n    ['$scope', '$rootScope', 'loginService', '$location', 'gettextCatalog', '$uibModal', 'helperService', '$timeout',\r\n        'configService', 'errorService', '$window', 'barcodeService', 'googleHelperService',\r\n        function ($scope, $rootScope, loginService, $location, gettextCatalog, $uibModal, helperService, $timeout,\r\n            configService, errorService, $window, barcodeService, googleHelperService) {\r\n            $scope.snackbar = new SnackBar();\r\n\r\n            $scope.sameFont = false; // true to make header font the same as for other header parts\r\n            $scope.currentViewName = '';\r\n            $scope.hasNetworkConnection = true;\r\n            $scope.transmit = false;\r\n            $scope.isSite = configService.isSite;\r\n            $scope.isOnline = configService.isOnline;\r\n            $scope.pageTitle = '';\r\n\r\n            $scope.currentUser = null;\r\n            $scope.currentOutlet = null;\r\n            $scope.currentRegister = null;\r\n            $scope.selectedLanguage = {};\r\n            $scope.languages = [\r\n                {\r\n                    Text: \"English (United States)\",\r\n                    Value: \"en-US\"\r\n                },\r\n                {\r\n                    Text: \"English (United Kingdom)\",\r\n                    Value: \"en-GB\"\r\n                }\r\n               /* {\r\n                    Text: \"Русский\",\r\n                    Value: \"ru\"\r\n                },\r\n                {\r\n                    Text: \"Chinese Simplified\",\r\n                    Value: \"zh-Hans\"\r\n                },\r\n                {\r\n                    Text: \"Chinese Traditional\",\r\n                    Value: \"zh-Hant\"\r\n                },*/\r\n            ];\r\n\r\n            $scope.showHeader = false;\r\n            $scope.$on('header.show', function (event, data) {\r\n                $scope.showHeader = data.showHeader;\r\n\r\n                if ($scope.showHeader == true) {\r\n                    updateDesignMode();\r\n\r\n                    $(window).on('resize', updateDesignMode);\r\n                }\r\n            });\r\n\r\n            $scope.$watch('configService.isOnline',\r\n                function (newValue, oldValue) {\r\n                    $scope.isOnline = newValue;\r\n\r\n                    $scope.indicatorTitle = $scope.isOnline ? '' : gettextCatalog.getString('You are working in offline mode.');\r\n\r\n                    if (newValue != oldValue && $scope.isOnline) {\r\n                        barcodeService.clearFonts(); \r\n                    }\r\n                }\r\n            );\r\n            \r\n            function updateDesignMode() {\r\n                if ($(\"#isMobileDesign\").is(':visible')) {\r\n                    if (configService.isMobileDesign != false) {\r\n                        console.log('switched to desktop');\r\n                    }\r\n                    configService.isMobileDesign = false;\r\n                }\r\n                else {\r\n                    if (configService.isMobileDesign != true) {\r\n                        console.log('switched to mobile');\r\n                    }\r\n                    configService.isMobileDesign = true;\r\n                }                \r\n            }\r\n\r\n            $timeout(function () {\r\n                initSelects();\r\n            });\r\n\r\n            $scope.$on('header.setUserInfo', function (event, data) {\r\n                $scope.currentUser = data.currentUser;\r\n            });\r\n\r\n            $scope.$on('header.setOutletInfo', function (event, data) {\r\n                $scope.currentOutlet = data.outletName;\r\n                $scope.currentRegister = data.registryName;\r\n\r\n                $scope.updateTitle();\r\n            });\r\n\r\n            $scope.$on('header.changeLanguage', function (event) {\r\n                $scope.changeLanguage();\r\n            });\r\n\r\n            $scope.changeLanguage = function () {\r\n                $scope.selectedLanguage.Value = gettextCatalog.getCurrentLanguage();\r\n                $timeout(function () {\r\n                    $('#languageSelect').trigger('refresh');\r\n                }, 0);\r\n                var $windowElement = $('#changeLanguagePartial');\r\n                helperService.showDialog($windowElement);\r\n                $timeout(() => initSelects());\r\n            }\r\n\r\n\r\n            $scope.closeChangeLanguageDialog = function () {\r\n                var $windowElement = $('#changeLanguagePartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.closePageNotAvailableDialog = function () {\r\n                if ($scope.changeLanguageModalInstance)\r\n                    $scope.changeLanguageModalInstance.dismiss('cancel');\r\n            };\r\n\r\n            $scope.setLanguage = function () {\r\n                gettextCatalog.setCurrentLanguage($scope.selectedLanguage.Value);\r\n                window.localStorage.setItem('currentLanguage', $scope.selectedLanguage.Value);\r\n                $rootScope.$broadcast('changeLanguage');\r\n            }\r\n\r\n            $scope.$on('header.setCurrentView', function (event, data) {\r\n                $scope.currentViewName = data.viewName;\r\n            });\r\n\r\n            // there is three states: 'online' - true,'offline' - false,'transmit'\r\n            $scope.$on('config.ConnectionStateChanged', function (event, data) {\r\n                $timeout(function () {\r\n                    $scope.hasNetworkConnection = data;\r\n                });\r\n            });\r\n\r\n\r\n            $scope.$on('config.TransmitStateChanged', function (event, data) {\r\n                $timeout(function () {\r\n                    if (data === 'transmit') {\r\n                        $scope.transmit = true;\r\n                    }\r\n                    else {\r\n                        $scope.transmit = false;\r\n                    }\r\n                });\r\n            });\r\n\r\n            $scope.logoff = function () {\r\n                setTimeout(function () {\r\n                    $('#hdrPopupMenu').dropdown('toggle');\r\n                });\r\n\r\n                $rootScope.$broadcast('header.logoff');\r\n                \r\n                googleHelperService.logout();\r\n\r\n            };\r\n\r\n            $scope.$on('header.logoff', function (event) {\r\n                loginService.logoff();\r\n                $.unblockUI();\r\n                var cur = $location.path();\r\n                if (cur != '/home')\r\n                    $location.path('/home');\r\n                else\r\n                    $rootScope.$broadcast('login.show');\r\n            });\r\n\r\n            $scope.$on('header.changeOutlet', function (event) {\r\n                $scope.changeOutlet();\r\n            });\r\n            $scope.changeOutlet = function () {\r\n                configService.bypassOutletRegistry = false;\r\n                $rootScope.$broadcast('selectOR.show');\r\n            };\r\n\r\n            $scope.toggleMenu = function (evt) {\r\n                helperService.hideKeyboard();\r\n                if ($('form.disableMenu:visible').length == 0)\r\n                    $rootScope.$broadcast('sideBar.toggle');\r\n                return false;\r\n            };\r\n\r\n            // set preloader when page is start to switch\r\n            $scope.$on('$routeChangeStart', function (scope, next, current) {\r\n                if (!!current.$$route && !!next.$$route &&\r\n                    current.$$route.originalPath != next.$$route.originalPath) {\r\n                    $.blockUI();\r\n                    $('.blockPage .preloader2').attr(\"id\", \"routeChange\")\r\n                }\r\n            });\r\n\r\n            // use timeout to remove preloader when new page is rendered\r\n            $scope.$on('$routeChangeSuccess', function (scope, next, current) {\r\n                if (!!current && !!current.$$route && !!next.$$route &&\r\n                    current.$$route.originalPath != next.$$route.originalPath) {\r\n                    $scope.updateTitle();\r\n                }\r\n            });\r\n\r\n            $scope.updateTitle = function() {\r\n                var fdf = $(\".blockPage .preloader2\").attr(\"id\");\r\n                if ($(\".blockPage .preloader2\").attr(\"id\") == \"routeChange\") {\r\n                    $timeout(function () {\r\n                        $.unblockUI();\r\n                    }, 100);\r\n                }\r\n\r\n                $scope.sameFont = false;\r\n                var $el = $(\"pageTitle\");\r\n                if ($el.length == 1) {\r\n                    var title = $el.text();\r\n                    if (title == '_register_') {\r\n                        $scope.pageTitle = $scope.currentRegister;\r\n                        $scope.sameFont = true;\r\n                    }\r\n                    else {\r\n                        $scope.pageTitle = title;\r\n                    }\r\n                }\r\n                else {\r\n                    $scope.pageTitle = '';\r\n                }\r\n            };\r\n\r\n            $scope.$on('$routeChangeError', function (scope, next, current) {\r\n                $.unblockUI();\r\n            });\r\n\r\n            $scope.enableMenu = true;\r\n\r\n            $scope.$on('header.enableMenu', function (event, data) {\r\n                $scope.enableMenu = data;\r\n            });\r\n\r\n\r\n            $scope.$on('header.blockSales', function (event, data) {\r\n                var title = gettextCatalog.getString('Error');\r\n                var err = gettextCatalog.getString(\"It seems like the Cin7 Core POS configuration you are currently logged in is incomplete. To avoid posting incorrect sale transactions, your session will be terminated. Please contact your POS administrator/manager to resolve the issue.\");\r\n                errorService.showError(err, function () {\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.logoff');\r\n                        \r\n                        googleHelperService.logout();\r\n                        \r\n                    });\r\n                }, title);\r\n\r\n            });\r\n\r\n            var modalUpdateSettings;\r\n            $scope.$on('header.updateSettingsThirdStep', function (event, data) {\r\n\r\n                var path = $location.path();\r\n                if (path !== '/sell') {\r\n                    $.unblockUI();\r\n                    modalUpdateSettings.modal('hide');\r\n                    modalUpdateSettings = null;\r\n                } else {\r\n                    $rootScope.$broadcast('sell.reload', { modal: modalUpdateSettings });\r\n                }\r\n\r\n            });\r\n\r\n\r\n    $scope.$on('header.updateSettings', function (event, data) {\r\n        if (!loginService.isLoggedIn())\r\n            return;\r\n\r\n       var title = gettextCatalog.getString('Update settings');\r\n       $.blockUI();\r\n\r\n                modalUpdateSettings = helperService.showInfoDialog({\r\n                    title: '',\r\n                    body: gettextCatalog.getString('Loading the updated POS/outlet configuration settings. Please wait...')\r\n                });\r\n\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('login.silent',\r\n                        {\r\n                            dearPosName: configService.posName,\r\n                            userName: configService.userName,\r\n                            password: configService.password,\r\n                            callBack: true\r\n                        });\r\n                });\r\n\r\n            });\r\n\r\n            var showRefreshPageDialog = function () {\r\n                var cur = $location.path();\r\n                console.log(cur);\r\n                if (cur === '/home') {\r\n                    $window.location.reload();\r\n                }\r\n                else {\r\n                    var $windowElement = $('#pageRefreshPartial');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n            };\r\n\r\n            $scope.$on('header.f5Pressed', function (event, data) {\r\n                showRefreshPageDialog();\r\n            });\r\n\r\n\r\n            $scope.closePageRefreshDialog = function () {\r\n                var $windowElement = $('#pageRefreshPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n\r\n            $scope.refreshPage = function () {\r\n                $window.location.reload();\r\n            };\r\n\r\n            $scope.$on('header.confirmCancelDialog', function (event, data) {\r\n                var $windowElement = $('#cancelDialogConfirmPartial');\r\n                helperService.showDialog($windowElement);\r\n            });\r\n\r\n            $scope.closeCancelDialogModalDialog = function () {\r\n                var $windowElement = $('#cancelDialogConfirmPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.cancelDialogModal = function () {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('header.confirmedCancelDialog');\r\n                });\r\n            };\r\n\r\n            // icon statuses\r\n            $scope.syncStatus = events.STATUS_OK;\r\n            $scope.$on(events.HEADER_SYNC_STATUS_EVENT, function (event, data) {\r\n                if (data !== $scope.syncStatus)\r\n                {\r\n                    if (data === events.STATUS_OK_AFTER_ERROR_SEND && $scope.syncStatus === events.STATUS_ERROR_SEND_ORDER) {\r\n                        $scope.syncStatus = events.STATUS_OK;\r\n                    } else {\r\n                        $scope.syncStatus = data;\r\n                    }\r\n                }\r\n            });\r\n\r\n            $scope.printerStatus = 'ok';\r\n            $scope.$on('header.printerStatus', function (event, data) {\r\n                console.log('header.printerStatus: ' + data);\r\n                $scope.printerStatus = data;\r\n            });\r\n\r\n            $scope.scannerStatus = 'ok';\r\n            $scope.$on('header.scannerStatus', function (event, data) {\r\n                console.log('header.scannerStatus: ' + data);\r\n                $scope.scannerStatus = data;\r\n            });\r\n\r\n            $scope.tillStatus = 'ok';\r\n            $scope.$on('header.tillStatus', function (event, data) {\r\n                console.log('header.tillStatus: ' + data);\r\n                $scope.tillStatus = data;\r\n            });\r\n\r\n            $scope.$on('snackbar.show', function (event, data) {\r\n                var msg = data.message;\r\n                var type = data.type;\r\n                if(!type)\r\n                    type = \"message\";\r\n                $scope.snackbar.make(type, [\r\n                    msg,\r\n                    null,\r\n                    \"top\",\r\n                    \"center\"\r\n                ], 5000);\r\n            });\r\n\r\n            $scope.$on('snackbar.close', function (event, data) {\r\n                $scope.snackbar.close();\r\n            });\r\n\r\n        }]);\r\n","\r\nimport unpackArray  from './unpackWorkerHelper';\r\nimport {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport { convertFromOld } from '../../TypePosScripts/ConverterService';\r\nimport UnpackWorker from './unpackWorker.js';\r\nimport { events } from './eventConstants';\r\n\r\nangular.module('services').factory('helperService', [\r\n    '$rootScope', 'configService', 'uuid2', '$filter', '$uibModal', 'gettextCatalog', '$timeout', '$location', '$q', '$locale',\r\n    function ($rootScope, configService, uuid2, $filter, $uibModal, gettextCatalog, $timeout, $location, $q, $locale) {\r\n        var helperService = {};\r\n\r\n        function NonWrappableContainer() {\r\n            this.data = null;\r\n        }\r\n\r\n        NonWrappableContainer.prototype.set = function (o) {\r\n            this.data = o;\r\n        };\r\n\r\n        NonWrappableContainer.prototype.get = function () {\r\n            return this.data;\r\n        };\r\n\r\n        helperService.createNonWrappableContainer = function () {\r\n            return new NonWrappableContainer();\r\n        };\r\n\r\n        helperService.dialogs = [];\r\n\r\n        helperService.getFormatedDate = function (date) {\r\n            var format = configService.dateFormat + ' HH:mm';\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment.utc(date).local().format(format);\r\n        };\r\n\r\n        helperService.getFormatedDateAmPm = function (date) {\r\n            var format = configService.dateFormat + ' hh:mm A';\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment.utc(date).local().format(format);\r\n        };\r\n\r\n        helperService.getFormatedDateAlreadyLocal = function (date) {\r\n            var format = configService.dateFormat + ' HH:mm';\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(date).format(format);\r\n        };\r\n\r\n        helperService.getDateByFormat = function (date, format) {\r\n            return moment.utc(date).local().format(format);\r\n        };\r\n\r\n        helperService.getDateByFormatAlreadyLocal = function (date, format) {\r\n            return moment(date).format(format);\r\n        };\r\n\r\n        helperService.getDateFormat = function () {\r\n            var format = configService.dateFormat;\r\n            return format;\r\n        };\r\n\r\n        helperService.getDateByFormatForDatePickers = function () {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'yy');\r\n            format = format.replace('MM', 'mm');\r\n            return format;\r\n        };\r\n\r\n        helperService.getDateByFormatForMoment = function () {\r\n            var format = configService.dateFormat;\r\n            if (format) {\r\n                format = format.replace('yyyy', 'YYYY');\r\n                format = format.replace('dd', 'DD');\r\n            }\r\n            return format;\r\n        };\r\n\r\n        helperService.getFormatedDate2 = function (date) {\r\n            if(!date) return date;\r\n\r\n            if(typeof(date) === 'string')\r\n                date = date.replace('P','+');\r\n\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment.utc(date).local().format(format);\r\n        };\r\n\r\n        helperService.getFormatedLocalDateTime = function (date) {\r\n            if(!date) return date;\r\n\r\n            if(typeof(date) === 'string')\r\n                date = date.replace('P','+');\r\n\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            var tm = moment.utc(date).local();\r\n\r\n            return {\r\n                date: tm.format(format),\r\n                time: tm.hours() * 60 + tm.minutes()\r\n            };\r\n        };\r\n\r\n        helperService.getFormatedDateWithLocalTime2 = function (date) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment.utc(date).local().format(format + ' HH:mm');\r\n        };\r\n\r\n        helperService.getFormatedDateAsIs = function (date) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(date).format(format + ' HH:mm');\r\n        };\r\n\r\n        helperService.getFormatedDateOnlyAsIs = function (date) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(date).format(format);\r\n        };\r\n\r\n        helperService.toDateFromDatepickerDirect = function (str) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(str, format).format('YYYY-MM-DD[T]HH:mm:ss[+00:00]');\r\n        };\r\n\r\n        helperService.toDateFromDatepickerDirectNoZone = function (str) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(str, format).format('YYYY-MM-DD[T]HH:mm:ss');\r\n        };\r\n\r\n        helperService.convertToDateFromDatepicker = function (str) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(str, format);\r\n        };\r\n\r\n        helperService.toDateFromDatepickerParameter = function (str, timeStr, skipReplace) {\r\n            if (str === null || str === \"\" || typeof str === \"undefined\") {\r\n                return \"\";\r\n            }\r\n\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            if (timeStr) {\r\n                format += \" HH:mm:ss\";\r\n                str += \" \" + timeStr;\r\n            }\r\n\r\n//            return moment(str, format).format('YYYY-MM-DD[T]HH:mm:ss'); //+'Z';\r\n            if(skipReplace===true)\r\n                return moment(str, format).format();\r\n\r\n            var d = moment(str, format).format().replace('+','P'); // this date will have zone\r\n            return d;\r\n        };\r\n\r\n        helperService.toDateFromDatepickerParameterUTC = function (str, timeStr) {\r\n            if (str === null || str === \"\" || typeof str === \"undefined\") {\r\n                return \"\";\r\n            }\r\n\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            if (timeStr) {\r\n                format += \" HH:mm:ss\";\r\n                str += \" \" + timeStr;\r\n            }\r\n\r\n            return moment.utc(str, format).format('YYYY-MM-DD[T]HH:mm:ss')+'Z';\r\n        };\r\n\r\n        helperService.toDateWithCurrentTimeZone = function (dt) {\r\n            return moment(dt).toISOString(true).replace('+','P');//.format('YYYY-MM-DD[T]HH:mm:ss')+'Z';\r\n        };\r\n\r\n        helperService.toDateFromDatepicker = function (str) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(str, format).local().toJSON();\r\n        };\r\n\r\n        helperService.formatTime = function (mins, appendSecs) {\r\n            var hours   = Math.floor(mins / 60);\r\n            var minutes = helperService.DEARRound(mins - hours * 60, 0);\r\n\r\n            if (hours   < 10) {hours   = \"0\"+hours;}\r\n            if (minutes < 10) {minutes = \"0\"+minutes;}\r\n            return hours+':'+minutes + (appendSecs === true ? ':00' : '');\r\n        };\r\n\r\n        helperService.initCenterModalDialog = function (parentElement) {\r\n            var modalDialog = $(parentElement);\r\n\r\n            this.dialogs.push(modalDialog);\r\n\r\n            // Align modal when it is displayed\r\n            modalDialog.on(\"shown.bs.modal\", function (frm) {\r\n                helperService.alignModal($(frm.target));\r\n            });\r\n\r\n            // Align modal when user resize the window\r\n            $(window).on(\"resize\", function () {\r\n                console.log('initCenterModalDialog resize');\r\n                helperService.dialogs.forEach(function (element, index, array) {\r\n                    helperService.alignModal(element);\r\n                });\r\n            });\r\n\r\n        };\r\n\r\n        helperService.showCustomDialog = function (caption, text, okButtonName, cancelButtonName, showCancel) {\r\n            var el = $('#customModalDlg');\r\n            el.find('#customModalDlgCaption').html(caption);\r\n            el.find('#customModalDlgText').html(text);\r\n            if (!!okButtonName) {\r\n                el.find('#customModalDlgOKButton').html(okButtonName);\r\n            }\r\n            if (!!cancelButtonName) {\r\n                el.find('#customModalDlgOCancelButton').html(cancelButtonName);\r\n            }\r\n\r\n            if (showCancel === false) {\r\n                el.find('#customModalDlgOCancelButton').hide();\r\n                el.find('#customModalDlgXCancelButton').hide();\r\n                el.find('#customShiftObject').addClass('col-xs-offset-3');\r\n            }\r\n            else {\r\n                el.find('#customModalDlgOCancelButton').show();\r\n                el.find('#customModalDlgXCancelButton').show();\r\n                el.find('#customShiftObject').removeClass('col-xs-offset-3');\r\n            }\r\n\r\n            helperService.showDialog('#customModalDlg');\r\n        };\r\n\r\n        helperService.showCustomDialog3 = function (caption, text, okButtonName, cancelButtonName, showCancel, showCheckbox, checkboxValue, checkBoxCallback) {\r\n            var el = $('#customModalDlg3');\r\n            el.find('#customModalDlg3Caption').html(caption);\r\n            el.find('#customModalDlg3Text').html(text);\r\n            if (!!okButtonName) {\r\n                el.find('#customModalDlg3OKButton').html(okButtonName);\r\n            }\r\n            //if (!!cancelButtonName) {\r\n            //el.find('#customModalDlg3OCancelButton').html(\"x\");\r\n            //}\r\n            if (!!cancelButtonName) {\r\n                el.find('#customModalDlg3OCancelButton').html(cancelButtonName);\r\n            }\r\n\r\n            if (showCancel === false) {\r\n                el.find('#customModalDlg3XCancelButton').hide();\r\n                el.find('#customModalDlg3OCancelButton').hide();\r\n            }\r\n            else {\r\n                el.find('#customModalDlg3XCancelButton').show();\r\n                el.find('#customModalDlg3OCancelButton').show();\r\n            }\r\n\r\n            if (showCheckbox === true) {\r\n                initSelects();\r\n                el.find('#customModalDlg3CheckBoxGroup').show();\r\n                var scope = angular.element(document.getElementById('customModalDlg3CheckBox')).scope();\r\n                if (scope) {\r\n                    scope.checkBoxValue = checkboxValue;\r\n                }\r\n            } else\r\n                el.find('#customModalDlg3CheckBoxGroup').hide();\r\n\r\n\r\n            helperService.showDialog('#customModalDlg3', function () {\r\n                if (showCheckbox === true) {\r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                }\r\n            }, null, function () {\r\n                if (showCheckbox === true) {\r\n                    var scope = angular.element(document.getElementById('customModalDlg3CheckBox')).scope();\r\n                    if (typeof (checkBoxCallback) === 'function')\r\n                        checkBoxCallback(scope.checkBoxValue);\r\n                }\r\n            });\r\n        };\r\n\r\n        helperService.showDialog = function (parentElement, callback, resizeCallback, closeCallback) {\r\n            var w = $(parentElement);\r\n\r\n            var keyHandler = null;\r\n\r\n            $timeout(function () {\r\n                if (typeof (callback) == 'function') {\r\n                    callback(w);\r\n                }\r\n            }, 600);\r\n\r\n            w.one('show.bs.modal', function () {\r\n                $rootScope.$broadcast('popup.show');\r\n\r\n                if (typeof (resizeCallback) == 'function') {\r\n                    resizeCallback(w);\r\n                }\r\n\r\n                var pressEnterElement = w.find('.capture-pressing-enter');\r\n                var pressEscapeElement = w.find('.capture-pressing-escape');\r\n\r\n\r\n                if (pressEnterElement.length > 0 || pressEscapeElement.length > 0) {\r\n                    $timeout(function(){\r\n                        const keyHandler = function (e) {\r\n\r\n                            if (e.keyCode === 13 && pressEnterElement.length > 0) {\r\n\r\n                                var isActive = w.attr('isActive');\r\n                                if (isActive !== 'false') {\r\n                                    pressEnterElement.trigger('click');\r\n                                }\r\n\r\n                            } else if (e.keyCode === 27 && pressEscapeElement.length > 0) {\r\n\r\n                                var isActive = w.attr('isActive');\r\n                                if (isActive !== 'false') {\r\n                                    pressEscapeElement.trigger('click');\r\n                                }\r\n                            }\r\n                        };\r\n\r\n                        $(document).on('keyup', keyHandler);\r\n                    },100);\r\n                }\r\n            });\r\n\r\n            w.one('shown.bs.modal', function () {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('popup.shown');\r\n                });\r\n            });\r\n\r\n\r\n            w.one('hide.bs.modal', function () {\r\n                $rootScope.$broadcast('popup.hide');\r\n\r\n                if (typeof (closeCallback) == 'function') {\r\n                    closeCallback(w);\r\n                }\r\n\r\n                $(document).off('keyup', keyHandler);\r\n            });\r\n\r\n            console.log('show dialog');\r\n\r\n            w.modal({ show: true, backdrop: 'static', keyboard: false });\r\n        };\r\n\r\n        helperService.closeDialog = function (parentElement, callback, okPressed) {\r\n            var w = $(parentElement);\r\n            var scp = $('.scopeID');\r\n\r\n            if (w.is(':visible') === true) {\r\n                if (typeof callback === 'function') {\r\n\r\n                    w.one('hidden.bs.modal', function () {\r\n                        callback();\r\n                    });\r\n                }\r\n\r\n                console.log('hide dialog');\r\n                $('.dp_modal-body').off('scroll');\r\n\r\n                this.hideKeyboard();\r\n\r\n                w.modal('hide');\r\n            }\r\n\r\n            if(scp.length>0 && okPressed === true) {\r\n                var scope2 = angular.element(scp[0]).scope();\r\n                if(scope2 && typeof(scope2.callbackModal)==='function')\r\n                        scope2.callbackModal();\r\n            }\r\n        };\r\n\r\n        helperService.alignModal = function (prn) {\r\n            var dlg = prn.find(\".modal-dialog\");\r\n\r\n            // Applying the top margin on modal dialog to align it vertically center\r\n            dlg.css(\"margin-top\", Math.max(0, ($(window).height() - dlg.height()) / 2));\r\n        };\r\n\r\n        // convert rows to array of items\r\n        helperService.dbRawsToArray = function (rows, callback) {\r\n            var res = [];\r\n            if (!!rows.item) {\r\n\r\n                for (var i = 0; i < rows.length; i++) {\r\n                    if (typeof (callback) == 'function') {\r\n                        res.push(callback(rows.item(i)));\r\n                    }\r\n                    else\r\n                        res.push(rows.item(i));\r\n                }\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        helperService.DEARRound = function (value, places) {\r\n            if (!value)\r\n                return 0;\r\n\r\n            var k = Math.pow(10, places);\r\n            var pv = Math.round((Math.abs(value) * k).toFixed(8));\r\n            if (!pv)\r\n                return 0;\r\n\r\n            return (value < 0 ? -1 : 1) * pv / k;\r\n        };\r\n\r\n        Array.prototype.sum = function (prop) {\r\n            var total = 0;\r\n            for (var i = 0, _len = this.length; i < _len; i++) {\r\n                total += this[i][prop];\r\n            }\r\n            return total;\r\n        };\r\n\r\n        helperService.showPageAfterInit = function () {\r\n            $('.temp-hidden').removeClass('temp-hidden');\r\n        };\r\n\r\n        helperService.applyCurrency = function (number, currency) {\r\n            return $filter('currency')(number, currency, 2);\r\n        };\r\n\r\n        helperService.formatFloatNumber = function (n) {\r\n            var v = n + '';\r\n            v = v.replace(/^[\\D\\.]/g, '');\r\n            //var res = parseFloat(v);\r\n            //return res;\r\n            return v;\r\n        };\r\n\r\n        helperService.lastActive = null;\r\n\r\n        helperService.erroDialogIsShown = false;\r\n\r\n        helperService.showErrorDialog = function (errorObject, onCloseCallback, isHTML) {\r\n            helperService.lastActive = document.activeElement;\r\n            helperService.erroDialogIsShown = true;\r\n\r\n            var $windowElement = $('#errorModal');\r\n            var window = $windowElement.modal({ show: true, backdrop: 'static', keyboard: false });\r\n            window.find('#errorModalTitle').text(errorObject.title);\r\n            if (isHTML === true)\r\n                window.find('#errorModalBody').html(errorObject.body);\r\n            else\r\n                window.find('#errorModalBody').text(errorObject.body);\r\n\r\n            window.one('hidden.bs.modal', function () {\r\n                $('#errorModal')[0]?.style.removeProperty(\"z-index\"); // restore style back\r\n                if (typeof (onCloseCallback) == 'function') {\r\n                    onCloseCallback();\r\n                }\r\n                helperService.erroDialogIsShown = false;\r\n            });\r\n\r\n            var closeBtn = $windowElement.find('#closeErrorDialogButton');\r\n            $windowElement.find('.mark-image img').attr('src', 'PosImages/Error_2020.svg');\r\n            closeBtn.toggleClass('btn-yellow', false);\r\n            closeBtn.toggleClass('btn-primary', true);\r\n\r\n            //set z index to be above all dialog boxes\r\n            $windowElement[0]?.style?.setProperty(\"z-index\", \"1000000016\", \"important\");\r\n\r\n            window.find('#closeErrorDialog, #closeErrorDialogButton').click(function () {\r\n                $windowElement.modal('hide');\r\n                $timeout(function () {\r\n                    if (!configService.isMobile)\r\n                        helperService.lastActive.focus();\r\n                });\r\n            });\r\n        };\r\n\r\n        helperService.showInfoDialog = function (infoObject, onCloseCallback) {\r\n            helperService.lastActive = document.activeElement;\r\n\r\n            var $windowElement = $('#errorModal');\r\n            var window = $windowElement.modal({ show: true, backdrop: 'static', keyboard: false });\r\n            $windowElement.find('.mark-image img').attr('src', infoObject.isWarning ? 'PosImages/Question_yellow_2020.svg' : 'PosImages/Success-transparent_2020.svg');\r\n            window.find('#errorModalTitle').text(infoObject.title);\r\n            window.find('#errorModalBody').text(infoObject.body);\r\n\r\n            if (!!infoObject.customClass) {\r\n                $windowElement.attr('customClass', infoObject.customClass);\r\n            }\r\n            else {\r\n                $windowElement.attr('customClass', '');\r\n            }\r\n\r\n            if (typeof (onCloseCallback) == 'function') {\r\n\r\n                $windowElement.one('hidden.bs.modal', function () {\r\n                    if (typeof (onCloseCallback) == 'function')\r\n                        onCloseCallback();\r\n                });\r\n            }\r\n\r\n            var closeBtn = $windowElement.find('#closeErrorDialogButton');\r\n            if (infoObject.isWarning) {\r\n                closeBtn.toggleClass('btn-yellow', true);\r\n                closeBtn.toggleClass('btn-primary', false);\r\n            } else {\r\n                closeBtn.toggleClass('btn-yellow', false);\r\n                closeBtn.toggleClass('btn-primary', true);\r\n            }\r\n\r\n            $windowElement.find('#closeErrorDialog, #closeErrorDialogButton').click(function () {\r\n                $windowElement.modal('hide');\r\n                $windowElement.find('.mark-image img').attr('src', 'PosImages/Error_2020.svg');\r\n            });\r\n\r\n            return $windowElement;\r\n        };\r\n\r\n        helperService.roundCash = function (amount) {\r\n            var rule = configService.roundingRule;\r\n            var roundTo = configService.roundTo;\r\n\r\n            var intAmount = parseInt(amount * 1000);\r\n            switch (roundTo) {\r\n                case '0.01':\r\n                    break;\r\n                case '0.05':\r\n                    var lstDigit = parseInt(intAmount % 100);\r\n                    switch (rule) {\r\n                        case 'down':\r\n                            if (lstDigit >= 50)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit > 0)\r\n                                intAmount -= lstDigit;\r\n                            break;\r\n                        case 'up':\r\n                            if (lstDigit > 50)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            else if (lstDigit > 0)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            break;\r\n                        case 'midpoint down':\r\n                            if (lstDigit <= 25)\r\n                                intAmount = intAmount - lstDigit;\r\n                            else if (lstDigit > 25 && lstDigit < 50)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit >= 50 && lstDigit <= 75)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit > 75)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        case 'midpoint up':\r\n                            if (lstDigit < 25)\r\n                                intAmount = intAmount - lstDigit;\r\n                            else if (lstDigit >= 25 && lstDigit < 50)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit >= 50 && lstDigit < 75)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit >= 75)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                    break;\r\n                case '0.10':\r\n                    var lstDigit = parseInt(intAmount % 100);\r\n                    switch (rule) {\r\n                        case 'down':\r\n                            intAmount -= lstDigit;\r\n                            break;\r\n                        case 'up':\r\n                            if (lstDigit !== 0)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        case 'midpoint down':\r\n                            if (lstDigit <= 50)\r\n                                intAmount = intAmount - lstDigit;\r\n                            else if (lstDigit > 50)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        case 'midpoint up':\r\n                            if (lstDigit < 50)\r\n                                intAmount = intAmount - lstDigit;\r\n                            else if (lstDigit >= 50)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                    break;\r\n                case '0.50':\r\n                    var lstDigits = parseInt(intAmount % 1000);\r\n                    switch (rule) {\r\n                        case 'down':\r\n                            if (lstDigits >= 500)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits > 0)\r\n                                intAmount -= lstDigits;\r\n                            break;\r\n                        case 'up':\r\n                            if (lstDigits > 500)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            else if (lstDigits > 0)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            break;\r\n                        case 'midpoint down':\r\n                            if (lstDigits <= 250)\r\n                                intAmount = intAmount - lstDigits;\r\n                            else if (lstDigits > 250 && lstDigits < 500)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits >= 500 && lstDigits <= 750)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits > 750)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        case 'midpoint up':\r\n                            if (lstDigits < 250)\r\n                                intAmount = intAmount - lstDigits;\r\n                            else if (lstDigits >= 250 && lstDigits < 500)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits >= 500 && lstDigits < 750)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits >= 750)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                    break;\r\n                case '1.00':\r\n                    var lstDigits = parseInt(intAmount % 1000);\r\n                    switch (rule) {\r\n                        case 'down':\r\n                            intAmount -= lstDigits;\r\n                            break;\r\n                        case 'up':\r\n                            if (lstDigits !== 0)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        case 'midpoint down':\r\n                            if (lstDigits <= 500)\r\n                                intAmount = intAmount - lstDigits;\r\n                            else if (lstDigits > 500)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        case 'midpoint up':\r\n                            if (lstDigits < 500)\r\n                                intAmount = intAmount - lstDigits;\r\n                            else if (lstDigits >= 500)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n\r\n            return helperService.DEARRound(intAmount / 1000, 2);\r\n        };\r\n\r\n        helperService.setFocus = function (elementId) {\r\n            $timeout(function () {\r\n                var el = $('#' + elementId);\r\n                //el.css('-webkit-user-select', 'auto');\r\n\r\n                //                console.log($('#' + elementId));\r\n                el.focus();\r\n                el.select();\r\n\r\n                if (configService.isMobile)\r\n                    Keyboard.show();\r\n\r\n                el[0].setSelectionRange(0, el[0].value.length);\r\n            });\r\n        }\r\n\r\n        helperService.hideKeyboard = function () {\r\n            try {\r\n                console.log('remove focus from all inputs');\r\n\r\n                if (document.activeElement)\r\n                    document.activeElement.blur();\r\n                var inputs = document.querySelectorAll('input');\r\n                for (var i = 0; i < inputs.length; i++) {\r\n                    inputs[i].blur();\r\n                }\r\n            }\r\n            catch (er) {\r\n                alert('Error ' + er.name + \":\" + er.message + \"\\n\" + er.stack);\r\n            }\r\n        };\r\n\r\n        helperService.pad = function (n, width, z) {\r\n            z = z || '0';\r\n            n = n + '';\r\n            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\r\n        }\r\n\r\n        helperService.checkDeviceVersion = function () {\r\n            if (configService.isSite) {\r\n                return true;\r\n            } else {\r\n                return ((device.platform !== 'Android') || (device.platform === 'Android' && device.version >= configService.minimalAndroidVersion));\r\n            }\r\n        }\r\n\r\n        helperService.checkDeviceVersionIsBelowMinimal = function () {\r\n            if (configService.isSite) {\r\n                return false;\r\n            } else {\r\n                return device.platform === 'Android' && device.version < configService.minimalAndroidVersion;\r\n            }\r\n        }\r\n\r\n        helperService.guidToFlatString = function (g) {\r\n            var s = g.replace(/[^0-9a-f]/ig, '').toLowerCase();\r\n            return s;\r\n        };\r\n\r\n        helperService.gotoSell = function () {\r\n            $.blockUI();\r\n            window.localStorage.setItem('continueSale', null);\r\n            $location.path('/sell');\r\n            return false;\r\n        };\r\n\r\n        helperService.gotoParkedSales = function () {\r\n            $.blockUI();\r\n            $location.path('/salesparked');\r\n            return false;\r\n        };\r\n\r\n        helperService.trimArray = function (arr) {\r\n            if (!arr) return null;\r\n\r\n            var res = [];\r\n            angular.forEach(arr, function (el) {\r\n                res.push(el.trim());\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        helperService.extractCurrentQuickKeyInfo = function (qkey) {\r\n            if (!configService.quickKeyTemplateID)\r\n                return null;\r\n\r\n            var qdataTemp = JSON.parse(configService.quickKeyData);\r\n            var qdata = null;\r\n            if (!!qdataTemp) {\r\n\r\n                if (!!qkey) {\r\n                    var qdata = qdataTemp.filter(function (el) { return el.labelID == qkey; })[0];\r\n                    if (!qdata)\r\n                        return null;\r\n\r\n                    if (!!qdata.brands && qdata.brands.length > 0) {\r\n                        qdata.brands = helperService.trimArray(qdata.brands);\r\n                    }\r\n                    if (!!qdata.categories && qdata.categories.length > 0) {\r\n                        qdata.categories = helperService.trimArray(qdata.categories);\r\n                    }\r\n                    if (!!qdata.tags && qdata.tags.length > 0) {\r\n                        qdata.tags = helperService.trimArray(qdata.tags);\r\n                    }\r\n\r\n                    if (!qdata.groupingOperator)\r\n                        qdata.groupingOperator = 'OR';\r\n                }\r\n                else {\r\n\r\n                    return qdataTemp;\r\n                }\r\n            }\r\n\r\n            return qdata;\r\n        };\r\n\r\n        helperService.checkClickedElement = function (e, name) {\r\n            var elpt = $(document.elementFromPoint(e.pageX, e.pageY));\r\n            if (elpt.attr('name') == name ||\r\n                elpt.parent().attr('name') == name) {\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        };\r\n\r\n        helperService.getSearchParams = function () {\r\n            var cs = window.localStorage.getItem('continueSale');\r\n            var cSearch = cs ? JSON.parse(cs) : {};\r\n            if (!cSearch)\r\n                cSearch = {};\r\n\r\n            return cSearch;\r\n        };\r\n\r\n        helperService.sendMessage = function (msg, prms) {\r\n            $rootScope.$broadcast(msg, prms);\r\n        };\r\n\r\n        helperService.setDatepicker = function (dateFormatFun, sel, customClass, dateLimitRange, fun, obj) {\r\n            $timeout(function () {\r\n                var _customClass = '';\r\n                if (!!customClass) {\r\n                    _customClass = customClass;\r\n                }\r\n                var dateFormat = dateFormatFun;\r\n                if(!$(sel).datepicker || !$(sel).is('.hasDatepicker')) {\r\n                    $(sel).pickerInited = true;\r\n                    if(!dateLimitRange)\r\n                        dateLimitRange = 100;\r\n\r\n                    var dtMin = moment().year(moment().year() - dateLimitRange).month(0).date(1).hour(0).minute(0).second(0).toDate();\r\n                    var dtMax = moment().year(moment().year() + dateLimitRange).month(11).date(31).hour(23).minute(59).second(59).toDate();\r\n\r\n                    $(sel).datepicker({\r\n                            // defaultDate: \"-1w\",\r\n                            numberOfMonths: 1,\r\n                            minDate: dtMin,\r\n                            maxDate: dtMax,\r\n                            dateFormat: dateFormat,\r\n                            showButtonPanel: true,\r\n                            onClose: function (dateText, instance) {\r\n                                if (_customClass != '') {\r\n                                    instance.dpDiv.removeClass(_customClass);\r\n                                }\r\n\r\n                                if(instance.fun)\r\n                                    instance.fun(instance.obj);\r\n                            },\r\n                            beforeShow: function (input, instance) {\r\n\r\n                                if (_customClass != '') {\r\n                                    instance.dpDiv.addClass(_customClass);\r\n                                }\r\n\r\n                                if(typeof(fun) === 'function') {\r\n                                    instance.fun = fun;\r\n                                    instance.obj = obj;\r\n                                }\r\n\r\n                                setTimeout(function () {\r\n                                    var off = $(input).offset();\r\n                                    var widget = $(input).datepicker(\"widget\");\r\n                                    var off2 = widget.offset();\r\n                                    var width = widget.width();\r\n\r\n                                    var buttonPane = $(input)\r\n                                        .datepicker(\"widget\")\r\n                                        .find(\".ui-datepicker-buttonpane\");\r\n\r\n                                    buttonPane.empty();\r\n                                    $(\"<button>\", {\r\n                                        text: \"Today\",\r\n                                        click: function () {\r\n                                            $(sel).datepicker('setDate', new Date()).datepicker('hide').blur().change();\r\n                                        }\r\n                                    }).appendTo(buttonPane).addClass(\"ui-datepicker-current ui-state-default ui-priority-primary ui-corner-all\");\r\n\r\n                                    $(\"<button>\", {\r\n                                        text: \"Reset\",\r\n                                        click: function () {\r\n                                            $.datepicker._clearDate(input);\r\n                                        }\r\n                                    }).appendTo(buttonPane).addClass(\"ui-datepicker-current ui-state-default ui-priority-primary ui-corner-all\");\r\n\r\n                                    //setTimeout(function () {\r\n                                    //    $('.ui-datepicker-prev').focus();\r\n                                    //}, 1)\r\n                                }, 1);\r\n                            }\r\n                        });\r\n\r\n                    $.datepicker._gotoToday = function (id) {\r\n                        $(id).datepicker('setDate', new Date()).datepicker('hide').blur().change();\r\n                    };\r\n                }\r\n            });\r\n        };\r\n\r\n        helperService.setDatepicker2 = function (dateFormatFun, sel, beforeFun, closeFun) {\r\n            $timeout(function () {\r\n                var dateFormat = dateFormatFun,\r\n                    date = $(sel).datepicker({\r\n                        defaultDate: \"-1w\",\r\n                        numberOfMonths: 1,\r\n                        dateFormat: dateFormat,\r\n                        showButtonPanel: true,\r\n                        showOn: \"button\",\r\n                        butttonImage: \"PosImages/calendar.svg\",\r\n                        onClose: closeFun,\r\n                        beforeShow: beforeFun\r\n                    });\r\n                $.datepicker._gotoToday = function (id) {\r\n                    $(id).datepicker('setDate', new Date()).datepicker('hide').blur().change();\r\n                };\r\n\r\n            });\r\n        };\r\n\r\n        helperService.getEmailClass = function (formElement) {\r\n            if ((!formElement.$invalid && formElement.$dirty) || (!formElement.$invalid && formElement.length > 0))\r\n                return 'dp_has-success has-success';\r\n            else if (((formElement.$invalid || formElement.$error.required || formElement.$error.email) && (formElement.$dirty || formElement.length > 0)))\r\n                return 'has-danger dp_has-danger';\r\n        }\r\n\r\n        helperService.goToHomePage = function () {\r\n            $location.path('/home');\r\n        };\r\n\r\n        helperService.isLoyaltyEnabled = function () {\r\n            return configService.enableLoyalty === true;\r\n        };\r\n\r\n        // helperService.isLoyaltyLionEnabled = function() {\r\n        //     return !configService.loyaltyLionToken ? false : true;\r\n        // };\r\n\r\n        // store current sale to make it possible to restore sale after emergency exit from app\r\n        helperService.storeCurrentSale = function (sale, scope, payment, paymentType, amount) {\r\n            if (!!sale && !!sale.CheckoutItems && sale.CheckoutItems.length > 0) {\r\n                var obj = {\r\n                    sale: sale,\r\n                    outletID: configService.lastOutletID,\r\n                    saleType: scope.saleType,\r\n                    operationName: scope.operationName,\r\n                    payment: payment,\r\n                    paymentType: paymentType,\r\n                    creditCardPaymentProcessorID: scope.creditCardPaymentProcessorID,\r\n                    realSum: !amount ? 0 : amount\r\n                };\r\n\r\n                localStorage.setItem('CurrentSale', JSON.stringify(obj));\r\n                console.log('store current sale');\r\n            } else {\r\n                localStorage.removeItem('CurrentSale');\r\n                console.log('clear current sale');\r\n            }\r\n        };\r\n\r\n        helperService.restoreCurrentSale = function () {\r\n            var obj = localStorage.getItem('CurrentSale');\r\n            var sale = null;\r\n            if (obj) {\r\n                obj = JSON.parse(obj);\r\n                if (obj.outletID === configService.lastOutletID && !!obj.sale) {\r\n                    sale = convertFromOld(obj.sale);\r\n                    sale.Surcharges = []; // clear surcharges as they are a part of payments and we returns to sale page\r\n                }\r\n\r\n                console.log('restore current sale');\r\n                return {\r\n                    sale: convertFromOld(sale),\r\n                    saleType: obj.saleType,\r\n                    operationName: obj.operationName,\r\n                    payment: !obj.payment ? null : obj.payment,\r\n                    paymentType: !obj.paymentType ? null : obj.paymentType,\r\n                    creditCardPaymentProcessorID: obj.creditCardPaymentProcessorID,\r\n                    realSum: obj.realSum\r\n                };\r\n            }\r\n\r\n            return null;\r\n        };\r\n\r\n        helperService.fitHeightTypeahead = function (selector, isModalDialog, modalContent) {\r\n            var $el = $(selector);\r\n\r\n            if (isModalDialog == true) {\r\n                var $content = $(modalContent);\r\n\r\n                var elTop = $el.offset().top;\r\n                var contentTop = $content.offset().top;\r\n\r\n                var contentHeight = $content.height();\r\n\r\n                var availableHeight = contentHeight - (elTop - contentTop);\r\n\r\n                $el.css('max-height', availableHeight);\r\n            }\r\n            else {\r\n                var elTop = $el.offset().top;\r\n                var availableHeight = $(window).innerHeight() - elTop - 10;\r\n\r\n                // if (buildConfiguration.platform === 'android') {\r\n                    // 0 on Android, where the WebView resizes for the keyboard (see processKbdShow).\r\n                    var keyboardHeight = $('#hAndroidKeyboardHeight').val();\r\n                    if (keyboardHeight > 0) {\r\n                        availableHeight = availableHeight - keyboardHeight;\r\n                    }\r\n                // }\r\n\r\n\r\n                $el.css('max-height', availableHeight);\r\n            }\r\n        };\r\n\r\n        helperService.resizeModalTypeahead = function (selector, modalContent, isOpen) {\r\n            if (configService.isMobile) {\r\n                var $el = $(selector);\r\n                var $elPopup = $('#' + $el.attr('aria-owns'));\r\n\r\n                var $content = $(modalContent);\r\n                var $resizeContnet = $content.find('.type-head-resize-content');\r\n\r\n                var elTop = $elPopup.offset().top;\r\n                var contentTop = $resizeContnet.offset().top;\r\n\r\n                var contentHeight = $resizeContnet.height();\r\n\r\n                /*var availableHeight = contentHeight - (elTop - contentTop);\r\n\r\n                $el.css('max-height', availableHeight);*/\r\n\r\n                var elemHeight = $elPopup.height();\r\n\r\n                if (isOpen) {\r\n                    if (elemHeight + elTop > contentHeight) {\r\n                        $resizeContnet.css('height', elemHeight + elTop + 20);\r\n                        $el.attr('prev-height', contentHeight);\r\n                    }\r\n                }\r\n                else {\r\n                    if (!!$el.attr('prev-height')) {\r\n                        $resizeContnet.css('height', $el.attr('prev-height'));\r\n                        $el.attr('prev-height', '');\r\n                    }\r\n                }\r\n            }\r\n        };\r\n\r\n\r\n        helperService.formatBalance = function (value) {\r\n            if (value == 0) {\r\n                return $filter('currency')(0);\r\n            }\r\n            else {\r\n                var absValue = Math.abs(value);\r\n                if (value > 0) {\r\n                    return '-' + $filter('currency')(absValue);\r\n                }\r\n                else {\r\n                    return $filter('currency')(absValue);\r\n                }\r\n            }\r\n        };\r\n\r\n        helperService.getModalConfiguration = function () {\r\n            return {\r\n                headerHeight: 0,\r\n                //modalHeaderHeight: 55,\r\n                modalTopPadding: 0,\r\n                modalBottomPadding: 0\r\n            };\r\n        };\r\n\r\n        helperService.getModalContainerHeight = function (el) {\r\n            var mobileSettings = helperService.getModalConfiguration();\r\n\r\n            var modalHeaderHeight = el.closest('.modal-content').find('.modal-header').outerHeight();\r\n            var paddings = mobileSettings.headerHeight + mobileSettings.modalBottomPadding + modalHeaderHeight + mobileSettings.modalTopPadding;\r\n            var screenHeight = window.innerHeight;\r\n            var modalContainerHeight = screenHeight - paddings;\r\n            return modalContainerHeight;\r\n        };\r\n\r\n        helperService.getGuid = function () {\r\n            function _p8(s) {\r\n                var p = (Math.random().toString(16) + \"000000000\").substr(2, 8);\r\n                return s ? \"-\" + p.substr(0, 4) + \"-\" + p.substr(4, 4) : p;\r\n            }\r\n            return _p8() + _p8(true) + _p8(true) + _p8();\r\n        };\r\n\r\n        helperService.uniqueBy = function (a, key) {\r\n            var hashTable = {};\r\n\r\n            $.each(a, function (idx, el) {\r\n                if (!hashTable[el[key]])\r\n                    hashTable[el[key]] = el;\r\n            });\r\n\r\n            var result = [];\r\n\r\n            for (let i in hashTable) {\r\n                result.push(hashTable[i]);\r\n            }\r\n\r\n            return result;\r\n        };\r\n\r\n        helperService.escapeString = function (s) {\r\n            if (!s || typeof (s) !== 'string' || s.length == 0)\r\n                return s;\r\n\r\n            var b = s.replace(/'/g, \"''\");\r\n            return b;\r\n        };\r\n\r\n        helperService.resolvePromise = function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        };\r\n\r\n        helperService.rejectPromise = function (err) {\r\n            var deferred = $q.defer();\r\n            deferred.reject(err);\r\n            return deferred.promise;\r\n        };\r\n\r\n        helperService.isSyncIndicatorSet = false;\r\n\r\n        helperService.getSaleQueue = function () {\r\n            var queue = null;\r\n            try {\r\n                queue = JSON.parse(window.localStorage.getItem('queueToSend'));\r\n                if (!!queue) {\r\n                    $.each(queue, function (i, el) {\r\n                        if (!el.createdDate)\r\n                            el.createdDate = Date.now();\r\n                    });\r\n                }\r\n\r\n            } catch (e) {\r\n                queue = null;\r\n            }\r\n\r\n            return queue;\r\n        };\r\n\r\n        helperService.storeSaleQueue = function (queue) {\r\n            window.localStorage.setItem('queueToSend', JSON.stringify(queue));\r\n        };\r\n\r\n        helperService.checkNSetIndicator = function (queue) {\r\n            try {\r\n                let setIndicator = false;\r\n                if (!!queue) {\r\n    \r\n                    $.each(queue, function (i, el) {\r\n                        if (!setIndicator) {\r\n                            const tmpr = (Date.now() - el.createdDate) / 1000 / 60; // in minutes\r\n                            if (tmpr > 1)\r\n                                setIndicator = true;\r\n                        }\r\n                    });\r\n                }\r\n    \r\n                if (helperService.isSyncIndicatorSet !== setIndicator) {\r\n                    helperService.isSyncIndicatorSet = setIndicator;\r\n                    $rootScope.$broadcast(events.HEADER_SYNC_STATUS_EVENT, setIndicator ? events.STATUS_TOO_LONG : events.STATUS_OK);\r\n                }\r\n            } catch (e) {\r\n                console.error(e);\r\n            }\r\n        };\r\n\r\n        const PROCESS_QUEUE_FAIL_THRESHOLD = 5;\r\n\r\n        helperService.processQueueToSendFail = function (obj) {\r\n            var queue = helperService.getSaleQueue();\r\n            if (!queue)\r\n                queue = [];\r\n\r\n            var obj = queue.length > 0 ? queue[0] : undefined;\r\n            if (obj) {\r\n                if (obj.failCounter !== undefined) {\r\n                    obj.failCounter += 1\r\n                } else {\r\n                    obj.failCounter = 1;\r\n                }\r\n\r\n                // move item to the tail of the queue\r\n                if (configService.isOnline || obj.failCounter > PROCESS_QUEUE_FAIL_THRESHOLD) {\r\n                    obj = queue.shift(),\r\n                    obj.failCounter = 0;\r\n                    queue.push(obj);\r\n                }\r\n\r\n                helperService.storeSaleQueue(queue);\r\n            }\r\n        };\r\n\r\n        helperService.processQueueToSendSuccess = function (obj) {\r\n            var queue = helperService.getSaleQueue();\r\n            if (obj && queue && queue.length>0) {\r\n                queue = queue.filter(function(o) {return o.sale.OperationID != obj.sale.OperationID;});\r\n                helperService.storeSaleQueue(queue);\r\n            }\r\n        };\r\n\r\n        helperService.getQueueSaleToSend = function (shiftItem) {\r\n            var queue = helperService.getSaleQueue();\r\n            helperService.checkNSetIndicator(queue);\r\n\r\n            if (!queue) return null;\r\n\r\n            var obj = queue.shift();\r\n            if(shiftItem === true) // remove item from queue and save this back\r\n                helperService.storeSaleQueue(queue);\r\n\r\n            return obj;\r\n        };\r\n\r\n        helperService.compareStrings = function (a, b, treatNullAsValue) {\r\n            if (a == null && b == null) return (treatNullAsValue === true ? true : false);\r\n            if ((a == null && b != null) || (a != null && b == null)) return false;\r\n            return a.toUpperCase() === b.toUpperCase();\r\n        };\r\n\r\n        helperService.addValues = function (a, b) {\r\n            if (!a) a = 0;\r\n            if (!b) b = 0;\r\n            return Number(a) + Number(b);\r\n        };\r\n\r\n        helperService.mapToList = function (map) {\r\n            var res = [];\r\n            $.each(Object.keys(map), function (i, k) {\r\n                res.push(map[k]);\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        helperService.setSpecialCurrencySymbols = function () {\r\n            switch ($locale.localeID) {\r\n                case 'eu_ES':\r\n                    $locale.NUMBER_FORMATS.GROUP_SEP = ',';\r\n                    $locale.NUMBER_FORMATS.DECIMAL_SEP='.';\r\n                    break;\r\n                case 'ar_KW':\r\n                    $locale.NUMBER_FORMATS.CURRENCY_SYM = 'KWD';\r\n                    break;\r\n                case 'ar_SA':\r\n                    $locale.NUMBER_FORMATS.CURRENCY_SYM = 'SAR';\r\n                    break;\r\n                case 'en_US':\r\n                    if (configService.currency === 'MWK')\r\n                        $locale.NUMBER_FORMATS.CURRENCY_SYM = 'MK';\r\n                    else if (configService.currency === 'XAF')\r\n                        $locale.NUMBER_FORMATS.CURRENCY_SYM = 'XAF';\r\n                    else if (configService.currency === 'VUV')\r\n                        $locale.NUMBER_FORMATS.CURRENCY_SYM = 'VT';\r\n                    else if (configService.currency === 'MVR')\r\n                        $locale.NUMBER_FORMATS.CURRENCY_SYM = 'MVR';\r\n                    break;\r\n                case 'ar_AE':\r\n                    $locale.NUMBER_FORMATS.DECIMAL_SEP = '.';\r\n                    $locale.NUMBER_FORMATS.CURRENCY_SYM = 'AED';\r\n                    break;\r\n                case 'dv-MV':\r\n                    $locale.NUMBER_FORMATS.CURRENCY_SYM = 'MVR';\r\n            }\r\n        };\r\n\r\n        helperService.unpack = function (context, data) {\r\n            var deferred = $q.defer();\r\n\r\n            if (window.useWorker) {\r\n                try {\r\n                    if (!context.worker) {\r\n                    context.worker = new UnpackWorker();\r\n                    }\r\n\r\n                context.worker.postMessage(data);\r\n                context.worker.onmessage = function (e) {\r\n                    deferred.resolve(e.data);\r\n                };\r\n                context.worker.onerror = function (e) {\r\n                    deferred.reject(e.data);\r\n                };\r\n                } catch (e) {\r\n                    window.useWorker = false;\r\n                    console.error(e);\r\n                    var res = unpackArray(data);\r\n                    deferred.resolve(res);\r\n                }\r\n            } else {\r\n                var res = unpackArray(data);\r\n                deferred.resolve(res);\r\n            }\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        helperService.showNewCheckoutUI = function (sale) {\r\n            return CalculatorHelperService.useNewCalculation(sale);\r\n        };\r\n\r\n        helperService.hideDatePickers = function (sel) {\r\n            $(sel).datepicker('hide');\r\n        };\r\n\r\n        helperService.b64toBlob = function(b64Data, contentType) {\r\n            var byteCharacters = atob(b64Data);\r\n\r\n            var byteArrays = [];\r\n\r\n            for (var offset = 0; offset < byteCharacters.length; offset += 512) {\r\n                var slice = byteCharacters.slice(offset, offset + 512),\r\n                    byteNumbers = new Array(slice.length);\r\n                for (var i = 0; i < slice.length; i++) {\r\n                    byteNumbers[i] = slice.charCodeAt(i);\r\n                }\r\n                var byteArray = new Uint8Array(byteNumbers);\r\n\r\n                byteArrays.push(byteArray);\r\n            }\r\n\r\n            var blob = new Blob(byteArrays, { type: contentType });\r\n            return blob;\r\n        };\r\n\r\n        helperService.printPdfReport = function (src, fileName) {\r\n            // var deferred = $q.defer();\r\n            // var src2 = URL.createObjectURL(helperService.b64toBlob(src, 'application/pdf'));\r\n\r\n            // var objFra = $('#pdfFrame');\r\n            // objFra[0].setAttribute('src', src2);\r\n            // objFra[0].contentWindow.print();\r\n\r\n            // helperService.showDialog('#pdfPreviewDialog');\r\n            // deferred.resolve(true);\r\n            // return deferred.promise;\r\n\r\n            if(configService.isMobile === true)\r\n                return helperService.printPdf(src, fileName);\r\n            else\r\n                return helperService.downloadPdfReport(src, fileName);\r\n        };\r\n\r\n        helperService.printPdf = function (base64Pdf, fileName) {\r\n            if (base64Pdf.startsWith('data:application/pdf;base64,')) {\r\n                base64Pdf = base64Pdf.replace('data:application/pdf;base64,', '');\r\n            }\r\n            \r\n            var deferred = $q.defer();\r\n\r\n            plugins.PrintPDF.print({\r\n                data: base64Pdf,\r\n                type: 'Data',\r\n                title: 'Print Document',\r\n                success: function (res) {\r\n                    deferred.resolve(fileName);\r\n                },\r\n                error: function (data) {\r\n                    var err = JSON.parse(data);\r\n                    deferred.reject(err);\r\n                }\r\n            });\r\n\r\n            return deferred;\r\n        };\r\n\r\n        helperService.downloadPdfReport = function (src, fileName) {\r\n            var deferred = $q.defer();\r\n\r\n            var link = URL.createObjectURL(helperService.b64toBlob(src, 'application/pdf'));\r\n            var downloadLink;\r\n\r\n            // Download link\r\n            $('#pdfTmpLink').remove();;\r\n            var lnk = $('<a id=\"pdfTmpLink\" target=\"_blank\" style=\"display:none;\" href=' + link + '></a>');\r\n            downloadLink = lnk[0];\r\n            document.body.appendChild(downloadLink);\r\n\r\n//            downloadLink = document.createElement(\"a\");\r\n            // File name\r\n//            downloadLink.download = fileName;\r\n            // Create a link to the file\r\n//            downloadLink.href = link;\r\n            // Hide download link\r\n//            downloadLink.style.display = \"none\";\r\n            // Add the link to DOM\r\n//            document.body.appendChild(downloadLink);\r\n\r\n            // Click download link\r\n            downloadLink.click();\r\n\r\n            deferred.resolve(fileName);\r\n            return deferred.promise;\r\n        };\r\n\r\n        helperService.cameraScan = function (sequense, fireEvent) {\r\n            $rootScope.$broadcast('cameraScan.show', {\r\n                isSequential: sequense === true,\r\n                needFireEvent: fireEvent === true\r\n            });\r\n        };\r\n\r\n        helperService.canShowCameraScanIcon = function() {\r\n            var sets = configService.getScannerSettings();\r\n            return helperService.isCameraScanAvailable() && sets.enableCameraScan === true;\r\n        };\r\n\r\n        helperService.isCameraScanAvailable = function() {\r\n            return configService.isEmulator || configService.isMobile || configService.hasCamera;\r\n        };\r\n\r\n        helperService.getReceiptProcessSettings = function (el) {\r\n\r\n            el.find(\"span:contains('{{itemPrintSettings.')\").each(function () {\r\n                var fe = $(this);\r\n                var prn = typeof (fe.parent) == 'function' ? fe.parent() : fe;\r\n                prn = typeof (prn.parent) == 'function' ? prn.parent() : prn;\r\n\r\n                switch (fe.text()) {\r\n                    case '{{itemPrintSettings.FontScaleRelativeTo-3inch}}':\r\n                        prn.append('<div print-setting=\"FontScaleRelativeTo3inch\" ></div>');\r\n                        break;\r\n\r\n                    case '{{itemPrintSettings.BreakWordsInTable}}':\r\n                        prn.append('<div print-setting=\"BreakWordsInTable\" ></div>');\r\n                        break;\r\n                }\r\n            });\r\n        };\r\n\r\n        helperService.promiseWhile = function (data, condition, action) {\r\n            var whilst = (data) => {\r\n                console.log(data);\r\n              return condition(data) ?\r\n                action(data).then(whilst) :\r\n                Promise.resolve(data);\r\n            }\r\n            return whilst(data);\r\n        };\r\n\r\n       helperService.toLowerCamelCase = function(obj) {\r\n            if (Array.isArray(obj)) {\r\n                return obj.map(function(el) {\r\n                    return helperService.toLowerCamelCase(el);\r\n                });\r\n            }\r\n\r\n            var newObj = {}\r\n            Object.getOwnPropertyNames(obj).forEach(function(p) {\r\n                if (p == 'ID') {\r\n                    newObj['id'] = obj[p];\r\n                } else if (p[0] === p[0].toUpperCase()) {\r\n                    const newProp = p[0].toLowerCase() + p.substring(1, p.length);\r\n                    newObj[newProp] = obj[p]\r\n                } else {\r\n                    newObj[p] = obj[p];\r\n                }\r\n            });\r\n\r\n            return newObj;\r\n        };\r\n\r\n        return helperService;\r\n    }\r\n]);\r\n\r\nfunction printProcess(el) {\r\n    var win = window.open();\r\n    win.document.write($(el).prop('outerHTML'));\r\n    win.print();\r\n    win.close();\r\n}\r\n\r\nangular.module('services').controller('ErrorModalInstanceCtrl', function ($scope, $uibModalInstance) {\r\n\r\n    $scope.closeErrorDialog = function () {\r\n        $uibModalInstance.dismiss('cancel');\r\n    };\r\n    $scope.closeErrorDialogButton = function () {\r\n        $uibModalInstance.dismiss('cancel');\r\n    };\r\n});","angular.module(\"mainApp\").controller('homeController',\r\n    ['$scope', '$rootScope', 'loginService', 'constants', 'configService','$timeout',\r\n    function ($scope, $rootScope, loginService, constants, configService, $timeout) {\r\n        $scope.showStartForm = window.localStorage.getItem('FirstLoad') !== 'false';\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: '' }); // to hide sidebar details\r\n        console.log('homec: showStartForm ' + $scope.showStartForm);\r\n\r\n        if (!loginService.isLoggedIn() && $scope.showStartForm === false) {\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('login.show'); // show login page on application start\r\n            }, 100);\r\n        }\r\n\r\n        if ($scope.showStartForm) {\r\n\r\n            $timeout(function() {\r\n                window.localStorage.setItem('FirstLoad', false);\r\n            } ,1); \r\n        }\r\n\r\n        if (navigator.splashscreen && typeof navigator.splashscreen.hide === 'function' && !configService.isSite) {\r\n            $timeout(function () {\r\n                navigator.splashscreen.hide();\r\n            }, 300);\r\n        }\r\n\r\n        $scope.callLogin = function () {\r\n            $scope.showStartForm = false;\r\n            $rootScope.$broadcast('login.show');\r\n        };\r\n\r\n        $scope.callGetStarted = function () {\r\n            $.blockUI();\r\n\r\n            $timeout (function(){\r\n                let open = window.open;\r\n                if (typeof cordova !== 'undefined' && cordova.InAppBrowser) {\r\n                    open = cordova.InAppBrowser.open;\r\n                }\r\n                open(configService.getStartedURL, '_self','location=yes,usewkwebview=yes');\r\n            });\r\n\r\n        };\r\n\r\n    }]);","\r\nimport 'angular-route';\r\nimport 'angular-filter';\r\nimport 'angular-ui-validate';\r\nimport abt from 'angular-bootstrap-toggle';\r\nimport ngGettext from 'angular-gettext';\r\nimport ngSanitize from 'angular-sanitize';\r\nimport 'angular-smart-table';\r\nimport tooltip from 'angular-ui-bootstrap/src/tooltip/index-nocss';\r\nrequire('angular-paging');\r\nimport 'angular-ui-bootstrap';\r\nimport ngTouch from 'angular-touch';\r\nimport initializeCalculator from '../../TypePosScripts/Typings/Typings';\r\n// import initializeCalculator from '../../TypePosScripts/Typings/Typings'\r\n// import '../scripts/angular-uuid2.min.js';\r\n//require('../scripts/angular-uuid2.min.js')\r\n//import '@ui-grid/core';\r\nimport 'bootstrap';\r\nimport Boswer from 'bowser';\r\nimport moment from 'moment';\r\nimport buildConfiguration from './configEnvironment'\r\n\r\n\r\nwindow.moment = moment;\r\n\r\n// very important for collapse('hide') show, should be called after bootstrap import because bootstrap overriedes it\r\n$(function () {\r\n    $.support.transition = false;\r\n});\r\n\r\n// For an introduction to the Blank template, see the following documentation:\r\n// http://go.microsoft.com/fwlink/?LinkID=397704\r\n// To debug code on page load in Ripple or on Android devices/emulators: launch your app, set breakpoints, \r\n// and then run \"window.location.reload()\" in the JavaScript Console.\r\nif (window.navigator.userAgent.indexOf(\"Edge\") > -1) {\r\n    var fileref = document.createElement('script');\r\n    fileref.setAttribute(\"type\", \"text/javascript\");\r\n    fileref.setAttribute(\"src\", \"scripts/polyfill.js\");\r\n    document.getElementsByTagName(\"head\")[0].appendChild(fileref);\r\n}\r\n\r\nwindow.useWorker = true;\r\n// get browser\r\nif (window.isSite) {\r\n    sessionStorage.isNewSession = true;\r\n    const browser = Boswer.getParser(window.navigator.userAgent);\r\n    const isSafari = browser.isBrowser('safari');\r\n    const osVer = browser.getOSVersion();\r\n    const osver = (!!osVer && osVer.indexOf('.') > 0) ?\r\n        osVer.substring(0, osVer.indexOf('.')) :\r\n        osVer;\r\n\r\n    const isSafari11 = browser.satisfies({\r\n        macos: {\r\n            safari: \">=11\"\r\n        },\r\n        mobile: {\r\n            safari: \">=11\"\r\n        }\r\n    });\r\n\r\n    const isSafari9 = browser.satisfies({\r\n        macos: {\r\n            safari: \"<10\"\r\n        },\r\n        mobile: {\r\n            safari: \"<10\"\r\n        }\r\n    });\r\n\r\n    // worker mode works badly - not well synchronized when requested in parallel\r\n    window.useWorker = !isSafari || isSafari11;\r\n//    window.useWorker = false; // disable worker forever\r\n\r\n    const isIE = browser.isBrowser('internet explorer');\r\n    // main flag to check if Indexed DB is supported in browser in web pos mode\r\n    window.isSupported = !(isIE === true || (isSafari && isSafari9));\r\n    window.isOS9 = browser.getOSName() === 'iOS' && osver < 10;\r\n\r\n    if (window.isSupported && !window.useWorker) {\r\n        /*var fileref = document.createElement('script');\r\n        fileref.setAttribute(\"type\", \"text/javascript\");\r\n        fileref.setAttribute(\"src\", \"scripts/jsstore.worker.js\");\r\n        document.getElementsByTagName(\"head\")[0].appendChild(fileref);*/\r\n    }\r\n}\r\n\r\nif (!String.prototype.endsWith) {\r\n    String.prototype.endsWith = function (searchString, position) {\r\n        var subjectString = this.toString();\r\n        if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\r\n            position = subjectString.length;\r\n        }\r\n        position -= searchString.length;\r\n        var lastIndex = subjectString.indexOf(searchString, position);\r\n        return lastIndex !== -1 && lastIndex === position;\r\n    };\r\n}\r\n\r\nfunction type(details) {\r\n    details.constructor.prototype = details;\r\n    return details.constructor;\r\n}\r\n\r\n$.fn.selectRange = function (start, end) {\r\n    return this.each(function () {\r\n        if (this.setSelectionRange) {\r\n            this.focus();\r\n            this.setSelectionRange(start, end);\r\n        } else if (this.createTextRange) {\r\n            var range = this.createTextRange();\r\n            range.collapse(true);\r\n            range.moveEnd('character', end);\r\n            range.moveStart('character', start);\r\n            range.select();\r\n        }\r\n    });\r\n};\r\n\r\nfunction onBackKeyDown(e) {\r\n    e.preventDefault();\r\n    return false;\r\n}\r\n\r\n\r\nconst version = window.buildConfiguration?.appVersion ? window.buildConfiguration.appVersion.replace(/\\./g, '') : '';\r\nfunction getTemplateUrl(file) {\r\n    return `${file}?v=${version}`;\r\n}\r\n\r\n    angular.module('services', []);\r\n\r\n    var app = angular.module(\"mainApp\", ['ngRoute', /*'ngAnimate',*/ 'services', 'ui.validate', 'bw.paging', 'ui.toggle',\r\n        'angularUUID2', 'smart-table', 'ui.bootstrap', 'ui.bootstrap.tooltip', 'gettext',\r\n        'tmh.dynamicLocale', 'angular.filter', 'ngTouch', 'ngSanitize', \"ui.grid\"])\r\n        .config(['$routeProvider', 'tmhDynamicLocaleProvider', \r\n            function ($routeProvider, tmhDynamicLocaleProvider) {\r\n\r\n                $routeProvider\r\n                    .when('/sell', {\r\n                        templateUrl: getTemplateUrl('PosViews/sellPartial.html'),\r\n                        controller: 'sellController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/secondScreen', {\r\n                        templateUrl: getTemplateUrl('PosViews/secondScreen.html'),\r\n                        controller: 'secondScreenController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/offlinesales', {\r\n                        templateUrl: getTemplateUrl('PosViews/offlineSalesPartial.html'),\r\n                        controller: 'offlineSalesController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/saleshistory', {\r\n                        templateUrl: getTemplateUrl('PosViews/salesHistoryPartial.html'),\r\n                        controller: 'salesHistoryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/delivery', {\r\n                        templateUrl: getTemplateUrl('PosViews/deliveryPartial.html'),\r\n                        controller: 'deliveryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/salesparked', {\r\n                        templateUrl: getTemplateUrl('PosViews/salesParkedPartial.html'),\r\n                        controller: 'salesParkedController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/customers', {\r\n                        templateUrl: getTemplateUrl('PosViews/customersPartial.html'),\r\n                        controller: 'customersController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/opencloseregistry', {\r\n                        templateUrl: getTemplateUrl('PosViews/openCloseRegistryPartial.html'),\r\n                        controller: 'openCloseRegistryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/cashManagement', {\r\n                        templateUrl: getTemplateUrl('PosViews/cashManagementPartial.html'),\r\n                        controller: 'cashManagementController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/userManagement', {\r\n                        templateUrl: getTemplateUrl('PosViews/userManagementPartial.html'),\r\n                        controller: 'userManagementController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/dashboard', {\r\n                        templateUrl: getTemplateUrl('PosViews/dashboardPartial.html'),\r\n                        controller: 'dashboardController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/productManagement', {\r\n                        templateUrl: getTemplateUrl('PosViews/productManagementPartial.html'),\r\n                        controller: 'productManagementController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/setup', {\r\n                        templateUrl: getTemplateUrl('PosViews/setupPartial.html'),\r\n                        controller: 'setupController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/pinCodeSetup', {\r\n                        templateUrl: getTemplateUrl('PosViews/pinCodeSetupPartial.html'),\r\n                        controller: 'setPinController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/stockTake', {\r\n                        templateUrl: getTemplateUrl('PosViews/stockTakePartial.html'),\r\n                        controller: 'stockTakeController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/stockTransfer', {\r\n                        templateUrl: getTemplateUrl('PosViews/stockTransferPartial.html'),\r\n                        controller: 'stockTransferController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/stockOrdering', {\r\n                        templateUrl: getTemplateUrl('PosViews/stockOrderingPartial.html'),\r\n                        controller: 'stockOrderingController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportRegisterClosure', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportCloseRegistryPartial.html'),\r\n                        controller: 'reportCloseRegistryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportSalesSummary', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportSalesSummaryPartial.html'),\r\n                        controller: 'reportSalesSummaryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportInventory', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportInventoryPartial.html'),\r\n                        controller: 'reportInventoryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportInTransit', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportInTransitPartial.html'),\r\n                        controller: 'reportInTransitController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportProductPerformance', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportProductPerformancePartial.html'),\r\n                        controller: 'reportProductPerformanceController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportGiftCard', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportGiftCardPartial.html'),\r\n                        controller: 'reportGiftCardController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportSurcharge', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportSurchargePartial.html'),\r\n                        controller: 'reportSurchargeController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportPaymentTypeSummary', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportPaymentTypeSummaryPartial.html'),\r\n                        controller: 'reportPaymentTypeSummaryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportStoreCredit', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportStoreCreditPartial.html'),\r\n                        controller: 'reportStoreCreditController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/clickAndCollectGrid', {\r\n                        templateUrl: getTemplateUrl('PosViews/clickAndCollectGridPartial.html'),\r\n                        controller: 'clickAndCollectGridController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/', {\r\n                        redirectTo: '/home'\r\n                    })\r\n                    .when('/home', {\r\n                        templateUrl: getTemplateUrl('PosViews/homePartial.html'),\r\n                        controller: 'homeController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/certificate-error', {\r\n                        templateUrl: getTemplateUrl('PosViews/certificate-error.component.html'),\r\n                        controller: 'certificateErrorComponent',\r\n                        caseInsensitiveMatch: true\r\n                    });\r\n                    // .when('/deliveryCalendar', {\r\n                    //     templateUrl: getTemplateUrl('PosViews/deliveryCalendarPartial.html'),\r\n                    //     controller: 'deliveryCalendarController',\r\n                    //     caseInsensitiveMatch: true\r\n                    // });\r\n\r\n                $routeProvider.otherwise({\r\n                    redirectTo: '/home'\r\n                });\r\n\r\n                window.localStorage.removeItem('forceRegisterClose');\r\n                window.localStorage.removeItem('reportRegisterClosure');\r\n\r\n                tmhDynamicLocaleProvider.localeLocationPattern('scripts/i18n/angular-locale_{{locale}}.js');\r\n                console.log(\"homec: config finished\");\r\n\r\n            }])\r\n        .run(function ($rootScope, helperService, configService, uuid2, constants, gettextCatalog, \r\n            barcodeService, cardPayService, receiptService, saleService, loyaltyService, webOnlyProvider, outletService) {\r\n                // this is fix for LL components that has not empty href and thus makes rediect\r\n                // that breaks main functionality\r\n                $rootScope.$on(\"$locationChangeStart\", function(event, next, current) { \r\n                    console.log(\"location changing to:\" + next); \r\n                    if(next && current && next.length < current.length) {\r\n                        var scp = current.substr(next.length);\r\n                        if(scp === '#/sell') {\r\n                            event.preventDefault();\r\n                        }\r\n                    }\r\n\r\n                    var $divs = $('.main-content, #gridRow > .grid-content, #productGrid > .grid-content, .grid-content .dp_content.grid-content, .dp_modal-body');\r\n                    $divs.off('scroll');\r\n                });\r\n\r\n            // add reference to helper service to be able to relate it in html\r\n            $rootScope.helperService = helperService;\r\n            $rootScope.configService = configService;\r\n            console.log(\"homec: first run finished\");\r\n            initializeCalculator(helperService, configService, uuid2, constants, gettextCatalog, \r\n                barcodeService, cardPayService, receiptService, saleService, loyaltyService, webOnlyProvider, outletService);\r\n        });\r\n\r\n    angular\r\n    .module('template',[])\r\n    .run(['$templateCache', function($templateCache) {\r\n        var url = 'PosViews/saleSummaryPartial.html';\r\n        $templateCache.put(url, require('../PosViews/saleSummaryPartial.html'));\r\n    }]);\r\n\r\n    function setupCrd() {\r\n        // now wait for device is ready and show all.\r\n        if (!!window.cordova) {\r\n\r\n            // Listen to the 'deviceready' event to resolve Cordova.\r\n            // This is when Cordova plugins can be used.\r\n            document.addEventListener('deviceready', function () {\r\n                console.log('deviceready fired');\r\n\r\n                // disable back button\r\n                document.addEventListener(\"backbutton\", onBackKeyDown, false);\r\n\r\n                checkPermissions(initThings);\r\n\r\n            }, false);\r\n        }\r\n        else {\r\n            setTimeout(function() {\r\n                var injector = angular.element('body').injector();\r\n                var location = injector.get('$location');\r\n                var isSecondScreen = location.$$path.toLowerCase() === '/secondscreen';\r\n    \r\n                if (!isSecondScreen) {\r\n                \r\n                    var jSqlProvider = injector.get('jsStoreProvider');\r\n        \r\n                    jSqlProvider.init(function (err) {\r\n                        $('.wait-device-ready').removeClass('wait-device-ready');\r\n                    });\r\n                        \r\n                    var secondTerminalService = injector.get('secondTerminalService');\r\n                    secondTerminalService.init();\r\n                } else {\r\n                    $('.wait-device-ready').removeClass('wait-device-ready');\r\n                }\r\n            }, 200);\r\n        }\r\n    }\r\n\r\n    function initThings() {\r\n        window.setTimeout(function () {\r\n\r\n            var injector = angular.element('body').injector();\r\n\r\n            var configService = injector.get('configService');\r\n            var deviceInfoService = injector.get('deviceInfo');\r\n            var printService = injector.get('printService');\r\n            var localDBProvider = injector.get('localDBProvider');\r\n            var secondTerminalService = injector.get('secondTerminalService');\r\n            var location = injector.get('$location');\r\n            var $rootScope = injector.get('$rootScope');\r\n            function navigateHome() {\r\n                $rootScope.$evalAsync(function () {\r\n                    $('.wait-device-ready').removeClass('wait-device-ready');\r\n                    location.path('/home');\r\n                });\r\n            }\r\n            var isSecondScreen = location.$$path.toLowerCase() === '/secondscreen';\r\n            const saleService = injector.get('saleService');\r\n            const cashManagementService = injector.get('cashManagementService');\r\n            const registryService = injector.get('registryService');\r\n\r\n            const servicesToAddCallbacks = [saleService, cashManagementService, registryService];\r\n\r\n            console.log(\"startUp set environment mobile\");\r\n            configService.isMobile = window.device && (window.device.isVirtual !== true || window.device.platform === 'iOS');\r\n            configService.isEmulator = window.device.isVirtual === true && window.device.platform !== 'iOS';\r\n\r\n            if (configService.isEmulator)\r\n                configService.isQAMode = true;\r\n\r\n            // configService.isClover = true;\r\n\r\n            if (configService.isMobile) {\r\n                console.log(\"will add event listener\");\r\n                document.addEventListener(\"pause\", function () {\r\n                    console.log(\"pause action appeared\");\r\n                }, false);\r\n\r\n                document.addEventListener(\"resume\", function () {\r\n                    console.log(\"resume action appeared\");\r\n                    setTimeout(function () {\r\n                        printService.resumeHandler();\r\n                    }, 100);\r\n                }, false);\r\n            }\r\n\r\n\r\n            if (configService.isMobile) {\r\n                console.log('os info: ' + window.device.platform + ', ' + window.device.version);\r\n                configService.packageCode = BuildInfo.packageName;\r\n                console.log(\"package name is:\" + configService.packageCode);\r\n                configService.isQAMode = configService.packageCode.indexOf('dear.pos.qa') >= 0;\r\n\r\n                // for WkWebView iOS and Android behave the same.\r\n                // if (buildConfiguration.platform === 'android') {\r\n                    window.addEventListener('keyboardDidShow', processKbdShow);\r\n                    window.addEventListener('keyboardDidHide', processKbdHide);\r\n                // }\r\n\r\n                keepTabletLayoutWithKeyboard();\r\n\r\n                window.plugins.starPrinter.startUp(function (err, result) {\r\n                    if (err) {\r\n                        console.log(\"startUp failed\");\r\n                    }\r\n                    else {\r\n                        console.log(\"startUp success\");\r\n                    }\r\n                });\r\n\r\n                console.log('starPrinter.startUp fired');\r\n\r\n\r\n                window.addEventListener('fireKeyPress', function (obj) {\r\n                    //console.log(\"fireKeyPress: \" + String.fromCharCode(obj.symbol));\r\n                    setTimeout(function () {\r\n                        var e = jQuery.Event(\"keypress.scannerDetection\");\r\n                        e.which = obj.symbol;\r\n                        $(document).trigger(e);\r\n                    }, 0);\r\n                });\r\n\r\n                // secondTerminalService.presentationIsAvailable = false; // true makes sense only for android mobile version\r\n\r\n                // set keyboard mode\r\n                var kbdset = configService.getScannerSettings();\r\n\r\n                //                        if (window.device.platform == 'iOS' && Number(window.device.version) >= 11) {\r\n                kbdset.enableSoftKbd = false;\r\n                //                    }\r\n\r\n                configService.setScannerSettings(kbdset);\r\n\r\n                try {\r\n                    navigator.mediaDevices.enumerateDevices()\r\n                    .then(function(devices){\r\n                        devices.forEach(function(d) {\r\n                            if (!configService.hasCamera && (d.kind === 'videoinput' || d.kind === 'video')) {\r\n                                configService.hasCamera = true;\r\n                            }\r\n                        });\r\n                    });\r\n                } catch (e) {\r\n                    console.log('cannot access  , getting from user agent');\r\n                    if (navigator.userAgent && (navigator.userAgent.indexOf('iPhone') >= 0 || navigator.userAgent.indexOf('iPad') >= 0)) {\r\n                        configService.hasCamera = true;\r\n                    }\r\n                }\r\n                \r\n\r\n                if (buildConfiguration.platform == 'android') {\r\n\r\n                    console.log(\"trying clover:\" + configService.isMobile);\r\n                    window.plugins.starPrinter.isClover(function (err, result) {\r\n                        if (err) {\r\n                            console.log(\"isClover failed\");\r\n                            configService.isClover = false;\r\n                        }\r\n                        else {\r\n                            configService.isClover = result.isClover === true;\r\n                            console.log(\"isClover success: \" + configService.isClover);\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n\r\n            if (!isSecondScreen) {\r\n                secondTerminalService.init();\r\n            }\r\n\r\n            configService.setNetworkMode(navigator.connection.type !== (typeof Connection !== 'undefined' ? Connection.NONE : 'none'));\r\n\r\n            if (!isSecondScreen) {\r\n                if (window.isSupported && window.isSite || deviceInfoService.isSimulator) {\r\n                    var jSqlProvider = injector.get('jsStoreProvider');\r\n                    window.isSupported = true;\r\n                    jSqlProvider.init(function (err) {\r\n                        if (err) {\r\n                            var errorService = injector.get('errorService');\r\n                            errorService.showError(err);\r\n                            return;\r\n                        }\r\n                        navigateHome();\r\n                    });\r\n                } else {\r\n                localDBProvider.init(function (err) {\r\n                    if (err) {\r\n                        var errorService = injector.get('errorService');\r\n                        errorService.showError(err);\r\n                        return;\r\n                    }\r\n                    if (buildConfiguration.platform === 'android') {\r\n                        window.isSupported = true;\r\n                        var jSqlProvider = injector.get('jsStoreProvider');\r\n                        jSqlProvider.init(function (err2) {\r\n                            if (err2) {\r\n                                var errorService = injector.get('errorService');\r\n                                errorService.showError(err2);\r\n                            }\r\n                            navigateHome();\r\n                        });\r\n                    } else {\r\n                        navigateHome();\r\n                    }\r\n                });\r\n                }\r\n\r\n                setTimeout(function () {\r\n                    for (const service of servicesToAddCallbacks) {\r\n                        try {\r\n                            service.addCallback();\r\n                            console.log('added callback: ' + service.addCallback);\r\n                        } catch (e) {\r\n                            console.error(e);\r\n                        }\r\n                    }\r\n                }, 500);\r\n            } else {\r\n                $('.wait-device-ready').removeClass('wait-device-ready');\r\n            }\r\n\r\n        }, 200);\r\n    }\r\n\r\n    function checkPermissions(callbackFun) {\r\n        /*\r\n            WRITE_EXTERNAL_STORAGE\r\n            ACCESS_COARSE_LOCATION\r\n            ACCESS_FINE_LOCATION\r\n         */\r\n\r\n        var permissions = cordova.plugins.permissions;\r\n\r\n        const list = [\r\n            permissions.WRITE_EXTERNAL_STORAGE,\r\n            permissions.ACCESS_COARSE_LOCATION,\r\n            permissions.ACCESS_FINE_LOCATION,\r\n            permissions.CAMERA,\r\n            permissions.BLUETOOTH_CONNECT,\r\n            permissions.BLUETOOTH_SCAN\r\n        ];\r\n\r\n        permissions.checkPermission(list, function (status) {\r\n            if (status && !status.hasPermission) {\r\n                console.log(\"request Permissions\");\r\n                permissions.requestPermissions(\r\n                    list,\r\n                    function (status) {\r\n                        if (!status.hasPermission) console.log(\"Permissions No\");\r\n                        else {\r\n                            console.log(\"Permissions Yes\");\r\n                        }\r\n\r\n                        callbackFun();\r\n                    });\r\n            }\r\n            else {\r\n                console.log(\"Permission Yes\");\r\n                callbackFun();\r\n            }\r\n        });\r\n    }\r\n\r\n    function keepTabletLayoutWithKeyboard() {\r\n        try {\r\n            if (window.device.platform !== 'Android' || Math.min(screen.width, screen.height) < 600) {\r\n                return;\r\n            }\r\n\r\n            // A tablet is only this short while the keyboard is open, so turn off the short-screen rules on tablets.\r\n            var shortScreen = /max-height:\\s*(\\d+)px/;\r\n            Array.prototype.forEach.call(document.styleSheets, function (sheet) {\r\n                var rules;\r\n                try {\r\n                    rules = sheet.cssRules;\r\n                } catch (e) {\r\n                    return;\r\n                }\r\n                Array.prototype.forEach.call(rules, function (rule) {\r\n                    var media = rule.media;\r\n                    if (!media) {\r\n                        return;\r\n                    }\r\n                    for (var i = media.length - 1; i >= 0; i--) {\r\n                        var match = shortScreen.exec(media[i]);\r\n                        if (match && parseInt(match[1], 10) <= 480) {\r\n                            if (media.length > 1) {\r\n                                media.deleteMedium(media[i]);\r\n                            } else {\r\n                                media.mediaText = 'not all';\r\n                            }\r\n                        }\r\n                    }\r\n                });\r\n            });\r\n        } catch (e) {\r\n            console.log('keepTabletLayoutWithKeyboard failed', e);\r\n        }\r\n    }\r\n\r\n    function processKbdShow(event) {\r\n        // Android resizes the WebView for the keyboard; iOS (KeyboardResize=false) does not.\r\n        var webViewResizes = window.device.platform === 'Android';\r\n        var keyboardHeight = webViewResizes ? 0 : event.keyboardHeight;\r\n        var h = window.innerHeight - keyboardHeight;\r\n\r\n        $('#hAndroidKeyboardHeight').val(keyboardHeight);\r\n\r\n        $('.kbdResizeContainer').each(function (idx, el) {\r\n            if (!$(el).hasClass('keyboard-active')) {\r\n                if ($(el).prop('tagName') === 'FORM') {\r\n                    $(el).closest('.dp_modal-dialog').addClass('modal-active-keyboard');\r\n                }\r\n                const hs = parseInt($(el).css('height'));\r\n                if (hs) {\r\n                    h = hs - keyboardHeight;\r\n                }\r\n                if (!webViewResizes) {\r\n                    $(el).css('max-height', h + 'px');\r\n                }\r\n                $(el).addClass('keyboard-active');\r\n            }\r\n        });\r\n\r\n        if ($(\"#isMobileDesign\").is(':visible') == false) {\r\n\r\n            var $el = $('.m-filter.open').find('.m-filter-content').find('.m-filter-content-wrapper');\r\n            if ($el.length > 0) {\r\n                if (!webViewResizes) {\r\n                    $el.css('max-height', h + 'px');\r\n                }\r\n                $el.css('overflow-y', 'scroll');\r\n                $el.css('bottom', '0');\r\n                $el.css('left', '0');\r\n                $el.css('top', '0');\r\n                $el.css('right', '0');\r\n                $el.css('position', 'absolute');\r\n                $el.addClass('keyboard-active');\r\n            }\r\n        }\r\n\r\n        var actel = document.activeElement;//.scrollIntoView(true);\r\n\r\n        if (!!actel) {\r\n            if (window.device.platform === 'iOS' && parseInt(window.device.version) >= 11)\r\n                actel.scrollIntoView({ behavior: \"auto\", block: \"center\", inline: \"nearest\" });\r\n            else {\r\n                var el = $(actel);\r\n                var off = el.offset();\r\n                var lpos = off.top + el.height();\r\n                if (lpos > (h - 10)) {\r\n                    var prn = null;\r\n                    if ($('.m-filter.open').length > 0) {\r\n                        prn = el.closest('.m-filter-content-wrapper');\r\n                    }\r\n                    else {\r\n                        prn = el.closest('.kbdResizeContainer');\r\n                    }\r\n                    if (prn.length > 0) {\r\n                        prn[0].scrollBy(0, (lpos - h + 10));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        setTimeout(function () {\r\n            var elem = angular.element(document.querySelector('[ng-app]'));\r\n            var injector = elem.injector();\r\n            var $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('keyboard.show', true);\r\n            });\r\n        });\r\n    }\r\n\r\n    function processKbdHide() {\r\n        $('#hAndroidKeyboardHeight').val(0);\r\n\r\n        $('.kbdResizeContainer').each(function (idx, el) {\r\n            $(el).css('max-height', '');\r\n            $(el).removeClass('keyboard-active');\r\n            if ($(el).prop('tagName') === 'FORM') {\r\n                $(el).closest('.dp_modal-dialog').removeClass('modal-active-keyboard');\r\n            }\r\n        });\r\n\r\n        if ($(\"#isMobileDesign\").is(':visible') == false) {\r\n            var $el = $('.m-filter.open').find('.m-filter-content').find('.m-filter-content-wrapper');\r\n            if ($el.length > 0) {\r\n                $el.css('max-height', '');\r\n                $el.css('overflow-y', '');\r\n                $el.css('bottom', '');\r\n                $el.css('left', '');\r\n                $el.css('top', '');\r\n                $el.css('right', '');\r\n                $el.css('position', '');\r\n                $el.removeClass('keyboard-active');\r\n            }\r\n        }\r\n\r\n        setTimeout(function () {\r\n            var elem = angular.element(document.querySelector('[ng-app]'));\r\n            var injector = elem.injector();\r\n            var $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('keyboard.hide', true);\r\n            });\r\n        });\r\n     }\r\n\r\n    app.run(['configService', 'printService', 'gettextCatalog', 'webOnlyProvider', '$location', '$rootScope',\r\n        function (configService, printService, gettextCatalog, webOnlyProvider, $location, $rootScope) {\r\n            if (window.localStorage.getItem('FirstLoad') !== 'false') {\r\n                window.localStorage.setItem('FirstLoad', true);\r\n            }\r\n        \r\n            if (!configService.isSite) {\r\n                document.addEventListener(\"offline\", function () { configService.setNetworkMode(false); }, false);\r\n                document.addEventListener(\"online\", function () { configService.setNetworkMode(true); }, false);\r\n            }\r\n\r\n            if (configService.isSite) {\r\n                configService.setBaseURL();\r\n                configService.isQAMode = configService.baseURL.indexOf('https://inventory.dearsystems.com') < 0;\r\n                \r\n\r\n                var path = $location.path();\r\n                if (!configService.loginUserID && path !== '/home' && path.toLowerCase() !== '/secondscreen') {\r\n                    $location.path('/home');\r\n                }\r\n            }\r\n\r\n            var currentLanguage = window.localStorage.getItem('currentLanguage');\r\n            if (!currentLanguage)\r\n                currentLanguage = 'en';\r\n            gettextCatalog.setCurrentLanguage(currentLanguage);\r\n            gettextCatalog.debug = false;\r\n\r\n            // init progress component\r\n            //        $.blockUI.defaults.message = '<div><img title=\"loading...\" src=\"PosImages/preloader.gif\"></div>';\r\n            $.blockUI.defaults.message = '<div class=\"preloader2\"><span></span><span></span><span></span><span></span><span></span></div>';\r\n            $.blockUI.defaults.overlayCSS = {\r\n                background: 'rgba(235,235,235,0.7)'\r\n            };\r\n\r\n            $.blockUI.defaults.css = {\r\n                backgroundColor: 'transparent',\r\n                border: 'none',\r\n                padding: 0,\r\n                margin: 0,\r\n                width: '30%',\r\n                top: '47%',\r\n                left: '35%',\r\n                textAlign: 'center',\r\n                color: 'transparent',\r\n                cursor: 'wait'\r\n            };\r\n\r\n            $.blockUI.defaults.baseZ = 100000;\r\n\r\n            $.blockUI.defaults.onBlock = function (element, options) {\r\n                $rootScope.isBlockUIVisible = true;\r\n            };\r\n\r\n            $.blockUI.defaults.onUnblock = function (element, options) {\r\n                $rootScope.isBlockUIVisible = false;\r\n            };\r\n\r\n            console.log(\"homec: second run finished\");\r\n\r\n            setupCrd();\r\n        }\r\n    ]);\r\n\r\n    app.factory('loginHandler', ['$timeout', function ($timeout) {\r\n        var loginHandler = {};\r\n        loginHandler.result = {};\r\n\r\n        $timeout(function () {\r\n            loginHandler.result = true;\r\n        });\r\n        return loginHandler;\r\n    }]);\r\n\r\n    app.filter('roundQty', function () {\r\n        return function (item) {\r\n            if (!item)\r\n                return item;\r\n\r\n            item = item + '';\r\n\r\n            if (item.length == 0)\r\n                return item;\r\n\r\n            var isNegative = (+item) < 0;\r\n            var val = Math.round(Math.abs(+item));\r\n            if (val < 1) val = 1;\r\n\r\n            return (isNegative ? -val : val) + '';\r\n        };\r\n    });\r\n\r\n    app.filter('isEmptyNA', ['gettextCatalog',function(gettextCatalog) {\r\n        return function (item) {\r\n            if(!item || item.length === 0) return gettextCatalog.getString('N/A');\r\n\r\n            return item;\r\n        };\r\n    }]);\r\n\r\nexport default app;\r\n\r\n//function stopEvents(event) {\r\n//    console.log('disable events');\r\n//    var allow = true;\r\n\r\n//    if (!!event && !!event.touches &&\r\n//        event.touches.length > 0) {\r\n//        allow = $(event.touches[0].target).attr('role') !== 'dialog';\r\n//    }\r\n\r\n//    if (!allow) {\r\n//        event.preventDefault();\r\n//    }\r\n\r\n//    return allow;\r\n//}\r\n\r\n// $(document).on(\"touchstart touchend\", stopEvents);\r\n//document.addEventListener(\"touchmove\", stopEvents, false);","import * as JsStore from 'jsstore';\r\n//import * as workerPath from 'file-loader?name=scripts/[name].[hash].js!jsstore/dist/jsstore.worker.min.js';\r\nimport Enumerable from 'linq';\r\n\r\nangular.module('services').service('jsStoreProvider', [\r\n    'configService', 'errorService', 'helperService', 'constants', 'gettextCatalog', 'dbUpdatesService', '$q', '$rootScope',\r\n    '$timeout', 'filterService',\r\n    function (configService, errorService, helperService, constants, gettextCatalog, dbUpdatesService, $q, $rootScope,\r\n        $timeout, filterService) {\r\n\r\n        this.isSupported = false;\r\n        this.db = null;\r\n        this.productLikeIndex = [];\r\n        this.chunkSize = 0;\r\n\r\n        this.dropAndCreate = function (schema, message) {\r\n            var THIS = this;\r\n            return THIS.connection.isDbExist('crddb').then(function(exists) {\r\n                if (exists) {\r\n                    console.info('dropping existing db');\r\n                    return THIS.connection.dropDb();\r\n                }\r\n                console.info('db does not exist, skipping drop');\r\n            }).catch(function(err) {\r\n                console.info('error checking db existence:', err);\r\n            }).then(function() {\r\n                console.info('creating db with version:', schema.version);\r\n                \r\n                var cleanSchema = {\r\n                    name: schema.name,\r\n                    tables: schema.tables,\r\n                    version: schema.version\r\n                };\r\n                \r\n                return THIS.connection.createDb(cleanSchema);\r\n            }).then(function() {\r\n                return THIS.connection.openDb('crddb');\r\n            }).then(function() {\r\n                return THIS.connection.insert({\r\n                    into: 'dbVersion',\r\n                    values: [{ version: schema.version }]\r\n                });\r\n            }).then(function() {\r\n                console.info('dbVersion table populated with version:', schema.version);\r\n                if (message) {\r\n                    console.info(message);\r\n                }\r\n            });\r\n        };\r\n\r\n        this.migrateData = function(schema, currentSchema) {\r\n            var THIS = this;\r\n            \r\n            console.info('-- Start Json DB Migration --');\r\n            \r\n            var existingTableNames = currentSchema.tables.map(function(t) { return t.name; });\r\n            \r\n            console.info('backing up data...');\r\n            var backupData = {};\r\n            var backupPromises = [];\r\n            \r\n            $.each(existingTableNames, function(index, tableName) {\r\n                backupPromises.push(\r\n                    THIS.connection.select({ from: tableName }).then(function(data) {\r\n                        backupData[tableName] = data;\r\n                        console.info('backed up ' + tableName + '');\r\n                    })\r\n                );\r\n            });\r\n            \r\n            return $q.all(backupPromises).then(function() {\r\n                return THIS.dropAndCreate(schema);\r\n            }).then(function() {\r\n                console.info('restoring data...');\r\n                var restorePromises = [];\r\n                \r\n                $.each(existingTableNames, function(index, tableName) {\r\n                    if (backupData[tableName] && backupData[tableName].length > 0) {\r\n                        restorePromises.push(\r\n                            THIS.connection.insert({\r\n                                into: tableName,\r\n                                values: backupData[tableName],\r\n                                skipDataCheck: true\r\n                            }).then(function() {\r\n                                console.info('restored ' + tableName + ': ' + backupData[tableName].length + ' records');\r\n                            })\r\n                        );\r\n                    }\r\n                });\r\n                \r\n                return $q.all(restorePromises);\r\n            }).then(function() {\r\n                return THIS.connection.openDb('crddb');\r\n            }).then(function() {\r\n                return THIS.getVersionFromTable();\r\n            }).then(function(version) {\r\n                console.info('db migrated to version: ' + version);\r\n                if (version !== schema.version) {\r\n                    console.error('migration failed: expected version ' + schema.version + ', got ' + version);\r\n                }\r\n                console.info('-- End Json Db Migration --');\r\n            });\r\n        };\r\n\r\n        this.getVersionFromTable = function() {\r\n            var THIS = this;\r\n            return THIS.connection.select({\r\n                from: 'dbVersion'\r\n            }).then(function(rows) {\r\n                if (rows && rows.length > 0) {\r\n                    return rows[0].version;\r\n                }\r\n                return null;\r\n            }).catch(function(err) {\r\n                console.info('dbVersion table not found or empty');\r\n                return null;\r\n            });\r\n        };\r\n\r\n        this.recreateDB = function (schema, callback) {\r\n            var THIS = this;\r\n            \r\n            return THIS.connection.isDbExist('crddb')\r\n                .then(function(exists) {\r\n                    if (!exists) {\r\n                        return THIS.dropAndCreate(schema, 'db created')\r\n                            .then(function() {\r\n                                return false;\r\n                            });\r\n                    }\r\n                    return THIS.connection.openDb('crddb')\r\n                        .then(function() {\r\n                            return null;\r\n                        });\r\n                })\r\n                .then(function(freshDbResult) {\r\n                    if (freshDbResult === false) {\r\n                        return false;\r\n                    }\r\n                    return THIS.getVersionFromTable();\r\n                })\r\n                .then(function(v) {\r\n                    if (v === false) {\r\n                        return false;\r\n                    }\r\n\r\n                    if (v === null) {\r\n                        console.info('no version in dbVersion table');\r\n                        return true;\r\n                    }\r\n                    \r\n                    console.info('db version: ' + v + ', schema version: ' + schema.version);\r\n                    if (v === schema.version) {\r\n                        return false; // no update needed\r\n                    }\r\n                    \r\n                    // version mismatch\r\n                    console.info('migrating schema');\r\n                    return true;\r\n                })\r\n                .then(function(shouldMigrate) {\r\n                    if (shouldMigrate === false) {\r\n                        return false; // no migration needed\r\n                    }\r\n                    console.info('getting schema');\r\n                    return THIS.connection.getDbSchema('crddb').catch(function(err) {\r\n                        console.info('error getting schema:', err);\r\n                        return null;\r\n                    });\r\n                })\r\n                .then(function(currentSchema) {\r\n                    if (currentSchema === false) {\r\n                        return; // no migration needed\r\n                    } \r\n                    \r\n                    console.info('schema:', currentSchema);\r\n                    \r\n                    // corrupted db or migration disabled\r\n                    if (!currentSchema || !currentSchema.tables || \r\n                        currentSchema.tables.length === 0 || schema.canMigrateData === false) {\r\n                        return THIS.dropAndCreate(schema, 'db recreated');\r\n                    }\r\n                    \r\n                    return THIS.migrateData(schema, currentSchema);\r\n                })\r\n                .catch(function (err) {\r\n                    console.error('db error:', err);\r\n                    console.info('recreating db');\r\n                    return THIS.dropAndCreate(schema, 'db recreated after error');\r\n                })\r\n                .then(function () {\r\n                    console.info('db ready');\r\n                    callback();\r\n                    return true;\r\n                });\r\n        };\r\n\r\n        this.init = function (callback) {\r\n            if (!configService.isSite && buildConfiguration.platform !== 'android') {\r\n                window.cancelApplication = false;\r\n                callback();\r\n                return;\r\n            }\r\n\r\n            this.isSupported = window.isSupported &&\r\n                !!(window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB);\r\n\r\n            if (!this.isSupported) {\r\n                window.cancelApplication = false;\r\n                window.isSupported = false;\r\n                callback();\r\n                return;\r\n            }\r\n\r\n            var THIS = this;\r\n\r\n            return this.checkOtherInstances()\r\n                .then(function (res) {\r\n                    window.recreateDBStart = true;\r\n                    $rootScope.$broadcast('login.hide');\r\n\r\n                    THIS.connection = window.useWorker ?\r\n                        new JsStore.Instance(new Worker(new URL('jsstore/dist/jsstore.worker.min.js', import.meta.url))) :\r\n                        new JsStore.Instance();\r\n                    var schema = dbUpdatesService.getSchema();\r\n                    console.info('open db');\r\n\r\n                    return THIS.recreateDB(schema, callback)\r\n                        .then(function () {\r\n                            window.recreateDBStart = false;\r\n                            window.waitApplication = false;\r\n                            $rootScope.$broadcast('login.hide');\r\n                        })\r\n                        .catch(function (err) {\r\n                            THIS.isSupported = false;\r\n                            window.recreateDBStart = false;\r\n                            window.waitApplication = false;\r\n                            $rootScope.$broadcast('login.hide');\r\n                            console.info('db creation failed');\r\n                            console.info(err);\r\n                            callback(err);\r\n                            errorService.showError(err);\r\n                        });\r\n                })\r\n                .catch(function (res) {\r\n                    THIS.isSupported = false;\r\n                    window.waitApplication = false;\r\n                    $rootScope.$broadcast('login.hide');\r\n                    console.info('app is cancelled');\r\n                    callback();\r\n                });\r\n        };\r\n\r\n        this.crdlockDB = null;\r\n        this.checkOtherInstances = function () {\r\n            var deferred = $q.defer();\r\n            var ver = new Date().getTime();\r\n            var THIS = this;\r\n\r\n            var req0 = window.indexedDB.deleteDatabase(\"crdlock\");\r\n            var prt = $timeout(function () {\r\n                window.waitApplication = true;\r\n                $rootScope.$broadcast('login.hide');\r\n                $('.wait-device-ready').removeClass('wait-device-ready');\r\n            }, 2000);\r\n\r\n            req0.onerror = function (event) {\r\n                console.error(\"Error loading database.\");\r\n                $timeout.cancel(prt);\r\n                window.waitApplication = false;\r\n                $rootScope.$broadcast('login.hide');\r\n                deferred.reject(false);\r\n            };\r\n\r\n            req0.onsuccess = function () {\r\n                $timeout.cancel(prt);\r\n\r\n                var req = window.indexedDB.open(\"crdlock\", 1);\r\n\r\n                // these two event handlers act on the database being opened successfully, or not\r\n                req.onerror = function (event) {\r\n                    console.error(\"Error loading database.\");\r\n                    deferred.reject(false);\r\n                };\r\n\r\n                req.onsuccess = function (event) {\r\n                    console.info(\"Database loaded.\");\r\n                    THIS.crdlockDB = event.target.result;\r\n                    deferred.resolve(true);\r\n                };\r\n            };\r\n\r\n            req0.onblocked = function (event) {\r\n                window.waitApplication = true;\r\n                $rootScope.$broadcast('login.hide');\r\n                $('.wait-device-ready').removeClass('wait-device-ready');\r\n            };\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.addCacheRow = function (el) {\r\n            if (!el.productID) {\r\n                var pr = JSON.parse(el.ExtraInfo);\r\n                this.productLikeIndex.push({\r\n                    ProductID: el.ProductID,\r\n                    ProductCode: !!el.ProductCode ? el.ProductCode.toUpperCase() : el.ProductCode,\r\n                    OutletSKU: !!el.OutletSKU ? el.OutletSKU.toUpperCase() : el.OutletSKU,\r\n                    Name: !!el.Name ? el.Name.toUpperCase() : el.Name,\r\n                    Family: !!el.ProductFamilyName ? el.ProductFamilyName.toUpperCase() : el.ProductFamilyName,\r\n                    Tags: !!el.Tags ? el.Tags.toUpperCase() : el.Tags,\r\n                    Barcode: el.Barcode,\r\n                    CF1: pr.CF1,\r\n                    CF2: pr.CF2,\r\n                    CF3: pr.CF3,\r\n                    CF4: pr.CF4,\r\n                    CF5: pr.CF5,\r\n                    CF6: pr.CF6,\r\n                    CF7: pr.CF7,\r\n                    CF8: pr.CF8,\r\n                    CF9: pr.CF9,\r\n                    CF10: pr.CF10\r\n                });\r\n            } else {\r\n                this.productLikeIndex.push({\r\n                    ProductID: el.productID,\r\n                    ProductCode: !!el.productCode ? el.productCode.toUpperCase() : el.productCode,\r\n                    OutletSKU: !!el.outletSKU ? el.outletSKU.toUpperCase() : el.outletSKU,\r\n                    Name: !!el.name ? el.name.toUpperCase() : el.name,\r\n                    Family: !!el.productFamilyName ? el.productFamilyName.toUpperCase() : el.productFamilyName,\r\n                    Tags: !!el.tags ? el.tags.toUpperCase() : el.tags,\r\n                    Barcode: el.barcode,\r\n                    CF1: el.cF1,\r\n                    CF2: el.cF2,\r\n                    CF3: el.cF3,\r\n                    CF4: el.cF4,\r\n                    CF5: el.cF5,\r\n                    CF6: el.cF6,\r\n                    CF7: el.cF7,\r\n                    CF8: el.cF8,\r\n                    CF9: el.cF9,\r\n                    CF10: el.cF10\r\n                });\r\n            }\r\n        };\r\n\r\n        this.buildIndexes = function () {\r\n            var THIS = this;\r\n            if (THIS.productLikeIndex && THIS.productLikeIndex.length > 0)\r\n                return helperService.resolvePromise(false);\r\n\r\n            let pr = this.connection.select({\r\n                from: \"products\"\r\n            }).then(function (data) {\r\n                THIS.productLikeIndex = [];\r\n                angular.forEach(data, function (el) {\r\n                    THIS.addCacheRow(el);\r\n                });\r\n\r\n                return helperService.resolvePromise(false);\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.refreshProducts = function (data) {\r\n            // clear products table and replace data from new array for current pos.\r\n            // save new pos identification\r\n            var THIS = this;\r\n          //  console.time('refreshProducts: remove products');\r\n\r\n            return this.connection.clear(\"products\")\r\n                .then(function (res) {\r\n            //    console.timeEnd('refreshProducts: remove products');\r\n                THIS.productLikeIndex = [];\r\n              //  console.time('refreshProducts: remove settings record');\r\n                return THIS.connection.remove({\r\n                    from: \"settings\",\r\n                    where: {\r\n                        Name: {\r\n                            in: ['ProductsPosName', 'ProductsHash']\r\n                        }\r\n                    }\r\n                });\r\n            }).then(function (res) {\r\n                // console.timeEnd('refreshProducts: remove settings record');\r\n                var vals = [\r\n                    {\r\n                        Name: 'ProductsPosName',\r\n                        Value: configService.lastDearPosName,\r\n                        lastModified: new Date()\r\n                    },\r\n                    {\r\n                        Name: 'ProductsHash',\r\n                        Value: data.hash,\r\n                        lastModified: new Date()\r\n                    }\r\n                ];\r\n                // console.time('refreshProducts: insert settings record');\r\n\r\n                return THIS.connection.insert({\r\n                    into: 'settings',\r\n                    values: vals\r\n                });\r\n            }).then(function () {\r\n                // console.timeEnd('refreshProducts: insert settings record');\r\n                // console.time('refreshProducts: remove product duplicates');\r\n                data.arr = helperService.uniqueBy(data.arr, \"productID\"); // remove possible product duplicates\r\n                var v = [];\r\n                THIS.productLikeIndex = [];\r\n                $.each(data.arr, function (idx, el) {\r\n\r\n                    // format tags, excluding all spaces between them\r\n                    if(el.tags) {\r\n                        var tg = el.tags.split(\",\").map(function(t) {\r\n                            return t.trim();\r\n                            });\r\n\r\n                        el.tags = tg.join(',');\r\n                    }\r\n                    \r\n                    THIS.addCacheRow(el);\r\n\r\n                    var e = {\r\n                        ProductID: el.productID,\r\n                        ProductCode: el.productCode,\r\n                        OutletSKU: el.outletSKU,\r\n                        Name: el.name,\r\n                        Barcode: el.barcode,\r\n                        Family: el.productFamilyName,\r\n                        FamilyID: el.productFamilyID,\r\n                        Category: el.category,\r\n                        CategoryID: el.categoryID,\r\n                        DiscountName: el.discountName,\r\n                        DiscountID: el.discountID,\r\n                        Price: el.price || 0,\r\n                        Option1: el.option1,\r\n                        Option2: el.option2,\r\n                        Option3: el.option3,\r\n                        Discounts: JSON.stringify(el.discountLines),\r\n                        Taxes: JSON.stringify(el.tax),\r\n                        LoyaltyEarning: el.loyaltyEarning,\r\n                        Option1Name: el.productFamilyOption1Name,\r\n                        Option2Name: el.productFamilyOption2Name,\r\n                        Option3Name: el.productFamilyOption3Name,\r\n                        ImageID: el.imageID,\r\n                        FamilyImageID: el.familyImageID,\r\n                        Tags: el.tags,\r\n                        BrandID: el.brandID,\r\n                        Brand: el.brand,\r\n                        ProductShortDescription: el.productShortDescription,\r\n                        FamilyShortDescription: el.familyShortDescription,\r\n                        StocktakeLocked: el.stocktakeLocked,\r\n                        ProductType: el.productType,\r\n                        CostingMethod: el.costingMethod,\r\n                        ExtraInfo: JSON.stringify({\r\n                            CF1: el.cF1,\r\n                            CF2: el.cF2,\r\n                            CF3: el.cF3,\r\n                            CF4: el.cF4,\r\n                            CF5: el.cF5,\r\n                            CF6: el.cF6,\r\n                            CF7: el.cF7,\r\n                            CF8: el.cF8,\r\n                            CF9: el.cF9,\r\n                            CF10: el.cF10,\r\n                            Price1: el.price1 || 0,\r\n                            Price2: el.price2 || 0,\r\n                            Price3: el.price3 || 0,\r\n                            Price4: el.price4 || 0,\r\n                            Price5: el.price5 || 0,\r\n                            Price6: el.price6 || 0,\r\n                            Price7: el.price7 || 0,\r\n                            Price8: el.price8 || 0,\r\n                            Price9: el.price9 || 0,\r\n                            Price10: el.price10 || 0\r\n                        })\r\n                    };\r\n                    v.push(e);\r\n                });\r\n                // console.timeEnd('refreshProducts: remove product duplicates');\r\n\r\n                // console.time('refreshProducts: insert products');\r\n                // console.log('products to insert: ' + v.length);\r\n\r\n                if (THIS.chunkSize > 0) {\r\n                    return THIS.splitBigBulkInsert(v, THIS.chunkSize, function (b) {\r\n                        return THIS.connection.bulkInsert({\r\n                            into: \"products\",\r\n                            values: b,\r\n                            upsert: false,\r\n                            skipDataCheck: true\r\n                        });\r\n                    });\r\n                } else {\r\n                    return THIS.connection.bulkInsert({\r\n                        into: \"products\",\r\n                        values: v,\r\n                        upsert: false,\r\n                        skipDataCheck: true\r\n                    });\r\n                }\r\n            });\r\n        };\r\n\r\n        this.splitBigBulkInsert = function (v, chunkSize, callback) {\r\n            var bulks = Array(Math.ceil(v.length / chunkSize)).fill(undefined).map(function (_, i) {\r\n                return v.slice(i * chunkSize, i * chunkSize + chunkSize);\r\n            });\r\n\r\n            var prms = [];\r\n\r\n            $.each(bulks, function (_, b) {\r\n                prms.push(callback(b));\r\n            });\r\n\r\n            return $q.all(prms);\r\n        };\r\n\r\n        this.getProductByID = function (productID) {\r\n            return this.connection.select({\r\n                from: 'products',\r\n                where: {\r\n                    ProductID: productID\r\n                }\r\n            }).then(function (res) {\r\n                var deferred2 = $q.defer();\r\n\r\n                var dataObj = {};\r\n                if (res && res.length > 0) {\r\n                    dataObj.data = res;\r\n                } else {\r\n                    deferred2.data = [];\r\n                }\r\n\r\n                deferred2.resolve(dataObj);\r\n                return deferred2.promise;\r\n            });\r\n        };\r\n\r\n        // ProductCode, Name, Barcode, Family\r\n        this.search = function (barcode, text, qkeytemplate, qkey, productID) {\r\n            console.time('start search');\r\n            console.time('delete old search');\r\n            var THIS = this;\r\n            var deferred = $q.defer();\r\n//            return THIS.connection.clear('productsSearchTemp')\r\n            return THIS.tempClear()\r\n                .then(function () {\r\n                console.timeEnd('delete old search');\r\n                console.time('search');\r\n                var command = null;\r\n                var c;\r\n                var pr;\r\n\r\n                if (!!configService.quickKeyTemplateID && qkeytemplate === configService.quickKeyTemplateID) {\r\n                    var qdata = helperService.extractCurrentQuickKeyInfo(qkey);\r\n                    if (!qdata) {\r\n                        deferred.reject('Invalid QuickKey data');\r\n                        return deferred.promise;\r\n                    }\r\n                    else {\r\n                        command = {\r\n                            from: 'products'\r\n                        };\r\n\r\n                        var groupingOperatorAND = qdata.groupingOperator === 'AND';\r\n\r\n                        var isConditionSet = false;\r\n\r\n                        if (!!qdata.brands && qdata.brands.length > 0) {\r\n                            var brands = [];\r\n                            angular.forEach(qdata.brands, function (el) {\r\n                                brands.push(helperService.escapeString(el));\r\n                            });\r\n\r\n                            if (!isConditionSet) {\r\n                                command.where = {\r\n                                    Brand: { in: brands }\r\n                                };\r\n                            }\r\n                            else {\r\n                                if (!groupingOperatorAND) {\r\n                                    if (!command.where.or)\r\n                                        command.where.or = {};\r\n                                    command.where.or.Brand = { in: brands };\r\n                                } else {\r\n                                    command.where.Brand = { in: brands };\r\n                                }\r\n                            }\r\n                            isConditionSet = true;\r\n                        }\r\n                        if (!!qdata.categories && qdata.categories.length > 0) {\r\n                            var categories = [];\r\n                            angular.forEach(qdata.categories, function (el) {\r\n                                categories.push(helperService.escapeString(el));\r\n                            });\r\n\r\n                            if (!isConditionSet) {\r\n                                command.where = {\r\n                                    Category: { in: categories }\r\n                                };\r\n                            }\r\n                            else {\r\n                                if (!groupingOperatorAND) {\r\n                                    if (!command.where.or)\r\n                                        command.where.or = {};\r\n                                    command.where.or.Category = { in: categories };\r\n                                } else {\r\n                                    command.where.Category = { in: categories };\r\n                                }\r\n                            }\r\n\r\n                            isConditionSet = true;\r\n                        }\r\n                        if (!!qdata.tags && qdata.tags.length > 0) {\r\n                            c = \"\";\r\n\r\n                            var rids = [];\r\n                            var textu = [];\r\n                            $.each(qdata.tags, function (j, t) {\r\n                                if (!!t)\r\n                                    textu.push(t.trim().toUpperCase());\r\n                            });\r\n\r\n                            $.each(THIS.productLikeIndex, function (i, e) {\r\n                                var found = false;\r\n\r\n                                if (!!e.Tags) {\r\n                                    var s = e.Tags.toUpperCase();\r\n                                    var tags = s.split(',');\r\n                                    $.each(textu, function (j, t) {\r\n                                        var flt = tags.filter(function(tt) {return tt == t; });\r\n                                        if (flt.length > 0) {\r\n                                            found = true;\r\n                                            return false;\r\n                                        }\r\n                                    });\r\n\r\n                                    if (found)\r\n                                        rids.push(e.ProductID);\r\n                                }\r\n                            });\r\n\r\n                            if (!isConditionSet) {\r\n                                command.where = {\r\n                                    ProductID: { in: rids }\r\n                                };\r\n                            }\r\n                            else {\r\n                                if (!groupingOperatorAND) {\r\n                                    if (!command.where.or)\r\n                                        command.where.or = {};\r\n                                    command.where.or.ProductID = { in: rids };\r\n                                } else {\r\n                                    command.where.ProductID = { in: rids };\r\n                                }\r\n                            }\r\n\r\n                            isConditionSet = true;\r\n                        }\r\n\r\n                        pr = THIS.connection.select(command);\r\n                    }\r\n                } else {\r\n                    if (!!productID) {\r\n\r\n                        pr = THIS.connection.select({\r\n                            from: 'products',\r\n                            where: {\r\n                                ProductID: productID\r\n                            }\r\n                        })\r\n                            .then(function (res) {\r\n                                var lst = res.filter(function (p) { return !p.FamilyID || p.FamilyID != productID; });\r\n\r\n                                var deferred2 = $q.defer();\r\n                                deferred2.resolve(lst);\r\n                                return deferred2.promise;\r\n                            });\r\n                    } else {\r\n                        text = text.replace(/%/g, \"\");\r\n\r\n                        var rids = [];\r\n                        var textu = text.toUpperCase();\r\n                        // check barcode for object\r\n                        var useWeightBasedSearch = false;\r\n                        var useOutletSKU = false;\r\n                        var outletSKU = null;\r\n                        if (barcode && typeof (barcode) !== 'string') {\r\n                            useOutletSKU = barcode.UseOutletSKU;\r\n                            useWeightBasedSearch = true;\r\n                            outletSKU = barcode.SKU;\r\n                        }\r\n\r\n                         // extended search like in Cin7 Core\r\n                        var searchArr = filterService.splitSearchText(textu);\r\n\r\n                        $.each(THIS.productLikeIndex, function (i, e) {\r\n                            if (!useWeightBasedSearch) {\r\n                                if ((!!e.ProductCode && filterService.isStringContainsSearchArray(e.ProductCode.toUpperCase(), searchArr)) ||\r\n                                    (!!e.Name && filterService.isStringContainsSearchArray(e.Name.toUpperCase(), searchArr)) ||\r\n                                    (!!e.Family && filterService.isStringContainsSearchArray(e.Family.toUpperCase(), searchArr)) ||\r\n                                    e.Barcode === barcode ||\r\n                                    e.CF1 === barcode || \r\n                                    e.CF2 === barcode || \r\n                                    e.CF3 === barcode || \r\n                                    e.CF4 === barcode || \r\n                                    e.CF5 === barcode || \r\n                                    e.CF6 === barcode || \r\n                                    e.CF7 === barcode || \r\n                                    e.CF8 === barcode || \r\n                                    e.CF9 === barcode || \r\n                                    e.CF10 === barcode\r\n                                    )\r\n                                    rids.push(e.ProductID);\r\n                            } else {\r\n                                if ((useOutletSKU && e.OutletSKU === outletSKU) ||\r\n                                    (!useOutletSKU && e.ProductCode === outletSKU))\r\n                                    rids.push(e.ProductID);\r\n                            }\r\n                        });\r\n\r\n                        pr = THIS.connection.select({\r\n                            from: \"products\",\r\n                            where: {\r\n                                ProductID: {\r\n                                    in: rids\r\n                                }\r\n                            },\r\n                            limit: 100\r\n                        });\r\n                    }\r\n                }\r\n\r\n                pr = pr.then(function (res) {\r\n\r\n                    console.timeEnd('search');\r\n                    console.time('insert search result');\r\n                    var cnt = res.length;\r\n                    return THIS.tempBulkInsert(res)\r\n                    //return THIS.connection.bulkInsert({\r\n                    //    into: \"productsSearchTemp\",\r\n                    //    values: res,\r\n                    //    upsert: false,\r\n                    //    skipDataCheck: true\r\n                    //})\r\n                        .then(function () {\r\n                        deferred.resolve(cnt);\r\n                        console.timeEnd('insert search result');\r\n                        console.timeEnd('start search');\r\n                        return deferred.promise;\r\n                    });\r\n                });\r\n\r\n                return pr;\r\n            }).catch(function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n        };\r\n\r\n        // trying to group by family before\r\n        this.getSearchCount = function () {\r\n            //return this.connection.select({\r\n            //    from: 'productsSearchTemp'\r\n            //})\r\n            return this.tempSelectAll()\r\n                .then(function (res) {\r\n                var jq = Enumerable.from(res);\r\n\r\n                var rs = jq.where(function (x) { return !!x.Family; })\r\n                    .groupBy(\r\n                        function (x) { return x.Family; },\r\n                        function (x) { return x.Family; },\r\n                        function (key, grouping) {\r\n                            return grouping.count(); //TODO: check\r\n                        }\r\n                    )\r\n                    .select(function (x) { return x; })\r\n                    .toArray(); // each row - it's family\r\n                var rs2 = jq.where(function (x) { return !x.Family; }).select(function (x) { return 1; }).toArray(); // one row without family\r\n\r\n                var cnt = rs.length + rs2.length;\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(cnt);\r\n                return deferred.promise;\r\n            });\r\n        };\r\n\r\n        this.getSearchPage = function (page, pageSize, productID) {\r\n            var pr;\r\n            if (!!productID) {\r\n                //pr = this.connection.select({\r\n                //    from: 'productsSearchTemp',\r\n                //    where: {\r\n                //        ProductID: productID\r\n                //    }\r\n                //})\r\n                pr = this.tempSelectByKey(productID)\r\n                    .then(function (res) {\r\n                        var deferred = $q.defer();\r\n                        if (res.length > 0) {\r\n                            res[0].cnt = 1;\r\n                            res[0].isFamily = 0;\r\n                        }\r\n\r\n                        deferred.resolve(res);\r\n                        return deferred.promise;\r\n                    });\r\n            } else {\r\n                //pr = this.connection.select({\r\n                //    from: 'productsSearchTemp'\r\n                //})\r\n                pr = this.tempSelectAll()\r\n                    .then(function (res) {\r\n                    var jq = Enumerable.from(res);\r\n\r\n                    var rs = jq.where(function (x) { return !!x.Family; })\r\n                        .groupBy(\r\n                            function (x) { return x.Family; },\r\n                            function (x) { return x; },\r\n                            function (key, grouping) {\r\n                                const length = grouping.count();\r\n                                return $.extend({ cnt: length, isFamily: 1 },\r\n                                    length > 0 ? grouping.first() : {});\r\n                            }\r\n                        )\r\n                        .toArray();\r\n\r\n                    var rs2 = jq.where(function (x) { return !x.Family; }).select(function (x) {\r\n                        return $.extend(x, { cnt: 1, isFamily: 0 });\r\n                    }).toArray();\r\n\r\n                    var data = rs.concat(rs2);\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(data);\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n\r\n            return pr.then(function (data) {\r\n                  // if we have real family, do some replacements\r\n                angular.forEach(data, function (el) {\r\n                    if (el.isFamily == 1) {\r\n                        if (el.cnt != 1) {\r\n                            el.Name = el.Family;\r\n                            el.ProductShortDescription = el.FamilyShortDescription;\r\n                            el.ProductID = el.FamilyID;\r\n                        } else {\r\n                            el.isFamily = 0; // else reset family flag\r\n                        }\r\n                    }\r\n                });\r\n\r\n                var dataObj = {};\r\n                dataObj.page = page;\r\n                dataObj.data = Enumerable.from(data).orderBy(function (x) { return x.Name; }).toArray();\r\n                dataObj.data = dataObj.data.slice(page * pageSize, pageSize * (page + 1));\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(dataObj);\r\n                return deferred.promise;\r\n            });\r\n        };\r\n\r\n        this.getLiveSearchProducs = function (data) {\r\n            var deferred = $q.defer();\r\n            if (data && data.length > 0) {\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            }\r\n\r\n            // ProductID as productID, ProductCode as productCode, Name as name, Price as price from products\r\n            return this.connection.select({\r\n                from: 'products'\r\n            }).then(function (res) {\r\n                var lst = Enumerable.from(res)\r\n                    .where(function (p) { return !p.FamilyID || p.FamilyID != p.ProductID; })\r\n                    .select(function (p) {\r\n                        return {\r\n                            productID: p.ProductID,\r\n                            productCode: p.ProductCode,\r\n                            name: p.Name,\r\n                            price: p.Price\r\n                        };\r\n                    }).toArray();\r\n\r\n                var deferred2 = $q.defer();\r\n                deferred2.resolve(lst);\r\n                return deferred2.promise;\r\n            });\r\n        };\r\n\r\n        this.checkProductsOld = function (force) {\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n            var THIS = this;\r\n\r\n            return this.connection.select({\r\n                from: 'settings',\r\n                where: {\r\n                    Name: 'ProductsPosName'\r\n                }\r\n            }).then(function (res) {\r\n                if (res.length === 0 ||\r\n                    res[0].Value !== configService.lastDearPosName) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                } else {\r\n                    return THIS.connection.select({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: 'ProductsHash'\r\n                        }\r\n                    })\r\n                        .then(function (res) {\r\n                            var deferred = $q.defer();\r\n                            if (res.length === 0)\r\n                                deferred.resolve(false);\r\n                            else {\r\n                                var row = res[0];\r\n\r\n                                var hours = ((new Date().getTime()) - (row.lastModified.getTime())) / 1000.0 / 60.0 / 60.0;\r\n                                if (hours > 3) // after 3 hours refresh products\r\n                                    deferred.resolve(true);\r\n                                else\r\n                                    deferred.resolve(false);\r\n                            }\r\n\r\n                            return deferred.promise;\r\n                        });\r\n                }\r\n            });\r\n        };\r\n\r\n        this.getProductsHash = function (force) {\r\n\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                return deferred.promise;\r\n            }\r\n            else {\r\n                return this.connection.select({\r\n                    from: 'settings',\r\n                    where: {\r\n                        Name: 'ProductsHash'\r\n                    }\r\n                }).then(function (res) {\r\n                    var deferred = $q.defer();\r\n\r\n                    if (res.length > 0)\r\n                        deferred.resolve(res[0].Value);\r\n                    else\r\n                        deferred.resolve(null);\r\n\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n        };\r\n\r\n        this.getHideUsersAssignedToAllLocations = function () {\r\n            var THIS = this;\r\n            return THIS.connection.select({\r\n                from: 'settings',\r\n                where: {\r\n                    Name: 'hideUsersAssignedToAllLocations'\r\n                }}).then(function (res) {\r\n                    var deferred = $q.defer();\r\n\r\n                    deferred.resolve(res[0]);\r\n\r\n                    return deferred.promise;\r\n                });\r\n        }\r\n\r\n        this.setHideUsersAssignedToAllLocations = function (value) {\r\n            var THIS = this;\r\n            return THIS.connection\r\n            .remove({\r\n                from: \"settings\",\r\n                where: {\r\n                    Name: 'hideUsersAssignedToAllLocations'\r\n                }\r\n            })\r\n            .then(res => {\r\n                return THIS.connection.insert({\r\n                    into: 'settings',\r\n                    values: [{\r\n                        Name: 'hideUsersAssignedToAllLocations',\r\n                        Value: value.toString(),\r\n                        lastModified: new Date()\r\n                    }]\r\n                });\r\n            })            \r\n        }\r\n\r\n        this.familySearch = function (familyID) {\r\n            //return this.connection.select({\r\n            //    from: 'productsSearchTemp',\r\n            //    where: {\r\n            //        FamilyID: familyID\r\n            //    }\r\n            //});\r\n\r\n            return this.tempSelectByFamilyID(familyID);\r\n        };\r\n\r\n        this.getFamilySearchCount = function (familyID) {\r\n            //return this.connection.select({\r\n            //    from: 'productsSearchTemp',\r\n            //    where: {\r\n            //        FamilyID: familyID\r\n            //    }\r\n            //})\r\n            //    .then(function (res) {\r\n            //    var deferred = $q.defer();\r\n            //    deferred.resolve(res.length);\r\n            //    return deferred.promise;\r\n            //});\r\n\r\n            return this.tempSelectByFamilyIDCount(familyID);\r\n        };\r\n\r\n        this.getFamilySearchPage = function (page, pageSize) {\r\n//            return this.connection.select({ from: 'productsSearchTemp' })\r\n            return this.tempSelectAll()\r\n                .then(function (data) {\r\n                    var deferred = $q.defer();\r\n                    $.each(data, function (i, el) {\r\n                        el.cnt = 1;\r\n                        el.isFamily = 0;\r\n                    });\r\n\r\n                    var dataObj = {};\r\n                    dataObj.page = page;\r\n                    dataObj.data = orderBy(data, 'Name', false);\r\n                    dataObj.data = dataObj.data.slice(page * pageSize, pageSize * (page + 1));\r\n                    deferred.resolve(dataObj);\r\n                });\r\n        };\r\n\r\n        this.customerLikeIndex = [];\r\n        this.refreshCustomers = function (data, isPartial = false) {\r\n            var THIS = this;\r\n            var preparePromise;\r\n            if (!isPartial) {\r\n                preparePromise = this.connection.clear('customers').then(function (res) {\r\n                    THIS.customerLikeIndex = [];\r\n                    return THIS.connection.remove({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: {\r\n                                in: ['CustomersPosName', 'CustomerHash']\r\n                            }\r\n                        }\r\n                    });\r\n                }).then(function (res) {\r\n                    var vls = [\r\n                        {\r\n                            Name: 'CustomersPosName',\r\n                            Value: configService.lastDearPosName,\r\n                            lastModified: new Date()\r\n                        },\r\n                        {\r\n                            Name: 'CustomerHash',\r\n                            Value: data.hash,\r\n                            lastModified: new Date()\r\n                        }\r\n                    ];\r\n\r\n                    return THIS.connection.insert({\r\n                        into: 'settings',\r\n                        values: vls\r\n                    });\r\n                });\r\n            } else {\r\n                var ids = data.arr.map(function(x) { return x.id })\r\n                preparePromise = this.connection.remove({\r\n                    from: 'customers',\r\n                    where: {\r\n                        ID: {\r\n                            in: ids\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n            \r\n            return preparePromise\r\n                .then(function () {\r\n                    var v = [];\r\n                    THIS.customerLikeIndex = [];\r\n                    data.arr = helperService.uniqueBy(data.arr, \"id\"); // remove possible duplicates\r\n\r\n                    $.each(data.arr, function (idx, el) {\r\n                        THIS.customerLikeIndex.push({\r\n                            ID: el.id,\r\n                            Name: !el.name ? el.name : el.name.toUpperCase(),\r\n                            Phone: !el.phone ? el.phone : el.phone.toUpperCase(),\r\n                            Email: !el.email ? el.email : el.email.toUpperCase(),\r\n                            MobilePhone: !el.mobilePhone ? el.mobilePhone : el.mobilePhone.toUpperCase()\r\n                        });\r\n\r\n                        var e = {\r\n                            ID: el.id,\r\n                            Name: el.name,\r\n                            Phone: el.phone,\r\n                            MobilePhone: el.mobilePhone,\r\n                            Email: el.email,\r\n                            EnableLoyaltyPoints: el.enableLoyaltyPoints,\r\n                            Discounts: JSON.stringify(el.discounts),\r\n                            MatrixDiscounts: JSON.stringify(el.matrixDiscounts),\r\n                            Discount: el.discount,\r\n                            Addresses: JSON.stringify(el.addresses),\r\n                            Taxes: JSON.stringify({\r\n                                effectivePercentInclusive: el.effectivePercentInclusive,\r\n                                effectivePercentExclusive: el.effectivePercentExclusive,\r\n                                ruleID: el.taxRuleID\r\n                            }),\r\n                            PriceTier: el.priceTier,\r\n                            Account: !el.account ? 0 : el.account,\r\n                            CreditLimit: !el.creditLimit ? 0 : el.creditLimit\r\n                        };\r\n\r\n                        if(el.phone || el.email ||el.mobilePhone )\r\n                            el.Contacts = [{\r\n                                Phone:el.Phone,\r\n                                Email: el.Email,\r\n                                MobilePhone: el.MobilePhone\r\n                            }];\r\n\r\n                        v.push(e);\r\n                    });\r\n\r\n                    if (THIS.chunkSize > 0) {\r\n                        return THIS.splitBigBulkInsert(v, THIS.chunkSize, function (b) {\r\n                            return THIS.connection.bulkInsert({\r\n                                into: \"customers\",\r\n                                values: b,\r\n                                upsert: false,\r\n                                skipDataCheck: true\r\n                            });\r\n                        });\r\n                    } else {\r\n                        return THIS.connection.bulkInsert({\r\n                            into: \"customers\",\r\n                            values: v,\r\n                            upsert: false,\r\n                            skipDataCheck: true\r\n                        });\r\n                    }\r\n                });\r\n        };\r\n\r\n        this.checkCustomersOld = function (force) {\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n            var THIS = this;\r\n\r\n            return this.connection.select({\r\n                from: 'settings',\r\n                where: {\r\n                    Name: 'CustomersPosName'\r\n                }\r\n            }).then(function (res) {\r\n                if (res.length === 0 ||\r\n                    res[0].Value !== configService.lastDearPosName) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n                else {\r\n                    return THIS.connection.select({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: 'CustomerHash'\r\n                        }\r\n                    })\r\n                        .then(function (res) {\r\n                            var deferred = $q.defer();\r\n                            if (res.length === 0)\r\n                                deferred.resolve(false);\r\n                            else {\r\n                                var row = res[0];\r\n\r\n                                var hours = ((new Date().getTime()) - (row.lastModified.getTime())) / 1000.0 / 60.0 / 60.0;\r\n                                if (hours > 3) // after 3 hours refresh products\r\n                                    deferred.resolve(true);\r\n                                else\r\n                                    deferred.resolve(false);\r\n                            }\r\n\r\n                            return deferred.promise;\r\n                        });\r\n                }\r\n            });\r\n        };\r\n\r\n        this.getCustomersHash = function (force) {\r\n\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                return deferred.promise;\r\n            }\r\n            else {\r\n                return this.connection.select({\r\n                    from: 'settings',\r\n                    where: {\r\n                        Name: 'CustomerHash'\r\n                    }\r\n                }).then(function (res) {\r\n                    var deferred = $q.defer();\r\n\r\n                    if (res.length > 0)\r\n                        deferred.resolve(res[0].Value);\r\n                    else\r\n                        deferred.resolve(null);\r\n\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n        };\r\n\r\n        this.loadLiveCustomers = function (data, id) {\r\n            var deferred = $q.defer();\r\n            if (data && data.length > 0) {\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            }\r\n\r\n            return this.connection.select({ from: 'customers',\r\n                where: !!id ? {ID:  id} : undefined \r\n            }).then(function (res) {\r\n                    var deferred = $q.defer();\r\n                    var arr = [];\r\n                    $.each(res, function (i, el) {\r\n                        var taxes = !!el.Taxes ? JSON.parse(el.Taxes) : {};\r\n\r\n                        var a = {\r\n                            id: el.ID,\r\n                            name: el.Name,\r\n                            phone: el.Phone,\r\n                            email: el.Email,\r\n                            mobilePhone: el.MobilePhone,\r\n                            addresses: JSON.parse(el.Addresses),\r\n                            ruleID: taxes.RuleID,\r\n                            effectivePercentInclusive: taxes.EffectivePercentInclusive,\r\n                            effectivePercentExclusive: taxes.EffectivePercentExclusive\r\n                        };\r\n                        arr.push(a);\r\n                    });\r\n\r\n                    deferred.resolve(arr);\r\n\r\n                    return deferred.promise;\r\n                });\r\n        };\r\n\r\n        this.loadCustomers = function (text, page, limit, filters) {\r\n            page = !page ? 0 : page;\r\n            limit = !limit ? 10 : limit;\r\n            var pr;\r\n            var customerID = (!!filters && !!filters.CustomerID) ? filters.CustomerID : null;\r\n\r\n            if (!customerID) {\r\n                if (!text) {\r\n                    pr = this.connection.select({ from: 'customers' });\r\n                } else {\r\n                    var s = text.toUpperCase();\r\n                    var rids = [];\r\n                    $.each(this.customerLikeIndex, function (i, v) {\r\n                        if ((v.Name && v.Name.indexOf(s) >= 0) ||\r\n                            (v.Phone && v.Phone.indexOf(s) >= 0) ||\r\n                            (v.Email && v.Email.indexOf(s) >= 0) ||\r\n                            (v.MobilePhone && v.MobilePhone.indexOf(s) >= 0)) {\r\n                            rids.push(v.ID);\r\n                        }\r\n                    });\r\n\r\n                    pr = this.connection.select({\r\n                        from: \"customers\",\r\n                        where: {\r\n                            ID: {\r\n                                in: rids\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                pr = this.connection.select({\r\n                    from: 'customers',\r\n                    where: {\r\n                        ID: customerID\r\n                    }\r\n                });\r\n            }\r\n\r\n            return pr.then(function (data) {\r\n                var deferred = $q.defer();\r\n                $.each(data, function (idx, el) {\r\n\r\n                    el.EnableLoyaltyPoints = el.EnableLoyaltyPoints === true || el.EnableLoyaltyPoints === \"true\";\r\n                    el.LoadedFromLocalDb = true;\r\n                    el.Discounts = el.Discounts ? JSON.parse(el.Discounts) : el.Discounts;\r\n                    el.MatrixDiscounts = el.MatrixDiscounts ? JSON.parse(el.MatrixDiscounts) : el.MatrixDiscounts;\r\n                    \r\n                    // to not process in offline mode\r\n                    el.Account = 0;\r\n                    el.CreditLimit = 0;\r\n\r\n                    if(el.Phone || el.Email ||el.MobilePhone )\r\n                        el.Contacts = [{\r\n                            Phone:el.Phone,\r\n                            Email: el.Email,\r\n                            MobilePhone: el.MobilePhone\r\n                        }];\r\n\r\n                    el.Addresses = el.Addresses && el.Addresses !== \"undefined\"? JSON.parse(el.Addresses): el.Addresses;\r\n\r\n                });\r\n                const offset = page === 0 || page === null || page === 1 ? 0 : (page - 1) * limit;\r\n                deferred.resolve({ data: { Customers: data.slice(offset, offset + limit), Total: data.length } });\r\n                return deferred.promise;\r\n            }).catch(function (err) {\r\n                errorService.showError(err.message);\r\n            });\r\n        };\r\n\r\n        this.searchSaleRepresentatives = function (page, limit, outletID, filters) {\r\n            page = !page ? 0 : page - 1;\r\n            limit = !limit ? 10 : limit;\r\n\r\n            var ID = (!!filters && !!filters.ID) ? filters.ID : null;\r\n            var Name = (!!filters && !!filters.Name) ? filters.Name.toUpperCase() : null;\r\n\r\n            return this.connection.select({ from: 'saleRepresentatives' })\r\n                .then(function (res) {\r\n                    var arr = [];\r\n\r\n                    $.each(res, function (i, x) {\r\n                        var cnd = !x.PosOutletID || x.PosOutletID == outletID;\r\n                        if (cnd && !!ID)\r\n                            cnd = x.ID == ID;\r\n                        if (cnd && !!Name)\r\n                            cnd = x.Name.toUpperCase().indexOf(Name) >= 0;\r\n                        if (cnd) {\r\n                            x.LoadedFromLocalDb = true;\r\n                            arr.push(x);\r\n                        }\r\n                    });\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve({ data: { SaleRepresentatives: arr.slice(page * limit, limit * (page + 1)) } });\r\n                    return deferred.promise;\r\n                });\r\n        };\r\n\r\n        this.refreshSaleRepresentatives = function (data) {\r\n\r\n            var THIS = this;\r\n            return this.connection.clear('saleRepresentatives')\r\n                .then(function (res) {\r\n                    THIS.customerLikeIndex = [];\r\n                    return THIS.connection.remove({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: {\r\n                                in: ['SaleRepresentativesPosName', 'SalesRepresentativeHash']\r\n                            }\r\n                        }\r\n                    });\r\n                }).then(function (res) {\r\n                    var lpr = [\r\n                        {\r\n                            Name: 'SaleRepresentativesPosName',\r\n                            Value: configService.lastDearPosName,\r\n                            lastModified: new Date()\r\n                        },\r\n                        {\r\n                            Name: 'SalesRepresentativeHash',\r\n                            Value: data.hash,\r\n                            lastModified: new Date()\r\n                        }\r\n                    ];\r\n\r\n                    return THIS.connection.insert({\r\n                        into: 'settings',\r\n                        values: lpr\r\n                    });\r\n                }).then(function () {\r\n                    var v = [];\r\n\r\n                    $.each(data.arr, function (idx, el) {\r\n                        THIS.customerLikeIndex.push({\r\n                            ID: el.id,\r\n                            Name: !el.name ? el.name : el.name.toUpperCase(),\r\n                            Phone: !el.phone ? el.phone : el.phone.toUpperCase(),\r\n                            Email: !el.email ? el.email : el.email.toUpperCase(),\r\n                            MobilePhone: !el.mobilePhone ? el.mobilePhone : el.mobilePhone.toUpperCase()\r\n                        });\r\n                        var e = {\r\n                            ID: el.id,\r\n                            Name: el.name,\r\n                            PosOutletID: el.posOutletID\r\n                        };\r\n                        v.push(e);\r\n                    });\r\n\r\n                    return THIS.connection.bulkInsert({\r\n                        into: \"saleRepresentatives\",\r\n                        values: v,\r\n                        upsert: false,\r\n                        skipDataCheck: true\r\n                    });\r\n                });\r\n        };\r\n\r\n        this.checkSaleRepresentativesOld = function (force) {\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n            var THIS = this;\r\n\r\n            return this.connection.select({\r\n                from: 'settings',\r\n                where: {\r\n                    Name: 'SaleRepresentativesPosName'\r\n                }\r\n            }).then(function (res) {\r\n                if (res.length === 0 ||\r\n                    res[0].Value !== configService.lastDearPosName) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n                else {\r\n                    return THIS.connection.select({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: 'SalesRepresentativeHash'\r\n                        }\r\n                    }).then(function (res) {\r\n                        var deferred = $q.defer();\r\n                        if (res.length === 0)\r\n                            deferred.resolve(false);\r\n                        else {\r\n                            var row = res[0];\r\n\r\n                            var hours = ((new Date().getTime()) - (row.lastModified.getTime())) / 1000.0 / 60.0 / 60.0;\r\n                            if (hours > 3) // after 3 hours refresh products\r\n                                deferred.resolve(true);\r\n                            else\r\n                                deferred.resolve(false);\r\n                        }\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                }\r\n            });\r\n        };\r\n\r\n        this.getSaleRepresentativesHash = function (force) {\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                return deferred.promise;\r\n            }\r\n            else {\r\n                return this.connection.select({\r\n                    from: 'settings',\r\n                    where: {\r\n                        Name: 'SalesRepresentativeHash'\r\n                    }\r\n                }).then(function (res) {\r\n                    var deferred = $q.defer();\r\n\r\n                    if (res.length > 0)\r\n                        deferred.resolve(res[0].Value);\r\n                    else\r\n                        deferred.resolve(null);\r\n\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n        };\r\n\r\n        this.loadParkedSales = function (page, limit, outletID, filters) {\r\n            var queue = helperService.getSaleQueue();\r\n            if (!queue)\r\n                queue = [];\r\n\r\n            var jq = Enumerable.from(queue);\r\n\r\n            var rs = jq.where(function (x) {\r\n                return x.sale.Status === 'PARKED' && (!filters.SaleID || filter.SaleID === x.sale.ID);\r\n            }).skip(page * limit)\r\n                .take(limit)\r\n                .toArray();\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve(rs);\r\n            return deferred.promise;\r\n        };\r\n\r\n        // productsSearchTemp emulation methods. This table is really in-memory, so we can simply use jscript arrays\r\n        this.productsSearchTemp = [];\r\n        this.tempPrimaryKey = {};\r\n\r\n        this.tempClear = function () {\r\n            var deferred = $q.defer();\r\n            this.productsSearchTemp = [];\r\n            this.tempPrimaryKey = {};\r\n            deferred.resolve(true);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempBulkInsert = function (arr) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            angular.forEach(arr, function (el) {\r\n                THIS.tempPrimaryKey[el.ProductID] = el;\r\n                THIS.productsSearchTemp.push(el);\r\n            });\r\n            deferred.resolve(true);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempSelectAll = function () {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(this.productsSearchTemp);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempSelectByKey = function (key) {\r\n            var deferred = $q.defer();\r\n            var res = this.tempPrimaryKey[key];\r\n            var arr = [];\r\n            if (res) arr.push(res);\r\n            deferred.resolve(arr);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempSelectByFamilyID = function (familyID) {\r\n            var deferred = $q.defer();\r\n            var res = Enumerable.from(this.productsSearchTemp)\r\n                .where(function (el) { return el.FamilyID == familyID; })\r\n                .select()\r\n                .toArray();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempSelectByFamilyIDCount = function (familyID) {\r\n            var deferred = $q.defer();\r\n            var res = Enumerable.from(this.productsSearchTemp)\r\n                .where(function (el) { return el.FamilyID == familyID; })\r\n                .count();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        };\r\n        \r\n        this.addOfflineSale = function (sale, info, errorText) {\r\n            return this.connection.insert({\r\n                into: 'offSales',\r\n                values: [\r\n                    {\r\n                        PosName: configService.lastDearPosName,\r\n                        SaleID: sale.ID,\r\n                        StatusID: info.statusID || info.StatusID || '',\r\n                        Packed: JSON.stringify(sale),\r\n                        InfoPacked: JSON.stringify(info),\r\n                        lastModified: new Date(),\r\n                        OperationID: sale.OperationID,\r\n                        ErrorText: errorText\r\n                    }\r\n                ]\r\n            });\r\n        };\r\n\r\n        /**\r\n         * save order status change\r\n         */\r\n        this.trackOrder = function (orderID, registryCloseID, status) {\r\n            return this.connection.insert({\r\n                into: 'registryOrders',\r\n                values: [\r\n                    {\r\n                        OrderID: orderID,\r\n                        RegistryCloseID: registryCloseID,\r\n                        Status: status,\r\n                        CreatedDate: new Date()\r\n                    }\r\n                ]\r\n            });\r\n        };\r\n\r\n        this.trackOrderPayments = function (orderID, refundIDs, paymentIDs) {\r\n            var refundsJson = refundIDs && refundIDs.length > 0 ? JSON.stringify(refundIDs) : null;\r\n            var paymentsJson = paymentIDs && paymentIDs.length > 0 ? JSON.stringify(paymentIDs) : null;\r\n            \r\n            return this.connection.insert({\r\n                into: 'orderPayments',\r\n                values: [\r\n                    {\r\n                        OrderID: orderID,\r\n                        Refunds: refundsJson,\r\n                        Payments: paymentsJson,\r\n                        CreatedDate: new Date()\r\n                    }\r\n                ]\r\n            });\r\n        };\r\n\r\n        /**\r\n         * get orders state\r\n         * @returns {Promise<Array<{OrderID: string, Status: string, CreatedDate: Date}>>} raw list of records\r\n         */\r\n        this.getOrdersForCloseRegistry = function (closeRegistryID) {\r\n            return this.connection.select({\r\n                from: 'registryOrders',\r\n                where: {\r\n                    RegistryCloseID: closeRegistryID\r\n                },\r\n                order: {\r\n                    by: 'CreatedDate',\r\n                    type: 'asc'\r\n                }\r\n            });\r\n        };\r\n\r\n        /**\r\n         * get orphan orders (where OrderID or RegistryCloseID is all zeros)\r\n         * @returns {Promise<Array<{OrderID: string, RegistryCloseID: string, Status: string, CreatedDate: Date}>>}\r\n         */\r\n        this.getOrphanOrders = function () {\r\n            // Reuse getOrdersForCloseRegistry with zero GUID\r\n            return this.getOrdersForCloseRegistry('00000000-0000-0000-0000-000000000000');\r\n        };\r\n\r\n        /**\r\n         * get order payments/refunds for registry close\r\n         * @returns {Promise<Array<{OrderID: string, Refunds: string, Payments: string, CreatedDate: Date}>>}\r\n         */\r\n        this.getOrderPaymentsForCloseRegistry = function (closeRegistryID) {\r\n            var THIS = this;\r\n            // First get all OrderIDs for this registry close\r\n            return this.connection.select({\r\n                from: 'registryOrders',\r\n                where: {\r\n                    RegistryCloseID: closeRegistryID\r\n                }\r\n            }).then(function (orders) {\r\n                if (!orders || orders.length === 0) {\r\n                    return [];\r\n                }\r\n                \r\n                var orderIDs = orders.map(function(order) { return order.OrderID; });\r\n                \r\n                // Then get orderPayments for these orders\r\n                return THIS.connection.select({\r\n                    from: 'orderPayments',\r\n                    where: {\r\n                        OrderID: { in: orderIDs }\r\n                    },\r\n                    order: {\r\n                        by: 'CreatedDate',\r\n                        type: 'asc'\r\n                    }\r\n                });\r\n            });\r\n        };\r\n\r\n        this.removeSale = function (saleID, statusID, operationID) {\r\n            var where = {\r\n                StatusID: 'errorHistory'\r\n            }\r\n            if (!operationID) {\r\n                where.SaleID = saleID;\r\n            }\r\n            else {\r\n                where.OperationID = operationID;\r\n            }\r\n            if (statusID) {\r\n                where.StatusID = statusID;\r\n            }\r\n            return this.connection.remove({\r\n                from: 'offSales',\r\n                where: where,\r\n\r\n            });\r\n        };\r\n\r\n        this.loadOfflineSalesErrorHistory = function(posName) {\r\n            return this.connection.select({\r\n                from: 'offSales',\r\n                where: {\r\n                    PosName: posName,\r\n                    StatusID: 'errorHistory'\r\n                },\r\n                order: {\r\n                    by: 'lastModified',\r\n                    type: 'desc'\r\n                }\r\n            });\r\n        };\r\n    }]);","\r\nangular.module('services').factory('keyPressDelayService', ['$timeout', 'configService',\r\n    function ($timeout, configService) {\r\n        var keyPressDelayService = {};\r\n\r\n        keyPressDelayService.keyChain = null;\r\n        keyPressDelayService.timeOut = null;\r\n\r\n        var THIS = keyPressDelayService;\r\n\r\n        keyPressDelayService.forceDelayOperation = function (keyChain, callback) {\r\n            THIS.keyChain = keyChain; // string to send to callback - should be defined\r\n            var timeDelay = configService.keyPressDelay;\r\n            var keyChainMinLength = configService.minSymbolsToStartSearch;\r\n\r\n            if (THIS.timeOut != null) {\r\n                console.log('key press canceled ');\r\n                $timeout.cancel(THIS.timeOut);\r\n                THIS.timeOut = null;\r\n            }\r\n\r\n            THIS.timeOut = $timeout(function () {\r\n                console.log('key press $timeout');\r\n                if (!!keyChain && keyChain.length >= keyChainMinLength) {\r\n                    callback(THIS.keyChain);\r\n                }\r\n            }, timeDelay);\r\n\r\n        };\r\n\r\n        return keyPressDelayService;\r\n    }\r\n]);","import html2canvas from 'html2canvas';\r\n\r\nangular.module('services').service('labelPrintService', [\r\n    '$q', 'helperService', 'errorService', 'constants',\r\n    'configService', 'gettextCatalog', '$http', '$rootScope', \r\n    '$timeout', '$sce',\r\nfunction ($q, helperService, errorService, constants, configService,\r\n    gettextCatalog, $http, $rootScope, $timeout, $sce) {\r\n\r\n    this.labelPrinterName = null;\r\n    this.labelPaperWidthCode = 2; // defined by dpi and paper width in cm/inches\r\n    this.simulatorMode = false;\r\n    this.labelPrintSystem = 'dymo';\r\n    this.deviceIsStarted = false; // true if any device is connected (star printer mPOP). Not for clover\r\n\r\n    /*\r\n    // for star printers defines by name some additional parameters\r\n    this.detectPrinterByName = function (printSystem, name, modelName) {\r\n        var res = {\r\n            portName: name,\r\n            modelName: modelName,\r\n            printerWidthCode: 3,\r\n            hasCashDrawer: true,\r\n            hasInternalScanner: false\r\n        };\r\n\r\n        if (printSystem == 'star') {\r\n            res.printSystem = 'star';\r\n\r\n            if (name.indexOf('BT:') == 0) {\r\n                res.interface = 'bluetooth';\r\n                name = name.substr(3);\r\n            }\r\n            else if (name.indexOf('TCP:') == 0) {\r\n                res.interface = 'network';\r\n                name = name.substr(4);\r\n            }\r\n            else if (name.indexOf('USB:') == 0) {\r\n                res.interface = 'usb';\r\n                name = name.substr(4);\r\n            }\r\n            else\r\n                throw new exception('unknown printer type');\r\n\r\n            res.portable = false;\r\n            res.printerName = name;\r\n\r\n            if (name.indexOf('mPOP') >= 0) {\r\n                res.portable = true;\r\n                res.printerWidthCode = 2;\r\n                res.hasCashDrawer = true;\r\n                res.hasInternalScanner = true;\r\n            }\r\n        }\r\n\r\n        return res;\r\n    };\r\n    */\r\n\r\n    this.labelPrinterOnline = false;\r\n    this.labelPrinterPaperNearEmpty = false;\r\n    this.labelPrinterPaperEmpty = false;\r\n    this.labelPrinterCoverOpen = false;\r\n    this.currentSettings = {};\r\n\r\n    var THIS = this;\r\n    this.eventListenerProcessor = function (evt) {\r\n        console.log('eventListenerProcessor: ' + JSON.stringify(evt));\r\n        if (!THIS.deviceIsStarted) return;\r\n\r\n        var callUpdate = true;\r\n\r\n        switch (evt.dataType) {\r\n            case 'labelPrinterImpossible':\r\n            case 'labelPrinterOffline':\r\n                this.labelPrinterOnline = false;\r\n                break;\r\n            case 'labelPrinterOnline':\r\n                this.labelPrinterOnline = true;\r\n                break;\r\n\r\n            case 'labelPrinterPaperReady':\r\n                this.labelPrinterPaperNearEmpty = false;\r\n                this.labelPrinterPaperEmpty = false;\r\n                break;\r\n\r\n            case 'labelPrinterPaperNearEmpty':\r\n                this.labelPrinterPaperNearEmpty = true;\r\n                this.labelPrinterPaperEmpty = false;\r\n                break;\r\n\r\n            case 'labelPrinterPaperEmpty':\r\n                this.labelPrinterPaperNearEmpty = false;\r\n                this.labelPrinterPaperEmpty = true;\r\n                break;\r\n\r\n            case 'labelPrinterCoverOpen':\r\n                this.labelPrinterCoverOpen = true;\r\n                break;\r\n\r\n            case 'labelPrinterCoverClose':\r\n                this.labelPrinterCoverOpen = false;\r\n                break;\r\n            case 'statusUpdate':\r\n                callUpdate = false;\r\n                break;\r\n\r\n            default:\r\n                callUpdate = false;\r\n        }\r\n\r\n        if (callUpdate) {\r\n            var status = (!this.labelPrinterOnline || this.labelPrinterCoverOpen || this.labelPrinterPaperEmpty) ? 'error' :\r\n                        (this.labelPrinterPaperNearEmpty ? 'warning' : 'ok');\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('header.labelPrinterStatus', status);\r\n            });\r\n        }\r\n    };\r\n\r\n    window.addEventListener('starIOPluginData', this.eventListenerProcessor);\r\n\r\n    // stop label print (combo) device\r\n    this.disconnect = function () {\r\n        console.log('labelPrintService.disconnect');\r\n        var THIS = this;\r\n\r\n        return this.applyLabelPrinterSettings().then(function (settings) {\r\n            return THIS.internalDisconnect(settings);\r\n        });\r\n    };\r\n\r\n    this.internalDisconnect = function (settings) {\r\n        var THIS = this;\r\n        var deffered = $q.defer();\r\n\r\n        if (!this.deviceIsStarted) {\r\n            deffered = $q.defer();\r\n            deffered.resolve(settings);\r\n            return deffered.promise;\r\n        }\r\n\r\n        if (!THIS.simulatorMode && configService.isMobile) {\r\n            console.log(\"start device is bypassed\");\r\n            this.deviceIsStarted = false;\r\n            deffered.resolve(settings);\r\n\r\n            return deffered.promise;\r\n        }\r\n        else {\r\n            console.log(\"connect star in emulator is done\");\r\n            deffered.resolve(settings);\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.internalConnect = function (settings) {\r\n        var deffered = $q.defer();\r\n\r\n        if (THIS.deviceIsStarted) {\r\n            deffered = $q.defer();\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n        }\r\n\r\n        if (!THIS.simulatorMode && configService.isMobile) {\r\n            console.log(\"start device is bypassed\");\r\n            this.deviceIsStarted = true;\r\n            deffered.resolve({ status: 'success' });\r\n\r\n            return deffered.promise;\r\n        }\r\n        else {\r\n            console.log(\"connect label printer in emulator is done\");\r\n            deffered.resolve(null);\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    // connect to label print (combo) device if settings are set\r\n    // new call to this function will reconnect with new settings\r\n    this.connect = function () {\r\n        console.log('labelPrintService.connect');\r\n\r\n        return this.applyLabelPrinterSettings().then(function (settings) {\r\n            return THIS.internalConnect(settings);\r\n        });\r\n    };\r\n\r\n    this.discoverAvailableLabelPrinters = function (labelPrinterSystem) {\r\n        THIS = this;\r\n        var res = [];\r\n        var deffered = $q.defer();\r\n\r\n\r\n        if (!configService.isMobile) {\r\n            deffered.resolve(res);\r\n        }\r\n        else {\r\n            /*\r\n            window.plugins.starPrinter.portDiscovery('Bluetooth', function (err, result) {\r\n                if (err) {\r\n                    console.log(\"portDiscovery error: \" + err);\r\n                    deffered.resolve(res);\r\n                }\r\n                else {\r\n                    console.log(\"portDiscovery is done:\" + JSON.stringify(result));\r\n                    $.each(result, function (i, e) {\r\n                        res.push(THIS.detectPrinterByName(printerSystem,\r\n                                                          (!!e.name ? e.name : e.portName),\r\n                                                          (!!e.modelName ? e.modelName : null)));\r\n                    });\r\n\r\n                    deffered.resolve(res);\r\n                    console.log(\"portDiscovery result:\" + JSON.stringify(res));\r\n                }\r\n            });\r\n            */\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.applyLabelPrinterSettings = function () {\r\n\r\n        var settings = configService.getLabelPrinterSettings(true);\r\n        this.currentSettings = settings;\r\n\r\n        if (!settings) {\r\n            var deffered = $q.defer();\r\n            deffered.reject('Label printer is not installed');\r\n            return deffered.promise;\r\n        }\r\n\r\n        this.paperWidthCode = settings.labelPrinterWidthCode;\r\n        this.labelPrinterWidthPointsX = settings.labelPrinterWidthPointsX;\r\n        this.labelPrinterWidthPointsY = settings.labelPrinterWidthPointsY;\r\n        this.simulatorMode = settings.simulatorMode;\r\n        this.labelPrintSystem = settings.labelPrintSystem;\r\n        this.labelPrintMode = settings.portable === true ? 'portable' : 'standard';\r\n\r\n        console.log('settings:' + JSON.stringify(settings));\r\n\r\n        var fun = this.initLabelPrinter;\r\n\r\n        return fun(this, settings);\r\n    };\r\n\r\n    this.checkLabelPrinterConnection = function () {\r\n        var THIS = this;\r\n\r\n        return this.applyLabelPrinterSettings()\r\n            .then(function (settings) {\r\n                var deffered = $q.defer();\r\n\r\n                if (!THIS.simulatorMode && configService.isMobile) {\r\n                    /*\r\n                    if (configService.isClover && settings.printSystem == 'clover') {\r\n                        console.log(\"print connection is done\");\r\n                        deffered.resolve({ status: 'success' });\r\n                    }\r\n                    else\r\n                        if (configService.isTelpo && settings.printSystem == 'telpo') {\r\n                            console.log(\"print connection is done\");\r\n                            deffered.resolve({ status: 'success' });\r\n                        }\r\n                        else {\r\n                            window.plugins.starPrinter.checkStatus(THIS.printerName,\r\n                                function (err, result) {\r\n                                    if (err) {\r\n                                        console.log(\"print is not connected\");\r\n                                        deffered.reject(err);\r\n                                    }\r\n                                    else {\r\n                                        console.log(\"print connection is done\");\r\n                                        deffered.resolve(result);\r\n                                    }\r\n                                });\r\n                        }\r\n\r\n                    return deffered.promise;\r\n                    */\r\n                }\r\n                else {\r\n                    console.log(\"print connection in emulator is done\");\r\n                    deffered.resolve(null);\r\n                }\r\n\r\n                return deffered.promise;\r\n\r\n            });\r\n    };\r\n\r\n    this.labelPrintTest = function () {\r\n        var THIS = this;\r\n        var ht = '<div><h2>Print test</h2></div>';\r\n        return this.printLabelsFromHTML($(ht));\r\n    };\r\n\r\n    this.printLabelsFromHTML = function (el, width) {\r\n        var THIS = this;\r\n        console.log('printLabelsFromHTML start');\r\n        // at first convert html from pointed element to image in canvas\r\n        return this.applyLabelPrinterSettings()\r\n            .then(function () {\r\n                console.log('printLabelsFromHTML applyLabelPrinterSettings finished. Label printer name:' + THIS.labelPrinterName);\r\n\r\n                if (configService.isSite && !THIS.simulatorMode) {\r\n                    var q = $q.defer();\r\n                    $(el).printArea();\r\n                    q.resolve(null);\r\n                    return q.promise;\r\n                } else if (!configService.isSite && !THIS.simulatorMode) {\r\n                    var q = $q.defer();\r\n                    \r\n                    //var content = '<html style=\"margin:-150px!important;padding:-150px!important;\"><head></head><body style=\"margin:-150px!important;padding:-150px!important;\">' + $(el).html() + '</body></html>';\r\n                    var content = $(el).html().replace(/\\n/g, '').trim();\r\n\r\n                    if (window.device.platform === 'iOS') {\r\n                        const tags = [\r\n                            'page-break-after', 'break-after'\r\n                        ];\r\n                        var reg = new RegExp('('+ tags.map(x => `(${x})`).join('|') + ')' + ':\\\\s*[\\\\w0-9\\\\s\\\\.]+;', 'g');\r\n                        content = content.replace(reg, '');\r\n                    }\r\n\r\n                    cordova.plugins.printer.print(content, { landscape: true, border: false }, function (res) {\r\n                        if (res == 'Canceled')\r\n                            errorService.showError(\"Print failed, please try later.\");\r\n                        //alert(res ? 'Done' : 'Canceled');\r\n\r\n                        q.resolve(null);\r\n                        return q.promise;\r\n                    });\r\n                }\r\n\r\n                var e = $(el);\r\n\r\n                var cnt = THIS.createLabelPrintContainer(e, THIS.labelPrinterWidthPointsX, THIS.labelPrinterWidthPointsY);\r\n                e = $(cnt.contentDocument.getElementById('labelPrinterAreaID'));\r\n                var chl = e.children().children().css('border-bottom', '').css('border-right', '');\r\n                console.log('printLabelsFromHTML createLabelPrintContainer finished');\r\n\r\n                // scale() is not used due to it badly works on android. It seems an anroid has different scale coefficient for height and width\r\n                //var coef = THIS.paperWidth / e.outerWidth();\r\n                //var width = Math.floor(e.outerWidth() * coef);\r\n                //var height = Math.floor(e.outerHeight() * coef * window.screen.width/window.screen.height);\r\n\r\n                //var canvas = document.createElement('canvas');\r\n\r\n                //canvas.width = e.outerWidth();\r\n                //canvas.height = e.outerHeight();\r\n\r\n                //var ctx = canvas.getContext('2d');\r\n                //ctx.scale(coef, coef);\r\n\r\n                if (configService.isEmulator || THIS.simulatorMode) {\r\n                    return html2canvas(e[0]);\r\n                }\r\n                var q = $q.defer();\r\n\r\n                var s = e.parent().parent().html().replace('<head></head>', '');\r\n                q.resolve({\r\n                    labelPrinterName: THIS.labelPrinterName,\r\n                    width: e.outerWidth(),\r\n                    height: e.outerHeight(),\r\n                    html: '<!DOCTYPE html><html><head><title>labels</title><meta name=\"viewport\" content=\"initial-scale=1.0\" /></head>' + s + '</html>'\r\n                });\r\n                return q.promise;\r\n            })\r\n        .then(function (data) {\r\n            console.log('printLabelsFromHTML html2canvas finished');\r\n\r\n            var canvas = data;\r\n\r\n            var q = $q.defer();\r\n\r\n            if (data == null) {\r\n                q.resolve(null);\r\n                return q.promise;\r\n            }\r\n\r\n            if (typeof (canvas) == 'string') {\r\n                q.resolve(canvas);\r\n            }\r\n            else if (!!data.html) {\r\n                data.mode = THIS.labelPrintMode;\r\n                q.resolve(data);\r\n            }\r\n            else {\r\n                q.resolve({\r\n                    labelPrinterName: THIS.labelPrinterName,\r\n                    width: THIS.labelPrinterWidthPointsX,\r\n                    canvas: canvas,\r\n                    mode: THIS.labelPrintMode\r\n                });\r\n            }\r\n\r\n            return q.promise;\r\n\r\n        }).then(function (dat) {\r\n            var q = $q.defer();\r\n            if (!THIS.simulatorMode && configService.isMobile) {\r\n                /*console.log('printLabelsFromHTML before labelPrintFromCanvas: ');\r\n\r\n                var fun = null;\r\n                if (configService.isClover && THIS.labelPrintSystem == 'clover')\r\n                    fun = window.plugins.starLabelPrinter.labelPrintFromHTMLClover;\r\n                else\r\n                    if (configService.isTelpo && THIS.labelPrintSystem == 'telpo')\r\n                        fun = window.plugins.starLabelPrinter.labelPrintFromHTMLTelpo;\r\n                    else\r\n                        fun = window.plugins.starLabelPrinter.labelPrintFromHTML;\r\n\r\n                fun(dat.labelPrinterName,\r\n                    dat.width,\r\n                    dat.height,\r\n                    dat.html,\r\n                    !helperService.checkDeviceVersion(),\r\n                    dat.mode,\r\n                    function (err, result) {\r\n                        console.log('labelPrintFromHTML labelPrintFromCanvas finished');\r\n\r\n                        if (err) {\r\n                            console.log(\"Label print is failed:\" + err);\r\n\r\n                            if (err.indexOf('Failed to connect port') >= 0) {\r\n                                err = 'Label Printer is not connected! Check please bluetooth printer is turned on.';\r\n                            }\r\n                            q.reject(err);\r\n                        }\r\n                        else {\r\n                            console.log(\"Label print is done\");\r\n                            q.resolve(result);\r\n                        }\r\n                    });\r\n\r\n\r\n                //return q.promise;*/\r\n                q.resolve(null);\r\n            }\r\n            else {\r\n                if (dat != null && (configService.isEmulator || THIS.simulatorMode)) {\r\n                    THIS.showLabelPrintImage(dat.canvas, dat.canvas.width, dat.canvas.height,\r\n                    function () {\r\n                        console.log(\"Label print in emulator is done\");\r\n                        q.resolve(null);\r\n                    });\r\n                }\r\n                else {\r\n                    console.log(\"Label print is done\");\r\n                    q.resolve(null);\r\n                }\r\n\r\n                //q.resolve(null);\r\n            }\r\n\r\n            return q.promise;\r\n        });\r\n    };\r\n\r\n    this.showLabelPrintImage = function (canvas, width, height, callback) {\r\n        var data64 = canvas.toDataURL('image/png');\r\n\r\n        var modalStr = '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" style=\"z-index:10041;\">' +\r\n            '  <div class=\"modal-dialog\" role=\"document\" style=\"width:' + (width + 60) +'px;\">' +\r\n            '    <div class=\"modal-content\">' +\r\n            '      <div class=\"modal-header\">' +\r\n            '        <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>' +\r\n            '        <h4 class=\"modal-title\">' + gettextCatalog.getString(\"Labels\") + '</h4>' +\r\n            '      </div>' +\r\n            '      <div style=\"overflow:auto;height:' + $(window).height() * 0.7 + 'px;\"><div class=\"modal-body\" id=\"labelPrintBodyID\" style=\"text-align: center;style=\"width:' + (width + 30) + 'px;height:' + height + 'px;\">' +\r\n            '      </div></div>' +\r\n            '      <div class=\"modal-footer\">' +\r\n            '        <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">' + gettextCatalog.getString(\"Close\") + '</button>' +\r\n            '      </div>' +\r\n            '    </div>' +\r\n            '  </div>' +\r\n            '</div>';\r\n\r\n        var $d = $(modalStr);\r\n        $d.find('.modal-body').append('<img src=\"' + data64 + '\"/>');\r\n        $('body').append($d);\r\n\r\n        if (typeof callback == 'function') {\r\n            $.unblockUI();\r\n            helperService.showDialog($d, function (wnd) {\r\n                wnd.on('hidden.bs.modal', function (e) {\r\n                    callback();\r\n                    $.blockUI();\r\n                });\r\n            });\r\n        }\r\n        else {\r\n            helperService.showDialog($d);\r\n        }\r\n    };\r\n\r\n    this.createLabelPrintContainer = function (el, width, height) {\r\n        console.log('Enter createLabelPrintContainer');\r\n        $('.labelPrint-container').remove();\r\n\r\n        //var width = el.outerWidth();\r\n        //var height = el.outerHeight();\r\n\r\n        var container = document.createElement(\"iframe\");\r\n        container.className = \"labelPrint-container\";\r\n        container.style.visibility = \"hidden\";\r\n        container.style.position = \"fixed\";\r\n        container.style.left = \"-10000px\";\r\n        container.style.top = \"0px\";\r\n        container.style.border = \"0\";\r\n        container.width = width;\r\n        // container.height = height;\r\n        container.scrolling = \"no\"; // ios won't scroll without it\r\n\r\n        document.body.appendChild(container);\r\n        var ec = el.clone();\r\n        ec.css({ \"background-color\": \"white\", 'position': 'absolute', 'left': '0', 'top': '0', 'width': width + 'px' });\r\n        ec.attr('id', 'labelPrinterAreaID');\r\n        ec.removeAttr('template');\r\n\r\n        $(container.contentDocument.body).append(ec);\r\n\r\n        var o = {\r\n            height: container.height,\r\n            width: container.width\r\n        };\r\n        console.log('leave createLabelPrintContainer: ' + JSON.stringify(o));\r\n\r\n        return container;\r\n    };\r\n\r\n    this.initLabelPrinter = function (THIS, settings) {\r\n        THIS.labelPrinterName = settings.labelPrinterName;\r\n        var deffered = $q.defer();\r\n        deffered.resolve(settings);\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.printLabels = function (labelPrintEl, ignoreNotLabelPrint) {\r\n        $.blockUI();\r\n        var elLabelPrint = !!labelPrintEl ? labelPrintEl.get(0) : $('.label-template div:first-child').get(0);\r\n\r\n        if (!!elLabelPrint.outerHTML) {\r\n            var tel = $(elLabelPrint.outerHTML);\r\n\r\n            tel.removeAttr('template');\r\n\r\n            tel.find('[ngm-font-size]').each(function () {\r\n                var sz = $(this).attr('ngm-font-size');\r\n                $(this).css('font-size', sz);\r\n                $(this).removeAttr('ngm-font-size');\r\n            });\r\n\r\n            if (ignoreNotLabelPrint !== true)\r\n                tel.find('[not-print]').remove();\r\n\r\n            return this.printLabelsFromHTML(tel[0])\r\n                .then(function () {\r\n                    $.unblockUI();\r\n                    console.log(\"label is printed\");\r\n                    var q = $q.defer();\r\n                    q.resolve(null);\r\n                    return q.promise;\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                console.log(\"label is rejected\");\r\n                errorService.showError(err);\r\n                var q = $q.defer();\r\n                q.reject(null);\r\n                return q.promise;\r\n            });\r\n        }\r\n        else {\r\n            var q = $q.defer();\r\n            q.resolve(null);\r\n            return q.promise;\r\n        }\r\n    };\r\n\r\n}]);","angular.module('services').service('labelService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider', 'deviceInfo',\r\n    function ($q, $http, configService, remoteRequestProvider, localDBProvider, deviceInfo) {\r\n\r\n        this.getLabelPrintArea = function (forceLocal) {\r\n            return [\r\n            { text: 'Continuous feed (19mm)', value: 51, pointsX: 500, pointsY: 69, labelW: 500, labelH: 69 },\r\n            { text: 'Continuous feed (24mm)', value: 52, pointsX: 500, pointsY: 85, labelW: 500, labelH: 85 },\r\n            { text: 'Continuous dual (2x1)', value: 53, pointsX: 240, pointsY: 60, labelW: 120, labelH: 60 },\r\n\r\n            { text: 'Avery Sheet of 3 X 11', value: 100, pointsX: 790, pointsY: 1110, labelW: 263, labelH: 101, perRow: 3, rows: 11 },\r\n            { text: 'Avery Sheet of 5 X 13', value: 101, pointsX: 790, pointsY: 1110, labelW: 112.5, labelH: 71, perRow: 5, rows: 13, margins: [38, 16, 0, 14] },\r\n            { text: 'US Letter Sheet of 3 X 10', value: 102, pointsX: 790, pointsY: 1110, labelW: 263, labelH: 109, perRow: 3, rows: 10 },\r\n            { text: 'Sheet of 4 X 14', value: 103, pointsX: 790, pointsY: 1110, labelW: 197, labelH: 77, perRow: 4, rows: 14 }\r\n            ];\r\n        }\r\n        this.getTemplate = function (forceLocal) {\r\n\r\n            var provider = configService.isOnline && forceLocal!==true ? remoteRequestProvider : localDBProvider;\r\n            var promise = null;\r\n\r\n            if (configService.isSite || deviceInfo.isSimulator) {\r\n\r\n                var v = forceLocal !== true ? null : configService.loadLabelTemplate();\r\n\r\n                if (!!v) {\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve(JSON.parse(v));\r\n                    promise = deffered.promise;\r\n                }\r\n                else {\r\n                    promise = remoteRequestProvider.getLabelTemplate(configService.labelID);\r\n                }\r\n            }\r\n            else {\r\n                promise = provider.getLabelTemplate(configService.labelID);\r\n            }\r\n\r\n            promise = promise.then(function (receipt) {\r\n                var deffered = $q.defer();\r\n\r\n                if (forceLocal !== true && configService.isOnline && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                    localDBProvider.saveLabelTemplate(configService.labelID, receipt.data);\r\n                }\r\n\r\n                if (configService.isSite === true) {\r\n                    configService.saveLabelTemplate(JSON.stringify(receipt));\r\n                }\r\n\r\n                var el = $('<div data-base>' + receipt.data.Template + '</div>');\r\n\r\n                var se = el.find(\"span:contains('*')\");\r\n                if (se.length > 0) {\r\n                    se.css('display', 'none');\r\n                    se.html('');\r\n                }\r\n                \r\n                \r\n                var se = el.find(\"span:contains('{{itemProductLabels.ProductPrice}}')\");\r\n\r\n                /*\r\n                if (se.length > 0) {\r\n                    se.css('font-size', '18pt');\r\n                }\r\n                */\r\n                \r\n\r\n                var se = el.find(\"span:contains('{{itemProductLabels.Name}}')\");\r\n                \r\n                /*if (se.length > 0) {\r\n                    //se.css('font-size', '14pt');\r\n                    //se.css('margin-top', '5px');\r\n\r\n                    var pse = se.parent();\r\n                    if (pse.length > 0) {\r\n                        pse.css('text-align', 'left');\r\n                    }\r\n                }*/\r\n                \r\n\r\n                var se = el.find(\"span:contains('{{itemProductLabels.ProductCode}}')\");\r\n               \r\n                /*if (se.length > 0) {\r\n                    //se.css('font-size', '12pt');\r\n\r\n                    var pse = se.parent();\r\n                    if (pse.length > 0) {\r\n                        pse.css('text-align', 'left');\r\n                    }\r\n                }*/\r\n\r\n                receipt.data.Template = el.html();\r\n\r\n                deffered.resolve(receipt.data);\r\n                return deffered.promise;\r\n            });\r\n\r\n            return promise;\r\n        };\r\n    }]);\r\n","angular.module('services').service('linklyPaymentReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider', 'helperService', '$timeout', 'uuid2', '$interval',\r\n\r\n        function ($q, configService, gettextCatalog, webOnlyProvider, helperService, $timeout, uuid2, $interval) {\r\n            this.appID = buildConfiguration.linklyPaymentApplicationId;\r\n            this.delayDone = true; // this key should be used if provider generates some intermediate events that should be processed before payment will be treated as complited\r\n\r\n            this.integrationKeys = {};\r\n            this.parentScope = null;\r\n\r\n            this.prm = helperService.resolvePromise(true);\r\n            this.errorRecoveryInSeconds = 150;\r\n\r\n            this.polling = null;\r\n            this.pollingIntervalInSeconds = 30;\r\n            this.isRequestFromPurchase = false;\r\n\r\n            this.formKey = function () {\r\n                return configService.linklyUserName + '_' + configService.linklyPassword;\r\n            };\r\n\r\n            this.init = function (force, settings) {\r\n                var deferred = $q.defer();\r\n\r\n                if (!force) {\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                this.integrationKeys = this.retrieveLinklyData('LinklyPaymentIntegrationKeys');\r\n\r\n                if (this.integrationKeys == null)\r\n                    this.integrationKeys = {};\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                linklyCloudSecretKeyUrl = configService.isQAMode ?\r\n                    \"https://auth.sandbox.cloud.pceftpos.com/v1/pairing/cloudpos\" : // debug aims only !!!\r\n                    \"https://auth.cloud.pceftpos.com/v1/pairing/cloudpos\";\r\n\r\n                var THIS = this;\r\n                var linklyPaymentPairCode = $('#linklyPaymentPairCode').val();\r\n\r\n                if (!linklyPaymentPairCode)\r\n                {\r\n                    deferred.reject({\r\n                        result: false,\r\n                        response: {\r\n                            errorDescription: gettextCatalog.getString('Please specify the pair code.')\r\n                        }\r\n                    });\r\n                    return deferred.promise;           \r\n                }\r\n\r\n                if(!configService.linklyUserName || !configService.linklyPassword)\r\n                {\r\n                    deferred.reject({\r\n                        result: false,\r\n                        response: {\r\n                            errorDescription: gettextCatalog.getString('The username, password, or paircode was invalid. Please check this information and try again.')\r\n                        }\r\n                    });\r\n                    return deferred.promise;           \r\n                }\r\n\r\n                webOnlyProvider.getLinklyCloudSecretKey(linklyCloudSecretKeyUrl, linklyPaymentPairCode, configService.linklyUserName, configService.linklyPassword)\r\n                    .then((response) => {\r\n\r\n                        THIS.integrationKeys[THIS.formKey()] = response.data.secret;\r\n                        this.storeLinklyData('LinklyPaymentIntegrationKeys', THIS.integrationKeys);\r\n                        this.storeLinklyData('secret', response.data.secret);\r\n\r\n                        iframeSourceUrl = configService.isQAMode ?\r\n                            \"https://auth.sandbox.cloud.pceftpos.com/v1/tokens/cloudpos\" : // debug aims only !!!\r\n                            \"https://auth.cloud.pceftpos.com/v1/tokens/cloudpos\";\r\n\r\n                        var posName = configService.posName;\r\n                        var posVersion = buildConfiguration.appVersion;\r\n                        var posId = configService.lastRegistryID;\r\n                        var posVendorId = configService.posVendorId;\r\n\r\n                        webOnlyProvider.linklyCloudPairTerminal(iframeSourceUrl, response.data.secret, posName, posVersion, posId, posVendorId)\r\n                            .then((res) => {\r\n\r\n                                this.storeLinklyData('token', res.data.token);\r\n                                var tokenExpiryInSeconds = res.data.expirySeconds - 600;\r\n                                this.storeLinklyData('token-expiry', Date.now() + tokenExpiryInSeconds * 1000);\r\n\r\n                                this.startPolling();\r\n\r\n                                deferred.resolve(res.data.token);\r\n\r\n                            })\r\n                            .catch((error) => {\r\n\r\n                                if (error.status == 401)\r\n                                    errorMessage = gettextCatalog.getString('The username, password, or paircode was invalid. Please check this information and try again.')\r\n                                else\r\n                                    errorMessage = THIS.getErrorText(error.statusText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: errorMessage\r\n                                    }\r\n                                });\r\n\r\n                            });\r\n\r\n                    })\r\n                    .catch((error) => {\r\n\r\n                        if (error.status == 401)\r\n                            errorMessage = gettextCatalog.getString('The username, password, or paircode was invalid. Please check this information and try again.')\r\n                        else\r\n                            errorMessage = THIS.getErrorText(error.statusText);\r\n\r\n                        deferred.reject({\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: errorMessage\r\n                            }\r\n                        });\r\n\r\n                    });\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.unpair = function (settings) {\r\n\r\n                var deferred = $q.defer();\r\n\r\n                this.removeLinklyData('tempSessionId');\r\n                this.removeLinklyData('lastSessionId');\r\n                this.removeLinklyData('token');\r\n                this.removeLinklyData('secret');\r\n                this.removeLinklyData('LinklyPaymentIntegrationKeys');\r\n\r\n                this.stopPolling();\r\n\r\n                deferred.resolve(this.integrationKeys[this.formKey()]);\r\n                return deferred.promise;\r\n\r\n            };\r\n\r\n            this.getToken = function () {\r\n\r\n                var deferred = $q.defer();\r\n                iframeSourceUrl = configService.isQAMode ?\r\n                    \"https://auth.sandbox.cloud.pceftpos.com/v1/tokens/cloudpos\" : // debug aims only !!!\r\n                    \"https://auth.cloud.pceftpos.com/v1/tokens/cloudpos\";\r\n\r\n                var secret = this.retrieveLinklyData('secret');\r\n                var posName = configService.posName;\r\n                var posVersion = buildConfiguration.appVersion;\r\n                var posId = configService.lastRegistryID;\r\n                var posVendorId = configService.posVendorId;\r\n\r\n                webOnlyProvider.linklyCloudPairTerminal(iframeSourceUrl, secret, posName, posVersion, posId, posVendorId)\r\n                    .then((res) => {\r\n\r\n                        this.storeLinklyData('token', res.data.token);\r\n                        var tokenExpiryInSeconds = res.data.expirySeconds - 600;\r\n                        this.storeLinklyData('token-expiry', Date.now() + tokenExpiryInSeconds * 1000);\r\n\r\n                        deferred.resolve(res.data.token);\r\n\r\n                    })\r\n                    .catch((error) => {\r\n                        var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                        deferred.reject({\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: errorText\r\n                            }\r\n                        });\r\n\r\n                    });\r\n                return deferred.promise;\r\n\r\n            };\r\n\r\n            this.progressText = \"\";\r\n            this.isProgressShown = false;\r\n            this.hideButtons = false;\r\n            this.showProgressDialog = function () {\r\n                var THIS = this;\r\n                if (!this.isProgressShown) {\r\n\r\n                    this.parentScope.customModalDlg2Caption = 'Linkly payment system';\r\n                    this.parentScope.customModalDlg2Text = this.progressText;\r\n                    if (!this.hideButtons) {\r\n                        this.parentScope.customModalDlg2Buttons = [{\r\n                            name: gettextCatalog.getString('Cancel'),\r\n                            value: 'cancel'\r\n                        }];\r\n                    }\r\n                    else {\r\n                        this.parentScope.customModalDlg2Buttons = [];\r\n                    }\r\n\r\n                    this.parentScope.callbackModal2 = function (code) {\r\n                        console.log('callbackModal2 called');\r\n                        THIS.cancelCurrentTransaction();\r\n                        return true;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        this.isProgressShown = true;\r\n                        helperService.showDialog('#customModalDlg2');\r\n                    });\r\n                }\r\n            }\r\n\r\n            this.hideProgressDialog = function (force) {\r\n                if (this.isProgressShown || force) {\r\n                    $timeout(function () {\r\n                        helperService.closeDialog('#customModalDlg2');\r\n                        this.isProgressShown = false;\r\n                    });\r\n\r\n                }\r\n            };\r\n\r\n            this.dialogCalled = false;\r\n            this.lastQuestion = null;\r\n            this.lastCallback = null;\r\n\r\n            this.makePayment = function (options) {\r\n                this.hideButtons = false;\r\n                var THIS = this;\r\n                this.dialogCalled = false;\r\n                this.isProgressShown = false;\r\n                var isTokenExpired = false\r\n                this.isRequestFromPurchase = true;\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var d0 = $q.defer();\r\n\r\n                var secret = this.retrieveLinklyData('secret');\r\n                var token = this.retrieveLinklyData('token');\r\n                var pr = this.prm;\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = this.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        isTokenExpired = true;\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"Terminal has been disconnected from Cin7 Core POS.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                if (settings.printLinklyPaymentReceiptOnTerminal !== true &&\r\n                    !configService.supportLinklyMerchantCustomerReceiptPrint) {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or disable 'Print EFTPOS receipts on the Linkly payment terminal' on the setup page.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                THIS.progressText = gettextCatalog.getString(\"Transaction in progress...\");\r\n                THIS.showProgressDialog();\r\n\r\n                return pr.then(function () {\r\n\r\n                    linklyCloudPaymentUrl = configService.isQAMode ?\r\n                        \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                        \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                    d0.resolve(null);\r\n\r\n                    var deferred = $q.defer();\r\n\r\n                    var requestType = \"/transaction?async=false\";\r\n\r\n                    var isPaymentReceiptOn = settings.printLinklyPaymentReceiptOnTerminal !== true ? 7 : 0;\r\n                    var isCutReceiptOn = settings.receiptsLinklyPaymentReceiptOnTerminal !== true ? 0 : 1;\r\n\r\n                    let tempSessionId = uuid2.newguid();\r\n\r\n                    THIS.storeLinklyData('tempSessionId', tempSessionId);\r\n\r\n                    var amount = Math.round(options.amount * 100).toString()\r\n\r\n                    webOnlyProvider.linklyCloudMakePayment(linklyCloudPaymentUrl, tempSessionId, token, requestType, amount, options.OrderNumber, isCutReceiptOn, isPaymentReceiptOn)\r\n                        .then((transactionData) => {\r\n\r\n                            if (transactionData.data.response.success) {\r\n\r\n                                THIS.hideProgressDialog(true);\r\n                                var responseTransactionData = transactionData.data.response;\r\n                                responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                THIS.storeLinklyData('lastSessionId', tempSessionId);\r\n\r\n                                var prm = THIS.prm;\r\n\r\n                                if (isPaymentReceiptOn == 7) {\r\n                                    if (transactionData.data.response.receipts.length > 0 && transactionData.data.response.receipts[0].receiptText != undefined && transactionData.data.response.receipts[0].receiptText != null) {\r\n                                        responseTransactionData.merchantReceipt = transactionData.data.response.receipts[0].receiptText.toString();\r\n                                        responseTransactionData.customerReceipt = transactionData.data.response.receipts[0].receiptText.toString();\r\n                                    } else {\r\n\r\n                                        prm = prm.then(function () {\r\n                                            return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                    responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                    responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                }\r\n                                            });\r\n                                        });\r\n                                    }\r\n                                }\r\n\r\n                                return prm.then(function () {\r\n\r\n                                    // for partial payment approval\r\n                                    if (transactionData.data.response.responseText.trim().toLowerCase() == \"approved\" && options.Sale.Balance != 0) {\r\n                                        $.unblockUI();\r\n                                        // show warning dialog\r\n                                        var txt = gettextCatalog.getString('Only') + ' ' + helperService.applyCurrency(options.amount, THIS.currency_symbol) + ' ' + gettextCatalog.getString('is approved. The rest of the amount must be paid in another way.');\r\n\r\n                                        helperService.showInfoDialog({ title: '', body: txt }, function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                response: {\r\n                                                    ServerTransactionID: tempSessionId,\r\n                                                    TransactionMetaData: responseTransactionData\r\n                                                }\r\n                                            });\r\n                                        });\r\n                                    }\r\n                                    else {\r\n\r\n                                        deferred.resolve({\r\n                                            result: true,\r\n                                            response: {\r\n                                                ServerTransactionID: tempSessionId,\r\n                                                TransactionMetaData: responseTransactionData\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n                                })\r\n                            }\r\n                            else {\r\n\r\n                                THIS.storeLinklyData('errorRecovery-expiry', Date.now() + THIS.errorRecoveryInSeconds * 1000);\r\n                                return THIS.errorRecovery().then(function (errorRecovery) {\r\n\r\n                                    if (errorRecovery.response.success) {\r\n\r\n                                        THIS.hideProgressDialog(true);\r\n                                        var responseTransactionData = errorRecovery.response;\r\n                                        responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                        var prm = THIS.prm;\r\n\r\n                                        if (isPaymentReceiptOn == 7) {\r\n                                            if (errorRecovery.response.receipts.length > 0 && errorRecovery.response.receipts[0].receiptText != undefined && errorRecovery.response.receipts[0].receiptText != null) {\r\n                                                responseTransactionData.merchantReceipt = errorRecovery.response.receipts[0].receiptText.toString();\r\n                                                responseTransactionData.customerReceipt = errorRecovery.response.receipts[0].receiptText.toString();\r\n                                            } else {\r\n                                                prm = prm.then(function () {\r\n                                                    return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                        if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                            responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                            responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                        }\r\n                                                    });\r\n                                                });\r\n                                            }\r\n                                        }\r\n\r\n                                        return prm.then(function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                response: {\r\n                                                    ServerTransactionID: tempSessionId,\r\n                                                    TransactionMetaData: responseTransactionData\r\n                                                }\r\n                                            });\r\n\r\n                                        });\r\n\r\n                                    }\r\n                                    else {\r\n                                        var errorText = THIS.getErrorText(errorRecovery.statusText);\r\n\r\n                                        THIS.hideProgressDialog(true);\r\n                                        deferred.reject({\r\n                                            result: false,\r\n                                            response: {\r\n                                                errorDescription: errorText\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n\r\n                                }).catch((err) => {\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                        })\r\n                        .catch((error) => {\r\n\r\n                            if (error.status == 401 && isTokenExpired == false) {\r\n\r\n                                THIS.storeLinklyData('token-expiry', Date.now());\r\n                                return THIS.makePayment(options).then(function (res) {\r\n\r\n                                    deferred.resolve(res);\r\n\r\n                                }).catch((err) => {\r\n                                    var errorText = THIS.getErrorText(err.response.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else if (error.status == 408 || (error.status >= 500 && error.status <= 599)) {\r\n\r\n                                THIS.storeLinklyData('errorRecovery-expiry', Date.now() + THIS.errorRecoveryInSeconds * 1000);\r\n                                return THIS.errorRecovery().then(function (transactionData) {\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    var responseTransactionData = transactionData.response;\r\n                                    responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                    if (transactionData.response.status == 200) {\r\n\r\n                                        var prm = THIS.prm;\r\n\r\n                                        if (isPaymentReceiptOn == 7) {\r\n                                            if (transactionData.response.receipts.length > 0 && transactionData.response.receipts[0].receiptText != undefined && transactionData.response.receipts[0].receiptText != null) {\r\n                                                responseTransactionData.merchantReceipt = transactionData.response.receipts[0].receiptText.toString();\r\n                                                responseTransactionData.customerReceipt = transactionData.response.receipts[0].receiptText.toString();\r\n                                            } else {\r\n                                                prm = prm.then(function () {\r\n                                                    return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                        if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                            responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                            responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                        }\r\n                                                    });\r\n                                                });\r\n                                            }\r\n                                        }\r\n\r\n                                        return prm.then(function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                response: {\r\n                                                    ServerTransactionID: tempSessionId,\r\n                                                    TransactionMetaData: responseTransactionData\r\n                                                }\r\n                                            });\r\n                                        });\r\n\r\n                                    }\r\n                                    else {\r\n\r\n                                        var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                        deferred.reject({\r\n                                            result: false,\r\n                                            response: {\r\n                                                errorDescription: errorText\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else {\r\n\r\n                                var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                THIS.hideProgressDialog(true);\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: errorText == undefined ? error.response.errorDescription : errorText\r\n                                    }\r\n                                });\r\n\r\n                            }\r\n\r\n                        });\r\n\r\n                    return deferred.promise;\r\n                });\r\n            };\r\n\r\n            this.refund = function (el, refundSum, options) {\r\n\r\n                this.hideButtons = false;\r\n                var THIS = this;\r\n                this.dialogCalled = false;\r\n                this.isProgressShown = false;\r\n                var isTokenExpired = false;\r\n                this.isRequestFromPurchase = false;\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var d0 = $q.defer();\r\n\r\n                var secret = THIS.retrieveLinklyData('secret');\r\n                var token = THIS.retrieveLinklyData('token');\r\n                var pr = THIS.prm;\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = THIS.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        isTokenExpired = true;\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                if (settings.printLinklyPaymentReceiptOnTerminal !== true &&\r\n                    !configService.supportLinklyMerchantCustomerReceiptPrint) {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or disable 'Print EFTPOS receipts on the Linkly payment terminal' on the setup page.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                THIS.progressText = gettextCatalog.getString(\"Transaction in progress...\");\r\n                THIS.showProgressDialog();\r\n\r\n                return pr.then(function () {\r\n\r\n                    linklyCloudPaymentUrl = configService.isQAMode ?\r\n                        \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                        \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                    d0.resolve(null);\r\n\r\n                    var deferred = $q.defer();\r\n\r\n                    var requestType = \"/transaction?async=false\";\r\n\r\n                    var isPaymentReceiptOn = settings.printLinklyPaymentReceiptOnTerminal !== true ? 7 : 0;\r\n                    var isCutReceiptOn = settings.receiptsLinklyPaymentReceiptOnTerminal !== true ? 0 : 1;\r\n\r\n                    var rfn = el.TransactionMetaData && el.TransactionMetaData.purchaseAnalysisData && el.TransactionMetaData.purchaseAnalysisData.RFN ? el.TransactionMetaData.purchaseAnalysisData.RFN : el.TransactionMetaData && el.TransactionMetaData.txnRef ? el.TransactionMetaData.txnRef.trim() : options.OrderNumber;\r\n\r\n                    let tempSessionId = uuid2.newguid();\r\n\r\n                    THIS.storeLinklyData('tempSessionId', tempSessionId);\r\n\r\n                    webOnlyProvider.linklyCloudRefundTransaction(linklyCloudPaymentUrl, tempSessionId, token, requestType, Math.round(refundSum * 100), options.OrderNumber, isCutReceiptOn, isPaymentReceiptOn, rfn)\r\n                        .then((transactionData) => {\r\n\r\n                            if (transactionData.data.response.success) {\r\n\r\n                                THIS.hideProgressDialog(true);\r\n                                var responseTransactionData = transactionData.data.response;\r\n                                responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                var prm = THIS.prm;\r\n\r\n                                if (isPaymentReceiptOn == 7) {\r\n                                    if (transactionData.data.response.receipts.length > 0 && transactionData.data.response.receipts[0].receiptText != undefined && transactionData.data.response.receipts[0].receiptText != null) {\r\n                                        responseTransactionData.merchantReceipt = transactionData.data.response.receipts[0].receiptText.toString();\r\n                                        responseTransactionData.customerReceipt = transactionData.data.response.receipts[0].receiptText.toString();\r\n                                    } else {\r\n                                        prm = prm.then(function () {\r\n                                            return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                    responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                    responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                }\r\n                                            });\r\n                                        });\r\n                                    }\r\n                                }\r\n\r\n                                return prm.then(function () {\r\n\r\n                                    deferred.resolve({\r\n                                        result: true,\r\n                                        amount: refundSum,\r\n                                        ServerTransactionID: tempSessionId,\r\n                                        TransactionMetaData: responseTransactionData\r\n                                    });\r\n                                });\r\n\r\n                            }\r\n                            else {\r\n\r\n                                THIS.storeLinklyData('errorRecovery-expiry', Date.now() + THIS.errorRecoveryInSeconds * 1000);\r\n                                return THIS.errorRecovery().then(function (errorRecovery) {\r\n\r\n                                    if (errorRecovery.response.success) {\r\n\r\n                                        THIS.hideProgressDialog(true);\r\n                                        var responseTransactionData = errorRecovery.response;\r\n                                        responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                        var prm = THIS.prm;\r\n\r\n                                        if (isPaymentReceiptOn == 7) {\r\n                                            if (errorRecovery.response.receipts.length > 0 && errorRecovery.response.receipts[0].receiptText != undefined && errorRecovery.response.receipts[0].receiptText != null) {\r\n                                                responseTransactionData.merchantReceipt = errorRecovery.response.receipts[0].receiptText.toString();\r\n                                                responseTransactionData.customerReceipt = errorRecovery.response.receipts[0].receiptText.toString();\r\n                                            } else {\r\n                                                prm = prm.then(function () {\r\n                                                    return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                        if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                            responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                            responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                        }\r\n                                                    });\r\n                                                });\r\n                                            }\r\n                                        }\r\n\r\n                                        return prm.then(function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                amount: refundSum,\r\n                                                ServerTransactionID: tempSessionId,\r\n                                                TransactionMetaData: responseTransactionData\r\n                                            });\r\n\r\n                                        });\r\n\r\n                                    }\r\n                                    else {\r\n\r\n                                        var errorText = THIS.getErrorText(errorRecovery.statusText);\r\n\r\n                                        THIS.hideProgressDialog(true);\r\n                                        deferred.reject({\r\n                                            result: false,\r\n                                            response: {\r\n                                                errorDescription: errorText\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n\r\n                        })\r\n                        .catch((error) => {\r\n\r\n                            if (error.status == 401 && isTokenExpired == false) {\r\n\r\n                                THIS.storeLinklyData('token-expiry', Date.now());\r\n                                return THIS.refund(el, refundSum, options).then(function (res) {\r\n\r\n                                    deferred.resolve(res);\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.response.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else if (error.status == 408 || (error.status >= 500 && error.status <= 599)) {\r\n\r\n                                THIS.storeLinklyData('errorRecovery-expiry', Date.now() + THIS.errorRecoveryInSeconds * 1000);\r\n                                return THIS.errorRecovery().then(function (transactionData) {\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n\r\n                                    var responseTransactionData = transactionData.response;\r\n                                    responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                    if (transactionData.response.status == 200) {\r\n\r\n                                        var prm = THIS.prm;\r\n\r\n                                        if (isPaymentReceiptOn == 7) {\r\n                                            if (transactionData.response.receipts.length > 0 && transactionData.response.receipts[0].receiptText != undefined && transactionData.response.receipts[0].receiptText != null) {\r\n                                                responseTransactionData.merchantReceipt = transactionData.response.receipts[0].receiptText.toString();\r\n                                                responseTransactionData.customerReceipt = transactionData.response.receipts[0].receiptText.toString();\r\n                                            } else {\r\n                                                prm = prm.then(function () {\r\n                                                    return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                        if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                            responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                            responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                        }\r\n                                                    });\r\n                                                });\r\n                                            }\r\n                                        }\r\n\r\n                                        return prm.then(function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                response: {\r\n                                                    ServerTransactionID: tempSessionId,\r\n                                                    TransactionMetaData: responseTransactionData\r\n                                                }\r\n                                            });\r\n                                        });\r\n\r\n                                    }\r\n                                    else {\r\n\r\n                                        var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                        deferred.reject({\r\n                                            result: false,\r\n                                            response: {\r\n                                                errorDescription: errorText\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else {\r\n\r\n                                var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                THIS.hideProgressDialog(true);\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: errorText == undefined ? error.response.errorDescription : errorText\r\n                                    }\r\n                                });\r\n\r\n                            }\r\n\r\n                        });\r\n\r\n                    return deferred.promise;\r\n                });\r\n\r\n            }\r\n\r\n            this.cancelCurrentTransaction = function () {\r\n\r\n                var d0 = $q.defer();\r\n                var THIS = this;\r\n                var isTokenExpired = false;\r\n\r\n                var secret = THIS.retrieveLinklyData('secret');\r\n                var token = THIS.retrieveLinklyData('token');\r\n                var pr = THIS.prm;\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = THIS.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        isTokenExpired = true;\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"Terminal has been disconnected from Cin7 Core POS.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                THIS.customModalDlg2Text2 = '';\r\n                THIS.customModalDlg2Text = gettextCatalog.getString(\"Cancelling transaction...\");\r\n\r\n                return pr.then(function () {\r\n\r\n                    linklyCloudPaymentUrl = configService.isQAMode ?\r\n                        \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                        \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                    d0.resolve(null);\r\n\r\n                    var printPromise = d0.promise;\r\n\r\n                    var deferred = $q.defer();\r\n\r\n                    var requestType = \"/sendkey?async=false\";\r\n\r\n                    var tempSessionId = THIS.retrieveLinklyData('tempSessionId');\r\n\r\n                    webOnlyProvider.linklyCloudCancelCurrentTransaction(linklyCloudPaymentUrl, tempSessionId, token, requestType)\r\n                        .then((transactionData) => {\r\n\r\n                            if (transactionData.status = 200) {\r\n\r\n                                deferred.resolve({\r\n                                    result: true,\r\n                                    response: {\r\n                                        TransactionMetaData: transactionData\r\n                                    }\r\n                                });\r\n\r\n                            }\r\n                            else {\r\n\r\n                                var responseText = THIS.getErrorText(transactionData.data.response.responseText);\r\n\r\n                                var res = {\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: responseText\r\n                                    }\r\n                                };\r\n\r\n                                deferred.reject(res);\r\n\r\n                            }\r\n\r\n                        })\r\n                        .catch((error) => {\r\n\r\n                            if (error.status == 401 && isTokenExpired == false) {\r\n\r\n                                THIS.storeLinklyData('token-expiry', Date.now());\r\n                                return THIS.cancelCurrentTransaction().then(function (res) {\r\n\r\n                                    deferred.resolve(res);\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.response.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else {\r\n\r\n                                var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: errorText\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                        });\r\n\r\n                    return deferred.promise;\r\n                });\r\n\r\n            };\r\n\r\n            this.errorRecovery = function () {\r\n\r\n                var THIS = this;\r\n                var isTokenExpired = false;\r\n                var deferred = $q.defer();\r\n                linklyCloudPaymentUrl = configService.isQAMode ?\r\n                    \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                    \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                var tempSessionId = THIS.retrieveLinklyData('tempSessionId');\r\n                var requestType = \"/transaction?async=false\";\r\n\r\n                var secret = THIS.retrieveLinklyData('secret');\r\n                var token = THIS.retrieveLinklyData('token');\r\n                var pr = THIS.prm;\r\n                const d0 = $q.defer();\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = THIS.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        isTokenExpired = true;\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    var errorMessage = this.isRequestFromPurchase ? \"Terminal has been disconnected from Cin7 Core POS.\" : \"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\";\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(errorMessage)\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                return pr.then(function () {\r\n\r\n                    var errorRecoveryexpiry = THIS.retrieveLinklyData('errorRecovery-expiry');\r\n\r\n                    webOnlyProvider.linklyCloudTransactionStatus(linklyCloudPaymentUrl, tempSessionId, token, requestType)\r\n                        .then((transaction) => {\r\n\r\n                            if (transaction.data.response.success) {\r\n                                deferred.resolve({\r\n                                    response: transaction.data.response\r\n                                });\r\n                            }\r\n                            else if (transaction.status == 200 || transaction.status == 400 || transaction.status == 404) {\r\n\r\n                                var responseText = THIS.getErrorText(transaction.data.response.responseText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    errorDescription: responseText\r\n                                });\r\n                            }\r\n                            else if (errorRecoveryexpiry > Date.now()) {\r\n\r\n                                return THIS.errorRecovery().then(function (tran) {\r\n\r\n                                    deferred.resolve({\r\n                                        response: tran.data.response\r\n                                    });\r\n\r\n                                })\r\n                            }\r\n                            else {\r\n\r\n                                var responseText = THIS.getErrorText(transaction.data.response.responseText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    errorDescription: responseText\r\n                                });\r\n\r\n                            }\r\n\r\n                        })\r\n                        .catch((error) => {\r\n\r\n                            if (error.status == 200 || error.status == 400 || error.status == 404) {\r\n\r\n                                var statusText = THIS.getErrorText(error.statusText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    errorDescription: error.statusText == undefined ? error.errorDescription : statusText\r\n                                });\r\n\r\n                            }\r\n                            else if (error.status == 401 && isTokenExpired == false) {\r\n\r\n                                THIS.storeLinklyData('token-expiry', Date.now());\r\n                                return THIS.errorRecovery().then(function (tran) {\r\n\r\n                                    deferred.resolve({\r\n                                        response: tran.data.response\r\n                                    });\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        errorDescription: errorText\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else if (errorRecoveryexpiry >= Date.now()) {\r\n\r\n                                return THIS.errorRecovery().then(function (tran) {\r\n\r\n                                    deferred.resolve({\r\n                                        response: tran.data.response\r\n                                    });\r\n\r\n                                }).catch((error) => {\r\n\r\n                                    var errorText = THIS.getErrorText(error.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        errorDescription: errorText\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else {\r\n                                var statusText = THIS.getErrorText(error.statusText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    errorDescription: error.statusText == undefined ? error.errorDescription : statusText\r\n                                });\r\n                            }\r\n\r\n                        });\r\n                    return deferred.promise;\r\n                })\r\n            };\r\n\r\n            this.getReprintReceipt = function () {\r\n\r\n                var THIS = this;\r\n                var deferred = $q.defer();\r\n                linklyCloudPaymentUrl = configService.isQAMode ?\r\n                    \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                    \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                var secret = this.retrieveLinklyData('secret');\r\n                var token = this.retrieveLinklyData('token');\r\n                var pr = helperService.resolvePromise(true);\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = this.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    const d0 = $q.defer();\r\n                    var errorMessage = this.isRequestFromPurchase ? \"Terminal has been disconnected from Cin7 Core POS.\" : \"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\";\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(errorMessage)\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                let tempSessionId = uuid2.newguid();\r\n                var requestType = \"/reprintreceipt?async=false\";\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n                var isPaymentReceiptOn = settings.printLinklyPaymentReceiptOnTerminal !== true ? 7 : 0;\r\n                var isCutReceiptOn = settings.receiptsLinklyPaymentReceiptOnTerminal !== true ? 0 : 1;\r\n\r\n                return pr.then(function () {\r\n\r\n                    webOnlyProvider.linklyCloudReprintReceipt(linklyCloudPaymentUrl, tempSessionId, token, requestType, isCutReceiptOn, isPaymentReceiptOn)\r\n                        .then((response) => {\r\n\r\n                            deferred.resolve({\r\n                                result: true,\r\n                                response: {\r\n                                    printReceipt: response.data.response.receiptText\r\n                                }\r\n\r\n                            });\r\n\r\n                        })\r\n                        .catch((error) => {\r\n                            var statusText = THIS.getErrorText(error.statusText);\r\n\r\n                            deferred.reject({\r\n                                result: false,\r\n                                response: {\r\n                                    errorDescription: statusText\r\n                                }\r\n\r\n                            });\r\n\r\n                        });\r\n                    return deferred.promise;\r\n                })\r\n            };\r\n\r\n            this.startPolling = function () {\r\n\r\n                this.isRequestFromPurchase = false;\r\n                var THIS = this;\r\n\r\n                if (!THIS.polling) {\r\n                    THIS.polling = $interval(function () {\r\n\r\n                        linklyCloudPaymentUrl = configService.isQAMode ?\r\n                            \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                            \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                        var secret = THIS.retrieveLinklyData('secret');\r\n                        var token = THIS.retrieveLinklyData('token');\r\n                        var pr = THIS.prm;\r\n\r\n                        if (secret) {\r\n\r\n                            var tokenExpiry = THIS.retrieveLinklyData('token-expiry');\r\n\r\n                            if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                                pr = pr.then(function () {\r\n                                    return THIS.getToken().then(function () {\r\n                                        token = THIS.retrieveLinklyData('token');\r\n                                    });\r\n                                });\r\n                            }\r\n                        }\r\n                        else {\r\n                            var errorMSG = gettextCatalog.getString('Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.');\r\n\r\n                            THIS.stopPolling(errorMSG);\r\n                            return;\r\n                        }\r\n\r\n                        return pr.then(function () {\r\n\r\n                            webOnlyProvider.linklyCloudTerminalStatus(linklyCloudPaymentUrl, uuid2.newguid(), token)\r\n                                .then((response) => {\r\n\r\n                                    var responseText = THIS.getErrorText(response.data.response.responseText);\r\n\r\n                                    if (responseText === 'PIN PAD IS OFFLINE.')\r\n                                        THIS.stopPolling(responseText);\r\n\r\n                                }).catch((error) => {\r\n                                    var errorMSG = THIS.getErrorText(error.statusText);\r\n\r\n                                    THIS.stopPolling(errorMSG);\r\n\r\n                                });\r\n                        })\r\n\r\n                    }, THIS.pollingIntervalInSeconds * 1000);\r\n                }\r\n            };\r\n\r\n            this.stopPolling = function (errorMSG) {\r\n\r\n                if (this.polling) {\r\n                    try {\r\n                        $interval.cancel(this.polling);\r\n                        this.polling = null;\r\n\r\n                        if (!!errorMSG)\r\n                            helperService.showErrorDialog({ title: 'Error', body: errorMSG });\r\n                    }\r\n                    catch (e) {\r\n                    }\r\n\r\n                }\r\n\r\n            };\r\n\r\n            this.storeLinklyData = function (key, data) {\r\n\r\n                window.localStorage.setItem(key, JSON.stringify(data));\r\n\r\n            };\r\n\r\n            this.retrieveLinklyData = function (key) {\r\n\r\n                let data = window.localStorage.getItem(key);\r\n                if (data) {\r\n                    return JSON.parse(data);\r\n                }\r\n                else\r\n                    return null;\r\n\r\n            };\r\n\r\n            this.removeLinklyData = function (key) {\r\n\r\n                window.localStorage.removeItem(key);\r\n\r\n            };\r\n\r\n            this.getErrorText = function (errorText) {\r\n\r\n                errorText = (errorText != undefined && errorText != null) ? errorText.trim() : errorText;\r\n\r\n                switch (errorText) {\r\n                    case 'OPERATOR CANCELLED':\r\n                        errorText = 'Transaction is CANCELLED BY THE OPERATOR.'\r\n                        break;\r\n                    case 'OPERATOR TIMEOUT':\r\n                        errorText = 'TIMEOUT.'\r\n                        break;\r\n                    case 'PINpad Busy':\r\n                        errorText = 'PIN PAD IS NOT RESPONDING.'\r\n                        break;\r\n                    case 'PINpad Offline':\r\n                        errorText = 'PIN PAD IS OFFLINE.'\r\n                        break;\r\n                    case 'Not Found':\r\n                        errorText = 'TRANSACTION IS NOT FOUND.'\r\n                        break;\r\n                    case 'Bad Request':\r\n                        errorText = this.isRequestFromPurchase ? 'Terminal has been disconnected from Cin7 Core POS.' : 'Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.'\r\n                        break;\r\n                    case 'Service Unavailable':\r\n                        errorText = 'Terminal is not answering. Please verify the terminal is on and connected to Cin7 Core POS.'\r\n                        break;\r\n                    case 'Unauthorized':\r\n                        errorText = this.isRequestFromPurchase ? 'An error occured when pairing. Please re-pair the terminal on the Payment Setup page.' : 'Please re-pair the terminal on the Payment Setup page.'\r\n                        break;\r\n                }\r\n\r\n                return gettextCatalog.getString(errorText);\r\n\r\n            };\r\n\r\n        }\r\n\r\n    ]);","angular.module('services').factory('liveSearchService', ['$q', 'configService', 'filterService',\r\n    function ($q, configService, filterService) {\r\n        var liveSearchService = {};\r\n\r\n        // products for live search\r\n        liveSearchService.data = [];\r\n\r\n        // customers for live search\r\n        liveSearchService.customersData = [];\r\n        liveSearchService.customerDataLoaded = false;\r\n\r\n        // taking products full data list extract only live search info\r\n        liveSearchService.fillData = function (products) {\r\n            var deferred = $q.defer();\r\n            liveSearchService.data = [];\r\n            console.time('fillData');\r\n            //  console.log('start fill live search data:');\r\n            angular.forEach(products, function (p) {\r\n                if (!p.isFamily) {\r\n                    liveSearchService.data.push({\r\n                        name: p.name.toLowerCase(),\r\n                        id: p.productID,\r\n                        sku: p.productCode.toLowerCase(),\r\n                        price: p.price\r\n                    });\r\n                }\r\n            });\r\n            console.timeEnd('fillData');\r\n\r\n            console.time('fillData: sort');\r\n            liveSearchService.data.sort(function (a, b) {\r\n                /*\r\n                var a1 = a.sku + ': ' + a.name;\r\n                var b1 = b.sku + ': ' + b.name;\r\n                */\r\n\r\n                if (a.name < b.name) return -1;\r\n                if (a.name > b.name) return 1;\r\n                return 0;\r\n            });\r\n\r\n            console.timeEnd('fillData: sort');\r\n            //    console.log('end fill live search data:');\r\n            //    console.timeEnd('fillData');\r\n            deferred.resolve(true);\r\n            return deferred.promise;\r\n        };\r\n\r\n        // filter function that search and return suggestions\r\n        liveSearchService.filterData = function (text, limit) {\r\n            if (!text || text.length == 0)\r\n                return liveSearchService.data;\r\n\r\n            if (!limit) limit = 100;\r\n\r\n            //            console.time('filterData');\r\n            //            console.log('start live search:');\r\n\r\n            text = text.toLowerCase();\r\n            var counter = 0;\r\n            var fd = [];\r\n\r\n            // extended search like in Cin7 Core\r\n            var searchArr = filterService.splitSearchText(text);\r\n\r\n            for (var i = 0; i < liveSearchService.data.length; i++) {\r\n                var el = liveSearchService.data[i];\r\n\r\n                if (counter >= limit)\r\n                    break;\r\n\r\n                //                var cmp = counter < limit && (el.name.indexOf(text) >= 0 ||\r\n                //                    el.sku.indexOf(text) >= 0);\r\n                // extended search\r\n                var cmp = counter < limit &&\r\n                    (filterService.isStringContainsSearchArray(el.name, searchArr) ||\r\n                        filterService.isStringContainsSearchArray(el.sku, searchArr));\r\n\r\n\r\n                if (cmp === true) {\r\n                    counter++;\r\n                    fd.push(el);\r\n                }\r\n            }\r\n\r\n            // console.log('end live search:' + console.timeEnd('filterData'));\r\n            return fd;\r\n        };\r\n\r\n        liveSearchService.mapOnlineCustomer = function (p) {\r\n            const contact = p.Contacts.length > 0 ? p.Contacts[0] : null;\r\n            const el = {\r\n                name: !!p.Name ? p.Name.toLowerCase() : '',\r\n                id: p.ID,\r\n                email: contact && !!contact.Email ? contact.Email.toLowerCase() : '',\r\n                phone: contact && !!contact.Phone ? contact.Phone : '',\r\n                mobile: contact && !!contact.MobilePhone ? contact.MobilePhone : '',\r\n                addresses: !!p.Addresses ? p.Addresses.map(a => {\r\n                    return {\r\n                        city: !!a.City ? a.City.toLowerCase() : '',\r\n                        postcode: a.Postcode\r\n                    };\r\n                }) : [],\r\n                ruleID: p.TaxRuleID,\r\n                effectivePercentInclusive: p.EffectivePercentInclusive,\r\n                effectivePercentExclusive: p.EffectivePercentExclusive\r\n            };\r\n            el.firstLine = el.name;\r\n            if (!!el.mobile)\r\n                el.firstLine += ', ' + el.mobile;\r\n            if (!!el.phone)\r\n                el.firstLine += ', ' + el.phone;\r\n            if (!!el.email)\r\n                el.firstLine += ', ' + el.email;\r\n\r\n            return el;\r\n        };\r\n\r\n        liveSearchService.mapOnlineCustomers = function (customers, searchText) {\r\n            var result = [];\r\n            angular.forEach(customers, function (customer) {               \r\n                if (!customer.Contacts.length)                   \r\n                    result.push(liveSearchService.mapOnlineCustomer(customer));\r\n                else {\r\n                    angular.forEach(customer.Contacts, function (contact) {\r\n                        let tempCustomer = customer;\r\n                        tempCustomer.Contacts[0] = contact;\r\n                        const onlineCustomer = liveSearchService.mapOnlineCustomer(tempCustomer);\r\n                        const address = !!onlineCustomer.addresses ? onlineCustomer.addresses.map(a => {\r\n                            const city = !!a.city ? a.city.toLowerCase() : '';\r\n                            const postcode = !!a.postcode ? a.postcode.toLowerCase() : '';\r\n                            return `${city} ${postcode}`\r\n                        }).join(' ') : '';\r\n                        if ((onlineCustomer.firstLine && onlineCustomer.firstLine.indexOf(searchText) != -1) ||\r\n                            (address.indexOf(searchText) != -1))\r\n                                result.push(onlineCustomer);\r\n                    });\r\n                }\r\n            });\r\n            return result;\r\n        };\r\n\r\n        liveSearchService.mapCustomer = function (p) {\r\n            return {\r\n                name: !!p.name ? p.name.toLowerCase() : '',\r\n                id: p.id,\r\n                email: !!p.email ? p.email.toLowerCase() : '',\r\n                phone: !!p.phone ? p.phone : '',\r\n                mobile: !!p.mobilePhone ? p.mobilePhone : '',\r\n                addresses: !!p.addresses ? p.addresses.map(a => {\r\n                    return {\r\n                        city: !!a.city ? a.city.toLowerCase() : '',\r\n                        postcode: a.postcode\r\n                    };\r\n                }) : [],\r\n                ruleID: p.ruleID,\r\n                effectivePercentInclusive: p.effectivePercentInclusive,\r\n                effectivePercentExclusive: p.effectivePercentExclusive\r\n            };\r\n        };\r\n\r\n\r\n        // taking customers full data list and extract only live search info\r\n        liveSearchService.fillCustomersData = function (customers, isPartial = false) {\r\n            var deferred = $q.defer();\r\n            if (!isPartial) {\r\n                liveSearchService.customersData = Array.from({ length: customers.length });\r\n                console.time('fillCustomerData');\r\n                // console.log('start fill live search data:');\r\n\r\n                angular.forEach(customers, function (p, i) {\r\n                    liveSearchService.customersData[i] = liveSearchService.mapCustomer(p);\r\n                });\r\n                console.timeEnd('fillCustomerData');\r\n\r\n                console.time('fillCustomerData: sort');\r\n                liveSearchService.customersData.sort(function (a, b) {\r\n                    var a1 = a.name;\r\n                    var b1 = b.name;\r\n\r\n                    if (a1 < b1) return -1;\r\n                    if (a1 > b1) return 1;\r\n                    return 0;\r\n                });\r\n                console.timeEnd('fillCustomerData: sort');\r\n\r\n                this.customerDataLoaded = true;\r\n            } else {\r\n                angular.forEach(customers, function (p, i) {\r\n                    var index = liveSearchService.customersData.findIndex(x => x.id == p.id);\r\n                    if (index !== -1) {\r\n                        liveSearchService.customersData[index] = liveSearchService.mapCustomer(p);\r\n                    } else {\r\n                        liveSearchService.customersData.push(liveSearchService.mapCustomer(p))\r\n                    }\r\n\r\n                });\r\n            }\r\n\r\n            deferred.resolve(true);\r\n            return deferred.promise;\r\n        };\r\n\r\n        // filter customer data\r\n        liveSearchService.filterCustomerData = function (text, limit = 10) {\r\n            if (!this.customerDataLoaded)\r\n                return null;\r\n            if (!text || text.length === 0)\r\n                return liveSearchService.customersData;\r\n\r\n            text = text.toLowerCase();\r\n            var counter = 0;\r\n            var fd = [];\r\n\r\n            for (var i = 0; i < liveSearchService.customersData.length; i++) {\r\n                var el = liveSearchService.customersData[i];\r\n\r\n                if (counter >= limit)\r\n                    break;\r\n\r\n                var cmp = counter < limit &&\r\n                    (el.name.indexOf(text) >= 0 ||\r\n                        (!!el.email && el.email.indexOf(text) >= 0) ||\r\n                        (!!el.phone && el.phone.indexOf(text) >= 0) ||\r\n                        (!!el.mobile && el.mobile.indexOf(text) >= 0));\r\n\r\n                if (!cmp) {\r\n                    angular.forEach(el.addresses, function (adr) {\r\n                        if (!cmp && (\r\n                            (!!adr.city && adr.city.indexOf(text) >= 0) ||\r\n                            (!!adr.postcode && adr.postcode.indexOf(text) >= 0)))\r\n                            cmp = true;\r\n                    });\r\n                }\r\n\r\n                if (cmp == true) {\r\n                    counter++;\r\n\r\n                    el.firstLine = el.name;\r\n                    if (!!el.mobile)\r\n                        el.firstLine += ', ' + el.mobile;\r\n                    if (!!el.phone)\r\n                        el.firstLine += ', ' + el.phone;\r\n                    if (!!el.email)\r\n                        el.firstLine += ', ' + el.email;\r\n\r\n                    fd.push(el);\r\n                }\r\n            }\r\n\r\n            return fd;\r\n        };\r\n\r\n        // this function will find very close strings that differ in nonvisible part\r\n        // and convert visual presentation to show differences\r\n        liveSearchService.canvas = null;\r\n        liveSearchService.context = null;\r\n        liveSearchService.longNameProcess = function (arr, sel) {\r\n            if (arr) {\r\n                arr = arr.sort(function (a, b) {\r\n                    if (a < b) return -1;\r\n                    if (a > b) return 1;\r\n                    return 0;\r\n                });\r\n            }\r\n\r\n            if (!liveSearchService.canvas) {\r\n                var lst = $(sel);\r\n\r\n                if (lst.length > 0) {\r\n                    liveSearchService.canvas = document.createElement(\"canvas\");\r\n                    liveSearchService.context = liveSearchService.canvas.getContext(\"2d\");\r\n                    var ff = lst.css('font-family');\r\n                    var fs = lst.css('font-size');\r\n                    var fw = lst.css('font-weight');\r\n                    liveSearchService.context.font = 'normal ' + fw + ' ' + fs + ' ' + ff;\r\n                }\r\n            }\r\n\r\n            if (liveSearchService.canvas && arr && arr.length > 0) {\r\n                angular.forEach(arr, function (el) {\r\n                    width = liveSearchService.context.measureText(el.name).width;\r\n                });\r\n            }\r\n        };\r\n\r\n        // return service object\r\n        return liveSearchService;\r\n    }\r\n]);","import sjcl from 'sjcl';\r\n\r\nangular.module('services').service('localDBProvider', [\r\n    'configService', 'errorService', '$q', 'helperService', 'constants', 'gettextCatalog', 'orderByFilter',\r\n    'dbUpdatesService', 'filterService',\r\n    function (configService, errorService, $q, helperService, constants, gettextCatalog, orderBy,\r\n        dbUpdatesService, filterService) {\r\n\r\n        this.db = null;\r\n\r\n        this.init = function (callback) {\r\n            if (!window.cordova) {\r\n                callback();\r\n                return;\r\n            }\r\n\r\n            if (!configService.isEmulator) {\r\n                var THIS = this;\r\n                const args = { name: 'crddb.db', location: 'default' };\r\n                if (device && device.platform === 'Android') {\r\n                    const version = Number.parseInt(device.version);\r\n                    if (version && version != NaN && version >= 11) {\r\n                        args.androidDatabaseProvider = 'system';\r\n                    }\r\n                }\r\n                this.db = window.sqlitePlugin.openDatabase(args, function (db) {\r\n                    console.log('db created');\r\n                    THIS.createDBSchema(callback);\r\n                }, function (err) {\r\n                    console.log('db error open database: ' + err.message);\r\n                    console.log(JSON.stringify(err));\r\n                    callback(err);\r\n                });\r\n            }\r\n            else {\r\n                this.db = window.openDatabase('crddb.db', '', 'crddb.db', 10000000);\r\n                console.log('db created');\r\n                this.createDBSchema(callback);\r\n            }\r\n        };\r\n\r\n        // internal use\r\n        this.createDBSchema = function (callback) {\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('SELECT name FROM sqlite_master WHERE type = \"table\" AND name = \"versions\"', [],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0) {\r\n                            $.each(dbUpdatesService.initialDBCreationScript(), function (idx, s) {\r\n                                tx.executeSql(s);\r\n                            });\r\n                            console.log('base tables are created');\r\n                        }\r\n\r\n                        tx.executeSql('select Version from versions order by Version desc LIMIT 1', [], function (tx, results) {\r\n                            var ver = results.rows.item(0).Version;\r\n                            dbUpdatesService.appplyUpdates(ver, tx);\r\n                        });\r\n\r\n                    });\r\n\r\n                if (!configService.isEmulator) {\r\n                    console.log('set pragmas');\r\n                    tx.executeSql('PRAGMA journal_mode = MEMORY; PRAGMA LOCKING_MODE = EXCLUSIVE; PRAGMA TEMP_STORE = MEMORY;');\r\n                }\r\n\r\n            }, function (err) {\r\n                callback();\r\n                console.log(err);\r\n                errorService.showError(err.message);\r\n            }, function () {\r\n                callback();\r\n            });\r\n\r\n            this.db.__proto__.executeChunk = function (chunckSize, arr, func) {\r\n                const dbTHIS = this;\r\n                return ext.helperService.promiseWhile(0, i => i < arr.length, function (c) {\r\n                    return new Promise(function (resolve, reject) {\r\n                        const upperChunckBound = c + chunckSize;\r\n                        dbTHIS.transaction(function (tx) {\r\n                            for (let i = c; i < arr.length && i < upperChunckBound; i++) {\r\n                                const el = arr[i];\r\n                                func(tx, el);\r\n                            }\r\n                            c = upperChunckBound;\r\n                            resolve(c);\r\n                        }, function (err) {\r\n                            reject(err);\r\n                        });\r\n                    });\r\n                });\r\n            };\r\n\r\n\r\n            this.db.__proto__.executeChunkBatch = function (chunckSize, batchStmnts) {\r\n                const dbTHIS = this;\r\n                return ext.helperService.promiseWhile(0, i => i < batchStmnts.length, function (c) {\r\n                    return new Promise(function (resolve, reject) {\r\n                        const upperChunckBound = c + chunckSize;\r\n                        dbTHIS.sqlBatch(batchStmnts.slice(c, upperChunckBound), function (tx) {\r\n                            c = upperChunckBound;\r\n                            resolve(c);\r\n                        }, function (err) {\r\n                            reject(err);\r\n                            console.log(JSON.stringify(err));\r\n                        });\r\n                    });\r\n                });\r\n            };\r\n\r\n        };\r\n\r\n        this.pinLogin = function (dearPosName, pin, pinToken) {\r\n            var deferred = $q.defer();\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT PinToken, Info from logins where PosName=? and PinToken=?\", [dearPosName, pinToken], function (tx, resultSet) {\r\n                    var rec = resultSet.rows;\r\n                    var isErr = false;\r\n                    if (rec.length === 0) {\r\n                        isErr = true;\r\n                    }\r\n                    else {\r\n                        var matchedUsers = [];\r\n\r\n                        for (var i = 0; i < rec.length; i++) {\r\n                            try {\r\n                                sjcl.decrypt(pin, rec.item(i).PinToken); // check pin\r\n                                var data = JSON.parse(rec.item(i).Info);\r\n\r\n                                delete data.Password;\r\n                                delete data.PosName;\r\n                                matchedUsers.push(data);\r\n                            }\r\n                            catch (ex) {\r\n                                //                                isErr = true;\r\n                            }\r\n                        }\r\n\r\n                        if (matchedUsers.length == 0)\r\n                            isErr = true;\r\n                        else if (matchedUsers.length === 1) {\r\n                            matchedUsers[0].MatchedLoginsCount = 1;\r\n                            deferred.resolve({ data: matchedUsers[0] });\r\n                        } else { // if we have more than 1 \r\n                            var lastUser = matchedUsers.filter(function (l) {\r\n                                return helperService.compareStrings(l.UserName, configService.lastUserName);\r\n                            });\r\n\r\n                            if (lastUser.length > 0) {\r\n                                lastUser[0].MatchedLoginsCount = rec.length;\r\n                                deferred.resolve({ data: lastUser[0] });\r\n                            } else {\r\n                                matchedUsers[0].MatchedLoginsCount = rec.length;\r\n                                deferred.resolve({ data: matchedUsers[0] });\r\n                            }\r\n                        }\r\n\r\n                    }\r\n\r\n                    if (isErr) {\r\n                        deferred.reject(\r\n                            gettextCatalog.getString(\"PIN code is incorrect.\" +\r\n                                (!configService.isOnline ? gettextCatalog.getString(\"Connect to the network and try again.\") : '')));\r\n                    }\r\n\r\n                });\r\n            }, function (err) {\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.login = function (dearPosName, userName, password, pin, pinToken, _, __, savedData) {\r\n            if (!!pinToken && !!pin)\r\n                return this.pinLogin(dearPosName, pin, pinToken);\r\n\r\n            var deferred = $q.defer();\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Token, Info from logins where PosName=? and UserName=?\", [dearPosName, userName], function (tx, resultSet) {\r\n                    var rec = resultSet.rows;\r\n                    var isErr = false;\r\n                    if (rec.length === 0) {\r\n                        isErr = true;\r\n                    }\r\n                    else if (savedData) {\r\n                        if (!!rec.item(0).Info) {\r\n                            const data = JSON.parse(rec.item(0).Info);\r\n                            delete data.Password;\r\n                            delete data.PosName;\r\n\r\n                            deferred.resolve({ data: data });\r\n                        }\r\n                        else {\r\n                            deferred.reject(gettextCatalog.getString('Connect to the network and try again.'));\r\n                        }\r\n                    }\r\n                    else {\r\n                        try {\r\n                            var data = JSON.parse(sjcl.decrypt(password, rec.item(0).Token));\r\n\r\n                            if (!!rec.item(0).Info)\r\n                                data = JSON.parse(rec.item(0).Info);\r\n\r\n                            delete data.Password;\r\n                            delete data.PosName;\r\n\r\n                            deferred.resolve({ data: data });\r\n                        }\r\n                        catch (ex) {\r\n                            isErr = true;\r\n                        }\r\n                    }\r\n\r\n                    if (isErr)\r\n                        deferred.reject(gettextCatalog.getString(\"The username/password combination is incorrect or you have exceeded the number of allowed login attempts. Please try to recover the password using the 'Forgot your password' link.\") + (!configService.isOnline ? gettextCatalog.getString(\"Connect to the network and try again.\") : ''));\r\n\r\n                });\r\n            }, function (err) {\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // encrypt and save login info\r\n        this.saveLogin = function (data) {\r\n            var password = data.Password;\r\n            var pinToken = data.PinToken;\r\n            delete data.PinToken;\r\n            delete data.Password;\r\n            var ciphertext = sjcl.encrypt(password, JSON.stringify(data));\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT OR REPLACE INTO logins(PosName,UserName,Token,PinToken, Info, lastModified) VALUES (?,?,?,?,?,datetime())',\r\n                    [data.PosName, data.UserName, ciphertext, pinToken, JSON.stringify(data)]);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            }, function () {\r\n                deferred.resolve(data);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.savePin = function (pinToken) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('update logins set PinToken=?, lastModified=datetime() where PosName=? and UserName=?',\r\n                    [pinToken, configService.posName, configService.userName]);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            }, function () {\r\n                deferred.resolve(true);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.saveUserOutlets = function (data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from outlets where PosName=? and UserID=?', [configService.lastDearPosName, configService.loginUserID],\r\n                    function (tx, results) {\r\n                        $.each(data.Outlets, function (idx, el) {\r\n\r\n                            var packed = JSON.stringify(el);\r\n                            tx.executeSql('INSERT INTO outlets(PosName,UserID,OutletName,OutletID,Packed,lastModified, Taxes) VALUES (?,?,?,?,?,datetime(),?)',\r\n                                [configService.lastDearPosName, configService.loginUserID, el.OutletName, el.PosOutletID, packed, JSON.stringify(el.tax)]);\r\n                        });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            }, function () {\r\n                deferred.resolve(data);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getUserPosOutletsRegistry = function (userID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Packed from outlets where PosName=? and UserID=?\", [configService.lastDearPosName, userID],\r\n                    function (tx, resultSet) {\r\n                        var arr = [];\r\n                        $.each(helperService.dbRawsToArray(resultSet.rows), function (idx, el) {\r\n                            arr.push(JSON.parse(el.Packed));\r\n                        });\r\n\r\n                        deferred.resolve({ Outlets: arr });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getPosOutlet = function (posOutletID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Packed from outlets where PosName=? and OutletID=? and UserID=?\",\r\n                    [configService.lastDearPosName, posOutletID, configService.loginUserID],\r\n                    function (tx, resultSet) {\r\n                        var arr = [];\r\n                        $.each(helperService.dbRawsToArray(resultSet.rows), function (idx, el) {\r\n                            arr.push(JSON.parse(el.Packed));\r\n                        });\r\n\r\n                        deferred.resolve({ Outlets: arr });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.updateOutletPacked = function (outlet) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                var packed = JSON.stringify(outlet);\r\n                tx.executeSql('UPDATE outlets set Packed =? where PosName=? and OutletID = ?',\r\n                    [packed, configService.lastDearPosName, outlet.PosOutletID]);\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            }, function () {\r\n                deferred.resolve(outlet);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getNextSequence = function (posOutletID, posRegistryID) {\r\n            var THIS = this;\r\n            var valueToReturn = '000000';\r\n            var prm = THIS.getPosOutlet(posOutletID).\r\n                then(function (data) {\r\n                    var outlet = data.Outlets[0];\r\n                    var arr = outlet.Registries;\r\n                    $.each(arr, function (idx, el) {\r\n                        if (el.PosRegistryID === posRegistryID) {\r\n\r\n                            valueToReturn = el.CurrentReceiptNumber;\r\n\r\n                            var intVal = parseInt(valueToReturn);\r\n                            el.CurrentReceiptNumber = helperService.pad(intVal + 1, 6);\r\n\r\n                            return false;\r\n                        }\r\n                    });\r\n                    return THIS.updateOutletPacked(outlet).then(function () {\r\n                        return valueToReturn;\r\n                    });\r\n                });\r\n            return prm;\r\n        };\r\n\r\n        this.setNextSequence = function (posOutletID, posRegistryID, value) {\r\n            var THIS = this;\r\n            //var valueToReturn = '000000';\r\n            var prm = THIS.getPosOutlet(posOutletID).\r\n                then(function (data) {\r\n                    var outlet = data.Outlets[0];\r\n                    var arr = outlet.Registries;\r\n                    $.each(arr, function (idx, el) {\r\n                        if (el.PosRegistryID === posRegistryID) {\r\n                            el.CurrentReceiptNumber = value;\r\n                            return false;\r\n                        }\r\n                    });\r\n                    return THIS.updateOutletPacked(outlet).then(function () {\r\n                        return true;\r\n                    });\r\n                });\r\n            return prm;\r\n        };\r\n\r\n        this.getHideUsersAssignedToAllLocations = function () {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select * from settings where Name = ?\",\r\n                    ['hideUsersAssignedToAllLocations'], function (tx, res) {\r\n                        var r = helperService.dbRawsToArray(res.rows)[0];\r\n                        deferred.resolve(r);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        }\r\n\r\n        this.setHideUsersAssignedToAllLocations = function (value) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES ('hideUsersAssignedToAllLocations',?,datetime())\",\r\n                    [value]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;                       \r\n        }\r\n\r\n        this.refreshProducts = function (data) {\r\n            var deferred = $q.defer();\r\n            console.time('refreshProducts: start transaction');\r\n\r\n            this.db.transaction(function (tx) {\r\n//                console.timeEnd('refreshProducts: start transaction');\r\n                // clear products table and replace data from new array for current pos.\r\n//                console.time('refreshProducts: delete');\r\n                tx.executeSql(\"delete from products\");\r\n//                console.timeEnd('refreshProducts: delete');\r\n\r\n                // save new pos identification\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['ProductsPosName', configService.lastDearPosName]);\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['ApplicationKey', configService.applicationKey]);\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['ProductsHash', data.hash]);\r\n\r\n            //    console.time('refreshProducts: remove product duplicates');\r\n\r\n                data.arr = helperService.uniqueBy(data.arr, \"productID\");\r\n            //    console.timeEnd('refreshProducts: remove product duplicates');\r\n\r\n            //    console.time('refreshProducts: insert products');\r\n\r\n                $.each(data.arr, function (idx, el) {\r\n                    // format tags, excluding all spaces between them\r\n                    if(el.tags) {\r\n                        var tg = el.tags.split(\",\").map(function(t) {\r\n                            return t.trim();\r\n                          });\r\n\r\n                        el.tags = tg.join(',');\r\n                    }\r\n\r\n                    tx.executeSql('INSERT INTO products(ProductID, ProductCode, OutletSKU, Name, Barcode, Family, FamilyID, Category, ' +\r\n                        'CategoryID, DiscountName, DiscountID, Price, Option1, Option2, Option3, Discounts, Taxes, ' +\r\n                        'LoyaltyEarning, Option1Name, Option2Name, Option3Name, ImageID, FamilyImageID,Tags,BrandID, ' +\r\n                        'Brand, ProductShortDescription, FamilyShortDescription, StocktakeLocked, ProductType, CostingMethod,' + \r\n                        'CF1, CF2, CF3, CF4, CF5, CF6, CF7, CF8, CF9, CF10, ExtraInfo) VALUES ' +\r\n                        '(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?)',\r\n                        [el.productID || null, el.productCode == null ? '' : el.productCode, el.outletSKU || null, el.name || null, el.barcode || null, el.productFamilyName || null, el.productFamilyID || null, el.category || null, el.categoryID || null,\r\n                        el.discountName || null, el.discountID || null, el.price || 0, el.option1 || null, el.option2 || null, el.option3 || null, JSON.stringify(el.discountLines), JSON.stringify(el.tax || null),\r\n                        el.loyaltyEarning, el.productFamilyOption1Name || null, el.productFamilyOption2Name || null, el.productFamilyOption3Name || null,\r\n                        el.imageID || null, el.familyImageID || null, el.tags || null, el.brandID || null, el.brand || null, el.productShortDescription || null, el.familyShortDescription || null,\r\n                        el.stocktakeLocked || null, el.productType || null, el.costingMethod || null,\r\n                        el.cF1 || null, el.cF2 || null, el.cF3 || null, el.cF4 || null, el.cF5 || null, el.cF6 || null, el.cF7 || null, el.cF8 || null, el.cF9 || null, el.cF10 || null,\r\n                        JSON.stringify({\r\n                            Price1: el.price1 || 0,\r\n                            Price2: el.price2 || 0,\r\n                            Price3: el.price3 || 0,\r\n                            Price4: el.price4 || 0,\r\n                            Price5: el.price5 || 0,\r\n                            Price6: el.price6 || 0,\r\n                            Price7: el.price7 || 0,\r\n                            Price8: el.price8 || 0,\r\n                            Price9: el.price9 || 0,\r\n                            Price10: el.price10 || 0\r\n                        })]);\r\n                });\r\n\r\n                deferred.resolve(data.arr);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        const CHUNCK_SIZE = 100;\r\n\r\n        this.refreshCustomers = function (data, isPartial = false) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n\r\n            const preparePromise = $q.defer();\r\n            if (!isPartial) {\r\n                this.db.transaction(function (tx) {\r\n                    // clear customer table and replace data from new array for current pos.\r\n                    console.time('refreshCustomers: prepare inserting');\r\n                    tx.executeSql(\"delete from customers\");\r\n    \r\n                    // save new pos identification\r\n                    tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                        ['CustomersPosName', configService.lastDearPosName]);\r\n                    tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                        ['ApplicationKey', configService.applicationKey]);\r\n                    tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                        ['CustomerHash', data.hash]);\r\n                        console.timeEnd('refreshCustomers: prepare inserting');\r\n                    preparePromise.resolve();\r\n                }, function (err) {\r\n                    preparePromise.reject(err);\r\n                });\r\n            } else {\r\n                this.db.transaction(function (tx) {\r\n                    // clear customer table and replace data from new array for current pos.\r\n                    console.time('refreshCustomers: prepare inserting');\r\n                    var ids = data.arr.map(function(el) {\r\n                        return el.id;\r\n                    });\r\n                    var placeholders = ids.map(function () {\r\n                        return '?'\r\n                    }).join(',');\r\n                    tx.executeSql('delete from customers where id in (' + placeholders + ')', ids);\r\n                    console.timeEnd('refreshCustomers: prepare inserting');\r\n                    preparePromise.resolve();\r\n                }, function (err) {\r\n                    preparePromise.reject(err);\r\n                });\r\n            }\r\n            \r\n            preparePromise.promise.then(function () {\r\n                console.time('refreshCustomers: inserting');\r\n                return THIS.db.executeChunk(CHUNCK_SIZE, data.arr, function (tx, el) {\r\n                    tx.executeSql('INSERT INTO customers(ID, Name, Phone, MobilePhone, Email, EnableLoyaltyPoints,Discounts,MatrixDiscounts, Discount, Addresses, Taxes, Account, CreditLimit, IsOnCreditHold, PriceTier) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',\r\n                    [el.id, el.name, el.phone, el.mobilePhone, el.email, el.enableLoyaltyPoints, JSON.stringify(el.discounts), JSON.stringify(el.matrixDiscounts), el.discount,\r\n                    JSON.stringify(el.addresses),\r\n                    JSON.stringify({\r\n                        effectivePercentInclusive: el.effectivePercentInclusive,\r\n                        effectivePercentExclusive: el.effectivePercentExclusive,\r\n                        ruleID: el.taxRuleID\r\n                    }),\r\n                    !!el.account ? el.account : 0,\r\n                    !!el.creditLimit ? el.creditLimit : 0,\r\n                        el.isOnCreditHold,\r\n                    el.priceTier]);\r\n                }).then(function () {\r\n                    console.timeEnd('refreshCustomers: inserting');\r\n                    deferred.resolve(data.arr);\r\n                }).catch(function (err) {\r\n                    deferred.reject(err);\r\n                    errorService.showError(err.message);\r\n                });\r\n            }).catch(function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            \r\n            return deferred.promise;\r\n        };\r\n\r\n        this.checkProductsOld = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select Value from settings where Name='ProductsPosName'\", [],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0 ||\r\n                            resultSet.rows.item(0).Value !== configService.lastDearPosName) {\r\n                            deferred.resolve(true);\r\n                        }\r\n                        else {\r\n                            tx.executeSql(\"SELECT ((strftime('%s','now') - strftime('%s',lastModified))/60.0/60.0/24.0) as days from settings where Name='ProductsHash'\", [],\r\n                                function (tx, resultSet) {\r\n                                    if (resultSet.rows.length === 0 ||\r\n                                        Math.floor(resultSet.rows.item(0).days) > 0)\r\n                                        deferred.resolve(true);\r\n                                    else\r\n                                        deferred.resolve(false);\r\n                                });\r\n                        }\r\n                    });\r\n\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.checkCustomersOld = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select Value from settings where Name='CustomersPosName'\", [],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0 ||\r\n                            resultSet.rows.item(0).Value !== configService.lastDearPosName) {\r\n                            deferred.resolve(true);\r\n                        }\r\n                        else {\r\n                            tx.executeSql(\"SELECT ((strftime('%s','now') - strftime('%s',lastModified))/60.0/60.0/24.0) as days from settings where Name='CustomerHash'\", [],\r\n                                function (tx, resultSet) {\r\n                                    if (resultSet.rows.length === 0 ||\r\n                                        Math.floor(resultSet.rows.item(0).days) > 0)\r\n                                        deferred.resolve(true);\r\n                                    else\r\n                                        deferred.resolve(false);\r\n                                });\r\n                        }\r\n                    });\r\n\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getProductsHash = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(null);\r\n            }\r\n            else {\r\n                this.db.readTransaction(function (tx) {\r\n                    tx.executeSql(\"SELECT Value as hash from settings where Name='ProductsHash'\", [],\r\n                        function (tx, resultSet) {\r\n                            if (resultSet.rows.length > 0)\r\n                                deferred.resolve(resultSet.rows.item(0).hash);\r\n                            else\r\n                                deferred.resolve(null);\r\n                        });\r\n                }, function (err) {\r\n                    deferred.reject(err);\r\n                    errorService.showError(err.message);\r\n                });\r\n            }\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getCustomersHash = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(null);\r\n            }\r\n            else {\r\n                this.db.readTransaction(function (tx) {\r\n                    tx.executeSql(\"SELECT Value as hash from settings where Name='CustomerHash'\", [],\r\n                        function (tx, resultSet) {\r\n                            if (resultSet.rows.length > 0)\r\n                                deferred.resolve(resultSet.rows.item(0).hash);\r\n                            else\r\n                                deferred.resolve(null);\r\n                        });\r\n                }, function (err) {\r\n                    deferred.reject(err);\r\n                    errorService.showError(err.message);\r\n                });\r\n            }\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.extractCurrentQuickKeyInfo = function (qkey) {\r\n            if (!configService.quickKeyTemplateID)\r\n                return null;\r\n\r\n            var qdataTemp = JSON.parse(configService.quickKeyData);\r\n            var qdata = null;\r\n            if (!!qdataTemp) {\r\n\r\n                if (!qkey) {\r\n                    qdata = qdataTemp.filter(function (el) { return el.labelID === qkey; })[0];\r\n                    if (!qdata)\r\n                        return null;\r\n\r\n                    if (!!qdata.brands && qdata.brands.length > 0) {\r\n                        qdata.brands = helperService.trimArray(qdata.brands);\r\n                    }\r\n                    if (!!qdata.categories && qdata.categories.length > 0) {\r\n                        qdata.categories = helperService.trimArray(qdata.categories);\r\n                    }\r\n                    if (!!qdata.tags && qdata.tags.length > 0) {\r\n                        qdata.tags = helperService.trimArray(qdata.tags);\r\n                    }\r\n\r\n                    if (!qdata.groupingOperator)\r\n                        qdata.groupingOperator = 'OR';\r\n                }\r\n            }\r\n\r\n            return qdata;\r\n        };\r\n\r\n        this.getLiveSearchProducs = function (data) {\r\n            var deferred = $q.defer();\r\n            if (data && data.length > 0) {\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            }\r\n\r\n            console.time('getLiveSearchProducs; transaction start');\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select ProductID as productID, ProductCode as productCode, OutletSKU as outletSKU, Name as name, Price as price from products where FamilyID is null or ProductID <> FamilyID\", [],\r\n                    function (tx, res) {\r\n                        deferred.resolve(helperService.dbRawsToArray(res.rows));\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // ProductCode, Name, Barcode, Family\r\n        this.search = function (barcode, text, qkeytemplate, qkey, productID) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from productsSearchTemp');\r\n\r\n                var command = null;\r\n                var c;\r\n                if (!!configService.quickKeyTemplateID && qkeytemplate == configService.quickKeyTemplateID) {\r\n                    var qdata = helperService.extractCurrentQuickKeyInfo(qkey);\r\n                    if (!qdata) {\r\n                        deferred.reject('Invalid QuickKey data');\r\n                        return;\r\n                    }\r\n                    else {\r\n                        var groupingOperator = (!qdata || qdata.groupingOperator === 'OR') ? 'or' : 'and';\r\n                        if(groupingOperator === 'and')\r\n                            command = \"insert into productsSearchTemp SELECT * from products where 1=1\";\r\n                        else\r\n                            command = \"insert into productsSearchTemp SELECT * from products where 1=0\";\r\n\r\n                        if (!!qdata.brands && qdata.brands.length > 0) {\r\n                            var brands = [];\r\n                            angular.forEach(qdata.brands, function (el) {\r\n                                brands.push(helperService.escapeString(el));\r\n                            });\r\n\r\n                            c = \"Brand in('\" + brands.join(\"','\") + \"')\";\r\n                            command += \" \" + groupingOperator + \" (\" + c + \")\";\r\n                        }\r\n                        if (!!qdata.categories && qdata.categories.length > 0) {\r\n                            var categories = [];\r\n                            angular.forEach(qdata.categories, function (el) {\r\n                                categories.push(helperService.escapeString(el));\r\n                            });\r\n\r\n                            c = \"Category in('\" + categories.join(\"','\") + \"')\";\r\n                            command += \" \" + groupingOperator + \" (\" + c + \")\";\r\n                        }\r\n                        if (!!qdata.tags && qdata.tags.length > 0) {\r\n                            c = \"\";\r\n                            angular.forEach(qdata.tags, function (el) {\r\n                                var sch = el.trim();\r\n                                if (c.length > 0)\r\n                                    c += \" or \";\r\n//                                    c += \"tags like '%\" + helperService.escapeString(el) + \"%'\";\r\n                                    c += \" tags like '\" + helperService.escapeString(sch) + \"'\";\r\n                                    c += \" or tags like '%,\" + helperService.escapeString(sch) + \"'\";\r\n                                    c += \" or tags like '\" + helperService.escapeString(sch) + \",%'\";\r\n                                    c += \" or tags like '%,\" + helperService.escapeString(sch) + \",%'\";\r\n                            });\r\n\r\n                            command += \" \" + groupingOperator + \" (\" + c + \")\";\r\n                        }\r\n\r\n                        tx.executeSql(command, [],\r\n                            function (tx, res) {\r\n                                deferred.resolve(res.rowsAffected);\r\n                            });\r\n                    }\r\n                }\r\n                else {\r\n                    if (!!productID) {\r\n                        command = \"insert into productsSearchTemp SELECT * from products where ProductID = ? and (FamilyID is null or FamilyID <> ?)\";\r\n                        tx.executeSql(command,\r\n                            [productID, productID], function (tx, res) {\r\n                                deferred.resolve(res.rowsAffected);\r\n                            });\r\n                    }\r\n                    else {\r\n                        // extended search like in Cin7 Core\r\n                        var searchArr = filterService.splitSearchText(text);\r\n\r\n                        // check barcode for object\r\n                        var useWeightBasedSearch = false;\r\n                        var useOutletSKU = false;\r\n                        var outletSKU = null;\r\n                        if (barcode && typeof (barcode) !== 'string') {\r\n                            useOutletSKU = barcode.UseOutletSKU;\r\n                            useWeightBasedSearch = true;\r\n                            outletSKU = barcode.SKU;\r\n                        }\r\n\r\n                        if (!useWeightBasedSearch) {\r\n\r\n                        command = \"insert into productsSearchTemp SELECT * from products where\" +\r\n                                  \" Barcode like '\" + text + \"'\";\r\n                            if(barcode) {\r\n                                command +=  \" OR CF1 = '\" + barcode + \"'\" +\r\n                                            \" OR CF2 = '\" + barcode + \"'\" +\r\n                                            \" OR CF3 = '\" + barcode + \"'\" +\r\n                                            \" OR CF4 = '\" + barcode + \"'\" +\r\n                                            \" OR CF5 = '\" + barcode + \"'\" +\r\n                                            \" OR CF6 = '\" + barcode + \"'\" +\r\n                                            \" OR CF7 = '\" + barcode + \"'\" +\r\n                                            \" OR CF8 = '\" + barcode + \"'\" +\r\n                                            \" OR CF9 = '\" + barcode + \"'\" +\r\n                                            \" OR CF10 = '\" + barcode + \"'\";\r\n                            }\r\n\r\n                            command += THIS.formatLikePart(\"ProductCode\", searchArr) +\r\n                            THIS.formatLikePart(\"Name\", searchArr) +\r\n                            THIS.formatLikePart(\"Family\", searchArr);\r\n                        } else {\r\n                            command = \"insert into productsSearchTemp SELECT * from products where\" +\r\n                            \" \"+(useOutletSKU ? \"OutletSKU\" : \"ProductCode\")+\" like '\" + outletSKU + \"'\";\r\n                        }\r\n\r\n                        tx.executeSql(command,\r\n                             [],function (tx, res) {\r\n                                deferred.resolve(res.rowsAffected);\r\n                            });\r\n                    }\r\n                }\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.formatLikePart = function (field, searchArray) {\r\n            var res = \" OR \";\r\n            if (searchArray.length === 0) res = \" \";\r\n            else if (searchArray.length === 1) res += field + \" like '%\" + searchArray[0] + \"%'\";\r\n            else {\r\n                res += \" (\";\r\n                var first = true;\r\n\r\n                angular.forEach(searchArray, function (el) {\r\n                    if (!first) res += \" AND \";\r\n                    else first = false;\r\n                    res += field + \" like '%\" + el + \"%'\";\r\n                });\r\n\r\n                res += \") \";\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        this.getProductByID = function (productID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select * from(\" +\r\n                    \"select 1 as cnt, Family, Name, Option1, Option2, Option3, ProductID, 0 isFamily, Discounts, Price, Taxes, LoyaltyEarning, Option1Name, Option2Name, Option3Name, \" +\r\n                    \" ProductCode as Sku, Barcode as BarCode, ImageID, ProductType, CostingMethod, StocktakeLocked from products where ProductID=?\" +\r\n                    \" ) \",\r\n                    [productID], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing arror\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n                        var dataObj = {};\r\n                        dataObj.data = orderBy(data, 'Name', false);\r\n                        deferred.resolve(dataObj);\r\n                    });\r\n                    \r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.familySearch = function (familyID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select * from productsSearchTemp where FamilyID = ?\",\r\n                    [familyID], function (tx, res) {\r\n                        var r = helperService.dbRawsToArray(res.rows);\r\n                        deferred.resolve(r);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n\r\n            //this.db.transaction(function (tx) {\r\n            //    tx.executeSql(\"delete from productsSearchTemp where FamilyID <> ? or FamilyID is null\",\r\n            //        [familyID], function (tx, res) {\r\n            //            deferred.resolve(res.rowsAffected);\r\n            //        });\r\n            //}, function (err) {\r\n            //    deferred.reject(err);\r\n            //    errorService.showError(err.message);\r\n            //});\r\n\r\n            //return deferred.promise;\r\n        };\r\n\r\n        // trying to group by family before\r\n        this.getSearchCount = function () {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select count(*) as cnt from(\" +\r\n                    \" select count(Family) as cnt, Family, Family as Name, null as Option1, null as Option2, null as Option3, Option1Name, Option2Name, Option3Name, ImageID, FamilyImageID from productsSearchTemp where Family is not null group by Family\" +\r\n                    \" union select 1 as cnt, Family, Name, Option1, Option2, Option3, Option1Name, Option2Name, Option3Name, ImageID, FamilyImageID from productsSearchTemp where Family is null\" +\r\n                    \" )\",\r\n                    [], function (tx, res) {\r\n                        deferred.resolve(res.rows.item(0).cnt);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getSearchPage = function (page, pageSize, productID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                var q = '';\r\n\r\n                if (!!productID) {\r\n                    q = \"select 1 as cnt,             Family, FamilyID, Name,                   Option1,         Option2,         Option3,             ProductID, 0 isFamily,      Discounts,      Price,      Taxes,      LoyaltyEarning, Option1Name, Option2Name, Option3Name, ProductCode as Sku, Barcode as BarCode, ImageID, FamilyImageID,      Tags,      BrandID,      CategoryID, Brand, ProductShortDescription, FamilyShortDescription, StocktakeLocked, ProductType, CostingMethod, ExtraInfo, CF1, CF2, CF3, CF4, CF5, CF6, CF7, CF8, CF9, CF10 from productsSearchTemp where ProductID='\" + productID + \"'\";\r\n                }\r\n                else {\r\n                    // q = \" select * from(\" +\r\n                    // \"       select count(Family) as cnt, Family, Family as Name, null as Option1, null as Option2, null as Option3, FamilyID as ProductID, 1 isFamily, null Discounts, null Price, null Taxes, null LoyaltyEarning, Option1Name, Option2Name, Option3Name,        null as Sku, null as BarCode, ImageID, FamilyImageID, null Tags, null BrandID, null CategoryID, Brand, FamilyShortDescription as ProductShortDescription, FamilyShortDescription, 0 as StocktakeLocked, null as ProductType, null as CostingMethod from productsSearchTemp where Family is not null group by Family\" +\r\n                    // \" union select 1 as cnt,             Family, Name,                   Option1,         Option2,         Option3,             ProductID, 0 isFamily,      Discounts,      Price,      Taxes,      LoyaltyEarning, Option1Name, Option2Name, Option3Name, ProductCode as Sku,         Barcode, ImageID, FamilyImageID,      Tags,      BrandID,      CategoryID, Brand, ProductShortDescription, FamilyShortDescription, StocktakeLocked, ProductType, CostingMethod from productsSearchTemp where Family is null\" +\r\n                    // \" ) \";\r\n\r\n                    q = \" select * from(\" +\r\n                        \"       select count(Family) as cnt, Family, MIN(Name) as Name, MIN(Option1) as Option1, MIN(Option2) as Option2, MIN(Option3) as Option3, MIN(FamilyID) as FamilyID, MIN(ProductID) as ProductID, 1 isFamily, MIN(Discounts) as Discounts, MIN(Price) as Price, MIN(Taxes) as Taxes, MIN(LoyaltyEarning) as LoyaltyEarning, MIN(Option1Name) as Option1Name, MIN(Option2Name) as Option2Name, MIN(Option3Name) as Option3Name, MIN(ProductCode) as Sku, MIN(BarCode) as BarCode, MIN(ImageID) as ImageID, MIN(FamilyImageID) as FamilyImageID, MIN(Tags) as Tags, MIN(BrandID) as BrandID, MIN(CategoryID) as CategoryID, MIN(Brand) as Brand, MIN(ProductShortDescription) as ProductShortDescription, MIN(FamilyShortDescription) as FamilyShortDescription, MIN(StocktakeLocked) as StocktakeLocked, MIN(ProductType) as ProductType, MIN(CostingMethod) as CostingMethod, MIN(ExtraInfo) as ExtraInfo, MIN(CF1) as CF1, MIN(CF2) as CF2, MIN(CF3) as CF3, MIN(CF4) as CF4, MIN(CF5) as CF5, MIN(CF6) as CF6, MIN(CF7) as CF7, MIN(CF8) as CF8, MIN(CF9) as CF9, MIN(CF10) as CF10 from productsSearchTemp where Family is not null group by Family\" +\r\n                        \" union select 1 as cnt,             Family,              Name,                 Option1,                 Option2,                 Option3,                  FamilyID,                   ProductID, 0 isFamily,                   Discounts,               Price,               Taxes,                        LoyaltyEarning,                     Option1Name,                     Option2Name,                     Option3Name,      ProductCode as Sku,                 Barcode,                 ImageID,                       FamilyImageID,              Tags,                 BrandID,                    CategoryID,               Brand,                                 ProductShortDescription,                                FamilyShortDescription,                         StocktakeLocked,                     ProductType,                       CostingMethod,                   ExtraInfo,             CF1,             CF2,             CF3,             CF4,             CF5,             CF6,             CF7,             CF8,             CF9,              CF10 from productsSearchTemp where Family is null\" +\r\n                        \" ) \";\r\n\r\n                }\r\n\r\n                tx.executeSql(\r\n                    q,\r\n                    [], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing error\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n\r\n                        // if we have real family, do some replacements\r\n                        angular.forEach(data, function (el) {\r\n                            if (el.isFamily == 1) {\r\n                                if (el.cnt != 1) {\r\n                                    el.Name = el.Family;\r\n                                    el.ProductShortDescription = el.FamilyShortDescription;\r\n                                    el.ProductID = el.FamilyID;\r\n                                } else {\r\n                                    el.isFamily = 0; // else reset family flag\r\n                                }\r\n                            }\r\n                        });\r\n\r\n                        var dataObj = {};\r\n                        dataObj.page = page;\r\n                        dataObj.data = orderBy(data, 'Name', false);\r\n                        dataObj.data = dataObj.data.slice(page * pageSize, pageSize * (page + 1));\r\n                        angular.forEach(dataObj.data, function(el) {\r\n                            if(el.ExtraInfo) {\r\n                                var s = JSON.parse(el.ExtraInfo);\r\n                                s.CF1 = el.CF1;\r\n                                s.CF2 = el.CF2;\r\n                                s.CF3 = el.CF3;\r\n                                s.CF4 = el.CF4;\r\n                                s.CF5 = el.CF5;\r\n                                s.CF6 = el.CF6;\r\n                                s.CF7 = el.CF7;\r\n                                s.CF8 = el.CF8;\r\n                                s.CF9 = el.CF9;\r\n                                s.CF10 = el.CF10;\r\n                                el.ExtraInfo = JSON.stringify(s);\r\n                            }\r\n                        });\r\n                        \r\n                        deferred.resolve(dataObj);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getFamilySearchCount = function () {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select count(*) as cnt from productsSearchTemp\",\r\n                    [], function (tx, res) {\r\n                        deferred.resolve(res.rows.item(0).cnt);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getFamilySearchPage = function (page, pageSize) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select 1 as cnt, Family, Name, Option1, Option2, Option3, ProductID, 0 isFamily, Discounts, Price, Taxes, LoyaltyEarning, Option1Name, Option2Name, Option3Name, ImageID, FamilyImageID from productsSearchTemp \",\r\n                    [], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing arror\r\n                        var data = helperService.dbRawsToArray(res.rows); //JSON.parse(JSON.stringify(res.rows));\r\n                        var dataObj = {};\r\n                        dataObj.page = page;\r\n                        dataObj.data = orderBy(data, 'Name', false);\r\n                        dataObj.data = dataObj.data.slice(page * pageSize, pageSize * (page + 1));\r\n                        deferred.resolve(dataObj);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.addOfflineSale = function (sale, info) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql(\"INSERT OR REPLACE INTO offSales(PosName,SaleID,StatusID,Packed, InfoPacked,lastModified, OperationID) VALUES (?,?,?,?,?,datetime(),?)\",\r\n                    [configService.lastDearPosName, sale.ID, info.statusID, JSON.stringify(sale), JSON.stringify(info), sale.OperationID]);\r\n\r\n                // check coupon and add it to coupon db\r\n                if (sale.selectedCouponID) {\r\n                    tx.executeSql('INSERT or replace into SaleCoupon(ID, DealID, CouponCode) VALUES (?,?,?)',\r\n                        [sale.selectedCouponID, sale.selectedCouponDealID, sale.selectedCoupon]);\r\n                }\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.removeSale = function (saleID, statusID, operationID) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                if (!operationID) {\r\n                    tx.executeSql(\"delete from offSales where SaleID=?\" + ((!!statusID && statusID.length > 0) ? ' and StatusID=\"' + statusID + '\"' : ''),\r\n                        [saleID]);\r\n                }\r\n                else {\r\n                    tx.executeSql(\"delete from offSales where OperationID=?\" + ((!!statusID && statusID.length > 0) ? ' and StatusID=\"' + statusID + '\"' : ''),\r\n                        [operationID]);\r\n                }\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.removeSales = function (posName, statusID = undefined, exeptStatusID = undefined) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from offSales where PosName=\"' + posName + \r\n                    (!!statusID && statusID.length ? '\" and StatusID=\"' + statusID : '') +\r\n                    (!!exeptStatusID && exeptStatusID.length ? '\" and StatusID <> ' + '\"' + exeptStatusID + '\"': ''));\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.prepareLoadOfflineSalesQuery = function (posName, saleID, statusID, exeptStatusID, count) {\r\n            var s = \" where StatusID <> \\\"errorHistory\\\"\" + \r\n                ((!!posName && posName.length > 0) ? ' and PosName=\"' + posName + '\"' : '') +\r\n                ((!!saleID && saleID.length > 0) ? ' and SaleID=\"' + saleID + '\"' : '') +\r\n                ((!!statusID && statusID.length > 0) ? ' and StatusID=\"' + statusID + '\"' : '') +\r\n                ((!!exeptStatusID && exeptStatusID.length > 0) ? ' and StatusID<>\"' + exeptStatusID + '\"' : '') +\r\n                \" order by lastModified desc\" +\r\n                (!!count ? \" LIMIT \" + count : \"\");\r\n\r\n            return s;\r\n        };\r\n\r\n        this.loadOfflineSalesCount = function (posName, saleID, statusID, exeptStatusID) {\r\n            var deferred = $q.defer();\r\n            var query = \" select count(*) as cnt from offSales\" + this.prepareLoadOfflineSalesQuery(posName, saleID, statusID, exeptStatusID);\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [], function (tx, res) {\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n                        deferred.resolve(!!data && data.length > 0 ? data[0].cnt : 0);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // return all records in offline sales. If posName is not null then filter by posName\r\n        this.loadOfflineSales = function (posName, saleID, statusID, exeptStatusID, count) {\r\n            var deferred = $q.defer();\r\n            var query = \" select * from offSales\" + this.prepareLoadOfflineSalesQuery(posName, saleID, statusID, exeptStatusID, count);\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing arror\r\n                        var data = helperService.dbRawsToArray(res.rows); //JSON.parse(JSON.stringify(res.rows));\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadOfflineSalesErrorHistory = function (posName) {\r\n            var deferred = $q.defer();\r\n            var query = ' select * from offSales' + \" \" + \r\n            ' where StatusID = \"errorHistory\"' +\r\n            ((!!posName && posName.length > 0) ? ' and PosName=\"' + posName + '\"' : '') +\r\n            ' order by lastModified desc';\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing arror\r\n                        var data = helperService.dbRawsToArray(res.rows); //JSON.parse(JSON.stringify(res.rows));\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        /**\r\n         * save order status change\r\n         */\r\n        this.trackOrder = function (orderID, registryCloseID, status) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT INTO registryOrders(OrderID, RegistryCloseID, Status, CreatedDate) VALUES (?,?,?,datetime())',\r\n                    [orderID, registryCloseID, status],\r\n                    function (tx, res) {\r\n                        deferred.resolve(true);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.trackOrderPayments = function (orderID, refundIDs, paymentIDs) {\r\n            var deferred = $q.defer();\r\n            var refundsJson = refundIDs && refundIDs.length > 0 ? JSON.stringify(refundIDs) : null;\r\n            var paymentsJson = paymentIDs && paymentIDs.length > 0 ? JSON.stringify(paymentIDs) : null;\r\n            \r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT INTO orderPayments(OrderID, Refunds, Payments, CreatedDate) VALUES (?,?,?,datetime())',\r\n                    [orderID, refundsJson, paymentsJson],\r\n                    function (tx, res) {\r\n                        deferred.resolve(true);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        /**\r\n         * get orders for registry close\r\n         * @returns {Promise<Array<{OrderID: string, Status: string, CreatedDate: string}>>}\r\n         */\r\n        this.getOrdersForCloseRegistry = function (closeRegistryID) {\r\n            var deferred = $q.defer();\r\n            var query = 'SELECT OrderID, Status, CreatedDate FROM registryOrders WHERE RegistryCloseID = ? ORDER BY CreatedDate ASC';\r\n            \r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [closeRegistryID],\r\n                    function (tx, res) {\r\n                        var results = [];\r\n                        for (var i = 0; i < res.rows.length; i++) {\r\n                            results.push(res.rows.item(i));\r\n                        }\r\n                        deferred.resolve(results);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        /**\r\n         * get orphan orders (where OrderID or RegistryCloseID is all zeros)\r\n         * @returns {Promise<Array<{OrderID: string, RegistryCloseID: string, Status: string, CreatedDate: string}>>}\r\n         */\r\n        this.getOrphanOrders = function () {\r\n            // Reuse getOrdersForCloseRegistry with zero GUID\r\n            return this.getOrdersForCloseRegistry('00000000-0000-0000-0000-000000000000');\r\n        };\r\n\r\n        /**\r\n         * get order payments/refunds for registry close\r\n         * @returns {Promise<Array<{OrderID: string, Refunds: string, Payments: string, CreatedDate: Date}>>}\r\n         */\r\n        this.getOrderPaymentsForCloseRegistry = function (closeRegistryID) {\r\n            var deferred = $q.defer();\r\n            var query = 'SELECT op.OrderID, op.Refunds, op.Payments, op.CreatedDate ' +\r\n                       'FROM orderPayments op ' +\r\n                       'INNER JOIN registryOrders ro ON op.OrderID = ro.OrderID ' +\r\n                       'WHERE ro.RegistryCloseID = ? ' +\r\n                       'ORDER BY op.CreatedDate ASC';\r\n            \r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [closeRegistryID],\r\n                    function (tx, res) {\r\n                        var results = [];\r\n                        for (var i = 0; i < res.rows.length; i++) {\r\n                            results.push(res.rows.item(i));\r\n                        }\r\n                        deferred.resolve(results);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getReceiptTemplate = function (receiptID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Template, EmailTemplate, EmailSubject from receipts where ReceiptID=?\", [receiptID],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0) {\r\n                            deferred.reject(gettextCatalog.getString(\"Receipt template not found.\"));\r\n                        }\r\n                        else {\r\n                            var rows = helperService.dbRawsToArray(resultSet.rows);\r\n                            var template = rows[0].Template;\r\n                            var emailTemplate = rows[0].EmailTemplate;\r\n                            var emailSubject = rows[0].EmailSubject;\r\n                            deferred.resolve({ data: { Template: template, EmailTemplate: emailTemplate, EmailSubject: emailSubject, TemplateID: receiptID } });\r\n                        }\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(gettextCatalog.getString(\"Receipt template not found.\"));\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.saveReceiptTemplate = function (receiptID, data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT OR REPLACE INTO receipts(ReceiptID, Template, EmailTemplate, EmailSubject) VALUES (?,?,?,?)', [receiptID, data.Template, data.EmailTemplate, data.EmailSubject]);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            }, function () {\r\n                deferred.resolve(data);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getLabelTemplate = function (receiptID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Template from labels where ReceiptID=?\", [receiptID],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0) {\r\n                            deferred.reject(gettextCatalog.getString(\"Receipt template not found.\"));\r\n                        }\r\n                        else {\r\n                            var rows = helperService.dbRawsToArray(resultSet.rows);\r\n                            var template = rows[0].Template;\r\n                            deferred.resolve({ data: { Template: template } });\r\n                        }\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(gettextCatalog.getString(\"Receipt template not found.\"));\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.saveLabelTemplate = function (receiptID, data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT OR REPLACE INTO labels(ReceiptID, Template) VALUES (?,?)', [receiptID, data.Template]);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            }, function () {\r\n                deferred.resolve(data);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getRegistry = function (outletID, registryID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Packed from outlets where PosName=? and OutletID=?\", [configService.lastDearPosName, outletID],\r\n                    function (tx, resultSet) {\r\n                        var reg = null;\r\n                        $.each(helperService.dbRawsToArray(resultSet.rows), function (idx, el) {\r\n                            var outlet = JSON.parse(el.Packed);\r\n\r\n                            for (var i = 0; i < outlet.Registries.length; i++) {\r\n                                var registry = outlet.Registries[i];\r\n                                if (registry.PosRegistryID === registryID) {\r\n                                    deferred.resolve(registry);\r\n                                }\r\n                            }\r\n                        });\r\n\r\n                        deferred.reject({ message: gettextCatalog.getString(\"Receipt template not found.\") });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.storeEmailReceipt = function (orderID, baseOrderID, email, emailSubject, emailBody, templateID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select 12\", [], function (tx, resultSet) {\r\n                    deferred.resolve({ data: { Result: true } });\r\n                });\r\n            }, function (err) { });\r\n\r\n            return deferred.promise;\r\n\r\n        };\r\n\r\n        this.openRegistry = function (ID, registryID, userName) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql(\"INSERT OR REPLACE INTO closeRegistrySales(ID,RegistryID,OpeningTime,SalesRepresentative,IsActive\" +\r\n                    \", CashExpected,CashCounted,CreditCardExpected,CreditCardCounted,GiftCardExpected,GiftCardCounted,\" +\r\n                    \"LoyaltyExpected,LoyaltyCounted,StoreCreditExpected,StoreCreditCounted,SendedToServer) VALUES (?,?,datetime(),?,?,?,?,?,?,?,?,?,?,?,?,?)\",\r\n                    [ID, registryID, userName, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        \r\n        this.closeRegistry = function (ID, cashCounted, creditCardCounted, giftCardCounted, loyaltyCounted, storeCreditCounted, note, additionals, report) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE closeRegistrySales set IsActive =0, SendedToServer=0, CashCounted = ?, CreditCardCounted = ?, GiftCardCounted = ?,' +\r\n                    ' LoyaltyCounted = ?, StoreCreditCounted = ?, Note = ?, Additionals=?, EndOfDayReport = ?  where ID = ?',\r\n                    [cashCounted, creditCardCounted, giftCardCounted, loyaltyCounted, storeCreditCounted, note,\r\n                        !!additionals ? JSON.stringify(additionals) : null, report,\r\n                        ID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.sendClosecRegistry = function (ID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE closeRegistrySales set SendedToServer =1 where ID = ?',\r\n                    [ID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.sendResetRegistry = function (ID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE closeRegistrySales set SendedToServer =0 where ID = ?',\r\n                    [ID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.updateRegistrySales = function (ID, cashExpected, creditCardExpected, giftCardExpected, loyaltyExpected, storeCreditExpected, prms) {\r\n            var THIS = this;\r\n            var deferred = $q.defer();\r\n            //deferred.resolve(true);\r\n            //return deferred.promise;\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                //tx.executeSql('UPDATE closeRegistrySales set CashExpected = CashExpected+ ?, CreditCardExpected =CreditCardExpected+ ?,' +\r\n                //    ' GiftCardExpected =GiftCardExpected+ ?,' +\r\n                //    ' LoyaltyExpected =LoyaltyExpected+ ?, StoreCreditExpected =StoreCreditExpected+ ?    where ID = ?',\r\n                //             [cashExpected, creditCardExpected, giftCardExpected, loyaltyExpected, storeCreditExpected, ID]);\r\n                tx.executeSql('UPDATE closeRegistrySales set CashExpected = CashExpected+ ?  where ID = ?',\r\n                    [cashExpected, ID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n\r\n            //var THIS = this;\r\n            //return deferred.promise.then(function () {\r\n            //    return THIS.modifyCloseRegistryAdditionalTotals(ID, prms);\r\n            //})\r\n            //.then(function () {\r\n            //    return THIS.sendResetRegistry(ID);\r\n            //});\r\n        };\r\n\r\n        this.getActiveRegistrySales = function (registryID, userName) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            this.db.transaction(function (tx) {\r\n                THIS.registryCleanUp(tx);\r\n                // insert or update sale\r\n                //tx.executeSql('select * from closeRegistrySales where RegistryID = ? and SalesRepresentative = ? and IsActive = 1',\r\n                //             [registryID, userName],\r\n                tx.executeSql('select * from closeRegistrySales where RegistryID = ? and IsActive = 1 order by OpeningTime desc',\r\n                    [registryID],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getClosedRegistries = function (registryID, userName) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            this.db.transaction(function (tx) {\r\n                THIS.registryCleanUp(tx);\r\n                // insert or update sale\r\n                //tx.executeSql('select * from closeRegistrySales where RegistryID = ? and SalesRepresentative = ? and IsActive = 1',\r\n                //             [registryID, userName],\r\n                tx.executeSql('select * from closeRegistrySales where RegistryID = ? and IsActive = 0 order by OpeningTime desc',\r\n                    [registryID],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getRegisterStatisticToProcess = function (count, excludeID) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('select * from  closeRegistrySales where SendedToServer = 0'\r\n                + (!!excludeID ? ' and ID<>\"' + excludeID + '\"' : '')\r\n                + ' order by OpeningTime desc' +\r\n                    (!!count ? \" LIMIT \" + count : \"\"), [],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.removeSendedClosecRegistry = function (ID, registryID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n\r\n                tx.executeSql('delete from closeRegistrySalesAdditionalTotals where CloseRegistrySalesID in (select ID from closeRegistrySales where IsActive = 0 and SendedToServer = 1)',\r\n                    []);\r\n\r\n                tx.executeSql('delete from registryOrders where RegistryCloseID in (select ID from closeRegistrySales where IsActive = 0 and SendedToServer = 1)',\r\n                    []);\r\n\r\n                // delete orphan orders\r\n                tx.executeSql(\"delete from registryOrders where RegistryCloseID = '00000000-0000-0000-0000-000000000000'\",\r\n                    []);\r\n\r\n                tx.executeSql('delete from closeRegistrySales where IsActive = 0 and SendedToServer = 1',\r\n                    []);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.addCashMovement = function (id, closeRegistryID, registryID, userName, amount, reason, operationType) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                if (!reason) {\r\n                    reason = '';\r\n                }\r\n                tx.executeSql(\"INSERT OR REPLACE INTO cashManagement(ID,CloseRegistryID,RegistryID,OperationTime,SalesRepresentative,Reasons\" +\r\n                    \", OperationType,Amount, SendedToServer) VALUES (?,?,?,datetime(),?,?,?,?, 0)\",\r\n                    [id, closeRegistryID, registryID, userName, reason, operationType, amount]);\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getCashMovements = function (closeRegistryID, localOnly) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('select * from  cashManagement where CloseRegistryID = ?' + (localOnly === true ? ' and SendedToServer=0' : '') + ' order by OperationTime desc',\r\n                    [closeRegistryID],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getCashMovementsToSend = function (registryID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('select * from  cashManagement where RegistryID = ? and SendedToServer=0',\r\n                    [registryID],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.removeCashMovements = function (closeRegistryID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from cashManagement where CloseRegistryID = ?',\r\n                    [closeRegistryID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.markCashMovementsAsSent = function (Id) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('update cashManagement set SendedToServer = 1 where ID = ?',\r\n                    [Id]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadCustomers = function (text, page, limit, filters) {\r\n            var deferred = $q.defer();\r\n            page = !page ? 0 : page;\r\n            limit = !limit ? 10 : limit;\r\n\r\n            var customerID = (!!filters && !!filters.CustomerID) ? filters.CustomerID : null;\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql(\"select * from customers\" + (!!customerID ? \" where id='\" + customerID + \"'\" : \"\"),\r\n                    [], function (tx, res) {\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n                        var arr = [];\r\n                        $.each(data, function (idx, el) {\r\n                            var concString = el.Name;\r\n                            concString += \" \" +\r\n                                (el.Phone ? el.Phone + \" \" : \"\") +\r\n                                (el.Email ? el.Email + \" \" : \"\") +\r\n                                (el.MobilePhone ? el.MobilePhone : \"\");\r\n\r\n                            el.EnableLoyaltyPoints = el.EnableLoyaltyPoints === \"true\";\r\n                            el.LoadedFromLocalDb = true;\r\n                            if (text) {\r\n                                if (concString.toLowerCase().indexOf(text.toLowerCase()) !== -1) {\r\n                                    el.Discounts = el.Discounts ? JSON.parse(el.Discounts) : el.Discounts;\r\n                                    el.MatrixDiscounts = el.MatrixDiscounts ? JSON.parse(el.MatrixDiscounts) : el.MatrixDiscounts;\r\n                                    arr.push(el);\r\n                                }\r\n                            } else {\r\n                                el.Discounts = el.Discounts ? JSON.parse(el.Discounts) : el.Discounts;\r\n                                el.MatrixDiscounts = el.MatrixDiscounts ? JSON.parse(el.MatrixDiscounts) : el.MatrixDiscounts;\r\n                                arr.push(el);\r\n                            }\r\n\r\n                            // to not process in offline mode\r\n                            el.Account = 0;\r\n                            el.CreditLimit = 0;\r\n                            el.IsOnCreditHold = el.IsOnCreditHold === 'true';\r\n\r\n                            el.Addresses = el.Addresses && el.Addresses !== \"undefined\" ? JSON.parse(el.Addresses) : el.Addresses;\r\n\r\n                            if(el.Phone || el.Phone ||el.Phone )\r\n                                el.Contacts = [{\r\n                                    Phone:el.Phone,\r\n                                    Email: el.Email,\r\n                                    MobilePhone: el.MobilePhone\r\n                                }];\r\n\r\n                        });\r\n                        const offset = page === 0 || page === null || page === 1 ? 0 : (page - 1) * limit;\r\n                        deferred.resolve({ data: { Customers: arr.slice(offset, offset + limit), Total: data.length } });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.makeErrorOrder = function (orderId) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE offSales set StatusID = \"error\" where SaleID = ?',\r\n                    [orderId]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n\r\n        };\r\n\r\n        this.makeErrorHistoryOrder = function (orderId, err) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE offSales set StatusID = \"errorHistory\", ErrorText = ? where SaleID = ?',\r\n                    [err, orderId]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n\r\n        };\r\n        \r\n        this.getPosDiscounts = function () {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('select * from  PosDiscounts where (DateFrom is null or DateFrom <= datetime()) and (DateTo is null or DateTo >= cast(datetime() as date)) and PosName = ?',\r\n                    [configService.lastDearPosName],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        $.each(data, function (idx, el) {\r\n                            el.targets = JSON.parse(el.targets);\r\n                            el.isFamily = el.isFamily === 'true';\r\n                            el.buyMore = el.buyMore === 'true';\r\n                            el = $.extend(el, JSON.parse(el.ext));\r\n                            delete el.ext;\r\n                        });\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.refreshPosDiscounts = function (newDiscounts) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // clear discounts table and replace data from new array for current pos.\r\n                tx.executeSql(\"delete from PosDiscounts where PosName=?\", [configService.lastDearPosName]);\r\n\r\n                $.each(newDiscounts, function (idx, el) {\r\n                    var ext = {\r\n                        allowCoupons: el.allowCoupons,\r\n                        singleCouponCodeUsage: el.singleCouponCodeUsage,\r\n                        coupons: el.coupons\r\n                    };\r\n\r\n                    tx.executeSql('INSERT INTO PosDiscounts(posName, productID, isFamily, tagName, brandID, categoryID, dealDiscountID, discountID, buyMore, customersGroup, dealID, buyValue, getValue, dateFrom, dateTo,  minValue, maxValue, discountLineType, amount, targets,type,ext)' +\r\n                        ' VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',\r\n                        [configService.lastDearPosName, el.productID, el.isFamily, el.tagName, el.brandID, el.categoryID, el.dealDiscountID, el.discountID, el.buyMore,\r\n                        el.customersGroup, el.dealID, el.buyValue, el.getValue, el.dateFrom, el.dateTo, el.minValue,\r\n                        el.maxValue, el.discountLineType, el.amount, JSON.stringify(el.targets), el.type, JSON.stringify(ext)]);\r\n                });\r\n\r\n                deferred.resolve(newDiscounts);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadLiveCustomers = function (data, id) {\r\n            var deferred = $q.defer();\r\n            if (data && data.length > 0) {\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            }\r\n\r\n            console.time('refreshCustomers: loadLiveCustomers: start transaction');\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                console.timeEnd('refreshCustomers: loadLiveCustomers: start transaction');\r\n                console.time('refreshCustomers: loadLiveCustomers: start query');\r\n                var parameters = [];\r\n                var query = \"select ID as id, Name as name, Phone as phone, Email as email, MobilePhone as mobilePhone, Addresses as addresses, Taxes as taxes from customers\";\r\n                if (id) {\r\n                    query = query + ' where ID = ?'\r\n                    parameters = [id];\r\n                }\r\n                tx.executeSql(query, parameters, function (tx, res) {\r\n                        console.timeEnd('refreshCustomers: loadLiveCustomers: start query');\r\n                        var data = helperService.dbRawsToArray(res.rows, function (el) {\r\n                            el.addresses = JSON.parse(el.addresses);\r\n                            var taxes = !!el.taxes ? JSON.parse(el.taxes) : {};\r\n                            el.ruleID = taxes.ruleID;\r\n                            el.effectivePercentInclusive = taxes.effectivePercentInclusive;\r\n                            el.effectivePercentExclusive = taxes.effectivePercentExclusive;\r\n                            delete el.taxes;\r\n\r\n                            if(el.phone || el.email ||el.mobilePhone )\r\n                                el.Contacts = [{\r\n                                    Phone:el.phone,\r\n                                    Email: el.email,\r\n                                    MobilePhone: el.mobilePhone\r\n                                }];\r\n\r\n                            return el;\r\n                        });\r\n                        deferred.resolve(data);\r\n                    });\r\n\r\n             }, function (err) {\r\n                 deferred.reject(err);\r\n                 errorService.showError(err.message);\r\n             });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // remove all old datas\r\n        this.registryCleanUp = function (tx) {\r\n            tx.executeSql(\"delete from closeRegistrySalesAdditionalTotals where CloseRegistrySalesID in (select id from closeRegistrySales where isactive = 0 and SendedToServer = 1)\");\r\n            tx.executeSql(\"delete from cashManagement where SendedToServer=1 and CloseRegistryID in (select id from closeRegistrySales where isactive = 0 and SendedToServer = 1)\");\r\n            tx.executeSql(\"delete from registryOrders where RegistryCloseID in (select id from closeRegistrySales where isactive = 0 and SendedToServer = 1)\");\r\n            tx.executeSql(\"delete from closeRegistrySales where SendedToServer=1 and isactive=0\" +\r\n                \" and not exists (select id from cashManagement where cashManagement.closeregistryid = closeRegistrySales.ID)\" +\r\n                \" and not exists (select id from closeRegistrySalesAdditionaltotals where closeRegistrySalesAdditionaltotals.closeregistrysalesid = closeRegistrySales.ID)\"\r\n            );\r\n        };\r\n\r\n        this.getSaleCoupons = function (couponCode) {\r\n            var deferred = $q.defer();\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql('select * from SaleCoupon where CouponCode = ? COLLATE NOCASE',\r\n                    [couponCode],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.addSaleCoupon = function (id, dealID, couponCode) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT or replace into SaleCoupon(ID, DealID, CouponCode) VALUES (?,?,?)',\r\n                    [id, dealID, couponCode]);\r\n\r\n                deferred.resolve(couponCode);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // clear coupons table thus info from server has been gotten\r\n        this.clearCoupons = function () {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from SaleCoupon',\r\n                    []);\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getGiftCardSettings = function () {\r\n            var deferred = $q.defer();\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql('select Value from settings where Name = ?',\r\n                    ['GiftCardSettings'],\r\n                    function (tx, resultSet) {\r\n                        var res = {};\r\n                        if (resultSet.rows.length > 0)\r\n                            res = JSON.parse(resultSet.rows.item(0).Value);\r\n                        deferred.resolve(res);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.setGiftCardSettings = function (settings) {\r\n            if (!settings)\r\n                settings = {};\r\n\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['GiftCardSettings', JSON.stringify(settings)]);\r\n\r\n                deferred.resolve(settings);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.searchSaleRepresentatives = function (page, limit, outletID, filters) {\r\n            var deferred = $q.defer();\r\n            page = !page ? 0 : page - 1;\r\n            limit = !limit ? 10 : limit;\r\n\r\n            var ID = (!!filters && !!filters.ID) ? filters.ID : null;\r\n            var Name = (!!filters && !!filters.Name) ? filters.Name : null;\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql(\"select * from saleRepresentatives where (PosOutletID='\" + outletID + \"' or PosOutletID is null)\" + (!!ID ? \" and id='\" + ID + \"'\" : \"\") +\r\n                    (!!Name ? \" and Name like '%\" + Name + \"%'\" : \"\") + \" order by Name\",\r\n                    [], function (tx, res) {\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n                        var arr = [];\r\n                        $.each(data, function (idx, el) {\r\n                            el.LoadedFromLocalDb = true;\r\n                            arr.push(el);\r\n\r\n                        });\r\n                        deferred.resolve({ data: { SaleRepresentatives: arr.slice(page * limit, limit * (page + 1)) } });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.refreshSaleRepresentatives = function (data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // clear saleRepresentatives table and replace data from new array for current pos.\r\n                tx.executeSql(\"delete from saleRepresentatives\");\r\n\r\n                // save new pos identification\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['SaleRepresentativesPosName', configService.lastDearPosName]);\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['ApplicationKey', configService.applicationKey]);\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['SalesRepresentativeHash', data.hash]);\r\n\r\n                $.each(data.arr, function (idx, el) {\r\n                    tx.executeSql('INSERT INTO saleRepresentatives(ID, Name, PosOutletID) VALUES (?,?,?)',\r\n                        [el.id, el.name, el.posOutletID]);\r\n                });\r\n\r\n                deferred.resolve(data);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.checkSaleRepresentativesOld = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select Value from settings where Name='SaleRepresentativesPosName'\", [],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0 ||\r\n                            resultSet.rows.item(0).Value !== configService.lastDearPosName) {\r\n                            deferred.resolve(true);\r\n                        }\r\n                        else {\r\n                            tx.executeSql(\"SELECT ((strftime('%s','now') - strftime('%s',lastModified))/60.0/60.0/24.0) as days from settings where Name='SalesRepresentativeHash'\", [],\r\n                                function (tx, resultSet) {\r\n                                    if (resultSet.rows.length === 0 ||\r\n                                        Math.floor(resultSet.rows.item(0).days) > 0)\r\n                                        deferred.resolve(true);\r\n                                    else\r\n                                        deferred.resolve(false);\r\n                                });\r\n                        }\r\n                    });\r\n\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getSaleRepresentativesHash = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(null);\r\n            }\r\n            else {\r\n                this.db.readTransaction(function (tx) {\r\n                    tx.executeSql(\"SELECT Value as hash from settings where Name='SalesRepresentativeHash'\", [],\r\n                        function (tx, resultSet) {\r\n                            if (resultSet.rows.length > 0)\r\n                                deferred.resolve(resultSet.rows.item(0).hash);\r\n                            else\r\n                                deferred.resolve(null);\r\n                        });\r\n                }, function (err) {\r\n                    deferred.reject(err);\r\n                    errorService.showError(err.message);\r\n                });\r\n            }\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.savePOSData = function (posID, key, data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // save new pos identification\r\n                tx.executeSql(\"INSERT OR REPLACE INTO posSatellites(POSID, Key, [Data]) VALUES (?,?,?)\",\r\n                    [posID, key, data]);\r\n                deferred.resolve(data);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getPOSData = function (posID, key) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT [Data] from posSatellites where POSID=? and Key=?\", [posID, key],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length > 0)\r\n                            deferred.resolve(resultSet.rows.item(0));\r\n                        else\r\n                            deferred.resolve(null);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.refreshTaxRules = function (data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // clear saleRepresentatives table and replace data from new array for current pos.\r\n                tx.executeSql(\"delete from saleTaxRules\");\r\n\r\n                if (!!data && !!data.data && data.data.length > 0) {\r\n                    $.each(data.data, function (idx, el) {\r\n                        tx.executeSql('INSERT INTO saleTaxRules(TenantID, RuleID, Description, Rule) VALUES (?,?,?,?)',\r\n                            [configService.tenantID, el.RuleID, el.Description, JSON.stringify(el)]);\r\n                    });\r\n                }\r\n\r\n                deferred.resolve(data);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadTaxRules = function () {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select * from saleTaxRules where TenantID=?\",\r\n                    [configService.tenantID], function (tx, res) {\r\n                        var data = helperService.dbRawsToArray(res.rows, function (el) {\r\n                            return JSON.parse(el.Rule);\r\n                        });\r\n                        deferred.resolve({ data: data });\r\n                    });\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n    }]);","angular.module('services').service('loyaltyDEARProvider',\r\n    ['$q',\r\n        function ($q) {\r\n\r\n            this.preload = function () {\r\n                return helperService.resolvePromise(true);\r\n            }\r\n\r\n        }\r\n    ]);\r\n","class LoyaltyLionProvider {\r\n    constructor($q, helperService, $interval, gettextCatalog) {\r\n        this.token = null;\r\n        this.useWidgetIfAvailable = true;\r\n        this.$q = $q;\r\n        this.helperService = helperService;\r\n        this.$interval = $interval;\r\n        this.gettextCatalog = gettextCatalog;\r\n        this.sdkFailed = false;\r\n        this.sdkReadyPromise = null;\r\n    }\r\n    preload() {\r\n        const pr = this.helperService.resolvePromise(true);\r\n        return pr.then(() => {\r\n            try {\r\n                this.apiLoader();\r\n                if (window.loyaltylion && !window.loyaltylion._initData) {\r\n                    window.loyaltylion.init({ token: this.token });\r\n                }\r\n                // Background signal only — login must not wait on the CDN\r\n                this.startSdkReadyWatch().catch((err) => {\r\n                    console.log('LoyaltyLion SDK preload timed out or failed:', err);\r\n                });\r\n                return this.helperService.resolvePromise(true);\r\n            } catch (err) {\r\n                return this.helperService.rejectPromise(err);\r\n            }\r\n        });\r\n    }\r\n\r\n    // Starts the $interval poll that flips sdkFailed if the CDN never exposes site. Dedupes concurrent preload races and login never awaits this.\r\n        startSdkReadyWatch() {\r\n        if (this.sdkReadyPromise) {\r\n            return this.sdkReadyPromise;\r\n        }\r\n\r\n        const POLL_MS = 100;\r\n        const POLL_TICKS = 150; // 15s\r\n\r\n        const poll = this.$interval(() => {\r\n            if (window.loyaltylion && window.loyaltylion.site) {\r\n                this.$interval.cancel(poll);\r\n            }\r\n        }, POLL_MS, POLL_TICKS, false);\r\n\r\n        this.sdkReadyPromise = poll.then(\r\n            () => {\r\n                this.sdkFailed = true;\r\n                return this.$q.reject({ soft: true });\r\n            },\r\n            () => {\r\n                this.sdkFailed = false;\r\n                return true;\r\n            }\r\n        ).finally(() => {\r\n            this.sdkReadyPromise = null;\r\n        });\r\n\r\n        return this.sdkReadyPromise;\r\n    }\r\n\r\n    softReject(msg) {\r\n        return this.helperService.rejectPromise({ msg: msg, soft: true });\r\n    }\r\n\r\n    initCustomer(customer) {\r\n        // Soft: snackbar + disable loyalty UI. Only customer.Warning stays a modal (warning: true).\r\n        // Silent: not an LL customer / not enrolled — no cashier message, no service-level latch.\r\n        if (customer.LLExternalType !== 'LoyaltyLion') {\r\n            return this.helperService.rejectPromise({ silent: true });\r\n        }\r\n        if (customer.Warning) {\r\n            return this.helperService.rejectPromise({ msg: customer.Warning, warning: true });\r\n        }\r\n        if (!customer.LLEmail) {\r\n            return this.softReject(this.gettextCatalog.getString('Customer email is empty. Can not get customer information from LoyaltyLion.'));\r\n        }\r\n        if (!customer.LLCustomerID || customer.LLCustomerID === '0' || customer.LLCustomerID === 0) {\r\n            return this.helperService.rejectPromise({ silent: true });\r\n        }\r\n        if (!customer.LLServerToken) {\r\n            return this.softReject(this.gettextCatalog.getString('Customer Server Token is empty. Can not get customer information from LoyaltyLion.'));\r\n        }\r\n        if (!customer.LLTokenDate) {\r\n            return this.softReject(this.gettextCatalog.getString('Server Token Date is empty. Can not get customer information from LoyaltyLion.'));\r\n        }\r\n\r\n        if (window.loyaltylion && window.loyaltylion.site) {\r\n            this.sdkFailed = false;\r\n        } else if (this.sdkFailed) {\r\n            return this.softReject(this.gettextCatalog.getString('LoyaltyLion is unavailable.'));\r\n        }\r\n\r\n        if (typeof loyaltylion === 'undefined' || typeof loyaltylion.authenticateCustomer !== 'function') {\r\n            return this.softReject(this.gettextCatalog.getString('LoyaltyLion is unavailable.'));\r\n        }\r\n\r\n        const pr = loyaltylion.authenticateCustomer({\r\n            customer: {\r\n                id: customer.LLCustomerID,\r\n                email: customer.LLEmail,\r\n            },\r\n            auth: {\r\n                date: customer.LLTokenDate,\r\n                token: customer.LLServerToken,\r\n            },\r\n        });\r\n\r\n        // Stub queued into _buffer; real SDK will replay on load. Mark buffered so sellController does not clear loyaltyUnavailable until auth is confirmed.\r\n        if (!pr || typeof pr.then !== 'function') {\r\n            return this.helperService.resolvePromise({ buffered: true });\r\n        }\r\n\r\n        return pr.then(\r\n            () => this.helperService.resolvePromise(true)\r\n        )\r\n        .catch((err) => {\r\n            var fallback = this.gettextCatalog.getString('Unable to authenticate with LoyaltyLion.');\r\n            var msg = (err && (err.msg || err.message)) || err || fallback;\r\n            if (typeof msg !== 'string') {\r\n                msg = fallback;\r\n            }\r\n            return this.softReject(msg);\r\n        });\r\n    }\r\n\r\n    clearCustomer() {\r\n        return this.helperService.resolvePromise(true);\r\n    }\r\n\r\n    getCustomerBalance(customer) {\r\n        const balance = $('span[data-lion-points]').first().text().replace(',', '').replace('.', '');\r\n        return this.helperService.resolvePromise(balance);\r\n    }\r\n\r\n    // recommended approach to load LoyaltyLion API \r\n    // from their api help\r\n    apiLoader () {\r\n   \r\n        // Expanded self-executing function to plain code\r\n        var loyaltylion = window.loyaltylion || [];\r\n        function insertScript(src) {\r\n            const firstScript = document.getElementsByTagName(\"script\")[0];\r\n            const script = document.createElement(\"script\");\r\n            script.src = src;\r\n            script.crossOrigin = \"\";\r\n            firstScript.parentNode.insertBefore(script, firstScript);\r\n        }\r\n\r\n        if (!loyaltylion.isLoyaltyLion) {\r\n            window.loyaltylion = loyaltylion;\r\n            if (typeof window.lion === \"undefined\") window.lion = loyaltylion;\r\n            loyaltylion.version = 2;\r\n            loyaltylion.isLoyaltyLion = true;\r\n\r\n            const now = new Date();\r\n            const dateString = now.getFullYear().toString() + now.getMonth().toString() + now.getDate().toString();\r\n            insertScript(\"https://sdk.loyaltylion.net/static/2/loader.js?t=\" + dateString);\r\n            var initialized = false;\r\n            loyaltylion.init = function (t) {\r\n                if (initialized) throw new Error(\"Cannot call loyaltylion.init more than once\");\r\n                initialized = true;\r\n                var token = loyaltylion._token = t.token;\r\n                if (!token) throw new Error(\"Token must be supplied to loyaltylion.init\");\r\n\r\n                for (var l = [], commands = \"_push configure bootstrap shutdown on removeListener authenticateCustomer\".split(\" \"), \r\n                 c = 0; c < commands.length; c += 1)\r\n                ! function (t, n) {\r\n                    t[n] = function () {\r\n                        l.push([n, Array.prototype.slice.call(arguments, 0)])\r\n                    }\r\n                }(loyaltylion, commands[c]);\r\n\r\n                \r\n\r\n                insertScript(\"https://sdk.loyaltylion.net/sdk/start/\" + token + \".js?t=\" + dateString + now.getHours().toString());\r\n                loyaltylion._initData = t;\r\n                loyaltylion._buffer = l;\r\n            };\r\n        }\r\n\r\n    };\r\n\r\n\r\n\r\n    useWidget() {\r\n        if (typeof loyaltylion !== 'undefined' && loyaltylion && loyaltylion.site && loyaltylion.site.uiMode && loyaltylion.site.uiMode === 'integrated_page_only') {\r\n            return false;\r\n        }\r\n        return this.useWidgetIfAvailable && typeof loyaltylion !== 'undefined' && loyaltylion && loyaltylion.site && loyaltylion.site.settings && loyaltylion.site.settings.loyaltyWidget &&\r\n            loyaltylion.site.settings.loyaltyWidget.enabled;\r\n    }\r\n\r\n    showWidget() {\r\n        if (this.useWidget()) {\r\n            $('.lion-loyalty-widget').show();\r\n        } else {\r\n            $('#dear-loyalty-lion-widget').show();\r\n        }\r\n        $('#llSpace').show();\r\n    }\r\n\r\n    hideWidget() {\r\n        if (this.useWidget()) {\r\n            $('.lion-loyalty-widget').hide();\r\n        } else {\r\n            $('#dear-loyalty-lion-widget').hide();\r\n        }\r\n        $('#llSpace').hide();\r\n    }\r\n\r\n    \r\n}\r\n\r\nangular.module('services').service('loyaltyLionProvider', ['$q', 'helperService', '$interval', 'gettextCatalog', LoyaltyLionProvider]);\r\n","\r\nexport function loyaltyLionClipboardHandler(e, $rootScope) {\r\n    let isLLCopyButton = false;\r\n\r\n    if (e && e.target) {\r\n        var $button = $(e.target).closest('.lion-copy-to-clipboard-button');\r\n        if ($button.length > 0) {\r\n            isLLCopyButton = true;\r\n            var code = $button.parent().find('.lion-reward-code__code').text();\r\n            var buttonEl = $button[0];\r\n            var title = buttonEl.offsetParent && buttonEl.offsetParent.hasChildNodes()\r\n                ? $(buttonEl.offsetParent.childNodes).find('.lion-modal__title').text()\r\n                : null;\r\n            var elem = angular.element(document.querySelector('[ng-app]'));\r\n            var injector = elem.injector();\r\n            if (!$rootScope) {\r\n                $rootScope = injector.get('$rootScope');\r\n            }\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('ll.clipboard.code.copy', { code: code, title: title });\r\n            });\r\n        }\r\n    }\r\n    return isLLCopyButton;\r\n}\r\n\r\n\r\nexport function loyaltyLionDiscountZoneClipboardHandler(e, $rootScope) {\r\n    try {\r\n        var el = $(e.toElement ? e.toElement : e.target);\r\n\r\n        if (el.closest('.ll-discount-zone').length > 0) {\r\n            var isCordova = !!(window.cordova && window.cordova.plugins && window.cordova.plugins.clipboard);\r\n            const showClipboardError = function(err) {\r\n                var elem = angular.element(document.querySelector('[ng-app]'));\r\n                var injector = elem.injector();\r\n                if (!$rootScope) {\r\n                    $rootScope = injector.get('$rootScope');\r\n                }\r\n                var gettextCatalog = injector.get('gettextCatalog');\r\n                var friendlyMessage = gettextCatalog.getString('Unable to read clipboard. Please paste the LoyaltyLion code manually.');\r\n                if (err) {\r\n                    console.error('Failed to read/write clipboard contents: ', err);\r\n                }\r\n                $rootScope.$applyAsync(function () {\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: friendlyMessage,\r\n                        type: 'error'\r\n                    });\r\n                });\r\n            };\r\n\r\n            const sendCCMessage = function(text) {\r\n                if (text) {\r\n                    if (!$rootScope) {\r\n                        var elem = angular.element(document.querySelector('[ng-app]'));\r\n                        $rootScope = elem.injector().get('$rootScope');\r\n                    }\r\n\r\n                    $rootScope.$apply(function () {\r\n                        console.log('Send LL clipboard event');\r\n                        $rootScope.$broadcast('ll.clipboard.code.copy', {code: text, title: null});\r\n                    });\r\n                }\r\n            };\r\n\r\n            if (isCordova) {\r\n                window.cordova.plugins.clipboard.paste(function (text) {\r\n                    sendCCMessage(text);\r\n                    window.cordova.plugins.clipboard.copy(\"\");\r\n                }, showClipboardError);\r\n            } else if (navigator && navigator.clipboard && navigator.clipboard.readText) {\r\n                navigator.clipboard.readText()\r\n                    .then(function (text) {\r\n                        sendCCMessage(text);\r\n                    })\r\n                    .then(function () {\r\n                        setTimeout(() => {\r\n                            navigator.clipboard.writeText('');\r\n                        }, 100)\r\n                    })\r\n                    .catch(err => {\r\n                        showClipboardError(err);\r\n                    });\r\n            } else {\r\n                showClipboardError();\r\n            }\r\n            return true;\r\n        }\r\n    } catch (e) {\r\n        // skip\r\n    }\r\n    return false;\r\n}\r\n","angular.module('services').service('loyaltyService',\r\n    [\r\n        'configService', 'loyaltyDEARProvider', 'loyaltyLionProvider', 'helperService', 'gettextCatalog',\r\n        function (configService, loyaltyDEARProvider, loyaltyLionProvider, helperService, gettextCatalog) {\r\n\r\n            this.providerInfo = {\r\n                code: null,\r\n                name: null\r\n            };\r\n\r\n            this.provider = null;\r\n            this.loaded = false;\r\n\r\n            this.loyaltyEnabled = false;\r\n\r\n            var THIS = this;\r\n            var runProviderPreload = function () {\r\n                if (THIS.providerInfo.code === 'LoyaltyLion' && !configService.isOnline) {\r\n                    console.log('LoyaltyLion preload skipped while offline');\r\n                    return helperService.resolvePromise(false);\r\n                }\r\n                // Resolve first so a sync throw from preload() becomes a rejection and hits .catch\r\n                return helperService.resolvePromise(true).then(function () {\r\n                    return THIS.provider.preload();\r\n                }).then(function (preloadRes) {\r\n                    if (preloadRes) {\r\n                        THIS.loaded = true;\r\n                    }\r\n                    return preloadRes;\r\n                }).catch(function (err) {\r\n                    // Swallowed so login/sale flow is not blocked if preload() throws.\r\n                    console.log('Loyalty provider preload failed:', err);\r\n                    return false;\r\n                });\r\n            };\r\n\r\n            // this should be called after login\r\n            // to load correct provider SDK if required\r\n            // also provider settings are defined here\r\n            this.preload = function (res) {\r\n                if (configService.loyaltyLionToken) {\r\n                    this.providerInfo.code = 'LoyaltyLion';\r\n                    this.providerInfo.name = 'LoyaltyLion';\r\n                    this.loyaltyEnabled = true;\r\n                    configService.enableLoyalty = true;\r\n                    this.provider = loyaltyLionProvider;\r\n                    this.provider.token = configService.loyaltyLionToken;\r\n                } else {\r\n                    if (configService.loyaltyEnabled) {\r\n                        this.providerInfo.code = 'DEAR';\r\n                        this.providerInfo.name = 'DEAR';\r\n                        this.provider = loyaltyDEARProvider;\r\n                    }\r\n                }\r\n\r\n                var pr = helperService.resolvePromise(res);\r\n\r\n                if (!this.loaded && this.provider && typeof this.provider.preload === 'function') {\r\n                    pr = pr.then(function () {\r\n                        return runProviderPreload();\r\n                    });\r\n                }\r\n                return pr.then(function () {\r\n                    return helperService.resolvePromise(res);\r\n                });\r\n            };\r\n\r\n            this.isLoyaltyEnabled = function () {\r\n                return this.loyaltyEnabled;\r\n            };\r\n\r\n            this.providerInformation = function () {\r\n                return this.providerInfo;\r\n            };\r\n\r\n            // should init api by current customer\r\n            this.initCustomer = function (customer) {\r\n                var pr = helperService.resolvePromise(true);\r\n\r\n                if (this.loyaltyEnabled && !this.loaded && this.provider && typeof this.provider.preload === 'function') {\r\n                    pr = pr.then(function () {\r\n                        return runProviderPreload();\r\n                    });\r\n                }\r\n\r\n                if (this.loyaltyEnabled && this.provider && typeof this.provider.initCustomer === 'function') {\r\n                    pr = pr.then(function () {\r\n                        if (!THIS.loaded) {\r\n                            return helperService.resolvePromise(true);\r\n                        }\r\n                        return THIS.provider.initCustomer(customer);\r\n                    }).catch(function (res) {\r\n                        if (res && res.warning === true) {\r\n                            helperService.showInfoDialog({\r\n                                title: gettextCatalog.getString('Warning'),\r\n                                body: res.msg,\r\n                                isWarning: true\r\n                            });\r\n                        } else {\r\n                            throw res;\r\n                        }\r\n                    });\r\n                }\r\n\r\n                return pr;\r\n            };\r\n\r\n            // should clear current customer\r\n            this.clearCustomer = function () {\r\n                var pr = helperService.resolvePromise(true);\r\n                 var THIS = this;\r\n\r\n                 if (this.loyaltyEnabled && this.loaded && typeof this.provider.initCustomer === 'function') {\r\n                      pr = pr.then(function(){\r\n                        return THIS.provider.clearCustomer();\r\n                      });\r\n                //     pr = pr.then(function(){\r\n                //         return remoteRequestProvider.loadFakeCustomer(uuid2.newguid()+\"@gmail.com\",\"0\");\r\n                //     }).then(function (res) {\r\n                //         return THIS.provider.initCustomer(res.data.Customers[0]);\r\n                //     });\r\n                 }\r\n\r\n                return pr;\r\n            };\r\n\r\n            this.getCustomerBalance = function(customer) {\r\n                var pr = helperService.resolvePromise(true);\r\n                var THIS = this;\r\n\r\n                if (this.loyaltyEnabled && this.loaded && typeof this.provider.getCustomerBalance === 'function') {\r\n                    pr = pr.then(function () {\r\n                        return THIS.provider.getCustomerBalance(customer);\r\n                    }).then(function(bal){\r\n                        customer.LLInitialBalance = bal;\r\n                    });\r\n                }\r\n\r\n                return pr;\r\n            };\r\n        }\r\n\r\n    ]);","import buildConfiguration from \"./configEnvironment\";\r\nimport { loyaltyLionClipboardHandler, loyaltyLionDiscountZoneClipboardHandler } from \"./loyaltyLionRewardsHandler\";\r\n\r\nfunction angularInjector() {\r\n    var elem = angular.element(document.querySelector('[ng-app]'));\r\n    var injector = elem.injector();\r\n    return injector;\r\n}\r\n\r\nfunction getAngularService(name ){\r\n    return angularInjector().get(name);\r\n}\r\n\r\nfunction callRootScope(barcode) {\r\n    setTimeout(function () {\r\n        var $rootScope = angularInjector().get('$rootScope');\r\n        $rootScope.$apply(function () {\r\n            $rootScope.$broadcast('scan.barcode', barcode);\r\n        });\r\n    }, 0);\r\n}\r\n\r\n$(document).scannerDetection({\r\n    avgTimeByChar: 500,\r\n    //        ignoreIfFocusOn: ['input', 'button', 'select'],\r\n    ignoreIfFocusOn: ['input', 'textarea'],\r\n    minLength: 3,\r\n    onComplete: function (barcode, qty) {\r\n        barcode = barcode.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\r\n        console.log('scannerDetection: ' + barcode);\r\n        callRootScope(barcode);\r\n    } // main callback function\r\n});\r\n\r\n\r\n\r\nfunction handlePopoverClose(e) {\r\n    console.log('click active popover check');\r\n    const rpopel0 = $('div.popover[id*=\"popover\"]');\r\n\r\n    if (rpopel0.length > 0) {\r\n        const rpopel = $(e.target).closest('div.popover[id*=\"popover\"]');\r\n        if (rpopel.length == 0) {\r\n            //   console.log('clicked outside popover');\r\n            const elem = angular.element(document.querySelector('[ng-app]'));\r\n            const injector = elem.injector();\r\n            const $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                console.log('click active popover check send message');\r\n                $rootScope.$broadcast('popover.dialog.hide');\r\n            });\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction handleDateSelectorClose() {\r\n    if ($(\".date-selector\").is(':visible') &&\r\n        !$(\"#ui-datepicker-div\").is(':visible')) {\r\n        $(\".date-selector\").on('click', function () { return false; });\r\n        $(\".date-selector .form-input\").on('click', function () { return false; });\r\n\r\n        $(\".date-selector\").hide();\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction handleTimeSelectorClose(e) {\r\n    if ($(\".time-selector\").is(':visible')) {\r\n        const rptm = $(e.target).closest('.time-selector');\r\n        if (rptm.length === 0) {\r\n            const elem = angular.element(document.querySelector('[ng-app]'));\r\n            const injector = elem.injector();\r\n            const $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('time-selector.hide');\r\n            });\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction handleSnackbarClose() {\r\n    const snack = $('snackbar div.snackbar');\r\n    const rootScope = angularInjector().get('$rootScope');\r\n\r\n    if (snack.length > 0) {\r\n        const isVisible = snack.offset().top <= $('html').height() && snack.offset().top > 0;\r\n\r\n        if (isVisible) {\r\n            rootScope.$apply(function () {\r\n                console.log('close snackbar');\r\n                rootScope.$broadcast('snackbar.close');\r\n            });\r\n        }\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction handleLoyaltyLionClipboard(e) {\r\n    const rootScope = angularInjector().get('$rootScope');\r\n    const isLLCopyButton = loyaltyLionClipboardHandler(e, rootScope);\r\n    \r\n    if (!isLLCopyButton) {\r\n        return loyaltyLionDiscountZoneClipboardHandler(e, rootScope);\r\n    }\r\n    return isLLCopyButton;\r\n}\r\n\r\nfunction closePopovers(e) {\r\n    return handlePopoverClose(e) || \r\n    handleDateSelectorClose() || \r\n    handleTimeSelectorClose(e) || \r\n    handleSnackbarClose() || \r\n    handleLoyaltyLionClipboard(e);\r\n}\r\n\r\n$(document).on('click', function (e) {\r\n    closePopovers(e);\r\n});\r\n\r\n$(function () {\r\n    if (window.isSite) {\r\n        $(document.body).removeClass('no-scroll');\r\n        $(document).ready(function () {\r\n            $(document).on(\"keydown\", disableF5);\r\n        });\r\n    }\r\n\r\n});\r\n\r\nfunction disableF5(e) {\r\n    if ((e.which || e.keyCode) == 116) {\r\n        e.preventDefault();\r\n\r\n        setTimeout(function () {\r\n            var elem = angular.element(document.querySelector('[ng-app]'));\r\n            var injector = elem.injector();\r\n            var $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('header.f5Pressed', e);\r\n            });\r\n        }, 0);\r\n    }\r\n};\r\n\r\n\r\nlet platformStyles = '';\r\n\r\nif (window.isSite === true || (buildConfiguration.platform != \"ios\" &&\r\n    buildConfiguration.platform != \"android\")) {\r\n\r\n    // WMS like\r\n    platformStyles =\r\n        '::-webkit-scrollbar {\\n' +\r\n        ' width: 12px;\\n' +\r\n        ' }\\n' +\r\n        '::-webkit-scrollbar-track {\\n' +\r\n        '            -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\\n' +\r\n        '            box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\\n' +\r\n        '            border-radius: 10px;\\n' +\r\n        '            background-color: #D3D3D3;\\n' +\r\n        '        }\\n' +\r\n        '::-webkit-scrollbar-thumb {\\n' +\r\n        '            border-radius: 10px;\\n' +\r\n        '            -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);\\n' +\r\n        '            box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);}\\n' +\r\n        '            background-color: #D3D3D3;\\n';\r\n}\r\n\r\n\r\nif (!!platformStyles) {\r\n    var styleTag = $('<style type=\"text/css\" media=\"screen\">' + platformStyles + '</style>');\r\n    $('html > head').append(styleTag);\r\n}","angular.module(\"mainApp\").controller('offlineSalesController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'saleService', '$location', 'outletService', 'configService', 'errorService', \r\n    'helperService', 'orderByFilter', 'offlineSaleService', 'gettextCatalog',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, saleService, $location, outletService, configService, errorService, helperService, orderBy, offlineSaleService, gettextCatalog) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSellSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constOfflineSalesViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        };\r\n\r\n        $scope.fullFilters = false;\r\n        $scope.data = [];\r\n        $scope.statuses = constants.parkStatuses;\r\n        $scope.triggerChangeOutletFilter = true;\r\n        $scope.filters = {\r\n            OutletID: '0',\r\n            DateFrom: null,\r\n            DateTo: null\r\n        };\r\n        $scope.filterSelectors = {};\r\n        $scope.searchInput = null;\r\n\r\n        $scope.isOnline = configService.isOnline;\r\n        $scope.canClearOfflineSales = configService.canClearOfflineSales;\r\n        \r\n        $scope.selectedJSON = null;\r\n        $scope.errorText = null;\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.filters.DateFrom = from;\r\n            $scope.filters.DateTo = to;\r\n            $scope.search();\r\n        }\r\n\r\n        $scope.$watch('filters.OutletID', function (newValue, oldValue) {\r\n\r\n                if($scope.triggerChangeOutletFilter){\r\n                    $scope.search();\r\n                }                \r\n\r\n                $scope.triggerChangeOutletFilter = true;\r\n            }\r\n        );\r\n\r\n        $scope.countOffline = 0;\r\n\r\n        $scope.clearOfflineSales = function () {\r\n            offlineSaleService.clearOfflineSales().then(() => {\r\n                $scope.refreshCounter().then(() => {\r\n                    $scope.search();\r\n                });\r\n            }).catch(err => {\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.refreshCounter = function () {\r\n            return offlineSaleService.getCount().then(res => {\r\n                $scope.countOffline = res;\r\n            });\r\n        };\r\n\r\n        $scope.clear = function () {\r\n            $scope.triggerChangeOutletFilter = false;\r\n            $scope.filters.OutletID = '0';\r\n            $scope.filters.DateFrom = null;\r\n            $scope.filters.DateTo = null;\r\n            $scope.searchInput = null;   \r\n            \r\n            $timeout(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n                \r\n            });\r\n\r\n            $scope.search();\r\n        };\r\n\r\n        function loadFilters() {\r\n            return outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n                $scope.filterSelectors.outlets = [];\r\n                $.each(resp.Outlets, function (idx, el) {\r\n                    $scope.filterSelectors.outlets.push({ OutletName: el.OutletName, OutletID: el.PosOutletID });\r\n                });\r\n                $timeout(function () {\r\n                    initSelects();\r\n                });\r\n            },\r\n            function (err) {\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {     \r\n            $.blockUI();       \r\n            $scope.loadData();\r\n        };\r\n\r\n        $scope.loadData = function () {\r\n            saleService.loadOfflineSales(null, null, 'parked').then(function (resp1) {\r\n                offlineSaleService.loadOfflineSalesErrorHistory().then(function (resp) {\r\n                    if (resp && resp.length) {\r\n                        $scope.data = resp.concat(resp1)\r\n                    } else {\r\n                        $scope.data = resp1;\r\n                    }\r\n                }).catch(function() {\r\n                    $scope.data = resp1;\r\n                }).finally(function() {\r\n                    loadFilters().then(function(){\r\n                        $timeout(function(){\r\n                            $scope.raiseViewChanged();\r\n                        });\r\n                        $.unblockUI();\r\n                    });\r\n                });\r\n                $scope.refreshCounter();\r\n            });\r\n        };\r\n\r\n        $scope.search = function () {\r\n            $.blockUI();\r\n            saleService.loadOfflineSales(null, null, 'parked').then(function (resp) {\r\n                var reverse = $scope.currentOfflineDir === 'desc';\r\n                //$scope.data = orderBy(resp, $scope.sortOfflineFiled, reverse);\r\n                var errorHistory = [];\r\n                offlineSaleService.loadOfflineSalesErrorHistory().then(function (resp2) {\r\n                    if (resp2 && resp2.length) {\r\n                        errorHistory = resp2;\r\n                    }\r\n                }).finally(function () {\r\n                    $scope.data = orderBy(errorHistory.concat(resp), 'lastModified', true);\r\n                    $scope.filtered = angular.copy($scope.data);\r\n                    var mDateFormat = helperService.getDateByFormatForMoment();\r\n                    \r\n                    var mDateFrom = moment($scope.filters.DateFrom, mDateFormat).toDate();\r\n                    var dateFromFilter = function(item) {\r\n                        if ($scope.filters.DateFrom) {\r\n                            if (item.lastModified) {\r\n                                var itemDate = moment(item.lastModified).utc().add(moment().utcOffset(), 'm').toDate();\r\n                                    if (itemDate.getTime() >= mDateFrom.getTime()) {\r\n                                        return true;\r\n                                    }\r\n                            }\r\n                            return false;\r\n                        }\r\n                        return true;\r\n                    };\r\n\r\n                    var mDateTo = moment($scope.filters.DateTo, mDateFormat).toDate();\r\n                    var dateToFilter = function(item) {\r\n                        if ($scope.filters.DateTo) {\r\n                            if (item.lastModified) {\r\n                                var itemDate = moment(item.lastModified).utc().add(moment().utcOffset(), 'm').toDate();\r\n                                if (itemDate.getTime() <= mDateTo.setHours(23,59,59,999)) {\r\n                                    return true;\r\n                                }\r\n                            }\r\n                            return false;\r\n                        }\r\n                        return true;\r\n                    };\r\n\r\n                    var searchFilter = function(item, searchText) {\r\n                        if ($scope.searchInput) {\r\n                            if (item.sale.customer.Name\r\n                                && item.sale.customer.Name.toLowerCase().indexOf(searchText) >= 0) {\r\n                                    return true;\r\n                            } else if (item.info.saleObject.OrderNumber\r\n                                && item.info.saleObject.OrderNumber.indexOf(searchText) >= 0) {\r\n                                    return true;\r\n                            }\r\n                            return false\r\n                        }\r\n                        return true;\r\n                    };\r\n\r\n                    var filters = [dateFromFilter, dateToFilter, searchFilter];\r\n                   \r\n                    $scope.filtered = $scope.filtered.filter(item => filters.every(f => f(item, $scope.searchInput)));\r\n                    $scope.data = $scope.filtered;\r\n                    $.unblockUI();\r\n                })\r\n            });\r\n        };\r\n\r\n        $scope.sync = function () {\r\n            if (configService.isSite) {\r\n                return;\r\n            }\r\n            $.blockUI();\r\n            //configService.execCallbackFunctions();\r\n            saleService.sendOfflineSales(100, true)\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                })\r\n                .finally(function () {\r\n                    $.unblockUI();\r\n                    $scope.search();\r\n                });\r\n        };\r\n\r\n        $scope.rowClick = function(el) {\r\n            console.log(el);\r\n            $scope.selectedJSON = el.info.saleObject;\r\n            $scope.errorText = el.ErrorText;\r\n            helperService.showDialog($('#viewErrorHistoryDialog'));\r\n        };\r\n\r\n        $scope.removeFromHistory = function(el) {\r\n            if (el.StatusID !== saleService.OfflineStatus.ErrorHistory) {\r\n                return;\r\n            }\r\n\r\n            $scope.dialogMode = 'removeFromHistory'\r\n            $scope.currentRow = el;\r\n            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                gettextCatalog.getString('Sale would be deleted from error history. Would you like to continue?'),\r\n                gettextCatalog.getString('Yes, delete'),\r\n                gettextCatalog.getString('No'));\r\n        };\r\n\r\n         $scope.clearOfflineSalesDlg = function(el) {\r\n            $scope.dialogMode = 'clearOfflineSales';\r\n            $scope.currentRow = el;\r\n            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                gettextCatalog.getString('Are you sure you want to clear Offline Sales? This will permanently remove these orders.'),\r\n                gettextCatalog.getString('Yes, delete'),\r\n                gettextCatalog.getString('No'));\r\n        };\r\n\r\n        \r\n        $scope.callbackModal = function () {\r\n            var mode = $scope.dialogMode;\r\n            var row =  $scope.currentRow;\r\n            $scope.dialogMode = '';\r\n            $scope.currentRow = null;\r\n            switch (mode){\r\n                case 'removeFromHistory':\r\n                    offlineSaleService.removeFromHistory(row.SaleID, row.OperationID).then(function () {\r\n                        $scope.search();\r\n                    });\r\n                break;\r\n                case 'clearOfflineSales':\r\n                    $scope.clearOfflineSales();\r\n                break;\r\n                default:\r\n                    console.error('Unknown dialog mode: ' + mode);\r\n            }\r\n            \r\n        };\r\n\r\n        $scope.copyJSON = function() {\r\n            var string = JSON.stringify(this.selectedJSON);\r\n            setTimeout(() => {\r\n                navigator.clipboard.writeText(string);\r\n            });\r\n            var msg = gettextCatalog.getString(\"JSON has been copied to clipboard.\");\r\n            $rootScope.$broadcast('snackbar.show', {\r\n                message: msg\r\n            });\r\n        };\r\n\r\n        $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n            $scope.isOnline = object;\r\n        });\r\n\r\n        $scope.continueSale = function (saleID) {\r\n            //$location.path('/sell').search({ saleID: saleID, type: 'continue' });\r\n            window.localStorage.setItem('continueSale', JSON.stringify({ saleID: saleID, type: 'continue' }));\r\n            $location.path('/sell');\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n\r\n        $scope.currentOfflineDir = 'desc';\r\n        $scope.newOfflineDir = 'asc';\r\n        $scope.sortOfflineFiled = '';\r\n\r\n        $scope.sortOffline = function (field, direction) {\r\n            $scope.currentOfflineDir = direction;\r\n            $scope.sortOfflineFiled = field;\r\n            $scope.search();\r\n\r\n            if ($scope.newOfflineDir === 'desc') {\r\n                $scope.newOfflineDir = 'asc';\r\n            } else {\r\n                $scope.newOfflineDir = 'desc';\r\n            }\r\n        }\r\n    }]);","angular.module(\"mainApp\").controller('openCloseRegistryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', 'registryService', 'uuid2', '$uibModal', '$location',\r\n        'helperService', '$locale', 'cashManagementService','$q','receiptService','printService','reportService','gettextCatalog', '$filter',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, registryService, uuid2, $uibModal, $location,\r\n        helperService, $locale, cashManagementService, $q, receiptService, printService,reportService, gettextCatalog, $filter) {\r\n\r\n            ////Apply special currency rules\r\n            helperService.setSpecialCurrencySymbols();\r\n\r\n            $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constCloseRegistryViewName }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            // array for sales\r\n            $scope.lastCloseRegistryObj = {};\r\n            /** @type {PosCloseRegistryData} */\r\n            $scope.closeRegistryObj = {};\r\n            $scope.closeRegistryObj.OutletName = configService.lastOutlet;\r\n            $scope.closeRegistryObj.RegistryNumber = configService.lastRegistry;\r\n            $scope.closeRegistryObj.ID = null;\r\n            $scope.loaded = false;\r\n            $scope.openingFloatAmount = \"\";\r\n            $scope.openingFloatNotes = \"\";\r\n\r\n            $scope.isOnline = function () {\r\n                return configService.isOnline;\r\n            };\r\n\r\n            $scope.backReportFilters = null;\r\n\r\n            // enable event when view is shown\r\n            $scope.onLoad = function () {\r\n\r\n                $scope.raiseViewChanged();\r\n                $.blockUI();\r\n\r\n                var prms = window.localStorage.getItem('forceRegisterClose');\r\n                // clear params\r\n                window.localStorage.removeItem('forceRegisterClose');\r\n\r\n                var cfg = {\r\n                    lastRegistryID: configService.lastRegistryID,\r\n                    lastRegistry: configService.lastRegistry,\r\n                    lastOutlet: configService.lastOutlet,\r\n                    ID: null\r\n                };\r\n                $scope.backReportFilters = null;\r\n\r\n                var forceClosure = false;\r\n                // if prms is not empty - we need to close specified register closure session\r\n                if (prms) {\r\n                    prms = JSON.parse(prms);\r\n                    forceClosure = true;\r\n                    cfg.lastRegistryID = prms.RegistryID;\r\n                    cfg.lastOutlet = prms.PosOutletName;\r\n                    cfg.lastRegistry = prms.RegistryName;\r\n                    cfg.ID = prms.ID;\r\n                    cfg.closeDate = prms.CloseDay;\r\n                    $scope.backReportFilters = prms.reportFilters;\r\n                }\r\n\r\n                registryService.getActiveRegistrySales(cfg.lastRegistryID, configService.lastUserName, forceClosure, null, forceClosure ? cfg.ID: null)\r\n                .then(function (resp) {\r\n                    let existingRegistryCloseOnDeviceID;\r\n                    if (resp[0]) {\r\n                        var total = resp[0];\r\n                        existingRegistryCloseOnDeviceID = configService.isSite ? null : total.ID;\r\n                        $scope.closeRegistryObj = total;\r\n                        $scope.closeRegistryObj.OutletName = cfg.lastOutlet;\r\n                        $scope.closeRegistryObj.RegistryNumber = cfg.lastRegistry;\r\n                        $scope.closeRegistryObj.GiftCardCounted = $scope.closeRegistryObj.GiftCardExpected;\r\n                        $scope.closeRegistryObj.StoreCreditCounted = $scope.closeRegistryObj.StoreCreditExpected;\r\n                        $scope.closeRegistryObj.LoyaltyCounted = $scope.closeRegistryObj.LoyaltyExpected;\r\n                        $scope.closeRegistryObj.CreditCardCounted = $scope.closeRegistryObj.CreditCardExpected;\r\n                        if (cfg.closeDate)\r\n                            $scope.closeRegistryObj.ClosingTime = cfg.closeDate;\r\n                    }\r\n                    else {\r\n                        existingRegistryCloseOnDeviceID = null;\r\n                        $scope.closeRegistryObj.OutletName = cfg.lastOutlet;\r\n                        $scope.closeRegistryObj.RegistryNumber = cfg.lastRegistry;\r\n                    }\r\n\r\n                    if (!configService.isSite) {\r\n                        return registryService.getActiveRegistrySales(cfg.lastRegistryID, configService.lastUserName,\r\n                            forceClosure || $scope.isOnline(), null, forceClosure ? cfg.ID : existingRegistryCloseOnDeviceID).\r\n                        then(function (resp) {\r\n                            if (resp[0]) {\r\n                                $scope.closeRegistryObj.GiftCardExpected = $scope.closeRegistryObj.GiftCardCounted = resp[0].GiftCardExpected;\r\n                                $scope.closeRegistryObj.StoreCreditExpected = $scope.closeRegistryObj.StoreCreditCounted = resp[0].StoreCreditExpected;\r\n                                $scope.closeRegistryObj.LoyaltyExpected = $scope.closeRegistryObj.LoyaltyCounted = resp[0].LoyaltyExpected;\r\n                                $scope.closeRegistryObj.CreditCardExpected = $scope.closeRegistryObj.CreditCardCounted = resp[0].CreditCardExpected;\r\n                                $scope.closeRegistryObj.customPayments = [];\r\n                                $scope.closeRegistryObj.Surcharges = resp[0].Surcharges;\r\n                                if (cfg.closeDate)\r\n                                    $scope.closeRegistryObj.ClosingTime = cfg.closeDate;\r\n\r\n                                if (!!resp[0].AdditionalCounters) {\r\n                                    $scope.closeRegistryObj.customPayments =\r\n                                        resp[0].AdditionalCounters.filter(function (el) {\r\n                                            if (el.CounterType == 'PAYMENT_CUSTOM') {\r\n                                                el.Counted = el.Counter;\r\n                                                return el.CounterType == 'PAYMENT_CUSTOM';\r\n                                            }\r\n                                        }).sort(function (a, b) {\r\n                                            return a.CustomCounterName < b.CustomCounterName ? -1 :\r\n                                                    a.CustomCounterName > b.CustomCounterName ? 1 : 0;\r\n                                        });\r\n                                }\r\n                            }\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve($scope.closeRegistryObj.ID);\r\n                            return deferred.promise;\r\n                        });\r\n                    }\r\n                    else {\r\n                        $scope.closeRegistryObj.customPayments = [];\r\n\r\n                        if (resp[0]) {\r\n\r\n                            if (!!resp[0].AdditionalCounters) {\r\n                                $scope.closeRegistryObj.customPayments =\r\n                                    resp[0].AdditionalCounters.filter(function (el) {\r\n                                        if (el.CounterType == 'PAYMENT_CUSTOM') {\r\n                                            el.Counted = el.Counter;\r\n                                            return el.CounterType == 'PAYMENT_CUSTOM';\r\n                                        }\r\n                                    }).sort(function (a, b) {\r\n                                        return a.CustomCounterName < b.CustomCounterName ? -1 :\r\n                                            a.CustomCounterName > b.CustomCounterName ? 1 : 0;\r\n                                    });\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve($scope.closeRegistryObj.ID);\r\n                    return deferred.promise;\r\n                })\r\n                .then(function (id) {\r\n                    if (!!id) {\r\n                        return cashManagementService.getCashMovements(id).then(function (operations) {\r\n                            $scope.operations = operations;\r\n                            $scope.loaded = true;\r\n                            $.unblockUI();\r\n                        });\r\n                    }\r\n                    else {\r\n                        $scope.operations = [];\r\n                        $scope.loaded = true;\r\n                        $scope.loadLastClosedRegistry();\r\n                        $.unblockUI();\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(null);\r\n                        return deferred.promise;\r\n                    }\r\n                })\r\n                .catch(function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                })\r\n                .finally(function () {\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('view.loaded');\r\n                    });\r\n                });\r\n            };\r\n\r\n        $scope.loadLastClosedRegistry = function () {\r\n\r\n            registryService.getClosedRegistries(configService.lastRegistryID, configService.lastUserName)\r\n                .then(function (resp) {\r\n                    if (resp[0]) {\r\n                        var total = resp[0];\r\n                        $scope.lastCloseRegistryObj = total;\r\n                    }\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve($scope.lastCloseRegistryObj.ID);\r\n                    return deferred.promise;\r\n                })\r\n                .catch(function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n        };\r\n\r\n        $scope.calculateTotal = function (count, expected) {\r\n            if (!count && count !== 0) {\r\n                return '-';\r\n            } else {\r\n                return count - expected;\r\n            }\r\n        };\r\n\r\n        /** @param {PosCloseRegistryData} proccess */\r\n        $scope.closeRegistry = function (proccess) {\r\n            if (proccess !== true) {\r\n                loyaltyPaymentDialog();\r\n            } else {\r\n                $.blockUI();\r\n                /** @type {PosCloseRegistryData} */\r\n                var obj = $scope.closeRegistryObj;\r\n                registryService.closeRegistry(obj)\r\n                   .then(function () {\r\n                       $scope.closeRegistryObj.ID = null;\r\n                       if ($scope.backReportFilters) {\r\n\r\n                           window.localStorage.setItem('reportRegisterClosure', JSON.stringify($scope.backReportFilters));\r\n                           $location.path('/reportRegisterClosure');\r\n                       }\r\n\r\n                       $timeout(function(){\r\n                           $rootScope.$broadcast('scroll.wrapper.resize');\r\n                        });\r\n                       $.unblockUI();\r\n                       $scope.loadLastClosedRegistry();\r\n                   })\r\n                   .catch(function (err) {\r\n                       errorService.showError(err);\r\n                       $.unblockUI();\r\n                    });\r\n            }\r\n        };\r\n\r\n        $scope.openRegistry = function () {\r\n            $('#openRegister').prop('disabled', true);\r\n            $.blockUI();\r\n            \r\n            var id = uuid2.newguid();\r\n            var SCOPE = $scope;\r\n            $scope.isRegistryOpened = false;\r\n            registryService.openRegistry(id, configService.lastRegistryID, configService.lastUserName)\r\n                .then(function (res) {\r\n                    return cashManagementService.addCashMovement(uuid2.newguid(), id, configService.lastRegistryID,\r\n                                                                 configService.userName, $scope.openingFloatAmount, $scope.openingFloatNotes,\r\n                                                                 'Opening float');\r\n                })\r\n                .then(function () {\r\n                    return registryService.updateRegistryCash(id, $scope.openingFloatAmount);\r\n                })\r\n                .then(function () {\r\n                    SCOPE.isRegistryOpened = true;\r\n\r\n                    return reportService.printCashManagementReport(SCOPE,\r\n                        [{\r\n                            OperationType: 'Opening float',\r\n                            Amount: SCOPE.openingFloatAmount,\r\n                            Reasons: SCOPE.openingFloatNotes\r\n                        }]);\r\n                })\r\n            .catch(function (err) {\r\n                $('#openRegister').prop('disabled', false);\r\n                $.unblockUI();\r\n\r\n                if (!!err && !!err.data && err.data.length == 1 && err.data[0].IsAlreadyOpened === true) {\r\n                    // someone has already opened this register\r\n                    // show message and go to sale page\r\n                    errorService.showError(gettextCatalog.getString(\"Someone has already opened this register.\"),\r\n                        function () {\r\n                            $.blockUI();\r\n                            window.localStorage.setItem('continueSale', null);\r\n                            $location.path('/sell');\r\n\r\n                        });\r\n                }\r\n                else if (err !== gettextCatalog.getString(\"The printer was not set up.\"))\r\n                    errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                if ($scope.isRegistryOpened === true) {\r\n                    window.localStorage.setItem('continueSale', null);\r\n                    $location.path('/sell');\r\n                }\r\n            });\r\n        };\r\n\r\n        function loyaltyPaymentDialog() {\r\n            var $windowElement = $('#closeRegisterConfirmPartial');\r\n            helperService.showDialog($windowElement);\r\n        }\r\n\r\n        $scope.closeDialog = function () {\r\n            var $windowElement = $('#closeRegisterConfirmPartial');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n        $scope.getOperationType = function (type) {\r\n            return cashManagementService.getOperationType(type);\r\n        }\r\n\r\n        $scope.getOperationSign = function (type) {\r\n            return cashManagementService.getOperationSign(type);\r\n        };\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n        $scope.cashAmountDlg = null; // is bound to discount popover object with methods from directive\r\n        $scope.checkAmount = 0;\r\n        $scope.editElementType = null;\r\n        $scope.keyboardTitle = \"Amount\";\r\n        $scope.enableChangeSign = true;\r\n\r\n        $scope.showAmountDlg = function (elID, payType) {\r\n            $scope.checkAmount = 0;\r\n            $scope.editElementType = payType;\r\n            $scope.enableChangeSign = true;\r\n            $scope.keyboardTitle = \"Counted amount\";\r\n\r\n            switch (payType) {\r\n                case 'cash':\r\n                    $scope.checkAmount = $scope.closeRegistryObj.CashCounted;\r\n                    break;\r\n                case 'cardpay':\r\n                    $scope.checkAmount = $scope.closeRegistryObj.CreditCardCounted;\r\n                    break;\r\n                case 'floatAmount':\r\n                    $scope.enableChangeSign = false;\r\n                    $scope.keyboardTitle = \"Opening Float Amount\";\r\n                    $scope.checkAmount = $scope.openingFloatAmount;\r\n                    break;\r\n                default:\r\n                    var obj = $scope.closeRegistryObj.customPayments.filter(function (el) { return el.CounterName == payType; })[0];\r\n                    $scope.checkAmount = obj.Counted;\r\n                    break;\r\n            }\r\n\r\n            $timeout(function () {\r\n                $scope.cashAmountDlg.show(elID);\r\n            });\r\n        };\r\n\r\n        // callback\r\n        $scope.setAmount = function (prm) {\r\n            $timeout(function () {\r\n                var sum = 0;\r\n                var changeValue = false;\r\n\r\n                if (typeof (prm) === 'boolean') {\r\n                    if (prm === true) {\r\n                        sum = parseFloat($scope.checkAmount);\r\n                        changeValue = true;\r\n                    }\r\n                }\r\n                else if (typeof (prm) == 'string') {\r\n                    if (prm === 'clean') {\r\n                        sum = 0;\r\n                        changeValue = true;\r\n                    }\r\n                }\r\n\r\n                if (changeValue) {\r\n                    switch ($scope.editElementType) {\r\n                        case 'cash':\r\n                            $scope.closeRegistryObj.CashCounted = helperService.DEARRound(sum, 2);\r\n                            break;\r\n                        case 'cardpay':\r\n                            $scope.closeRegistryObj.CreditCardCounted = helperService.DEARRound(sum, 2);\r\n                            break;\r\n                        case 'floatAmount':\r\n                            $scope.openingFloatAmount = helperService.DEARRound(sum, 2);\r\n                            break;\r\n                        default:\r\n                            var obj = $scope.closeRegistryObj.customPayments.filter(function (el) { return el.CounterName == $scope.editElementType; })[0];\r\n                            obj.Counted = helperService.DEARRound(sum, 2);\r\n                            break;\r\n                    }\r\n                }\r\n\r\n            });\r\n\r\n            $scope.cashAmountDlg.hide(true);\r\n        };\r\n\r\n        $scope.getSurchargeRate = function(surcharge) {\r\n            if (surcharge.SurchargeRateType == 'percentage') {\r\n                return surcharge.SurchargeRate + ' %';\r\n            }\r\n            else {\r\n                return $filter('currency')(surcharge.SurchargeRate);\r\n            }\r\n        };\r\n\r\n        $scope.closeKeyborad = function(){\r\n            if(Keyboard && typeof(Keyboard.close) === \"function\")\r\n                Keyboard.close();\r\n        }\r\n\r\n    }]);\r\n","angular.module('services').service('orderStatusService', [\r\n    'configService', 'localDBProvider', 'jsStoreProvider', 'deviceInfo',\r\n    function (configService, localDBProvider, jsStoreProvider, deviceInfo) {\r\n        var self = this;\r\n        \r\n        /**\r\n         * get database provider\r\n         * @returns {Object} localDBProvider for mobile, jsStoreProvider for web/simulator\r\n         */\r\n        var getProvider = function () {\r\n            return (configService.isSite || deviceInfo.isSimulator) ? jsStoreProvider : localDBProvider;\r\n        };\r\n\r\n        this.isTrackingEnabled = function (onlyConfig = false) {\r\n            return onlyConfig === true\r\n                ? configService.enableOrderStatusTracking \r\n                : (configService.enableOrderStatusTracking || deviceInfo.isSimulator);\r\n        };\r\n\r\n        /**\r\n         * group order status by order id\r\n         * @returns {Array<{OrderID: string, StatusChanges: Array<{Status: string, CreatedDate: string}>}>}\r\n         */\r\n        var groupOrdersByID = function (results) {\r\n            var ordersMap = {};\r\n            \r\n            // group transitions by order id\r\n            for (var i = 0; i < results.length; i++) {\r\n                var row = results[i];\r\n                if (!ordersMap[row.OrderID]) {\r\n                    ordersMap[row.OrderID] = {\r\n                        OrderID: row.OrderID,\r\n                        StatusChanges: []\r\n                    };\r\n                }\r\n                ordersMap[row.OrderID].StatusChanges.push({\r\n                    Status: row.Status,\r\n                    ChangeDate: row.CreatedDate\r\n                });\r\n            }\r\n            \r\n            // convert map to array\r\n            var orders = [];\r\n            for (var orderID in ordersMap) {\r\n                if (ordersMap.hasOwnProperty(orderID)) {\r\n                    orders.push(ordersMap[orderID]);\r\n                }\r\n            }\r\n            \r\n            return orders;\r\n        };\r\n\r\n        var determineOrderStatus = function (saleInfo, sale, rawSale, offlineStatusParked) {\r\n            if (saleInfo.statusID === offlineStatusParked) {\r\n                return 'parked';\r\n            }\r\n            \r\n            switch (saleInfo.statusID) {\r\n                case 'pending':\r\n                case 'CLOSED':\r\n                    // check for refund first\r\n                    if (sale.FinancialStatus === 'RETURN' || rawSale.ReturnID) {\r\n                        return 'refund';\r\n                    }\r\n                    var balance = sale.Balance || 0;\r\n                    var hasPayments = sale.Payments && sale.Payments.length > 0;\r\n                    if (hasPayments && balance > 0) {\r\n                        return 'partially_paid';\r\n                    } else if (hasPayments && balance <= 0) {\r\n                        return 'completed';\r\n                    } else {\r\n                        return 'created';\r\n                    }\r\n                case 'error':\r\n                case 'errorHistory':\r\n                    return 'created';\r\n                case 'layby':\r\n                    return 'layby';\r\n                case 'LAYBY_CLOSED':\r\n                    return 'layby_closed';\r\n                case 'onaccount':\r\n                    return 'onaccount';\r\n                case 'ONACCOUNT_CLOSED':\r\n                    return 'onaccount_closed';\r\n                default:\r\n                    return '[undefined]';\r\n            }\r\n        };\r\n\r\n        /**\r\n         * extract refund and payment IDs from sale object\r\n         * @returns {{refundIDs: Array<string>, paymentIDs: Array<string>}}\r\n         */\r\n        var extractRefundsAndPayments = function (sale) {\r\n            var refundIDs = [];\r\n            var paymentIDs = [];\r\n            \r\n            if (!sale) {\r\n                return { refundIDs: refundIDs, paymentIDs: paymentIDs };\r\n            }\r\n            \r\n            // Extract RefundIDs from Refunds array\r\n            if (sale.Refunds && Array.isArray(sale.Refunds)) {\r\n                refundIDs = sale.Refunds.map(function(refund) {\r\n                    return refund.RefundID;\r\n                }).filter(function(id) { return id; });\r\n            }\r\n            \r\n            // Extract PaymentIDs from Payments array\r\n            if (sale.Payments && Array.isArray(sale.Payments)) {\r\n                paymentIDs = sale.Payments.map(function(payment) {\r\n                    return payment.ID;\r\n                }).filter(function(id) { return id; });\r\n            }\r\n            \r\n            return { refundIDs: refundIDs, paymentIDs: paymentIDs };\r\n        };\r\n\r\n        /**\r\n         * merge payment/refund data into grouped orders\r\n         * @param {Array<{OrderID: string, StatusChanges: Array}>} groupedOrders\r\n         * @param {Array<{OrderID: string, Refunds: string, Payments: string}>} paymentsData\r\n         * @returns {Array<{OrderID: string, StatusChanges: Array, Refunds: Array<string>, Payments: Array<string>}>}\r\n         */\r\n        var mergePaymentData = function (groupedOrders, paymentsData) {\r\n            for (var i = 0; i < groupedOrders.length; i++) {\r\n                var order = groupedOrders[i];\r\n                order.Refunds = [];\r\n                order.Payments = [];\r\n                \r\n                // Find matching payment records\r\n                for (var j = 0; j < paymentsData.length; j++) {\r\n                    var paymentRecord = paymentsData[j];\r\n                    if (paymentRecord.OrderID === order.OrderID) {\r\n                        // Parse JSON arrays\r\n                        if (paymentRecord.Refunds) {\r\n                            try {\r\n                                var refunds = JSON.parse(paymentRecord.Refunds);\r\n                                order.Refunds = order.Refunds.concat(refunds);\r\n                            } catch (e) {\r\n                                console.error('Failed to parse refunds for order:', order.OrderID, e);\r\n                            }\r\n                        }\r\n                        if (paymentRecord.Payments) {\r\n                            try {\r\n                                var payments = JSON.parse(paymentRecord.Payments);\r\n                                order.Payments = order.Payments.concat(payments);\r\n                            } catch (e) {\r\n                                console.error('Failed to parse payments for order:', order.OrderID, e);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            \r\n            return groupedOrders;\r\n        };\r\n\r\n        /**\r\n         * save order status change\r\n         */\r\n        this.trackOrder = function (orderID, registryCloseID, statusOrSaleInfo, openRegistrySalesID) {\r\n            \r\n            // do not track if disabled and not simulator\r\n            if(!this.isTrackingEnabled()) {\r\n                return Promise.resolve();\r\n            }\r\n            var status;\r\n            var refundIDs = [];\r\n            var paymentIDs = [];\r\n            \r\n            if (typeof statusOrSaleInfo === 'string') {\r\n                status = statusOrSaleInfo;\r\n            } else {\r\n                status = determineOrderStatus(\r\n                    statusOrSaleInfo.saleInfo,\r\n                    statusOrSaleInfo.sale,\r\n                    statusOrSaleInfo.rawSale,\r\n                    statusOrSaleInfo.offlineStatusParked\r\n                );\r\n                \r\n                // Extract refunds and payments from sale object\r\n                var extracted = extractRefundsAndPayments(statusOrSaleInfo.sale);\r\n                refundIDs = extracted.refundIDs;\r\n                paymentIDs = extracted.paymentIDs;\r\n            }\r\n            \r\n            // if no orderID, mark as orphan using OrderID = zeros\r\n            if (!orderID) {\r\n                console.warn('orderStatusService.trackOrder: No orderID, storing as orphan');\r\n                orderID = '00000000-0000-0000-0000-000000000000';\r\n            }\r\n            \r\n            // if no registryCloseID, try fallback parameter\r\n            if (!registryCloseID && openRegistrySalesID) {\r\n                registryCloseID = openRegistrySalesID;\r\n            }\r\n            \r\n            // if still no registryCloseID, mark as orphan using RegistryCloseID = zeros\r\n            if (!registryCloseID) {\r\n                console.warn('orderStatusService.trackOrder: No registryCloseID, storing as orphan:', orderID);\r\n                registryCloseID = '00000000-0000-0000-0000-000000000000';\r\n            }\r\n            \r\n            // log status transitions for simulator\r\n            if (deviceInfo.isSimulator) {\r\n                console.log('[Order Status Tracking]', {\r\n                    orderID: orderID,\r\n                    registryCloseID: registryCloseID,\r\n                    status: status,\r\n                    refundIDs: refundIDs,\r\n                    paymentIDs: paymentIDs,\r\n                    timestamp: new Date().toISOString()\r\n                });\r\n            }\r\n\r\n            // do not write to db for simulator if tracking disabled\r\n            if(!this.isTrackingEnabled(true)) {\r\n                return Promise.resolve();\r\n            }\r\n            \r\n            var provider = getProvider();\r\n            return provider.trackOrder(orderID, registryCloseID, status)\r\n                .then(function() {\r\n                    // Track refunds and payments in separate table\r\n                    return provider.trackOrderPayments(orderID, refundIDs, paymentIDs);\r\n                });\r\n        };\r\n\r\n        /**\r\n         * get orphan orders (where OrderID or RegistryCloseID is all zeros)\r\n         * @returns {Promise<Array<{OrderID: string, RegistryCloseID: string, Status: string, CreatedDate: Date}>>}\r\n         */\r\n        this.getOrphanOrders = function () {\r\n            if(!this.isTrackingEnabled()) {\r\n                return Promise.resolve([]);\r\n            }\r\n            return getProvider().getOrphanOrders();\r\n        };\r\n\r\n        /**\r\n         * get orders for registry close including orphan orders with payment/refund data\r\n         * @returns {Promise<Array<{OrderID: string, StatusChanges: Array<{Status: string, CreatedDate: string}>, Refunds: Array<string>, Payments: Array<string>}>>} \r\n         */\r\n        this.getOrdersForCloseRegistry = function (closeRegistryID) {\r\n            if(!this.isTrackingEnabled()) {\r\n                return Promise.resolve([]);\r\n            }\r\n            var THIS = this;\r\n            var provider = getProvider();\r\n            \r\n            // Get both regular orders and orphan orders\r\n            return provider.getOrdersForCloseRegistry(closeRegistryID).then(function (regularOrders) {\r\n                return THIS.getOrphanOrders().then(function (orphanOrders) {\r\n                    // combine both lists\r\n                    var allOrders = regularOrders.concat(orphanOrders);\r\n                    var groupedOrders = groupOrdersByID(allOrders);\r\n                    \r\n                    // now fetch payment/refund data\r\n                    return provider.getOrderPaymentsForCloseRegistry(closeRegistryID).then(function (paymentsData) {\r\n                        return mergePaymentData(groupedOrders, paymentsData);\r\n                    });\r\n                });\r\n            });\r\n        };\r\n    }\r\n]);\r\n","angular.module('services').service('outletService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider', 'deviceInfo',\r\n    function ($q, $http, configService, remoteRequestProvider, localDBProvider, deviceInfo) {\r\n\r\n        this.getUserOulets = function (userID, getRemoteOnly) {\r\n            var provider = (configService.isOnline || getRemoteOnly === true) ? remoteRequestProvider : localDBProvider;\r\n            var pr = provider.getUserPosOutletsRegistry(userID);\r\n\r\n            if (configService.isOnline && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                pr = pr.then(function (resp) {\r\n                    return localDBProvider.saveUserOutlets(resp.data);\r\n                });\r\n            } else if (configService.isSite === true || deviceInfo.isSimulator) {\r\n                pr = pr.then(function (resp) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve({ Outlets: resp.data.Outlets });\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n\r\n            return pr;\r\n        };\r\n\r\n        //this.getPosOutlet = function (posOutletID) {\r\n        //    var provider = configService.isOnline ? remoteRequestProvider : localDBProvider;\r\n        //    var pr = provider.getPosOutlet(posOutletID);\r\n\r\n        //    if (configService.isOnline && configService.isSite === false) {\r\n        //        pr = pr.then(function (resp) {\r\n        //            return localDBProvider.saveUserOutlets(resp.data);\r\n        //        });\r\n        //    }\r\n\r\n        //    return pr;\r\n        //};\r\n        this.updateConfigPaymentProcessors = function (outlet) {\r\n            configService.paymentProcessors = [];\r\n\r\n            var map = {};\r\n            angular.forEach(configService.posPaymentProcessors, function (el) {\r\n                map[el.paymentMethodName.toLowerCase()] = el;\r\n            });\r\n\r\n            if (outlet && outlet.PaymentProcessors && outlet.PaymentProcessors.length) {\r\n                angular.forEach(outlet.PaymentProcessors, function (p) {\r\n                    var pc = angular.copy(p);\r\n                    var ln = pc.paymentMethodName.toLowerCase();\r\n                    if(pc.isCustom) {\r\n                        switch (ln) {\r\n                            case 'cash':\r\n                            case 'store credits':\r\n                            case 'credit card':\r\n                            case 'layby':\r\n                            case 'gift card':\r\n                            case 'loyalty':\r\n                                pc.isCustom = false; // for payment methods that has the same name as main predefined method, we reset isCustom property\r\n                                pc.loweredPaymentMethodName = ln;\r\n                                break;\r\n                        }\r\n                    }\r\n\r\n                    map[ln] = pc;\r\n                });\r\n            }\r\n\r\n            angular.forEach(Object.getOwnPropertyNames(map), function (key) {\r\n                configService.paymentProcessors.push(map[key]);\r\n            });\r\n        };\r\n\r\n        this.getPosOutlet = function(posOutletID) {\r\n            var provider = configService.isOnline ? remoteRequestProvider : localDBProvider;\r\n\r\n            return provider.getPosOutlet(posOutletID)\r\n            .then(function(resp) {\r\n                var data = resp.data || resp;\r\n                if (angular.isArray(data.Outlets)) {\r\n                    return data.Outlets[0] || null;\r\n                }\r\n                return data || null;\r\n            })\r\n            .catch(function() {\r\n                return null;\r\n            });   \r\n        };\r\n    }]);\r\n","angular.module('services').service('paymentSenseReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider', 'helperService', '$timeout', \r\n    function ($q, configService, gettextCatalog, webOnlyProvider, helperService, $timeout) {\r\n\r\n        this.parentScope = null;\r\n        this.socket = null;\r\n\r\n        this.isSocketReady = function() {\r\n            return !!this.socket && \r\n                     this.socket.readyState !== this.socket.CLOSED && \r\n                     this.socket.readyState !== this.socket.CLOSING;\r\n        };\r\n\r\n        this.id = 1;\r\n\r\n        this.init = function (force, settings) {\r\n            var settings = configService.getCardPaymentSettings();\r\n\r\n            var v = !!settings ? settings.PaymentSenseTerminalID : null;\r\n            var THIS = this;\r\n            var p = this.socketClose().then(function(){return THIS.socketConnect();});\r\n\r\n            if (force !== true) {\r\n                if (!v) {\r\n                    var deffered = $q.defer();\r\n                    deffered.reject('Paymentsense terminal is not paired');\r\n                    return deffered.promise;\r\n                }\r\n\r\n                return p;\r\n            }\r\n\r\n            // make pairing\r\n            return p.then(function() { \r\n                return THIS.sendRequest(\"connectedTerminals\", null);\r\n            });\r\n        }\r\n\r\n        this.unpair = function (settings) {\r\n            var settings = configService.getCardPaymentSettings();\r\n            if(!!settings)\r\n                settings.PaymentSenseTerminalID = null;\r\n            var deffered = $q.defer();\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n\r\n        }\r\n\r\n        this.makePayment = function (options) {\r\n            this.hideButtons = true;\r\n            var THIS = this;\r\n\r\n            var settings = configService.getCardPaymentSettings();\r\n            var prms = {\r\n                \"tpi\": settings.PaymentSenseTerminalID,\r\n                \"currency\": options.currency,\r\n                \"amount\": Math.round(options.amount * 100)\r\n            };\r\n\r\n            var deffered0 = $q.defer();\r\n            deffered0.resolve(null);\r\n\r\n            var promise = deffered0.promise\r\n                .then(function () {\r\n                    THIS.progressText = \"Processing...\";\r\n                    THIS.showProgressDialog();\r\n                    var deffered2 = $q.defer();\r\n                    deffered2.resolve(null);\r\n                    return deffered2.promise;\r\n                })\r\n                .then(function () { return THIS.sendRequest(\"sale\", prms); })\r\n                .then(function (res) {\r\n                    var p;\r\n\r\n                    if (!!THIS.signatureDeffered) {\r\n                        p = THIS.signatureDeffered.promise;\r\n                    } else {\r\n                        var deffered3 = $q.defer();\r\n                        deffered3.resolve(true);\r\n                        p = deffered3.promise;\r\n                    }\r\n\r\n                // process payment result\r\n                    p.then(function () {\r\n                        var deffered = $q.defer();\r\n                        THIS.hideProgressDialog(true);\r\n                        deffered.resolve(res);\r\n                        return deffered.promise;\r\n                    });\r\n\r\n                    return p;\r\n                },\r\n                function (err) {\r\n                    var deffered = $q.defer();\r\n                    THIS.hideProgressDialog(true);\r\n                    deffered.reject(err);\r\n                    return deffered.promise;\r\n                });\r\n\r\n            return promise;\r\n        }\r\n\r\n        this.refund = function (el, refundSum, options) {\r\n            this.hideButtons = true;\r\n            var THIS = this;\r\n\r\n            var settings = configService.getCardPaymentSettings();\r\n            var prms = {\r\n                \"tpi\": settings.PaymentSenseTerminalID,\r\n                \"currency\": options.currency,\r\n                \"amount\": Math.round(refundSum * 100)\r\n            };\r\n            var deffered0 = $q.defer();\r\n            deffered0.resolve(null);\r\n\r\n            var promise = deffered0.promise\r\n                .then(function () {\r\n                    THIS.progressText = \"Processing...\";\r\n                    THIS.showProgressDialog();\r\n                    var deffered2 = $q.defer();\r\n                    deffered2.resolve(null);\r\n                    return deffered2.promise;\r\n                })\r\n                .then(function () { return THIS.sendRequest(\"refund\", prms); })\r\n                .then(function (res) {\r\n                    var p;\r\n\r\n                    if (!!THIS.signatureDeffered) {\r\n                        p = THIS.signatureDeffered.promise;\r\n                    } else {\r\n                        var deffered3 = $q.defer();\r\n                        deffered3.resolve(res);\r\n                        p = deffered3.promise;\r\n                    }\r\n\r\n                    // process refund result\r\n                    p.then(function () {\r\n                        var deffered = $q.defer();\r\n                        THIS.hideProgressDialog(true);\r\n                        deffered.resolve(res);\r\n                        return deffered.promise;\r\n                    });\r\n\r\n                    return p;\r\n                },\r\n                function (err) {\r\n                    var deffered = $q.defer();\r\n                    THIS.hideProgressDialog(true);\r\n                    deffered.reject(err);\r\n                    return deffered.promise;\r\n                });\r\n\r\n            return promise;\r\n        }\r\n\r\n        this.closeConnection = function () {\r\n            this.cancelKeepAlive();\r\n        }\r\n\r\n        this.reportStage1 = null;\r\n        this.reportStage2 = null;\r\n\r\n        /*\r\n        To prevent situation, when we got a report from card machine\r\n        but will have some problem with saving data to our server, we will\r\n        save report temporarily into local store.\r\n        So on each next call to this procedure, at first we will check if we\r\n        already have report for this close registry id.\r\n        */\r\n        this.getEndOfDayReport = function(closeRegisterID) {\r\n\r\n            var settings = configService.getCardPaymentSettings();\r\n            var prms = {\r\n                \"tpi\": settings.PaymentSenseTerminalID,\r\n            };\r\n\r\n            var repRes = {\r\n                RegisterCloseID: closeRegisterID\r\n            };\r\n\r\n            var deffered = $q.defer();\r\n            deffered.resolve(repRes);\r\n            var promise = deffered.promise;\r\n//            this.reportStage1 = $q.defer();\r\n//            this.reportStage2 = $q.defer();\r\n            var THIS = this;\r\n\r\n            promise = \r\n            // promise.then(function(res) {\r\n            //     repRes = res;\r\n            //     var savedReport = window.localStorage.getItem('ExtendedEndOfDayReport');\r\n            //     if(!!savedReport) {\r\n            //         savedReport = JSON.parse(savedReport);\r\n            //         if(savedReport.RegisterCloseID === res.RegisterCloseID &&\r\n            //            !!savedReport.ReportXBalance) {\r\n            //                 var deffered2 = $q.defer();\r\n            //                 deffered2.resolve(savedReport);\r\n            //                 return deffered2.promise;\r\n            //         }\r\n            //     }\r\n\r\n            //     return THIS.sendRequest(\"reportXBalance\", prms, THIS.reportStage1)\r\n            //         .then(function (res) {\r\n            //             // process report result\r\n            //             var deffered = $q.defer();\r\n            //             repRes.ReportXBalance = res.result;\r\n            //             window.localStorage.setItem('ExtendedEndOfDayReport', JSON.stringify(repRes));\r\n            //             deffered.resolve(repRes);\r\n            //             return deffered.promise;\r\n            //         });\r\n            // })\r\n            // .then(function(res){\r\n            //     repRes = res;\r\n            //     var savedReport = window.localStorage.getItem('ExtendedEndOfDayReport');\r\n            //     if(!!savedReport) {\r\n            //         savedReport = JSON.parse(savedReport);\r\n            //         if(savedReport.RegisterCloseID === res.RegisterCloseID &&\r\n            //            !!savedReport.ReportBanking) {\r\n            //                 var deffered2 = $q.defer();\r\n            //                 deffered2.resolve(savedReport);\r\n            //                 return deffered2.promise;\r\n            //         }\r\n            //     }\r\n\r\n            //     return THIS.sendRequest(\"reportBanking\", prms, THIS.reportStage2)\r\n            //         .then(function (res) {\r\n            //             // process report result\r\n            //             var deffered = $q.defer();\r\n            //             repRes.ReportBanking = res.result;\r\n            //             window.localStorage.setItem('ExtendedEndOfDayReport', JSON.stringify(repRes));\r\n            //             deffered.resolve(repRes);\r\n            //             return deffered.promise;\r\n            //         });\r\n            // })\r\n            promise\r\n            .then(function(res) {\r\n                repRes = res;\r\n                return THIS.sendRequest(\"reportEndOfDay\", prms)\r\n                .then(function (res) {\r\n\r\n                    // process report result\r\n                    // combine report from previous partial reports.\r\n                    // This is required as in the case of network failure\r\n                    // we can lost data if will retry reportEndOfDay\r\n                    // but partial reports are saved at this point so simply combine them\r\n                    // into EndOfDay report\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve(res.result);\r\n                    return deffered.promise;\r\n                    });\r\n            });\r\n\r\n            return promise;\r\n        }\r\n\r\n        this.masterDeffered = null;\r\n        this.signatureDeffered = null;\r\n\r\n        this.socketConnect = function () {\r\n            this.masterDeffered = null;\r\n            this.signatureDeffered = null;\r\n            this.masterDeffered = $q.defer();\r\n\r\n            // we are already connected\r\n            if (this.isSocketReady()) {\r\n                this.masterDeffered.resolve(this.socket);\r\n                return this.masterDeffered.promise;\r\n            }\r\n\r\n            var url = 'wss://' + configService.lastPaymentSenseURL + '/pac?token=' + \r\n                configService.lastPaymentSenseAPIKey\r\n                + '&api-version=v0';\r\n\r\n            // create connection\r\n            var THIS = this;\r\n            this.socket = new WebSocket(url);\r\n\r\n            this.socket.onopen = function () {\r\n                if(!!THIS.masterDeffered) {\r\n                    THIS.masterDeffered.resolve(true);\r\n                }\r\n\r\n                THIS.keepAlive();\r\n            };\r\n\r\n            this.socket.onclose = function (event) {\r\n                if(!!THIS.masterDeffered) {\r\n                    if (!!event.reason)\r\n                        var msg = event.code === 1002 ? 'The authorization credentials provided are invalid. Please check Paymentsense URL/API key settings on the POS integration page in the Cin7 Core site.' : event.reason;\r\n                        THIS.masterDeffered.reject(msg);\r\n                    THIS.masterDeffered = null;\r\n                }\r\n\r\n                THIS.cancelKeepAlive();\r\n                this.masterDeffered = null;\r\n                this.signatureDeffered = null;\r\n            };\r\n\r\n            this.socket.onmessage = function(event) {\r\n                if(!event.data) return;\r\n\r\n                var data = JSON.parse(event.data);\r\n                if(data.method === 'signatureVerificationRequest'){\r\n                    THIS.hideProgressDialog(true);\r\n                    THIS.hideButtons = false;\r\n                    THIS.parentScope.customModalDlg2Buttons = [{\r\n                        name: gettextCatalog.getString('Yes'),\r\n                        value: 'yes'\r\n                    },\r\n                    {\r\n                        name: gettextCatalog.getString('No'),\r\n                        value: 'no'\r\n                    }];\r\n\r\n                    THIS.parentScope.customModalDlg2Caption = 'Paymentsense payment system';\r\n                    THIS.parentScope.customModalDlg2Text = 'Please, verify customer signature. Is the signature correct?';\r\n                    THIS.parentScope.customModalDlg2Text2 = '';\r\n\r\n                    THIS.parentScope.callbackModal2 = function (code) {\r\n                        var req = {\r\n                            jsonrpc: \"2.0\",\r\n                            id: 0,\r\n                            \"result\": { \"accepted\": code=='yes' ? true : false }\r\n                        };\r\n                        THIS.socket.send(JSON.stringify(req));\r\n                        helperService.closeDialog('#customModalDlg2');\r\n                        THIS.isProgressShown = false;\r\n                        THIS.showProgressDialog();\r\n                        return true;\r\n                    }\r\n    \r\n                    $timeout(function () { helperService.showDialog('#customModalDlg2'); });\r\n                    \r\n                } else if(data.method === 'terminalNotification') {\r\n                    // set popup text\r\n                    var message = data.params.notificationValue;\r\n\r\n                    switch(data.params.notificationValue) {\r\n                        case 'PRESENT_CARD':\r\n                            message = 'Present Card';\r\n                            THIS.hideButtons = false;\r\n                            THIS.parentScope.customModalDlg2Buttons = [{\r\n                                name: gettextCatalog.getString('Cancel'),\r\n                                value: 'cancel'\r\n                            }];\r\n            \r\n                            break;\r\n                        case 'PIN_ENTRY':\r\n                            message = 'Enter pin';\r\n                            break;\r\n                        case 'CONNECTING':\r\n                            message = 'Connecting';\r\n                            break;\r\n                        case 'CONNECTION_MADE':\r\n                            message = 'Connected';\r\n                            break;\r\n                        case 'APPROVED':\r\n                            message = 'Approved';\r\n                            break;\r\n                        case 'REMOVE_CARD':\r\n                            message = 'Remove card';\r\n                            break;\r\n                        case 'RETRYING':\r\n                            message = 'Retrying';\r\n                            break;\r\n                        case 'INSERT_CARD':\r\n                            message = 'Please, insert card';\r\n                            break;\r\n                        case 'PLEASE_WAIT':\r\n                            message = 'Please, wait...';\r\n                            break;\r\n                        case 'PROCESSING_ERROR':\r\n                            message = 'Processing error';\r\n                            break;\r\n                        case 'CARD_ERROR':\r\n                            message = 'Please, insert card';\r\n                            break;\r\n                        case 'SIGNATURE_VERIFICATION_PROCESS_COMPLETED':\r\n                            message = 'Signature verification process has been completed';\r\n                            break;\r\n\r\n                        default:\r\n                        break;\r\n                    }\r\n\r\n                    THIS.progressText = message;\r\n                    if (THIS.isProgressShown) {\r\n                        $timeout(function () {\r\n                            THIS.parentScope.customModalDlg2Text = message;\r\n                            THIS.parentScope.customModalDlg2Text2 = '';\r\n                        });\r\n                    }\r\n                } else if (!data.method && data.result === '') {\r\n                    // ping\r\n                } else if (!!THIS.masterDeffered) {\r\n                    var processTimeout = (!!data.error && data.error.code === -32074) ||\r\n                        (!!data.result && data.result.transactionResult === \"TIMED_OUT\");\r\n                    var timeoutSignature = !!data.error && data.error.code === -32074; \r\n\r\n                    if (!processTimeout && !!data.error) {\r\n                        THIS.hideProgressDialog(true);\r\n\r\n                        var res = {\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: data.error.message\r\n                            }\r\n                        };\r\n\r\n                        THIS.masterDeffered.reject(res);\r\n                        THIS.masterDeffered = null;\r\n                    }\r\n                    else if (processTimeout || (!!data.result && !!data.result.transactionId)) {\r\n                        if (!THIS.signatureDeffered)\r\n                            helperService.closeDialog('#customModalDlg2');\r\n\r\n                        if (processTimeout) {\r\n\r\n                            THIS.parentScope.customModalDlg2Buttons = [{\r\n                                name: gettextCatalog.getString('Yes'),\r\n                                value: 'yes'\r\n                            },\r\n                            {\r\n                                name: gettextCatalog.getString('No'),\r\n                                value: 'no'\r\n                                }];\r\n\r\n                            if (timeoutSignature) {\r\n                                THIS.parentScope.customModalDlg2Buttons = [{\r\n                                    name: gettextCatalog.getString('Yes'),\r\n                                    value: 'yes'\r\n                                }];\r\n\r\n                                THIS.signatureDeffered = $q.defer();\r\n                            }\r\n\r\n                            THIS.parentScope.customModalDlg2Caption = 'Paymentsense payment system';\r\n                            THIS.parentScope.customModalDlg2Text = '';\r\n                            THIS.parentScope.customModalDlg2Text2 = 'Communication with the PDQ has failed and payment may or may not have been taken. Please manually check if the transaction was successful on the PDQ.';\r\n\r\n                            if (!timeoutSignature)\r\n                                THIS.parentScope.customModalDlg2Text2 += '<br/>Was the transaction successful?';\r\n\r\n                            THIS.parentScope.callbackModal2 = function (code) {\r\n                                helperService.closeDialog('#customModalDlg2');\r\n                                if (timeoutSignature) {\r\n                                    THIS.signatureDeffered.resolve(true);\r\n                                } else if (code == 'yes') {\r\n                                    THIS.masterDeffered.resolve({\r\n                                        result: true,\r\n                                        response: {\r\n                                            ServerTransactionID: !!data.result ?\r\n                                                ((!!data.result.transactionId ? data.result.transactionId : data.result.tpi)) :\r\n                                                null,\r\n                                            TransactionMetaData: !!data.result ? data.result : 'Timeout. Manually processed as successful.'\r\n                                        }\r\n                                    });\r\n                                } else {\r\n                                    var res = {\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: 'Transaction was unsuccessfull'\r\n                                        }\r\n                                    };\r\n\r\n                                    THIS.masterDeffered.reject(res);\r\n                                }\r\n\r\n                                return true;\r\n                            }\r\n\r\n                            $timeout(function () { helperService.showDialog('#customModalDlg2'); });\r\n                            return;\r\n\r\n                        } else if(data.result.transactionResult === \"VOID\") {\r\n                            THIS.hideProgressDialog(true);\r\n\r\n                            var res = {\r\n                                result: false,\r\n                                response: {\r\n                                    errorDescription: 'Transaction was voided'\r\n                                }\r\n                            };\r\n    \r\n                            THIS.masterDeffered.reject(res);\r\n   \r\n                        } else if(data.result.transactionType === \"REFUND\") {\r\n                            THIS.masterDeffered.resolve({\r\n                                result: true,\r\n                                amount: helperService.DEARRound(data.result.amountTotal/100, 2),\r\n                                ServerTransactionID: data.result.transactionId,\r\n                                TransactionMetaData: data.result\r\n                            });\r\n                        } else if(data.result.transactionResult === \"SUCCESSFUL\"){\r\n                            THIS.masterDeffered.resolve({\r\n                                result: true,\r\n                                response: {\r\n                                    ServerTransactionID: data.result.transactionId,\r\n                                    TransactionMetaData: data.result\r\n                                }\r\n                            });\r\n                        } else {\r\n                            THIS.hideProgressDialog(true);\r\n\r\n                            var res = {\r\n                                result: false,\r\n                                response: {\r\n                                    errorDescription: 'Transaction was unsuccessfull'\r\n                                }\r\n                            };\r\n    \r\n                            THIS.masterDeffered.reject(res);\r\n                        }\r\n\r\n                        THIS.masterDeffered = null;\r\n\r\n                    } else if(!!data.result && data.result.cancelled === true) {\r\n                        THIS.hideProgressDialog(true);\r\n\r\n                        var res = {\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: 'Transaction was cancelled'\r\n                            }\r\n                        };\r\n\r\n                        THIS.masterDeffered.reject(res);\r\n\r\n                    } else if(!!data.result && data.result.cancelled === false) {\r\n                        THIS.progressText = 'transaction can not be canceled';\r\n                        $timeout(function () {\r\n                            THIS.parentScope.customModalDlg2Text2 = '';\r\n                            THIS.parentScope.customModalDlg2Text = 'transaction can not be canceled';\r\n                        });\r\n                    } else if(data.result.transactionResult == \"CANCELLED\") {\r\n                        THIS.hideProgressDialog(true);\r\n\r\n                        var res = {\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: 'Transaction was cancelled'\r\n                            }\r\n                        };\r\n\r\n                        THIS.masterDeffered.reject(res);\r\n                        THIS.masterDeffered = null;\r\n                    }\r\n                    else if(!!data.result.reportResult){\r\n    \r\n                        if(data.result.reportType === \"X_BALANCE\") {\r\n                            THIS.reportStage1.resolve(data);\r\n                            THIS.reportStage1 = null;\r\n                        } else if(data.result.reportType === \"BANKING\") {\r\n                            THIS.reportStage2.resolve(data);\r\n                            THIS.reportStage2 = null;\r\n                        } else if(data.result.reportType === \"END_OF_DAY\") {\r\n                            THIS.masterDeffered.resolve(data);\r\n                        }\r\n                    }\r\n                    else THIS.masterDeffered.resolve(data);\r\n                }\r\n            };\r\n\r\n            this.socket.onerror = function (error) {\r\n                THIS.hideProgressDialog();\r\n\r\n                if(!!THIS.masterDeffered) {\r\n                    if(!!error.message) {\r\n                        THIS.masterDeffered.reject(error.message);                    \r\n                    } else {\r\n                        THIS.masterDeffered.reject('Can not connect to Paymentsense. Please check Paymentsense URL/API key settings on the POS integration page in the Cin7 Core site.');                    \r\n                        THIS.socket = null;\r\n                    }\r\n\r\n                    // THIS.masterDeffered = null;\r\n                }\r\n            };\r\n\r\n            return THIS.masterDeffered.promise;\r\n        }\r\n\r\n        this.socketClose = function () {\r\n            var deffered = $q.defer();\r\n            if(this.isSocketReady()) {\r\n                this.socket.onclose = null;\r\n                this.socket.close();\r\n            }\r\n            this.socket = null;\r\n            deffered.resolve(true);\r\n            return deffered.promise;\r\n        }\r\n\r\n        this.sendRequest = function (method, prms, df) {\r\n            var req = {\r\n                jsonrpc: \"2.0\",\r\n                id: this.id++,\r\n                method: method\r\n            };\r\n\r\n            if(!!prms)\r\n                req.params = prms;\r\n\r\n            var isCancel = method === 'cancelTransaction';\r\n            if(!isCancel) {\r\n                if(!df)\r\n                    this.masterDeffered = $q.defer();\r\n            }\r\n\r\n            this.socket.send(JSON.stringify(req));\r\n\r\n            if(!isCancel) {\r\n                if(!!df) return df.promise;\r\n                return this.masterDeffered.promise;\r\n            }\r\n        }\r\n\r\n        this.progressText = \"\";\r\n        this.isProgressShown = false;\r\n        this.hideButtons = false;\r\n        this.showProgressDialog = function () {\r\n            var THIS = this;\r\n            if (!this.isProgressShown) {\r\n                this.isProgressShown = true;\r\n\r\n                this.parentScope.customModalDlg2Text2 = '';\r\n                this.parentScope.customModalDlg2Caption = 'Paymentsense payment system';\r\n                this.parentScope.customModalDlg2Text = this.progressText;\r\n                if (!this.hideButtons) {\r\n                    this.parentScope.customModalDlg2Buttons = [{\r\n                        name: gettextCatalog.getString('Cancel'),\r\n                        value: 'cancel'\r\n                    }];\r\n                }\r\n                else {\r\n                    this.parentScope.customModalDlg2Buttons = [];\r\n                }\r\n\r\n                this.parentScope.callbackModal2 = function (code) {\r\n                    console.log('callbackModal2 called');\r\n                    THIS.hideButtons = true;\r\n                    THIS.isProgressShown = false;\r\n                    THIS.showProgressDialog();\r\n                    THIS.cancelCurrentTransaction();\r\n                    return true;\r\n                }\r\n\r\n                $timeout(function () { helperService.showDialog('#customModalDlg2'); });\r\n            }\r\n        }\r\n\r\n        this.hideProgressDialog = function (force) {\r\n            if (this.isProgressShown || force) {\r\n                this.isProgressShown = false;\r\n\r\n                $timeout(function () {\r\n                    helperService.closeDialog('#customModalDlg2');\r\n                });\r\n            }\r\n        };\r\n\r\n        this.cancelCurrentTransaction = function () {\r\n            var settings = configService.getCardPaymentSettings();\r\n\r\n            if (this.isSocketReady()) {\r\n\r\n                this.customModalDlg2Text2 = '';\r\n                this.customModalDlg2Text = \"Cancelling transaction...\";\r\n            }\r\n\r\n            return this.sendRequest(\"cancelTransaction\", { \"tpi\": settings.PaymentSenseTerminalID });\r\n        };\r\n\r\n        this.timerID = 0;\r\n        var THIS = this;\r\n        this.keepAlive = function() {\r\n            var timeout = 10000;\r\n            if (THIS.isSocketReady()) {\r\n                let params = {\r\n                    jsonrpc: \"2.0\",\r\n                    method: \"ping\",\r\n                    id: 0\r\n                };\r\n                THIS.socket.send(JSON.stringify(params));\r\n            }\r\n            THIS.timerId = setTimeout(THIS.keepAlive, timeout);\r\n        }\r\n\r\n        this.cancelKeepAlive = function() {\r\n            if (THIS.timerId) {\r\n                clearTimeout(THIS.timerId);\r\n            }\r\n        }\r\n    }\r\n]);\r\n","angular.\r\n  module('mainApp').\r\n  filter('getDateByFormat', function(helperService) {\r\n    return function(input, format) {\r\n      return helperService.getDateByFormatAlreadyLocal(input, format);\r\n    };\r\n  });","import html2canvas from 'html2canvas';\r\n\r\nangular.module('services').service('printService', [\r\n    '$q', 'helperService', 'errorService', 'constants', 'configService', 'gettextCatalog', '$http', '$rootScope', '$timeout', '$sce', '$compile','uuid2',\r\nfunction ($q, helperService, errorService, constants, configService, gettextCatalog, $http, $rootScope, $timeout, $sce, $compile,uuid2) {\r\n\r\n    this.printerName = null;\r\n    this.paperWidthCode = 3; // defined by dpi and paper width in cm/inches\r\n    this.simulatorMode = false;\r\n    this.printSystem = 'star';\r\n    this.isCloverPrinter = false;\r\n    this.deviceIsStarted = false; // true if any device is connected (star printer mPOP). Not for clover\r\n    this.needReconnection = false;\r\n\r\n    this.preparePrintTemplate = function (scope, element, attrs, tpl) {\r\n        if (angular.isDefined(tpl)) {\r\n\r\n            // adding special attributes for terimnal print areas\r\n\r\n            // to hide native fonts and replace them by smaller font to show on page.\r\n            // when printing - all fonts will be restored\r\n                   // for images set width limit to maximum printer width\r\n            let el = null;\r\n            if (typeof (tpl) == 'string' && tpl.length > 0) {\r\n                var tel = $(tpl);\r\n                if (attrs.ngmHideFonts == 'yes') {\r\n                    tel.find('[style*=\"font-size\"]').each(function () {\r\n                        var sz = $(this).css('font-size');\r\n                        $(this).css('font-size', '');\r\n                        $(this).attr('ngm-font-size', sz);\r\n                    });\r\n                }\r\n                \r\n                this.fixTerimnalPrintingInTemplate(tel);\r\n                this.fixCashPrintingInTemplate(tel);\r\n                this.fixReceipts(tel);\r\n\r\n                helperService.getReceiptProcessSettings(tel);\r\n                this.preprocessElement(tel);\r\n\r\n                el = $compile(tel.html())(scope);\r\n            }\r\n            else {\r\n                if (tpl !== '') {\r\n                    helperService.getReceiptProcessSettings(tpl);\r\n                    this.preprocessElement(tpl);\r\n                }\r\n\r\n                el = $compile(tpl)(scope);\r\n            }\r\n\r\n            element.html(\"\");\r\n            element.append(el);\r\n        }\r\n    }; \r\n\r\n    const fixReceipt = function (tel, attrNgm = 'ngm-terminal') {\r\n        return (function () {\r\n            var ed = $(`<div ${attrNgm} style='display:none;'></div>`);\r\n            var startTab = $(this);\r\n\r\n            // move all elements to div. This will simplify receipt print management\r\n            $(this).nextUntil('[ng-repeat-end]').each(function () {\r\n                var element = $(this).detach();\r\n                var atr = null;\r\n                element.find('[ngm-font-size]').each(function () {\r\n                    $(this).css('font-size', $(this).attr('ngm-font-size'));\r\n                });\r\n                atr = $(this).attr('style');\r\n                var dv = $(\"<div style='\"+(!!atr ? atr : \"\")+\"'></div>\");\r\n                dv.append(element);\r\n                ed.append(dv);\r\n                dv.show(); // remove hide\r\n            });\r\n\r\n            ed.append(tel.find('[print-setting]'));\r\n\r\n            startTab.after(ed);\r\n        });\r\n    };\r\n\r\n    // adding attribute to terminal receipt part to print them differently\r\n    this.fixTerimnalPrintingInTemplate = function (tel) {\r\n        tel.find('[ng-repeat-start=\"itemVantivTerminalReceipts in receiptSaleModel.VantivTerminalReceipts\"]').each(function () {\r\n            var ed = $(\"<div ngm-terminal style='display:none'></div>\");\r\n            var startTab = $(this);\r\n\r\n            // move all elements to div. This will simplify receipt print management\r\n            $(this).nextUntil('[ng-repeat-end]').each(function () {\r\n                var element = $(this).detach();\r\n                ed.append(element);\r\n            });\r\n\r\n            startTab.after(ed);\r\n        });\r\n\r\n        tel.find('span:contains(\"{{itemVantivTerminalReceipts.VantivSignature}}\")').each(function () {\r\n            if ($(this).text() === \"{{itemVantivTerminalReceipts.VantivSignature}}\") {\r\n                $(this).replaceWith(\"<img ng-if='!!itemVantivTerminalReceipts.VantivSignature' src='{{itemVantivTerminalReceipts.VantivSignature}}'></img>\");\r\n            }\r\n        });\r\n\r\n        \r\n        tel.find('[ng-repeat-start=\"itemVantivTags in receiptSaleModel.itemVantivTerminalReceipts.VantivTags\"]').each(function () {\r\n            $(this).attr('ng-repeat-start', \"itemVantivTags in itemVantivTerminalReceipts.VantivTags\");\r\n        });\r\n\r\n        tel.find('span:contains(\"{{itemVantivTerminalReceipts.Parent.\")').each(function () {\r\n            if ($(this).text().indexOf(\"{{itemVantivTerminalReceipts.Parent.\") == 0) {\r\n                var txt = $(this).text();\r\n                txt = txt.replace(\"{{itemVantivTerminalReceipts.Parent.\", \"{{receiptSaleModel.\");\r\n                $(this).text(txt);\r\n            }\r\n        });\r\n    };\r\n\r\n    this.fixReceipts = function(tel) {\r\n        const vars = ['TyroTerminalReceipts', 'LinklyTerminalReceipts', 'TerminalReceipts'];\r\n        vars.forEach(v => {\r\n            tel.find(`[ng-repeat-start=\"item${v} in receiptSaleModel.${v}\"]`).each(fixReceipt(tel));\r\n        });\r\n    }\r\n\r\n    this.fixCashPrintingInTemplate = function (tel) {\r\n        tel.find('[ng-repeat-start=\"itemCashManagementReceipts in receiptSaleModel.CashManagementReceipts\"]').each(fixReceipt(tel, 'ngm-cashmanagement'));\r\n\r\n        tel.find('span:contains(\"{{itemCashManagementReceipts.Parent.\")').each(function () {\r\n            if ($(this).text().indexOf(\"{{itemCashManagementReceipts.Parent.\") == 0) {\r\n                var txt = $(this).text();\r\n                txt = txt.replace(\"{{itemCashManagementReceipts.Parent.\", \"{{receiptSaleModel.\");\r\n                $(this).text(txt);\r\n            }\r\n        });\r\n\r\n    };\r\n\r\n    // for star printers defines by name some additional parameters\r\n    this.detectPrinterByName = function (printSystem, name, modelName, macAddress) {\r\n        var res = {\r\n            macAddress: macAddress,\r\n            portName: name,\r\n            modelName: modelName,\r\n            printerWidthCode: 3,\r\n            hasCashDrawer: true,\r\n            hasInternalScanner: false\r\n        };\r\n\r\n        if (printSystem == 'star' || printSystem == 'epson') {\r\n            res.printSystem = printSystem;\r\n\r\n            if (name) {\r\n                if (name.indexOf('BT:') == 0) {\r\n                    res.interface = 'bluetooth';\r\n                    name = name.substr(3);\r\n                }\r\n                else if (name.indexOf('TCP:') == 0) {\r\n                    res.interface = 'network';\r\n                    name = name.substr(4);\r\n                }\r\n                else if (name.indexOf('USB:') == 0) {\r\n                    res.interface = 'usb';\r\n                    name = name.substr(4);\r\n                }\r\n                else \r\n                    throw new Error('unknown printer type');\r\n            }\r\n            \r\n            if (printSystem == 'epson') {\r\n                name = modelName || name;\r\n            }\r\n\r\n            res.portable = false;\r\n            res.printerName = name;\r\n\r\n            if (name?.indexOf('mPOP') >= 0) {\r\n                res.portable = true;\r\n                res.printerWidthCode = 2;\r\n                res.hasCashDrawer = true;\r\n                res.hasInternalScanner = true;\r\n            }\r\n        }\r\n        console.log('discover printer by name:')\r\n        console.log(res);\r\n\r\n        return res;\r\n    };\r\n\r\n    this.printerOnline = false;\r\n    this.printerPaperNearEmpty = false;\r\n    this.printerPaperEmpty = false;\r\n    this.printerCoverOpen = false;\r\n    this.barcodeScannerOnline = false;\r\n    this.cashDrawerOpen = false;\r\n    this.currentSettings = {};\r\n\r\n    var THIS = this;\r\n    this.eventListenerProcessor = function (evt) {\r\n        console.log('eventListenerProcessor: ' + JSON.stringify(evt));\r\n        if (!THIS.deviceIsStarted && THIS.printSystem == 'star') return;\r\n        if (!THIS.deviceIsStarted && THIS.printSystem == 'epson'\r\n        && evt.dataType != 'printerOnline'\r\n        && evt.dataType != 'printerPaperReady'\r\n        && evt.dataType != 'printerCoverClose') return;\r\n\r\n        var callUpdate = true;\r\n        var message = '';\r\n\r\n        switch (evt.dataType) {\r\n            case 'printerImpossible':\r\n            case 'printerOffline':\r\n                this.printerOnline = false;\r\n                if(THIS.printSystem == 'epson') {\r\n                    THIS.deviceIsStarted = false;\r\n                }\r\n                message = gettextCatalog.getString('Printer is offline.');\r\n                break;\r\n            case 'printerOnline':\r\n                this.printerOnline = true;\r\n                if(THIS.printSystem == 'epson') {\r\n                    THIS.deviceIsStarted = true;\r\n                }\r\n                break;\r\n            case 'printerPaperReady':\r\n                this.printerPaperNearEmpty = false;\r\n                this.printerPaperEmpty = false;\r\n                if(THIS.printSystem == 'epson') {\r\n                    THIS.deviceIsStarted = true;\r\n                }\r\n                break;\r\n\r\n            case 'printerPaperNearEmpty':\r\n                this.printerPaperNearEmpty = true;\r\n                this.printerPaperEmpty = false;\r\n                break;\r\n\r\n            case 'printerPaperEmpty':\r\n                this.printerPaperNearEmpty = false;\r\n                this.printerPaperEmpty = true;\r\n                message = gettextCatalog.getString('Paper roll is empty. Please replace the paper.');\r\n                break;\r\n\r\n            case 'printerCoverOpen':\r\n                this.printerCoverOpen = true;\r\n                message = gettextCatalog.getString('Printer cover is open.');\r\n                break;\r\n\r\n            case 'printerCoverClose':\r\n                this.printerCoverOpen = false;\r\n                if(THIS.printSystem == 'epson') {\r\n                    THIS.deviceIsStarted = true;\r\n                }\r\n                break;\r\n\r\n            case 'barcodeReaderImpossible': \r\n            case 'barcodeReaderDisconnect':\r\n                {\r\n                    this.barcodeScannerOnline = false;\r\n                    var status = this.barcodeScannerOnline === true ? 'ok' : 'error';\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.scannerStatus', status);\r\n                    });\r\n                }\r\n                break;\r\n\r\n            case 'barcodeReaderConnect':\r\n                {\r\n                    this.barcodeScannerOnline = true;\r\n                    var status = this.barcodeScannerOnline === true ? 'ok' : 'error';\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.scannerStatus', status);\r\n                    });\r\n                }\r\n                break;\r\n\r\n            case 'barcodeDataReceive':\r\n                {\r\n                    var cd = evt.data;\r\n                    if (!!evt.data) {\r\n                        cd = cd.replace('\\r', '');\r\n                        cd = cd.replace('\\n', '');\r\n                        cd = cd.trim();\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('scan.barcode', cd);\r\n                    });\r\n                }\r\n                break;\r\n\r\n            case 'cashDrawerOpen':\r\n                {\r\n                    this.cashDrawerOpen = true;\r\n\r\n                    var status = this.cashDrawerOpen === false ? 'ok' : 'error';\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.tillStatus', status);\r\n                    });\r\n                }\r\n                callUpdate = false;\r\n                break;\r\n\r\n            case 'cashDrawerClose':\r\n                {\r\n                    this.cashDrawerOpen = false;\r\n\r\n                    var status = this.cashDrawerOpen === false ? 'ok' : 'error';\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.tillStatus', status);\r\n                    });\r\n                }\r\n                callUpdate = false;\r\n                break;\r\n\r\n            case 'statusUpdate':\r\n                callUpdate = false;\r\n                break;\r\n\r\n            default:\r\n                callUpdate = false;\r\n        }\r\n\r\n        if (callUpdate) {\r\n            var status = (!this.printerOnline || this.printerCoverOpen || this.printerPaperEmpty) ? 'error' :\r\n                        (this.printerPaperNearEmpty ? 'warning' : 'ok');\r\n\r\n            if (status === 'error' && message) {\r\n                errorService.showError(message);\r\n            }\r\n\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('header.printerStatus', status);\r\n            });\r\n        }\r\n    };\r\n\r\n    window.addEventListener('starIOPluginData', this.eventListenerProcessor);\r\n\r\n    this.hasCashDrawer = function () {\r\n        var THIS = this;\r\n        return this.applyPrinterSettings().then(function (settings) {\r\n            var deffered = $q.defer();\r\n            deffered.resolve(THIS.currentSettings.hasCashDrawer);\r\n            return deffered.promise;\r\n        });\r\n    };\r\n\r\n    // stop print (combo) device\r\n    this.disconnect = function () {\r\n        console.log('printService.disconnect');\r\n        var THIS = this;\r\n\r\n        var deffered = $q.defer();\r\n\r\n        return this.applyPrinterSettings().then(function (settings) {\r\n            return THIS.internalDisconnect(settings);\r\n        })\r\n        .then(function (res) {\r\n            deffered.resolve(res);\r\n        },\r\n        function (err) {\r\n            deffered.reject(err);\r\n        });\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.internalDisconnect = function (settings) {\r\n        var THIS = this;\r\n        var deffered = $q.defer();\r\n\r\n        if (!this.deviceIsStarted) {\r\n            deffered.resolve(settings);\r\n            return deffered.promise;\r\n        }\r\n\r\n        if (!THIS.simulatorMode && configService.isMobile) {\r\n            if (settings.printSystem != 'star' && settings.printSystem != 'epson') {\r\n                console.log(\"start device is bypassed\");\r\n                this.deviceIsStarted = false;\r\n                deffered.resolve(settings);\r\n            }\r\n            else if(settings.printSystem == 'epson') {\r\n                console.log(\"trying to disconnect\");\r\n                window.plugins.starPrinter.disconnectEpson(\r\n                    function (err, result) {\r\n                        if (err) {\r\n                            console.log(\"device is busy\");\r\n                            deffered.reject(err);\r\n                        }\r\n                        else {\r\n                            console.log(\"device is disconnected\");\r\n                            THIS.deviceIsStarted = false;\r\n                            deffered.resolve(settings);\r\n                        }\r\n                    });\r\n            }\r\n            else if(settings.printSystem == 'star') {\r\n                console.log(\"trying to disconnect\");\r\n                window.plugins.starPrinter.disconnect(\r\n                    function (err, result) {\r\n\r\n                        if (err) {\r\n                            console.log(\"device is busy\");\r\n                            deffered.reject(err);\r\n                        }\r\n                        else {\r\n                            console.log(\"device is disconnected\");\r\n                            THIS.deviceIsStarted = false;\r\n                            deffered.resolve(settings);\r\n                        }\r\n                    });\r\n            }\r\n\r\n            return deffered.promise;\r\n        }\r\n        else {\r\n            console.log(\"connect printer in emulator is done\");\r\n            deffered.resolve(settings);\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.internalConnect = function (settings) {\r\n        var deffered = $q.defer();\r\n\r\n        if (THIS.deviceIsStarted) {\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n        }\r\n\r\n        if (!THIS.simulatorMode && configService.isMobile) {\r\n            if (settings.printSystem != 'star' && settings.printSystem != 'epson') {\r\n                console.log(\"start device is bypassed\");\r\n                THIS.deviceIsStarted = true;\r\n                deffered.resolve({ status: 'success' });\r\n            }\r\n            else if(settings.printSystem == 'star') {\r\n                if(!settings.printerName) {\r\n                    THIS.deviceIsStarted = false;\r\n                    deffered.reject(\"Printer wasn't set yet.\");\r\n                    return deffered.promise;\r\n                }\r\n                console.log(\"trying to connect\");\r\n                THIS.deviceIsStarted = true; // should be before real call because fo ios there is no event or delay so without this some events can be lost\r\n                window.plugins.starPrinter.connect(THIS.printerName, \r\n                    settings.hasInternalScanner === true, \r\n                    THIS.printMode,\r\n                    THIS.currentSettings.portSettings,\r\n//                window.plugins.starPrinter.connect(THIS.printerName, true,\r\n                    function (err, result) {\r\n                        if (err) {\r\n                            console.log(\"device is not connected\");\r\n                            THIS.deviceIsStarted = false;\r\n\r\n                            deffered.reject(err);\r\n                        }\r\n                        else {\r\n                            if (result === true || (!!result && typeof (result.dataType) == 'string')) {\r\n                                console.log(\"device is connected\");\r\n                                THIS.deviceIsStarted = true;\r\n                                deffered.resolve(result);\r\n                            }\r\n                            else {\r\n                                console.log(\"device is not connected\");\r\n                                THIS.deviceIsStarted = false;\r\n\r\n                                deffered.reject(\"failure\");\r\n                            }\r\n                        }\r\n                    });\r\n            }\r\n            else if(settings.printSystem == 'epson') {\r\n                if(!settings.printerName) {\r\n                    THIS.deviceIsStarted = false;\r\n                    deffered.reject(\"Printer wasn't set yet.\");\r\n                    return deffered.promise;\r\n                }\r\n                if (!THIS.printerName) {\r\n                    THIS.deviceIsStarted = false;\r\n                    deffered.reject(\"Printer port wasn't set yet.\");\r\n                    return deffered.promise;\r\n                }\r\n                THIS.deviceIsStarted = true; // should be before real call because fo ios there is no event or delay so without this some events can be lost\r\n                window.plugins.starPrinter.connectEpson(THIS.printerName, \r\n                    THIS.currentSettings.printerModel,\r\n                    function (err, result) {\r\n                        if (err) {\r\n                            console.log(\"device is not connected\");\r\n                            THIS.deviceIsStarted = false;\r\n                            deffered.reject(err);\r\n                        }\r\n                        else {\r\n                            if (result === true || (!!result && typeof (result.dataType) == 'string')) {\r\n                                console.log(\"device is connected\");\r\n                                THIS.deviceIsStarted = true;\r\n                                deffered.resolve(result);\r\n                            }\r\n                            else {\r\n                                console.log(\"device is not connected\");\r\n                                THIS.deviceIsStarted = false;\r\n                                deffered.reject(\"failure\");\r\n                            }\r\n                        }\r\n                    });\r\n            }\r\n\r\n            return deffered.promise;\r\n        }\r\n        else {\r\n            console.log(\"connect star in emulator is done\");\r\n            deffered.resolve(null);\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.reconnect = function (noScanner) {\r\n        return this.applyPrinterSettings().then(function (settings) {\r\n            if (settings.hasInternalScanner === true && settings.needReconnection === true) {\r\n                return THIS.disconnect().then(function (res) { return THIS.connect(noScanner); });\r\n            }\r\n            else\r\n                return THIS.connect();\r\n        })\r\n    };\r\n\r\n\r\n    // connect to print (combo) device if settings are set\r\n    // new call to this function will reconnect with new settings\r\n    this.connect = function (noScanner) {\r\n        var deffered = $q.defer();\r\n        console.log('printService.connect');\r\n\r\n        this.applyPrinterSettings(noScanner).then(function (settings) {\r\n            console.log('printService.connect first attempt');\r\n            return THIS.internalConnect(settings);\r\n        }).then(function (res) {\r\n            deffered.resolve(res);\r\n        },\r\n        function (err) {\r\n            console.log('printService.connect attempt failed');\r\n            deffered.reject(false);\r\n\r\n            //// try once more\r\n            //THIS.applyPrinterSettings(noScanner).then(function (settings) {\r\n            //    console.log('printService.connect second attempt');\r\n            //    return THIS.internalConnect(settings);\r\n            //})\r\n            //.then(function (res) {\r\n            //    deffered.resolve(res);\r\n            //},\r\n            //function (err) {\r\n            //    // try once more\r\n            //    THIS.applyPrinterSettings(noScanner).then(function (settings) {\r\n            //        console.log('printService.connect third attempt');\r\n            //        return THIS.internalConnect(settings);\r\n            //    })\r\n            //    .then(function (res) {\r\n            //        deffered.resolve(res);\r\n            //    },\r\n            //    function (err) {\r\n            //        console.log('printService.connect three attempts were failed');\r\n            //        deffered.reject(false);\r\n            //    });\r\n            //});\r\n        });\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.discoverAvailablePrinters = function (printerSystem) {\r\n        THIS = this;\r\n        var res = [];\r\n        var deffered = $q.defer();\r\n\r\n\r\n        if (!configService.isMobile) {\r\n            deffered.resolve(res);\r\n        }\r\n        else if (printerSystem === 'epson') {\r\n            window.plugins.starPrinter.portDiscoveryEpson(function (err, result) {\r\n                if (err) {\r\n                    console.log(\"portDiscoveryEpson error: \" + err);\r\n                    deffered.resolve(res);\r\n                }\r\n                else {\r\n                    console.log(\"portDiscoveryEpson is done:\" + JSON.stringify(result));\r\n                    if (result) {\r\n                        $.each(result, function (i, e) {\r\n                            res.push(THIS.detectPrinterByName(printerSystem,\r\n                                                              (!!e.target ? e.target : e.deviceName),\r\n                                                              (!!e.deviceName ? e.deviceName : null), e.macAddress));\r\n                        });\r\n                    }\r\n\r\n                    deffered.resolve(res);\r\n                    console.log(\"portDiscovery result:\" + JSON.stringify(res));\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            window.plugins.starPrinter.portDiscovery('All', function (err, result) {\r\n                if (err) {\r\n                    console.log(\"portDiscovery error: \" + err);\r\n                    deffered.resolve(res);\r\n                }\r\n                else {\r\n                    console.log(\"portDiscovery is done:\" + JSON.stringify(result));\r\n                    if (result) {\r\n                        $.each(result, function (i, e) {\r\n                            res.push(THIS.detectPrinterByName(printerSystem,\r\n                                                              (!!e.name ? e.name : e.portName),\r\n                                                              (!!e.modelName ? e.modelName : null), e.macAddress));\r\n                        });\r\n                    }\r\n\r\n                    deffered.resolve(res);\r\n                    console.log(\"portDiscovery result:\" + JSON.stringify(res));\r\n                }\r\n            });\r\n        }\r\n\r\n        return deffered.promise;\r\n    }\r\n\r\n    this.applyPrinterSettings = function (forceNoScanner) {\r\n\r\n//        var settings = configService.getPrinterSettings(configService.isSite);\r\n        var settings = configService.getPrinterSettings(true);\r\n\r\n        this.needReconnection = false;//settings.hasInternalScanner===true && buildConfiguration.platform == 'android';\r\n        settings.needReconnection = this.needReconnection;\r\n\r\n        if (forceNoScanner === true)\r\n            settings.hasInternalScanner = false;\r\n\r\n        this.currentSettings = settings;\r\n\r\n        if (configService.isSite || this.simulatorMode || configService.isEmulator) {\r\n            this.deviceIsStarted = true;\r\n        }\r\n\r\n        if (!settings) {\r\n            var deffered = $q.defer();\r\n            deffered.reject('Printer is not installed');\r\n            return deffered.promise;\r\n        }\r\n\r\n        this.paperWidthCode = settings.printerWidthCode;\r\n        this.printerWidthPoints = settings.printerWidthPoints;\r\n        this.simulatorMode = settings.simulatorMode;\r\n        this.printSystem = settings.printSystem;\r\n        this.printMode = settings.portable === true ? 'portable' : 'standard';\r\n\r\n        console.log('settings:' + JSON.stringify(settings));\r\n\r\n        var fun = this.initPrinter;\r\n\r\n        if (!configService.isSite) {\r\n\r\n            if (configService.isClover && THIS.printSystem == 'clover')\r\n                fun = this.initCloverPrinter;\r\n            else\r\n                if (THIS.printSystem == 'star')\r\n                    fun = this.initStarPrinter;\r\n                if (THIS.printSystem == 'epson')\r\n                    fun = this.initEpsonPrinter;\r\n        }\r\n\r\n\r\n        return fun(this, settings);\r\n    }\r\n\r\n    this.openCashDrawer = function () {\r\n        var THIS = this;\r\n        if (!THIS.currentSettings || !THIS.currentSettings.printerName) {\r\n            var deffered = $q.defer();\r\n            console.log(\"open drawer is bypassed\");\r\n            deffered.resolve({ status: 'success' });\r\n            return deffered.promise;\r\n        }\r\n\r\n        return this.applyPrinterSettings()\r\n        .then(function () {\r\n            var deffered = $q.defer();\r\n\r\n            if (!THIS.simulatorMode && configService.isMobile) {\r\n                if (!THIS.currentSettings.hasCashDrawer || (configService.isClover && THIS.printSystem == 'clover')) {\r\n                    console.log(\"open drawer is bypassed\");\r\n                    deffered.resolve({ status: 'success' });\r\n                }\r\n                else {\r\n                    if (THIS.printSystem == 'star') {\r\n                        window.plugins.starPrinter.openCashDrawer(THIS.printerName,\r\n                            THIS.currentSettings.portSettings,\r\n                            THIS.currentSettings.emulation,\r\n                            function (err, result) {\r\n                                if (err) {\r\n                                    console.log(\"printer is not connected: \" + JSON.stringify(err));\r\n                                    $.unblockUI();\r\n                                    errorService.showError(gettextCatalog.getString(\"Can't open cash drawer automatically: \") + err, function () {\r\n                                        $.blockUI();\r\n                                        deffered.resolve(err);\r\n                                    });\r\n                                }\r\n                                else {\r\n                                    console.log(\"open drawer is done\");\r\n                                    deffered.resolve(result);\r\n                                }\r\n                            });\r\n                    }\r\n                    else if (THIS.printSystem == 'epson') {\r\n                        window.plugins.starPrinter.openCashDrawerEpson(THIS.printerName,\r\n                            THIS.currentSettings.printerModel,\r\n                            function (err, result) {\r\n                                if (err) {\r\n                                    console.log(\"printer is not connected: \" + JSON.stringify(err));\r\n                                    $.unblockUI();\r\n                                    errorService.showError(gettextCatalog.getString(\"Can't open cash drawer automatically: \") + err, function () {\r\n                                        $.blockUI();\r\n                                        deffered.resolve(err);\r\n                                    });\r\n                                }\r\n                                else {\r\n                                    console.log(\"open drawer is done\");\r\n                                    deffered.resolve(result);\r\n                                }\r\n                            });\r\n                    }\r\n                }\r\n\r\n                return deffered.promise;\r\n            }\r\n            else {\r\n                console.log(\"open drawer in emulator is done\");\r\n                deffered.resolve(null);\r\n            }\r\n\r\n            return deffered.promise;\r\n\r\n        });\r\n\r\n    };\r\n\r\n    this.checkPrinterConnection = function () {\r\n        var THIS = this;\r\n\r\n        return this.applyPrinterSettings()\r\n            .then(function (settings) {\r\n                var deffered = $q.defer();\r\n\r\n                if (!THIS.simulatorMode && configService.isMobile) {\r\n                    if (configService.isClover && settings.printSystem == 'clover') {\r\n                        console.log(\"print connection is done\");\r\n                        deffered.resolve({ status: 'success' });\r\n                    }\r\n                    else\r\n                        if (settings.printSystem == 'epson') {\r\n                            window.plugins.starPrinter.checkStatusEpson(THIS.printerName, THIS.printerModel,\r\n                                function (err, result) {\r\n                                    if (err) {\r\n                                        console.log(\"printer is not connected\");\r\n                                        deffered.reject(err);\r\n                                    }\r\n                                    else {\r\n                                        console.log(\"printer connection is done\");\r\n                                        deffered.resolve(result);\r\n                                    }\r\n                                });\r\n                        }\r\n                        else {\r\n                            window.plugins.starPrinter.checkStatus(THIS.printerName, THIS.printMode,\r\n                                function (err, result) {\r\n                                    if (err) {\r\n                                        console.log(\"print is not connected\");\r\n                                        deffered.reject(err);\r\n                                    }\r\n                                    else {\r\n                                        console.log(\"print connection is done\");\r\n                                        deffered.resolve(result);\r\n                                    }\r\n                                });\r\n                        }\r\n\r\n                    return deffered.promise;\r\n                }\r\n                else {\r\n                    console.log(\"print connection in emulator is done\");\r\n                    deffered.resolve(null);\r\n                }\r\n\r\n                return deffered.promise;\r\n\r\n            });\r\n    };\r\n\r\n    this.printTest = function () {\r\n        var THIS = this;\r\n        var ht = '<div><h2>Receipt print test</h2></div>';\r\n        return this.printReceiptFromHTML($(ht));\r\n    };\r\n\r\n    // complex printing. All elements to print will be collected and printed on last call\r\n\r\n    this.printDataContainer = [];\r\n\r\n    // collectMode == 1 - collect data to array\r\n    // collectMode == 0 - print all\r\n    // other values - simple print in place\r\n    this.collectMode = null;\r\n\r\n    this.initPrintCollectMode = function () {\r\n        this.printDataContainer = [];\r\n        this.collectMode = 1;\r\n    };\r\n\r\n    this.finishPrintCollectMode = function () {\r\n        this.collectMode = 0;\r\n    };\r\n\r\n    this.resetPrintCollectMode = function () {\r\n        this.collectMode = null;\r\n        this.printDataContainer = [];\r\n    };\r\n\r\n    this.printReceiptFromHTML = function (el, width) {\r\n        if (this.collectMode === 0 && !(configService.isSite && !this.simulatorMode)) {\r\n            // real mobile device or emulator\r\n            // all receipts print on by one\r\n            var q = $q.defer();\r\n            q.resolve(null);\r\n            var pr = q.promise;\r\n            var THIS = this;\r\n\r\n            angular.forEach(this.printDataContainer, function (e) {\r\n                if (!!e && !!e.data && e.data.length > 0) {\r\n                    pr = pr.then(function(res){\r\n                        return THIS.printReceiptFromHTMLInternal(e.data[0], e.width);\r\n                    });\r\n                }\r\n            });\r\n\r\n            return pr;\r\n        }\r\n        else\r\n            return this.printReceiptFromHTMLInternal(el, width);\r\n    };\r\n\r\n    this.preprocessElement = function (el, width) {\r\n        var THISFunc = this;\r\n        // get all process attributes\r\n        var settings = {};\r\n        el.find('div[print-setting]').each(function () {\r\n            var e = $(this);\r\n            var txt = e.attr('print-setting');\r\n            if (!!txt)\r\n                settings[txt] = true;\r\n        });\r\n\r\n        if (settings.FontScaleRelativeTo3inch === true && !!width) {\r\n            var coeff = width / 566;\r\n\r\n            el.find(\"[style*='width:']\").each(function () {\r\n                var e = $(this);\r\n                if (!!e[0] && !!e[0].style['width']) {\r\n                    var w = e.css('width');\r\n\r\n                    var obj = THIS.replaceValue(w);\r\n                    if (!!obj)\r\n                        e.css('width', (obj.v * coeff) + obj.ext);\r\n                }\r\n            });\r\n\r\n            el.find(\"[style*='font-size:']\").each(function () {\r\n                var e = $(this);\r\n                if (!!e[0] && !!e[0].style['font-size']) {\r\n                    var sz = e.css('font-size');\r\n                    var obj = THIS.replaceValue(sz);\r\n                    if (!!obj)\r\n                        e.css('font-size', (obj.v * coeff) + obj.ext);\r\n                }\r\n            });\r\n        }\r\n\r\n        if (!THISFunc.simulatorMode && !configService.isEmulator && !configService.isSite){\r\n            el.find('pre').each(function() {\r\n                var e = $(this);\r\n                if (!!e[0] && !e[0].style['font-family']) {\r\n                    var str = Array.prototype.slice.call(e[0].childNodes).find(x => !!x.data).data;\r\n                    var copy = e.clone();\r\n                    copy.css({'visibility': 'hidden'});\r\n                    copy.css({'width': 'auto'});\r\n                    var hidden = copy.appendTo('body');\r\n                    var widthOfText = hidden.width();\r\n                    var widthPerChar = widthOfText / (str.length == 0 ? 1 : str.length);\r\n                    hidden.remove();\r\n    \r\n                    var containerWidth = width;\r\n                    var k = containerWidth / (widthOfText * 0.75);\r\n                    var fontSize = k * widthPerChar;\r\n    \r\n                    e.css({'fontSize': fontSize+'pt'});\r\n                }\r\n            });\r\n        }\r\n\r\n        if (settings.BreakWordsInTable === true) {\r\n            el.find(\"table\").each(function () {\r\n                var e = $(this);\r\n                e.css('word-break', 'break-all');\r\n                e.css('word-wrap', 'break-word');\r\n            });\r\n        }\r\n    };\r\n\r\n    this.replaceValue = function (val) {\r\n\r\n        var ext = '';\r\n        var v = 0;\r\n\r\n        if (!!val) {\r\n            v = parseFloat(val);\r\n            ext = val.replace(/[-\\d\\.]/g, '');\r\n\r\n            if (ext == 'pt' ||\r\n                ext == 'px' ||\r\n                !ext) {\r\n                return { ext: ext, v: v };\r\n            }\r\n        }\r\n\r\n        return null;\r\n    };\r\n\r\n    this.printReceiptFromHTMLInternal = function (el, width) {\r\n        var THIS = this;\r\n        var printDataContainerLocal = [];\r\n        var collectModeLocal = this.collectMode;\r\n\r\n        if (collectModeLocal === 0) {\r\n            printDataContainerLocal = this.printDataContainer;\r\n        }\r\n\r\n        console.log('printReceiptFromHTML start');\r\n        // at first convert html from pointed element to image in canvas\r\n        return this.applyPrinterSettings()\r\n        .then(function () {\r\n                console.log('printReceiptFromHTML applyPrinterSettings finished. Printer name:' + THIS.printerName);\r\n\r\n                if (collectModeLocal === 1) {\r\n                    // collect data\r\n                    var q = $q.defer();\r\n                    var cln = $(el).clone();\r\n                    //THIS.preprocessElement(cln, !!width ? width : THIS.printerWidthPoints);\r\n                    THIS.printDataContainer.push({ data: cln, width: width });\r\n                    q.resolve(null);\r\n                    return q.promise;\r\n                }\r\n\r\n                if (configService.isSite && !THIS.simulatorMode) {\r\n\r\n                    //if (collectModeLocal === 1) {\r\n                    //    // collect data\r\n                    //    var q = $q.defer();\r\n                    //    THIS.printDataContainer.push({ data: $(el).clone(), width: width });\r\n                    //    q.resolve(null);\r\n                    //}\r\n                    if (collectModeLocal === 0) {\r\n                        // print collected\r\n                        var q = $q.defer();\r\n\r\n                        if (!!printDataContainerLocal && printDataContainerLocal.length > 0) {\r\n                            // combine all in one\r\n                            let html = $('<div/>');\r\n\r\n                            var isFirst = true;\r\n                            angular.forEach(printDataContainerLocal, function (el) {\r\n                                if (!isFirst) {\r\n                                    html = html.append('<p style=\"page-break-after: always;\"></p>');\r\n                                }\r\n\r\n                                html = html.append(el.data);\r\n                                isFirst = false;\r\n                            });\r\n\r\n                            html.printArea();\r\n                            $timeout(function () { q.resolve(null); }, 500);\r\n                        }\r\n                        else {\r\n                            q.resolve(null);\r\n                        }\r\n                        \r\n                    }\r\n                    else {\r\n                        // simple print\r\n                        var q = $q.defer();\r\n                        $(el).printArea();\r\n                        q.resolve(null);\r\n                    }\r\n\r\n                    return q.promise;\r\n                }\r\n\r\n                var e = $(el);\r\n\r\n                // for images set width limit to maximum printer width\r\n                e.find('img').each(function () {\r\n                    $(this).css('max-width', (THIS.printerWidthPoints-20) + 'px');\r\n                });\r\n\r\n                var cnt = THIS.createPrintContainer(e, THIS.printerWidthPoints);\r\n                e = $(cnt.contentDocument.getElementById('printerAreaID'));\r\n                console.log('printReceiptFromHTML createPrintContainer finished');\r\n\r\n\r\n            if (configService.isEmulator || THIS.simulatorMode) {\r\n                var q = $q.defer();\r\n                html2canvas(e[0])\r\n                    .then(function (res) {\r\n                        q.resolve(res);\r\n                    })\r\n                    .catch(function (ex) {\r\n                        q.reject(ex);\r\n                    });\r\n                return q.promise;\r\n            }\r\n\r\n            var q = $q.defer();\r\n            var s = e.parent().parent().html().replace('<head></head>', '');\r\n            q.resolve({\r\n                printerName: THIS.printerName,\r\n                width: e.outerWidth(),\r\n                height: e.outerHeight(),\r\n                html: '<!DOCTYPE html><html><head><title>receipt</title><meta name=\"viewport\" content=\"initial-scale=1.0\" /></head>' + s + '</html>'\r\n            });\r\n            return q.promise;\r\n        })\r\n            .then(function (data) {\r\n            console.log('printReceiptFromHTML html2canvas finished');\r\n\r\n            var canvas = data;\r\n\r\n            var q = $q.defer();\r\n\r\n            if (data == null) {\r\n                q.resolve(null);\r\n                return q.promise;\r\n            }\r\n\r\n            if (typeof (canvas) == 'string') {\r\n                q.resolve(canvas);\r\n            }\r\n            else if (!!data.html) {\r\n                data.mode = THIS.printMode;\r\n                q.resolve(data);\r\n            }\r\n            else {\r\n                q.resolve({\r\n                    printerName: THIS.printerName,\r\n                    width: THIS.printerWidthPoints,\r\n                    canvas: canvas,\r\n                    mode: THIS.printMode\r\n                });\r\n            }\r\n\r\n            return q.promise;\r\n\r\n        })\r\n        .then(function (dat) {\r\n            var q = $q.defer();\r\n\r\n            if (dat == null) {\r\n                q.resolve(null);\r\n                return q.promise;\r\n            }\r\n\r\n            if (!THIS.simulatorMode && configService.isMobile) {\r\n                console.log('printReceiptFromHTML before printFromCanvas: ');\r\n                var fun = null;\r\n                if (configService.isClover && THIS.printSystem == 'clover')\r\n                    fun = window.plugins.starPrinter.printFromHTMLClover;\r\n                else if(THIS.printSystem == 'embedded')\r\n                    fun = THIS.printHTMLViaPrintService;\r\n                else if(THIS.printSystem == 'epson')\r\n                    fun = window.plugins.starPrinter.printFromHTMLEpson;\r\n                else\r\n                    fun = window.plugins.starPrinter.printFromHTML;\r\n\r\n\r\n                if(THIS.printSystem == 'epson') {\r\n                    fun(dat.printerName,\r\n                        THIS.currentSettings.printerModel,\r\n                        dat.width,\r\n                        dat.height,\r\n                        dat.html,\r\n                        !helperService.checkDeviceVersion(),\r\n\r\n                        function (err, result) {\r\n                            console.log('printFromHTML printFromCanvas finished');\r\n    \r\n                            if (err) {\r\n                                console.log(\"print is failed:\" + err);\r\n    \r\n                                if (err.indexOf('Failed to connect port') >= 0) {\r\n                                    err = 'Printer is not connected! Please check printer is turned on.';\r\n                                }\r\n                                q.reject(err);\r\n                            }\r\n                            else {\r\n                                console.log(\"print is done\");\r\n                                q.resolve(result);\r\n                            }\r\n                        }\r\n                    );\r\n                } else {\r\n                    fun(dat.printerName,\r\n                        dat.width,\r\n                        dat.height,\r\n                        dat.html,\r\n                        !helperService.checkDeviceVersion(),\r\n                        dat.mode,\r\n                        THIS.currentSettings.portSettings,\r\n                        THIS.currentSettings.emulation,\r\n                        function (err, result) {\r\n                            console.log('printFromHTML printFromCanvas finished');\r\n    \r\n                            if (err) {\r\n                                console.log(\"print is failed:\" + err);\r\n    \r\n                                if (err.indexOf('Failed to connect port') >= 0) {\r\n                                    err = 'Printer is not connected! Please check printer is turned on.';\r\n                                }\r\n                                q.reject(err);\r\n                            }\r\n                            else {\r\n                                console.log(\"print is done\");\r\n                                q.resolve(result);\r\n                            }\r\n                        }\r\n                    );\r\n                }\r\n            }\r\n            else {\r\n                if (dat != null && (configService.isEmulator || THIS.simulatorMode)) {\r\n                    THIS.showPrintImage(dat.canvas, dat.canvas.width, dat.canvas.height,\r\n                    function () {\r\n                        console.log(\"print in emulator is done\");\r\n                        q.resolve(null);\r\n                    });\r\n                }\r\n                else {\r\n                    console.log(\"print is done\");\r\n                    q.resolve(null);\r\n                }\r\n            }\r\n\r\n            return q.promise;\r\n        });\r\n    };\r\n\r\n    this.showPrintImage = function (canvas, width, height, callback) {\r\n        var data64 = canvas.toDataURL('image/png');\r\n        $('body').find('#printBodyContainerID').remove();\r\n\r\n        let modalStr = `\r\n        <div id=\"printBodyContainerID\" class=\"modal fade dp_modal\" tabindex=\"-1\" role=\"dialog\" style=\"z-index:100051;\">\r\n        <div class=\"modal-dialog dp_modal-dialog\" role=\"document\" style=\"width: auto;\">\r\n            <div class=\"modal-content dp_modal-content dialog-gray\">\r\n            <div class=\"modal-header dp_modal-header\">\r\n            <div class=\"header-container\">\r\n                <div class=\"header-container-row\">\r\n                <div><span class=\"close-modal-dialog-button pointerCursor\" data-dismiss=\"modal\" aria-label=\"Close\" tranlate>Close</span></div>\r\n                <div><h4 class=\"modal-title dp_modal-title\">${gettextCatalog.getString(\"Receipt\")}</h4></div>\r\n                <div></div>\r\n                </div>\r\n            </div>\r\n            </div>\r\n            <div id=\"printContainerID\" style=\"overflow:auto;height:${$(window).height() * 0.7}px;\"><div class=\"modal-body\" id=\"printBodyID\" style=\"text-align: center; height:${height + 30}px;\">\r\n            </div></div>\r\n            </div>\r\n        </div>\r\n        </div>`;\r\n\r\n        var $d = $(modalStr);\r\n        $d.find('.modal-body').append('<img src=\"' + data64 + '\" style=\"width: calc(100% - 30px)\"/>');\r\n        $('body').append($d);\r\n\r\n        function resizePrintContainer() {\r\n            if (configService.isMobileDesign == true) {\r\n                var modalContainerHeight = helperService.getModalContainerHeight($('#printContainerID'));\r\n                $('#printContainerID').outerHeight(modalContainerHeight);\r\n            }\r\n        }\r\n\r\n        $d.on('shown.bs.modal', resizePrintContainer);\r\n        $(window).on('resize', resizePrintContainer);\r\n\r\n        if (typeof callback == 'function') {\r\n            $.unblockUI();\r\n            helperService.showDialog($d, function (wnd) {\r\n                wnd.on('hidden.bs.modal', function (e) {\r\n                    callback();\r\n                    $.blockUI();\r\n\r\n                    $(window).off('resize', resizePrintContainer);\r\n                });\r\n                \r\n            });\r\n        }\r\n        else {\r\n            helperService.showDialog($d, function(wnd){\r\n                wnd.on('hidden.bs.modal', function (e) {\r\n                    $(window).off('resize', resizePrintContainer);\r\n                });\r\n            });\r\n        }\r\n    };\r\n\r\n    this.createPrintContainer = function (el, width) {\r\n        console.log('Enter createPrintContainer');\r\n        $('.print-container').remove();\r\n\r\n        //var width = el.outerWidth();\r\n        //var height = el.outerHeight();\r\n\r\n        var container = document.createElement(\"iframe\");\r\n        container.className = \"print-container\";\r\n        container.style.visibility = \"hidden\";\r\n        container.style.position = \"fixed\";\r\n        container.style.left = \"-10000px\";\r\n        container.style.top = \"0px\";\r\n        container.style.border = \"0\";\r\n        container.width = width;\r\n        // container.height = height;\r\n        container.scrolling = \"no\"; // ios won't scroll without it\r\n\r\n        //// for debug only !!!\r\n        //container.style.visibility = \"visible\";\r\n        //container.style.left = \"0px\";\r\n        //container.scrolling = \"yes\";\r\n        ////\r\n\r\n        document.body.appendChild(container);\r\n        var ec = el.clone();\r\n        ec.css({ \"background-color\": \"white\", 'position': 'absolute', 'left': '0', 'top': '0', 'width': width + 'px' });\r\n        ec.attr('id', 'printerAreaID');\r\n        ec.removeAttr('template');\r\n\r\n\r\n        $(container.contentDocument.body).append(ec);\r\n\r\n        var o = {\r\n            height: container.height,\r\n            width: container.width\r\n        };\r\n        console.log('leave createPrintContainer: ' + JSON.stringify(o));\r\n    \r\n        return container;\r\n    };\r\n\r\n    this.initStarPrinter = function (THIS, settings) {\r\n        var connectionInterface = \"bt:\";\r\n        if(settings.interface && settings.interface == \"network\") {\r\n            connectionInterface = \"tcp:\";\r\n        } else if((!settings.interface || settings.interface !== \"bluetooth\")\r\n        && THIS.isStringIPAddress(settings.printerName)) {\r\n            connectionInterface = \"tcp:\";\r\n        }\r\n\r\n        if (!!settings.macAddress && connectionInterface === \"bt:\")\r\n            THIS.printerName = connectionInterface + settings.macAddress;\r\n        else if (!!settings.portName)\r\n            THIS.printerName = settings.portName;\r\n        else\r\n            THIS.printerName = connectionInterface + settings.printerName;\r\n\r\n        var modelName = settings.printerModel;\r\n        var modelFound = false;\r\n        if(modelName) {\r\n            //1. find model in settings\r\n            var model = null;\r\n            starPrinterModels.forEach(function (e, idx) {\r\n                if (e.modelTitle == modelName) {\r\n                    model = e;\r\n                    modelFound = true;\r\n                    return false;\r\n                }\r\n            });\r\n            //2. if model is found - apply port seting and emulation mode\r\n            if(model) {\r\n                THIS.currentSettings.portSettings = model.portSettings;\r\n                THIS.currentSettings.emulation = model.emulation;\r\n                THIS.currentSettings.hasCashDrawer = model.canUseCashDrawer;\r\n            }\r\n        }\r\n\r\n        if(!modelFound){\r\n            THIS.currentSettings.hasCashDrawer = true; // suppose that star printer support cash drawer. If not - nothing will happen.\r\n            THIS.currentSettings.portSettings = \"\";\r\n            THIS.currentSettings.emulation = \"StarPRNT\";\r\n        }\r\n        \r\n        var deffered = $q.defer();\r\n\r\n        if (!settings.printerName && !settings.simulatorMode) {\r\n            deffered.reject(gettextCatalog.getString(\"The printer was not set up.\"));\r\n        }\r\n        else\r\n            if (!settings.printerWidthCode || settings.printerWidthCode < 2) {\r\n                deffered.reject(gettextCatalog.getString(\"Printer resolution is invalid.\"));\r\n            }\r\n            else\r\n                deffered.resolve(settings);\r\n\r\n        return deffered.promise;\r\n\r\n        //return deffered.promise.then(function (settings) {\r\n        //    return THIS.internalDisconnect(settings);\r\n        //});\r\n    };\r\n\r\n    this.initEpsonPrinter = function (THIS, settings) {\r\n        THIS.printerName = settings.portName ? settings.portName : settings.printerName;\r\n        THIS.printerModel = settings.printerModel;\r\n        THIS.currentSettings.hasCashDrawer = true;\r\n        \r\n        var deffered = $q.defer();\r\n\r\n        if (!settings.printerName && !settings.simulatorMode) {\r\n            deffered.reject(gettextCatalog.getString(\"The printer was not set up.\"));\r\n        }\r\n        else\r\n            if (!settings.printerWidthCode || settings.printerWidthCode < 2) {\r\n                deffered.reject(gettextCatalog.getString(\"Printer resolution is invalid.\"));\r\n            }\r\n            else\r\n                deffered.resolve(settings);\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.initPrinter = function (THIS, settings) {\r\n        THIS.printerName = settings.printerName;\r\n\r\n        var deffered = $q.defer();\r\n        deffered.resolve(settings);\r\n        return deffered.promise;\r\n    }\r\n\r\n    this.initCloverPrinter = function (THIS, settings) {\r\n        THIS.printerName = settings.printerName;\r\n        var deffered = $q.defer();\r\n\r\n        if (!settings.printerName) {\r\n            deffered.reject(gettextCatalog.getString(\"Printer name is empty.\"));\r\n        }\r\n        else\r\n            if (!settings.printerWidthCode || settings.printerWidthCode < 2) {\r\n                deffered.reject(gettextCatalog.getString(\"Printer resolution is invalid.\"));\r\n            }\r\n            else {\r\n                window.plugins.starPrinter.getCloverPrinters(function (err, result) {\r\n                    if (err) {\r\n                        console.log(\"getCloverPrinters failed\");\r\n                        deffered.reject(gettextCatalog.getString(\"No Clover printer is connected.\"));\r\n                    }\r\n                    else {\r\n                        console.log(\"getCloverPrinters success: \" + JSON.stringify(result));\r\n                        if (result.length < 1) {\r\n                            deffered.reject(gettextCatalog.getString(\"No Clover printer is connected.\"));\r\n                        }\r\n                        else {\r\n                            console.log(\"getCloverPrinters set printer id as name:\" + result[0].uuid);\r\n                            THIS.printerName = result[0].uuid;\r\n                            deffered.resolve(settings);\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n        //*/\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.printAdditionalReceiptsPromise = function (SCOPE, code, text) {\r\n        const p = $q.defer();\r\n        p.resolve();\r\n        return this.printAdditionalReceipts(SCOPE, code, text, p.promise);\r\n    };\r\n\r\n    this.printAdditionalReceipts = function (SCOPE, code, text, p) {\r\n        SCOPE.$apply(function () {\r\n            if (code == 'merchant') {\r\n                SCOPE.receiptSaleModel.MerchantReceipt = $sce.trustAsHtml(text);\r\n            }\r\n            else if (code == 'customer') {\r\n                SCOPE.receiptSaleModel.CustomerReceipt = $sce.trustAsHtml(text);\r\n            }\r\n        });\r\n\r\n        var THIS = this;\r\n        if (code == 'merchant') {\r\n            return p.then(function () {\r\n                var html = $('span[ng-bind-html=\"receiptSaleModel.MerchantReceipt\"]');\r\n                if (html.length > 0) {\r\n                    html = html.clone();\r\n                    html.show();\r\n\r\n                    html = $('<div/>').append(html);\r\n\r\n                    console.log('instant print of terminal part receipt');\r\n                    return THIS.printReceipt(html, true, true);\r\n                }\r\n                else {\r\n                    var deferred = $q.defer();\r\n                    errorService.showError('Merchant receipt template is not specified',\r\n                        function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n                    return deferred.promise;\r\n                }\r\n            });\r\n        }\r\n        else if (code == 'customer') {\r\n            return p.then(function (res) {\r\n                var html = $('span[ng-bind-html=\"receiptSaleModel.CustomerReceipt\"]');\r\n                if (html.length > 0) {\r\n                    html = html.clone();\r\n                    html.show();\r\n                    html = $('<div/>').append(html);\r\n                    console.log('instant print of terminal part receipt');\r\n                    return THIS.printReceipt(html, true, true);\r\n                }\r\n                else {\r\n                    var deferred = $q.defer();\r\n                    errorService.showError('Customer receipt template is not specified',\r\n                        function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n                    return deferred.promise;\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            return p;\r\n        }\r\n    };\r\n\r\n    this.hasTerminalReceipts = function (printEl, directUse) {\r\n        let res = false;\r\n\r\n        let elPrint = directUse === true ? printEl.get(0) : (!!printEl ? printEl.get(1) : $('.receipt-template div:first-child').get(1));\r\n        if (!elPrint && !directUse && !printEl) {\r\n            //elPrint = $('.receipt-template div:first-child').get(0);\r\n        }\r\n        if (!!elPrint && !!elPrint.outerHTML) {\r\n            const tel = $(elPrint.outerHTML);\r\n            res = tel.find('div[ngm-terminal]').length > 0;\r\n        }\r\n\r\n        return res;\r\n    };\r\n\r\n    this.printReceipt = function (printEl, ignoreNotPrint, directUse, ignoreTerminalReceipts, ignorePrinterSetupError) {\r\n        $.blockUI();\r\n\r\n        try {\r\n            let elPrint = directUse === true ? printEl.get(0) : (!!printEl ? printEl.get(1) : $('.receipt-template div:first-child').get(1));\r\n            if (!elPrint && !directUse && !printEl) {\r\n               // elPrint = $('.receipt-template div:first-child').get(0);\r\n            }\r\n\r\n            if (!elPrint) {\r\n                const q = $q.defer();\r\n                q.reject('Invalid template is used!');\r\n                return q.promise;\r\n            }\r\n\r\n            // if font was reduced - return it back\r\n            if (!!elPrint.outerHTML) {\r\n\r\n                this.initPrintCollectMode();\r\n\r\n                var tel = $(elPrint.outerHTML);\r\n\r\n                tel.removeAttr('template');\r\n\r\n                tel.find('[ngm-font-size]').each(function () {\r\n                    var sz = $(this).attr('ngm-font-size');\r\n                    $(this).css('font-size', sz);\r\n                    $(this).removeAttr('ngm-font-size');\r\n                });\r\n\r\n                if (ignoreNotPrint !== true)\r\n                    tel.find('[not-print]').remove();\r\n\r\n                var q2 = $q.defer();\r\n                q2.resolve(null);\r\n\r\n                var THIS = this;\r\n\r\n                if (ignoreTerminalReceipts !== true) {\r\n                    // check for terminal receipts\r\n                    tel.find('div[ngm-terminal]').each(function () {\r\n                        var trmp = $(this);\r\n\r\n                        q2.promise = q2.promise.then(function (res) {\r\n                            var html = trmp.clone();\r\n                            html.show();\r\n                            return THIS.printReceiptFromHTML(html);\r\n                        });\r\n                    });\r\n                }\r\n\r\n                return q2.promise.then(function (res) {\r\n                    return THIS.printReceiptFromHTML(tel[0])\r\n                })\r\n                    .then(function (res) {\r\n                        THIS.finishPrintCollectMode();\r\n                        return THIS.printReceiptFromHTML();\r\n                    })\r\n                    .then(function () {\r\n                        $.unblockUI();\r\n                        console.log(\"receipt is printed\");\r\n                        var q = $q.defer();\r\n                        q.resolve(null);\r\n                        return q.promise;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        console.log(\"receipt is rejected\");\r\n                        errorService.showError(err);\r\n                        var q = $q.defer();\r\n                        q.reject(err);\r\n                        return q.promise;\r\n                    })\r\n                    .finally(function () {\r\n                        THIS.resetPrintCollectMode();\r\n                    });\r\n            }\r\n            else {\r\n                var q = $q.defer();\r\n                q.resolve(null);\r\n                return q.promise;\r\n            }\r\n        }\r\n        catch (e) {            \r\n            $.unblockUI();\r\n            errorService.showError(e);\r\n        }        \r\n    };\r\n\r\n\r\n    this.resumeHandler = function () {\r\n        $.blockUI();\r\n        console.log('got resume event!');\r\n        return this.applyPrinterSettings().then(function (settings) {\r\n            return THIS.disconnect()\r\n                .then(function (res) {\r\n                    console.log('printer disconnected');\r\n                    return THIS.connect();\r\n                });\r\n        })\r\n        .finally(function () {\r\n            console.log('printer connected');\r\n            $.unblockUI();\r\n        });\r\n    };\r\n\r\n    this.printHTMLViaPrintService = function(printerName,\r\n        width,\r\n        height,\r\n        html,\r\n        isValidOS,\r\n        mode,\r\n        portSettings,\r\n        emulation,\r\n        callback) {\r\n            cordova.plugins.printer.print(html, \r\n                { \r\n                    name: 'receipt', // this will be treated by print plugin as standard mode, not label\r\n                    landscape: false, \r\n                    border: false \r\n                }, \r\n                function (res) {\r\n                    if (res === 'Canceled' || !res) {\r\n                        callback('Printing was cancelled.');\r\n                    } else {\r\n                        callback(null, res);\r\n                    }\r\n            });\r\n        };\r\n\r\n    this.getPrinterModels = function(system) {\r\n        return system == 'epson' ? epsonPrinterModels : starPrinterModels;\r\n    };\r\n\r\n    this.isStringIPAddress = function(str) {\r\n        if(!str) {\r\n            return false;\r\n        }\r\n        if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(str)) {  \r\n            return true;\r\n        }  \r\n\r\n        return false;\r\n    };\r\n\r\n    var epsonPrinterModels = [{\r\n        modelId: \"TM_M10\",\r\n        modelTitle: \"TM_M10\",\r\n        display: \"TM-m10\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_M30\",\r\n        modelTitle: \"TM_M30\",\r\n        display: \"TM-m30\",\r\n        modelNames: [\"TM-m30\", \"TM-m30II\", \"TM-m30II-S\", \"TM-m30III\", ]\r\n    },\r\n    {\r\n        modelId: \"TM_M50\",\r\n        modelTitle: \"TM_M50\",\r\n        display: \"TM-m50\",\r\n        modelNames: [\"TM-m50\", \"TM-m50II\"]\r\n    },\r\n    {\r\n        modelId: \"TM_P20\",\r\n        modelTitle: \"TM_P20\",\r\n        display: \"TM-P20\",\r\n        modelNames: [\"TM-P20\", \"TM-P20II\"]\r\n    },\r\n    {\r\n        modelId: \"TM_P60\",\r\n        modelTitle: \"TM_P60\",\r\n        display: \"TM-P60 (Receipt/Peeler)\",\r\n        modelNames: []\r\n    },{\r\n        modelId: \"TM_P60II\",\r\n        modelTitle: \"TM_P60II\",\r\n        display: \"TM-P60II (Receipt/Peeler)\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_P80\",\r\n        modelTitle: \"TM_P80\",\r\n        display: \"TM-P80\",\r\n        modelNames: [\"TM-P80\", \"TM-P80II\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T20\",\r\n        modelTitle: \"TM_T20\",\r\n        display: \"TM-T20\",\r\n        modelNames: [\"TM-T20\", \"TM-T20II\", \"TM-T20II-i\", \"TM-T20II-m\", \"TM-T20III\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T60\",\r\n        modelTitle: \"TM_T60\",\r\n        display: \"TM-T60\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_T70\",\r\n        modelTitle: \"TM_T70\",\r\n        display: \"TM-T70\",\r\n        modelNames: [\"TM-T70\", \"TM-T70-i\", \"TM-T70II\", \"TM-T70II-DT\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T81\",\r\n        modelTitle: \"TM_T81\",\r\n        display: \"TM-T81II\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_T82\",\r\n        modelTitle: \"TM_T82\",\r\n        display: \"TM-T82\",\r\n        modelNames: [\"TM-T82\", \"TM-T82II\", \"TM-T82II-i\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T83\",\r\n        modelTitle: \"TM_T83\",\r\n        display: \"TM-T83II\",\r\n        modelNames: [\"TM-T83II\", \"TM-T83II-i\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T88\",\r\n        modelTitle: \"TM_T88\",\r\n        display: \"TM-T88\",\r\n        modelNames: [\"TM-T88IV\", \"TM-T88V\", \"TM-T88VI\", \"TM-T88V-i\", \"TM-T88VIiHUB\", \"TM-T88V-DT\", \"TM-T88VII\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T90\",\r\n        modelTitle: \"TM_T90\",\r\n        display: \"TM-T90\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_U220\",\r\n        modelTitle: \"TM_U220\",\r\n        display: \"TM-U220\",\r\n        modelNames: [\"TM-U220\", \"TM-U220-i\"]\r\n    },\r\n    {\r\n        modelId: \"TM_U330\",\r\n        modelTitle: \"TM_U330\",\r\n        display: \"TM-U330\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_L90\",\r\n        modelTitle: \"TM_L90\",\r\n        display: \"TM-L90\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_L100\",\r\n        modelTitle: \"TM_L100\",\r\n        display: \"TM-L100\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_H6000\",\r\n        modelTitle: \"TM_H6000\",\r\n        display: \"TM-H6000\",\r\n        modelNames: [\"TM-H6000IV\", \"TM-H6000V\", \"TM-H6000IV-DT\"]\r\n    }];\r\n\r\n        var starPrinterModels = [{\r\n        modelId: \"mcprint2\",\r\n        modelTitle: \"mC-Print2\",\r\n        display: \"mC-Print2\",\r\n        modelNames: [                                   \r\n                \"MCP20 (STR-001)\",\r\n                \"MCP21 (STR-001)\",\r\n                \"mC-Print2\"],\r\n        emulation: \"StarPRNT\",\r\n        portSettings: \"\",\r\n        paperSize: 2,\r\n        canSetDrawerOpenStatus: true,                    \r\n        canPrintTextReceiptSample: true,                 \r\n        canPrintUtf8EncodedText: true,                   \r\n        canPrintRasterReceiptSample: true,               \r\n        canPrintCjk: true,                               \r\n        canUseBlackMark: false,                          \r\n        canUseBlackMarkDetection: false,                 \r\n        canUsePageMode: true,                            \r\n        canUseCashDrawer: true,                          \r\n        canUseBarcodeReader: true,                       \r\n        canUseCustomerDisplay: true,                     \r\n        canUseAllReceipt: true,                          \r\n        canGetProductSerialNumber: true,                 \r\n        settableUsbSerialNumberLength: 16,               \r\n        isUsbSerialNumberEnabledByDefault: true},\r\n    {\r\n        modelId: \"mcprint3\",\r\n        modelTitle: \"mC-Print3\",\r\n        display: \"mC-Print3\",                 \r\n    modelNames: [                             \r\n            \"MCP31 (STR-001)\",                             \r\n            \"mC-Print3\"],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: true,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: true,                \r\n    canUseCustomerDisplay: true,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: true,          \r\n    settableUsbSerialNumberLength: 16,        \r\n    isUsbSerialNumberEnabledByDefault: true},\r\n    {\r\n        modelId: \"mpop\",\r\n        modelTitle: \"mPOP\",   \r\n        display: \"mPOP\",              \r\n    modelNames: [                             \r\n        \"STAR mPOP\",\r\n        \"mPOP\"],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: true,                \r\n    canUseCustomerDisplay: true,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: true,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"fvp10\",\r\n        modelTitle: \"FVP10\",\r\n        display: \"FVP10\",                 \r\n    modelNames: [                             \r\n        \"FVP10 (STR_T-001)\",\r\n        \"Star FVP10\"],                     \r\n    emulation: \"StarLine\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: true,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"tsp100\",\r\n        modelTitle: \"TSP100\",\r\n        display: \"TSP100\",                 \r\n    modelNames: [                             \r\n        \"TSP113\", \"TSP143\",\r\n        \"TSP100\",\r\n        \"Star TSP113\", \"Star TSP143\", \"TSP100IV\", \"TSP100IV SK\", \"TSP100IIU+\"],                     \r\n    emulation: \"StarGraphic\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: false,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: false,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: true,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: true,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"tsp650ii\",\r\n        modelTitle: \"TSP650II\",\r\n        display: \"TSP650II\",                 \r\n    modelNames: [                             \r\n        \"TSP654II (STR_T-001)\",\r\n        \"TSP654 (STR_T-001)\",\r\n        \"TSP651 (STR_T-001)\"],                     \r\n    emulation: \"StarLine\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: true,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"tsp700ii\",\r\n        modelTitle: \"TSP700II\",\r\n        display: \"TSP700II\",                 \r\n    modelNames: [                             \r\n        \"TSP743II (STR_T-001)\",\r\n        \"TSP743 (STR_T-001)\"],                     \r\n    emulation: \"StarLine\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: true,          \r\n    canUsePageMode: false,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"tsp800ii\",\r\n        modelTitle: \"TSP800II\",\r\n        display: \"TSP800II\",                 \r\n    modelNames: [                             \r\n        \"TSP847II (STR_T-001)\",\r\n        \"TSP847 (STR_T-001)\"],                     \r\n    emulation: \"StarLine\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 4,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: true,          \r\n    canUsePageMode: false,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms210i\",\r\n        modelTitle: \"SM-S210i\",\r\n        display: \"SM-S210i\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms220i\",\r\n        modelTitle: \"SM-S220i\",\r\n        display: \"SM-S220i\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms230i\",\r\n        modelTitle: \"SM-S230i\",\r\n        display: \"SM-S230i\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"smt300it300\",\r\n        modelTitle: \"SM-T300i/T300\",\r\n        display: \"SM-T300i/T300\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"smt400i\",\r\n        modelTitle: \"SM-T400i\",\r\n        display: \"SM-T400i\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 4,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sml200\",\r\n        modelTitle: \"SM-L200\",\r\n        display: \"SM-L200\",                 \r\n    modelNames: [\"STAR L200\",\r\n    \"STAR L204\"],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sml300\",\r\n        modelTitle: \"SM-L300\",\r\n        display: \"SM-L300\",                 \r\n    modelNames: [\"STAR L300\",\r\n    \"STAR L304\"],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"bsc10\",\r\n        modelTitle: \"BSC10\",\r\n        display: \"BSC10\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPos\",                    \r\n    portSettings: \"escpos\",                         \r\n    paperSize: 3, //TODO: 512\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms210isp\",\r\n        modelTitle: \"SM-S210i StarPRNT\",\r\n        display: \"SM-S210i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms220isp\",\r\n        modelTitle: \"SM-S220i StarPRNT\",\r\n        display: \"SM-S220i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms230isp\",\r\n        modelTitle: \"SM-S230i StarPRNT\",\r\n        display: \"SM-S230i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"smt300isp\",\r\n        modelTitle: \"SM-T300i StarPRNT\",\r\n        display: \"SM-T300i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"smt400isp\",\r\n        modelTitle: \"SM-T400i StarPRNT\",\r\n        display: \"SM-T400i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 4,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false}];\r\n    \r\n}]);","angular.module('mainApp').controller('productManagementController', [\r\n    '$scope',\r\n    '$rootScope',\r\n    'loginService',\r\n    'gettextCatalog',\r\n    'helperService',\r\n    '$timeout',\r\n    'configService',\r\n    'errorService',\r\n    'outletService',\r\n    '$q',\r\n    'productManagementService',\r\n    '$compile',\r\n    'labelPrintService',\r\n    'labelService',\r\n    'reportService',\r\n    function($scope, $rootScope, loginService, gettextCatalog, helperService, $timeout, configService, errorService, outletService, $q, productManagementService, $compile, labelPrintService, labelService, reportService) {\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n            //             $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        var needToReloadProduct = false;\r\n\r\n        $scope.fcss = { height: window.innerHeight * 0.9 + 'px' };\r\n        $scope.ifcss = { height: window.innerHeight * 0.8 + 'px' };\r\n        $scope.useOutletSKU = configService.advancedBarcodeUseOutletSKU === true;\r\n\r\n        $scope.labelTemplateClass = '';\r\n        $scope.mode = '';\r\n        $scope.dataCount = 0;\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay = 0;\r\n        $scope.itemsByPage = 100;//15;\r\n        $scope.isLoading = false;\r\n        $scope.totalPages = 1;\r\n        $scope.totalRecords = null;\r\n\r\n        $scope.printParams = [];\r\n        $scope.printParams.copies = 1;\r\n        $scope.filters = {};\r\n        $scope.outlets = [];\r\n        $scope.productsData = [];\r\n        $scope.labelTemplates = [];\r\n        $scope.newLabelItems = [];\r\n        $scope.labelModel = [];\r\n        $scope.watches = [];\r\n        $scope.isSite = configService.isSite;\r\n\r\n        $scope.labelsPRow = 1;\r\n        $scope.labelsPPage = 1;\r\n        $scope.modify ={\r\n        };\r\n\r\n        $scope.canChangePrice = configService.canChangePrice;\r\n        $scope.PriceTiers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(function(x) { \r\n            return {\r\n                n: x,\r\n                name: 'PriceTear' + x // incorrect naming in product object\r\n            }\r\n        });\r\n        $scope.labelPrintArea = labelService.getLabelPrintArea();\r\n\r\n        $scope.$watch('printParams.copies', function(newValue, oldValue) {\r\n            if (newValue != oldValue) {\r\n                $scope.nextStepPrintModal();\r\n                return newValue;\r\n            }\r\n        });\r\n\r\n        $scope.$watch(\"mode\", function (newVal, oldVal) {\r\n            $timeout(function(){\r\n                $rootScope.$broadcast('view.loaded', newVal);\r\n            });        \r\n        }); \r\n\r\n        $scope.$watch(\"newProduct.Type\", function(newVal, oldVal){\r\n            $timeout(function(){\r\n                if(newVal !== oldVal && (newVal === 'Non Inventory' || oldVal === 'Non Inventory'))\r\n                    initSelects();\r\n            });\r\n        });\r\n\r\n        $scope.loadData = function() {\r\n            $scope.dataCount = 0;\r\n            $scope.dataPageDisplay = 1;\r\n            $scope.dataPage = 1;\r\n            $scope.labelPrinterSettings = configService.getLabelPrinterSettings(true);\r\n\r\n            var p = outletService.getUserOulets(configService.loginUserID, true).then(function(data) {\r\n                var deferred = $q.defer();\r\n                // load outlets\r\n                angular.forEach(data.Outlets, function(el) {\r\n                    $scope.outlets.push({\r\n                        name: el.OutletName,\r\n                        id: el.EcsLocationMappingID\r\n                    });\r\n                });\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            var lst = productManagementService.getData().then(function(data) {\r\n                var deferred = $q.defer();\r\n                //console.log(data.data);\r\n                $scope.brands = data.data.brands;\r\n                $scope.categories = data.data.categories;\r\n                $scope.units = data.data.units;\r\n                $scope.locations = data.data.locations;\r\n                $scope.salesPriceTiers = data.data.salesPriceTiers;\r\n                $scope.costingMethods = data.data.costingMethods;\r\n                $scope.types = data.data.types;\r\n                $scope.expenseAccounts = data.data.expenseAccounts;\r\n\r\n                $.each($scope.salesPriceTiers, function(i, item) {\r\n                    item.Model = 'newProduct.PriceTear' + item.Code;\r\n                });\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n                //console.log(data.data.salesPriceTiers);\r\n            });\r\n\r\n            var tmpls = productManagementService.getTemplates('POS', 'Price Label', '').then(function(data) {\r\n                var deferred = $q.defer();\r\n                $scope.labelTemplates = data.data.rows;\r\n\r\n                //console.log($scope.labelTemplates);\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return $q.all([p, lst, tmpls]);\r\n        };\r\n\r\n        $scope.loadGrid = function(sorting) {\r\n            var searchString = '';\r\n\r\n            if ($scope.filters.ProductName) {\r\n                searchString = $scope.filters.ProductName;\r\n            }\r\n\r\n            angular.forEach($scope.watches, function(watcher, key) {\r\n                watcher();\r\n            });\r\n\r\n            $scope.watches = [];\r\n\r\n            var promise = productManagementService.loadProductList($scope.dataPage, $scope.itemsByPage, searchString, sorting).then(function(data) {\r\n                var deferred = $q.defer();\r\n                $scope.productsData = [];\r\n                //console.log(data.data);\r\n                $scope.dataCount = data.data.Total;\r\n                $scope.dataPage = data.data.Page;\r\n                $scope.dataPageDisplay = data.data.Page;\r\n\r\n                angular.forEach(data.data.Rows, function(el) {\r\n                    el.isActive = false;\r\n                    el.labelPrint = false;\r\n                    el.ProductCode = el.Code;\r\n                    $scope.productsData.push(el);\r\n                });\r\n\r\n                angular.forEach($scope.productsData, function(product, key) {\r\n                    var watcher = $scope.$watch('productsData[' + key + '].labelPrint', function(newValue, oldValue) {\r\n                        if (newValue == true && !product.Barcode) {\r\n                            product.labelPrint = false;\r\n                            $('input[name=\"' + product.ID + '\"]').bootstrapSwitch('state', false, true);\r\n                            errorService.showError('Product barcode has no value.');\r\n                        } else {\r\n                        }\r\n                        //console.log(product, newValue, oldValue);\r\n                    });\r\n\r\n                    $scope.watches.push(watcher);\r\n                });\r\n\r\n                getPages(data.data.Total);\r\n\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return promise;\r\n        };\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.search = function() {\r\n            $.blockUI();\r\n\r\n            $scope.dataPage = 1;\r\n            $scope.dataPageDisplay = 1;\r\n\r\n            var sort = {};\r\n\r\n            $scope.loadGrid(sort).finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        $scope.onLoad = function() {\r\n            $.blockUI();\r\n\r\n            $scope.loadData();\r\n\r\n            var sort = {};\r\n\r\n            $scope.loadGrid(sort).finally(function() {                \r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        const scrollReachBottomCallback = function() {\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                $scope.dataPage++;\r\n                \r\n                var sort = {};\r\n\r\n                var searchString = '';\r\n\r\n                if ($scope.filters.ProductName) {\r\n                    searchString = $scope.filters.ProductName;\r\n                }\r\n\r\n                productManagementService.loadProductList($scope.dataPage, $scope.itemsByPage, searchString, sort).then(\r\n                    function(data) {\r\n                        $.each(data.data.Rows, function(idx, el) {\r\n                            if (\r\n                                $scope.productsData.filter(function(fEl) {\r\n                                    return fEl.ID === el.ID;\r\n                                }).length === 0\r\n                            ) {\r\n                                el.isActive = false;\r\n                                el.labelPrint = false;\r\n                                el.ProductCode = el.Code;\r\n                                $scope.productsData.push(el);\r\n                            }\r\n                        });\r\n                        $scope.isLoading = false;\r\n                        $.unblockUI();\r\n                    },\r\n                    function(err) {\r\n                        $scope.isLoading = false;\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    }\r\n                );\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        $scope.$on('$destroy', function() {\r\n            if (needToReloadProduct) {\r\n                $rootScope.$broadcast('sideBar.reloadProducts');\r\n                needToReloadProduct = false;\r\n            }\r\n        });\r\n\r\n        // code below to give a chance to add event handlers before form is shown\r\n        $timeout(function() {\r\n            $scope.mode = 'management';\r\n        });\r\n\r\n        $scope.firstGridShow = true;\r\n\r\n        $scope.$on('view.loaded', function(evt) {\r\n            $timeout(function() {\r\n                if ($scope.firstGridShow) {\r\n                    $scope.firstGridShow = false;\r\n\r\n                    $('#Category, #DefaultLocation').styler({\r\n                        selectSearch: true,\r\n                        selectSearchNotFound: 'No matches found',\r\n                        selectSearchPlaceholder: 'Search...'\r\n                    });\r\n                    initSelects();\r\n                } else {\r\n                    $('input, select').trigger('refresh');\r\n                }\r\n            }, 0);\r\n\r\n            if ($scope.mode === 'labels') {\r\n                $scope.formatTemplate();\r\n            }\r\n        });\r\n\r\n        $scope.selectPage = function(page) {\r\n            $.blockUI();\r\n            $scope.dataPage = page;\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        $scope.goBack = function() {\r\n            $.blockUI();\r\n\r\n            if ($scope.mode === 'new' || $scope.mode === 'edit' || $scope.mode === 'labels') {\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n\r\n            $scope.mode = 'management';\r\n            $scope.cancelDialog();\r\n            //$.unblockUI();\r\n        };\r\n\r\n        $scope.cancelDialog = function() {\r\n            var $windowElement = $('#addProductModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.firstAddFormShow = true;\r\n\r\n        function editProductDialog($focusElement) {\r\n            var $windowElement = $('#addProductModal');\r\n            helperService.showDialog($windowElement, function() {\r\n                if ($scope.firstAddFormShow) {\r\n                    $scope.firstAddFormShow = false;\r\n\r\n                    initSelects();\r\n                } else {\r\n                    $('#addProductModal select').trigger('refresh');\r\n                }\r\n\r\n                if(!configService.isMobile)\r\n                {\r\n                    if ($focusElement) $focusElement.focus();\r\n                    else $('#Name').focus();\r\n                }\r\n            });\r\n        }\r\n\r\n        $scope.editProduct = function(row) {\r\n            //console.log(row);\r\n            editProductDialog();\r\n            $scope.prepareEdit(row);\r\n            $scope.mode = 'edit';\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            }, 500);\r\n        };\r\n\r\n        $scope.addNewProduct = function() {\r\n            editProductDialog();\r\n            $scope.prepareAddNew();\r\n            $scope.mode = 'new';\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            }, 500);\r\n        };\r\n\r\n        $scope.prepareAddNew = function() {\r\n            $scope.newProduct = {\r\n                AlwaysShowQuantity: 0,\r\n                AssemblyCostEstimationMethod: 'A',\r\n                AverageCost: 0,\r\n                Barcode: '',\r\n                BrandID: '',\r\n                Category: '',\r\n                CostingMethod: '',\r\n                DefaultLocation: '',\r\n                DefaultUnitOfMeasure: '',\r\n                Description: '',\r\n                DropShipMode: 'N',\r\n                Name: '',\r\n                NotSellable: 'false',\r\n                Option1: '',\r\n                Option2: '',\r\n                Option3: '',\r\n                PriceTear1: 0,\r\n                PriceTear2: 0,\r\n                PriceTear3: 0,\r\n                PriceTear4: 0,\r\n                PriceTear5: 0,\r\n                PriceTear6: 0,\r\n                PriceTear7: 0,\r\n                PriceTear8: 0,\r\n                PriceTear9: 0,\r\n                PriceTear10: 0,\r\n                ProductCode: '',\r\n                ProductID: '00000000-0000-0000-0000-000000000000',\r\n                Status: 'A',\r\n                ShortDescription: '',\r\n                Tags: '',\r\n                Type: '',\r\n                ExpenseAccount: '',\r\n                OutletSKU: null\r\n            };\r\n\r\n            // select current outlet\r\n            angular.forEach($scope.outlets, function(el) {\r\n                if (el.id === configService.lastECSMappingOutletID) {\r\n                    $scope.newProduct.outletID = configService.lastECSMappingOutletID;\r\n                    return false;\r\n                }\r\n            });\r\n        };\r\n\r\n        $scope.modifyProduct = function() {\r\n            var isNew = $scope.mode === 'new';\r\n            // validator for outlet SKU length\r\n            if(configService.advancedBarcodeSKULength && $scope.useOutletSKU && \r\n                $scope.newProduct.OutletSKU && $scope.newProduct.OutletSKU.length !== configService.advancedBarcodeSKULength) {\r\n                    var txt = gettextCatalog.getString(\"Outlet SKU should have {{cnt}} digits. Please enter a valid SKU.\", { cnt: configService.advancedBarcodeSKULength });\r\n                    errorService.showError(txt);\r\n                    return;\r\n            }\r\n\r\n            $.blockUI();\r\n            productManagementService\r\n                .modifyProduct($scope.newProduct, isNew)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                    needToReloadProduct = true;\r\n                    /*if ($scope.productsData.length >= $scope.itemsByPage)\r\n                     $scope.dataPage++;*/\r\n\r\n                    //$scope.$broadcast('refreshStTable');\r\n                    $.unblockUI();\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        $scope.prepareEdit = function(row) {\r\n            //console.log(row);\r\n            var viewMode = 'plain';\r\n            if (row.Description != null && row.Description.indexOf('<') != -1 && row.Description.indexOf('>') != -1 && (row.Description.indexOf('</') != -1 || row.Description.indexOf('/>') != -1)) {\r\n                viewMode = 'HTML';\r\n            }\r\n            $scope.newProduct = {\r\n                AlwaysShowQuantity: row.AlwaysShowQuantity,\r\n                Barcode: row.Barcode,\r\n                BrandID: row.BrandID,\r\n                Category: row.CategoryID,\r\n                CostingMethod: row.CostingMethod,\r\n                DefaultLocation: row.DefaultLocation,\r\n                DefaultUnitOfMeasure: row.DefaultUnitOfMeasure,\r\n                Description: row.Description,\r\n                DropShipMode: row.DropShipMode,\r\n                Name: row.Name,\r\n                PriceTear1: row.PriceTear1,\r\n                PriceTear2: row.PriceTear2,\r\n                PriceTear3: row.PriceTear3,\r\n                PriceTear4: row.PriceTear4,\r\n                PriceTear5: row.PriceTear5,\r\n                PriceTear6: row.PriceTear6,\r\n                PriceTear7: row.PriceTear7,\r\n                PriceTear8: row.PriceTear8,\r\n                PriceTear9: row.PriceTear9,\r\n                PriceTear10: row.PriceTear10,\r\n                IsMarkupTear1: row.IsMarkupTear1,\r\n                IsMarkupTear2: row.IsMarkupTear2,\r\n                IsMarkupTear3: row.IsMarkupTear3,\r\n                IsMarkupTear4: row.IsMarkupTear4,\r\n                IsMarkupTear5: row.IsMarkupTear5,\r\n                IsMarkupTear6: row.IsMarkupTear6,\r\n                IsMarkupTear7: row.IsMarkupTear7,\r\n                IsMarkupTear8: row.IsMarkupTear8,\r\n                IsMarkupTear9: row.IsMarkupTear9,\r\n                IsMarkupTear10: row.IsMarkupTear10,\r\n                ProductCode: row.Code,\r\n                ProductID: row.ID,\r\n                Status: row.Status,\r\n                ShortDescription: row.ShortDescription,\r\n                Tags: row.Tags,\r\n                Type: row.Type,\r\n                ExpenseAccount: row.ExpenseAccount,\r\n                viewMode: viewMode,\r\n                OutletSKU: row.OutletSKU\r\n            };\r\n            console.log($scope.newProduct);\r\n        };\r\n\r\n        $scope.toggleRow = function (familyRow, evt) {\r\n            if (evt && evt.currentTarget)\r\n                evt.currentTarget.focus();\r\n\r\n            var deferred = $q.defer();\r\n\r\n            if (familyRow.isActive === true) {\r\n                familyRow.isActive = false;\r\n\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            } else {\r\n                familyRow.isActive = true;\r\n\r\n                if (typeof familyRow.Products === 'undefined' || familyRow.Products.length === 0) {\r\n                    $.blockUI();\r\n\r\n                    var promise = $scope\r\n                        .loadFamilyProductList(familyRow.ID)\r\n                        .then(function(data) {\r\n                            var deferred = $q.defer();\r\n\r\n                            familyRow.Products = [];\r\n                            angular.forEach(data.data.Rows, function(el) {\r\n                                el.isActive = false;\r\n                                el.ProductCode = el.Code;\r\n                                familyRow.Products.push(el);\r\n                            });\r\n                            deferred.resolve(data);\r\n                            return deferred.promise;\r\n                        })\r\n                        .finally(function() {\r\n                            $.unblockUI();\r\n                        });\r\n\r\n                    return promise;\r\n                } else {\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.loadFamilyProductList = function(familyID) {\r\n            var searchString = '';\r\n\r\n            if ($scope.filters.ProductName) {\r\n                searchString = $scope.filters.ProductName;\r\n            }\r\n            return productManagementService.loadFamilyProductList(searchString, familyID);\r\n        };\r\n\r\n        $scope.$on('refreshStTable', function() {\r\n            $scope.loadGrid().finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        });\r\n\r\n        $scope.productPrice = {};\r\n        $scope.productPriceDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n        $scope.showPriceDlg = function(priceTear) {\r\n            $scope.productPrice.value = $scope.newProduct[priceTear];\r\n            $scope.productPrice.tear = priceTear;\r\n            $timeout(function() {\r\n                $scope.productPriceDlg.show('#' + priceTear);\r\n            });\r\n        };\r\n\r\n        // callback priceDlg\r\n        $scope.setPrice = function(prm, event) {\r\n            $timeout(function() {\r\n                $scope.productPriceDlg.hide(true);\r\n            });\r\n\r\n            if (prm === true) {\r\n                $timeout(function() {\r\n                    $scope.newProduct[$scope.productPrice.tear] = $scope.productPrice.value;\r\n                });\r\n            } else if (typeof prm === 'string') {\r\n                /*if (prm === 'clean') {\r\n                 }*/\r\n            }\r\n\r\n            event.stopPropagation();\r\n            event.preventDefault();\r\n        };\r\n\r\n        $scope.getImageUrl = function(isFamily, imageID, isRealFamily, addSize, quickImageType) {\r\n            if (!isFamily) {\r\n                isFamily = false;\r\n            }\r\n            if (!imageID) {\r\n                imageID = '00000000-0000-0000-0000-000000000000';\r\n            }\r\n\r\n            if (isFamily === isRealFamily && !!imageID) {\r\n                var size = '';\r\n\r\n                var url = null;\r\n                if (!quickImageType) {\r\n                    url = configService.baseImageURL + '?id=' + imageID;\r\n                    if (addSize === true) {\r\n                        size = '&width=' + configService.imagesX + '&height=' + configService.imagesY;\r\n                    }\r\n                } else {\r\n                    url = configService.connectionURL + '/PosQuickKeyImages?ID=' + imageID + '&imageContentType=' + encodeURIComponent(quickImageType);\r\n                    if (addSize === true) {\r\n                        size = '&Width=' + configService.imagesX + '&Height=' + configService.imagesY;\r\n                    }\r\n                }\r\n\r\n                url += size;\r\n                return url;\r\n            }\r\n            return null;\r\n        };\r\n\r\n        $scope.reinitSelects = function() {\r\n            $('#template').trigger('refresh');\r\n        };\r\n\r\n        $scope.keyboardTemplateDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n        $scope.tempCopies = [];\r\n\r\n        $scope.showKeyboardTemplateDlg = function() {\r\n            $scope.tempCopies.value = $scope.printParams.copies;\r\n\r\n            //console.log(1, $scope.tempCopies.value);\r\n            if (!$scope.tempCopies.value) $scope.tempCopies.value = 1;\r\n\r\n            $timeout(function() {\r\n                $scope.keyboardTemplateDlg.show('#copiesVal');\r\n            });\r\n        };\r\n\r\n        // callback\r\n        $scope.setCopies = function(prm) {\r\n            $scope.keyboardTemplateDlg.hide(true);\r\n            $timeout(function() {\r\n                if (prm === true) {\r\n                    if($scope.tempCopies.value>10000 ||  $scope.tempCopies.value<1) {\r\n                        errorService.showError(\r\n                            gettextCatalog.getString('Invalid number of copies was specified!<br/> Please, enter the number of copies between 1 and 10000.'),\r\n                            null, null, null, true);\r\n                        $scope.tempCopies.value = 1;\r\n                    }\r\n\r\n                    $scope.printParams.copies = $scope.tempCopies.value;\r\n                }\r\n            });\r\n        };\r\n\r\n        function findTemplate(elem) {\r\n            if ($scope.printParams.labelSelectedArea !== undefined && ~$scope.printParams.labelSelectedArea.indexOf('Sheet')) {\r\n                if (elem.Type == 'Price Label Sheet') return true;\r\n            } else {\r\n                switch ($scope.printParams.labelSelectedArea) {\r\n                    case 'Continuous feed (19mm)':\r\n                        return elem.Type == 'Price Label Cont19';\r\n                    case 'Continuous feed (24mm)':\r\n                        return elem.Type == 'Price Label Cont24';\r\n                    case 'Continuous dual (2x1)':\r\n                        return elem.Type == 'Price Label Sheet';\r\n                    default:\r\n                        return elem.Type == 'Price Label Cont19';\r\n                }\r\n            }\r\n        }\r\n\r\n        $scope.nextStepPrintModal = function() {\r\n            $.blockUI();\r\n\r\n            if (!$scope.printParams.copies) $scope.printParams.copies = 1;\r\n\r\n            console.log('printParams', $scope.printParams);\r\n\r\n            var template = $scope.labelTemplates.find(findTemplate);\r\n\r\n            if (template) {\r\n                configService.setLabelTemplate(template.TemplateID);\r\n            }\r\n\r\n            if ($scope.printParams.labelSelectedArea === undefined) {\r\n                $scope.printParams.labelSelectedAreaParams = $scope.labelPrintArea[0];\r\n                $scope.printParams.labelSelectedArea = $scope.labelPrintArea[0].text;\r\n            } else {\r\n                $.each($scope.labelPrintArea, function(idx, el) {\r\n                    if (el.text === $scope.printParams.labelSelectedArea) {\r\n                        $scope.printParams.labelSelectedAreaParams = el;\r\n                    }\r\n                });\r\n            }\r\n\r\n            labelService.getTemplate().then(\r\n                function(resp) {\r\n                    var result = reportService.formatCurrencyInTemplate(resp.Template, ['itemProductLabels.ProductPrice'], 'currency');\r\n\r\n                    var WCode = '';\r\n                    if ($scope.printParams.labelSelectedAreaParams) {\r\n                        WCode = $scope.printParams.labelSelectedAreaParams.value ? $scope.printParams.labelSelectedAreaParams.value : $scope.labelPrinterSettings.labelPrinterWidthCode;\r\n                    }\r\n\r\n                    $scope.labelTemplateClass = 'wCode' + WCode;\r\n\r\n                    var replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-ean8\" type=\"ean8\" b_value=\"{{itemProductLabels.Barcode}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_ean8}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-ean13\" type=\"ean13\" b_value=\"{{itemProductLabels.Barcode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_ean13}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-industrial2of5\" b_value=\"{{itemProductLabels.Barcode}}\"  type=\"industrial2of5\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_industrial2of5}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-upca\" type=\"upca\" b_value=\"{{itemProductLabels.Barcode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-upca\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_upca}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-upce\" type=\"upce\" b_value=\"{{itemProductLabels.Barcode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-upce\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_upce}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-code128\" type=\"code128\" b_value=\"{{itemProductLabels.Barcode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-code128\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_code128}}', replacedString);\r\n\r\n                    result = result.replace('{{itemProductLabels.Name}}', '<span class=\"ProductNameSpan\">{{itemProductLabels.Name}}</span>');\r\n                    result = result.replace('{{itemProductLabels.Code}}', '<span class=\"ProductCodeSpan\">{{itemProductLabels.Code}}</span>');\r\n                    result = result.replace('{{itemProductLabels.ProductCode}}', '<span class=\"ProductCodeSpan\">{{itemProductLabels.ProductCode}}</span>');\r\n\r\n                    $('.table-to-delete').remove();\r\n                    $scope.labelTemplate = result;\r\n\r\n                    updateLabelsTemplate();\r\n\r\n                    if ($scope.mode != 'labels') $scope.mode = 'labels';\r\n                    else\r\n                        $timeout(function() {\r\n                            $scope.formatTemplate();\r\n                        }, 500);\r\n\r\n                    $.unblockUI();\r\n\r\n                    $timeout(function() {\r\n                        $('#labelPrinterWidth').trigger('refresh');\r\n                    }, 500);\r\n                },\r\n                function(err) {\r\n                    // in case of template error or something like this we will allow to select outlet/registry manually\r\n                    $.unblockUI();\r\n                    configService.bypassOutletRegistry = false;\r\n                    errorService.showError(err);\r\n                }\r\n            );\r\n        };\r\n\r\n        function updateLabelsTemplate() {\r\n            $scope.newLabelItems = [];\r\n\r\n            $.each($scope.productsData, function(idx, el) {\r\n                if (el.IsFamily == 1 || el.IsFamily === true) {\r\n                    $.each(el.Products, function(idch, elch) {\r\n                        if (elch.labelPrint === true || elch.labelPrint == 1) {\r\n                            $scope.multiplyPush(elch.Barcode, elch.Name, elch.Price? elch.Price: elch.PriceTear1, elch.ID, elch.Code);\r\n                        }\r\n                    });\r\n                } else {\r\n                    if (el.labelPrint === true || el.labelPrint == 1) {\r\n                        $scope.multiplyPush(el.Barcode, el.Name, el.Price? el.Price:  el.PriceTear1, el.ID, el.Code);\r\n                    }\r\n                }\r\n            });\r\n\r\n            console.log('printParams', $scope.newLabelItems);\r\n\r\n            var WCode = 0;\r\n            if ($scope.printParams.labelSelectedAreaParams) {\r\n                WCode = $scope.printParams.labelSelectedAreaParams.value ? $scope.printParams.labelSelectedAreaParams.value : $scope.labelPrinterSettings.labelPrinterWidthCode;\r\n            }\r\n            productManagementService.updateLabelsTemplate($scope.newLabelItems, $scope.labelModel, $scope.currency, WCode >= 100 && WCode <= 103);\r\n        }\r\n\r\n        $scope.printLabels = function() {\r\n            var elements = $('.label-template.wCode table')\r\n                .parent();\r\n            elements.css('border', 'none')\r\n            elements.each(function (_, _el) {\r\n                var el = $(_el);\r\n                var tr = el.closest('tr');\r\n                \r\n                if (!tr.is(':first-child')) {\r\n                    el.css('padding-top', '5px');\r\n                }\r\n                if (!el.is(':last-child')) {\r\n                    el.css('padding-right', '20px');\r\n                }\r\n            });\r\n            \r\n            // $scope.goBack();\r\n\r\n            var element = $('.label-template>div.ng-scope>div.ng-scope');\r\n\r\n            return labelPrintService.printLabels(element);\r\n        };\r\n\r\n        $scope.formatTemplate = function() {\r\n            var lt = $('.label-template.wCode').children();\r\n\r\n            var pointsX = '';\r\n            var pointsY = '';\r\n            var labelW = '';\r\n            var labelH = '';\r\n\r\n            labelWpad = '100%';\r\n\r\n            if ($scope.isSite) {\r\n                pointsX = $scope.printParams.labelSelectedAreaParams.pointsX ? $scope.printParams.labelSelectedAreaParams.pointsX : $scope.labelPrinterSettings.labelPrinterWidthPointsX;\r\n                pointsY = $scope.printParams.labelSelectedAreaParams.pointsY ? $scope.printParams.labelSelectedAreaParams.pointsY : $scope.labelPrinterSettings.labelPrinterWidthPointsY;\r\n                labelW = $scope.printParams.labelSelectedAreaParams.labelW ? $scope.printParams.labelSelectedAreaParams.labelW : $scope.labelPrinterSettings.labelW;\r\n                \r\n                labelH = $scope.printParams.labelSelectedAreaParams.labelH ? $scope.printParams.labelSelectedAreaParams.labelH : $scope.labelPrinterSettings.labelH;\r\n                var perRow = $scope.printParams.labelSelectedAreaParams.perRow ? $scope.printParams.labelSelectedAreaParams.perRow : $scope.labelPrinterSettings.perRow;\r\n                var rows = $scope.printParams.labelSelectedAreaParams.rows ? $scope.printParams.labelSelectedAreaParams.rows : $scope.labelPrinterSettings.rows;\r\n\r\n                $scope.labelsPRow = perRow !== undefined ? perRow : Math.floor(pointsX / labelW);\r\n                $scope.labelsPPage = rows !== undefined  ? $scope.labelsPRow * rows : $scope.labelsPRow * Math.floor(pointsY / labelH);\r\n            } else {\r\n                labelW = 380;\r\n                labelH = 85;\r\n                $scope.labelsPRow = 1;\r\n                $scope.labelsPPage = 1;\r\n            }\r\n\r\n            lt.children()\r\n                .children('p')\r\n                .remove();\r\n\r\n            lt.find('[ngm-font-size]').each(function() {\r\n                var sz = $(this).attr('ngm-font-size');\r\n                $(this).css('font-size', sz);\r\n            });\r\n\r\n            lt.css('line-height', '1.2');\r\n\r\n            lt.find('table')\r\n                .css('overflow','hidden');\r\n\r\n            lt.find('table td').css('width', 'auto');\r\n            lt.find('table td p')\r\n                .css('width', 'auto')\r\n                .css('margin', '0 10px')\r\n                .css('padding', '0')\r\n                .css('overflow', 'hidden')\r\n                .css('white-space', 'nowrap')\r\n                .css('text-overflow', 'ellipsis');\r\n\r\n            var columnsCount = lt.find('table').first().find('tr').first().find('td').length;\r\n\r\n            if(!columnsCount)\r\n                columnsCount = 2;\r\n\r\n            if ($scope.labelsPRow < 2) {\r\n\r\n                lt.find('table')\r\n                    //.parent()\r\n                    .css('width', labelW)\r\n                    .css('text-align', 'left')\r\n                    .css('border', '1px solid');\r\n\r\n                //lt.find('table').css('width', 'auto');\r\n\r\n                lt.find('table')\r\n                    //.parent()\r\n                    .css('margin-top', '10px')\r\n                    .css('padding', '20px 0px');\r\n\r\n                lt.find('table td p')\r\n                    .css('width', labelW / columnsCount)\r\n                    .css('margin', '0');\r\n\r\n                lt.find('span')\r\n                    .css('max-width', '190px')\r\n                    .css('overflow', 'hidden')\r\n                    .css('white-space', 'nowrap')\r\n                    .css('text-overflow', 'ellipsis')\r\n                    .css('display', 'block');\r\n            } else {\r\n                lt.find('table')\r\n                    //.parent()\r\n                    .css('width', labelW)\r\n                    //.css('text-align', 'left')\r\n                    .css('border', '1px solid');\r\n\r\n                lt.find('table td p')\r\n                    .css('width', labelW /columnsCount)\r\n                    .css('margin', '0');\r\n\r\n                lt.find('.ProductNameSpan, .ProductCodeSpan')\r\n                    .css('max-width', labelW/columnsCount)\r\n                    .css('overflow', 'hidden')\r\n                    .css('white-space', 'nowrap')\r\n                    .css('text-overflow', 'ellipsis')\r\n                    .css('display', 'block');\r\n            }\r\n\r\n            if ($scope.labelsPRow > 2) {\r\n                lt.find('table').css('min-width', labelW);\r\n                lt.find('table').css('height', labelH);\r\n                lt.find('table')\r\n                    .parent()\r\n                    .css('height', labelH);\r\n                lt.find('.barcode_img')\r\n                    .css('height', labelH / 2)\r\n                    .css('overflow', 'hidden');\r\n                lt.find('img').css('height', '100%');\r\n            } else {\r\n                if ($scope.labelsPRow < 2) {\r\n                    if($scope.isSite){\r\n                        lt.find('table').css('margin-left', '40px');\r\n                    }\r\n                    lt.find('.barcode_img').css('height', '84px');\r\n                } else {\r\n                    lt.find('.barcode_img').css('height', '50px');\r\n                }\r\n                lt.find('img').css('height', '100%');\r\n            }\r\n\r\n            if ($scope.labelsPRow === 1) {\r\n                lt.find('table')\r\n                    //.parent()\r\n                    .css('page-break-after', 'always');\r\n            }\r\n\r\n            $timeout(function() {\r\n                if ($scope.labelsPRow > 1 || $scope.labelsPPage > 1) {\r\n                    productManagementService.makeTableFromTemplate($scope.labelsPRow, $scope.labelsPPage, labelW);\r\n                    var lt2 = $('.label-template.wCode').children();\r\n                    var pageEl = lt2.find('>div.ng-scope').find('>div.ng-scope');\r\n                    if (pageEl && pageEl.length) {\r\n                        pageEl.attr('style', '');\r\n                        var margins = $scope.printParams.labelSelectedAreaParams.margins ? $scope.printParams.labelSelectedAreaParams.margins : $scope.labelPrinterSettings.margins;\r\n                        if (typeof margins !== 'undefined' && Array.isArray(margins)) {\r\n                            pageEl.attr('style', 'margin: ' + margins.map(function (x) {return x + 'px'}).join(' ') + ';');\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n        };\r\n\r\n        $scope.multiplyPush = function(Barcode, Name, PriceTear1, ID, Code) {\r\n            if ($scope.printParams.copies > 0) {\r\n                for (c = 0; c < $scope.printParams.copies; c++) {\r\n                    $scope.newLabelItems.push({\r\n                        Barcode: Barcode,\r\n                        Name: Name,\r\n                        ProductPrice: PriceTear1,\r\n                        ID: ID + '_' + c,\r\n                        Code: Code,\r\n                        ProductCode: Code\r\n                    });\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.printLabelCheck = function(row) {\r\n            if (row.IsFamily) {\r\n                if (row.isActive) {\r\n                    var cnt = 0;\r\n                    $.each(row.Products, function(idx, el) {\r\n                        if (!el.Barcode) {\r\n                            cnt++;\r\n                            el.labelPrint = false;\r\n                        } else {\r\n                            if (!el.labelPrint) el.labelPrint = true;\r\n                        }\r\n                    });\r\n\r\n                    if(cnt>1)\r\n                        errorService.showError(cnt + ' products have no barcode value.');\r\n                    else if(cnt===1)\r\n                        errorService.showError('1 product has no barcode value.');\r\n                } else {\r\n                    $scope.toggleRow(row).then(function() {\r\n                        var cnt = 0;\r\n                        $.each(row.Products, function(idx, el) {\r\n                            if (!el.Barcode) {\r\n                                cnt++;\r\n                                el.labelPrint = false;\r\n                            } else {\r\n                                if (el.labelPrint) el.labelPrint = false;\r\n                                else el.labelPrint = true;\r\n                            }\r\n                        });\r\n\r\n                        if(cnt>1)\r\n                            errorService.showError(cnt + ' products have no barcode value.');\r\n                        else if(cnt===1)\r\n                            errorService.showError('1 product has no barcode value.');\r\n                    });\r\n                }\r\n            } else {\r\n                if (!row.Barcode) {\r\n                    row.labelPrint = false;\r\n                    errorService.showError('Product has no barcode value.');\r\n                } else {\r\n                    if (row.labelPrint) row.labelPrint = false;\r\n                    else row.labelPrint = true;\r\n                }\r\n            }\r\n\r\n            console.log(row.Name + ' - ' + row.labelPrint);\r\n        };\r\n    }\r\n]);\r\n","angular.module('services').factory('productManagementService',\r\n    ['gettext', 'helperService', 'remoteRequestProvider', 'configService',\r\n     '$q', 'productsService', 'webOnlyProvider', '$timeout', 'barcodeService',\r\n    function (gettextCatalog, helperService, remoteRequestProvider, configService,\r\n     $q, productsService, webOnlyProvider, $timeout, barcodeService) {\r\n\r\n\r\n            var productManagementService = {};\r\n\r\n            productManagementService.getData = function () {\r\n                return webOnlyProvider.getProductData();\r\n            };\r\n\r\n            productManagementService.getTemplates = function (Process, Type, Name) {\r\n                return webOnlyProvider.getTemplates(Process, Type, Name);\r\n            };\r\n\r\n            productManagementService.loadProductList = function (page, limit, search, sorting) {\r\n\r\n                return webOnlyProvider.loadProductList(null, page, limit, '', search, sorting);\r\n            }\r\n\r\n            productManagementService.loadFamilyProductList = function (search, familyID) {\r\n\r\n                return webOnlyProvider.loadProductList(familyID, null, 200, '', search, null);\r\n            }\r\n\r\n\r\n            productManagementService.search = function (ID, text) {\r\n                return webOnlyProvider.loadProductList(1, 10, ID, text, null);\r\n            };\r\n\r\n            productManagementService.modifyProduct = function (data, isNew) {\r\n                data.OutletLocationMappingID = configService.lastECSMappingOutletID;\r\n\r\n                if (isNew)\r\n                    return webOnlyProvider.saveNewProduct(data);\r\n                else\r\n                    return webOnlyProvider.updateProduct(data);\r\n            };\r\n\r\n        /**\r\n         * This function converts local sale object to receipt model\r\n         * @param {Array} newLabelItems array of new labels\r\n         * @param {Object} labelModel label model\r\n         * @param {string} currency currency\r\n         * @returns {void} \r\n         */\r\n            productManagementService.updateLabelsTemplate = function (newLabelItems, labelModel, currency, scaleWidth) {\r\n\r\n                labelModel.ProductLabels = [];\r\n                $.each(newLabelItems, function (idx, el) {\r\n                    //el.ProductPrice = helperService.applyCurrency(el.ProductPrice, configService.currency+\" \")\r\n                    labelModel.ProductLabels.push(el);\r\n                });\r\n\r\n                /* /generating barcodes for reciept */\r\n\r\n                barcodeService.clearBarcodes();\r\n\r\n                $timeout(function () {\r\n\r\n                    $(\"canvas.product_barcode\").each(function (i, elem) {\r\n                        var type = $(this).attr(\"type\");\r\n                        var id = $(this).attr(\"id\");\r\n                        var text = $(this).attr(\"b_value\");\r\n\r\n                        barcodeService.initBarcode(id, type, text, text, \"\", scaleWidth ? 3 : undefined);\r\n                    });\r\n\r\n                    barcodeService.renderBarcodes();\r\n                });\r\n\r\n            }\r\n\r\n        /**\r\n         * This function converts template mark up to table markup for write page breaks\r\n         * @param {number} labelsPRow - labels per row\r\n         * @param {number} labelsPPage - rows per page\r\n         * @returns {void} \r\n         */\r\n        productManagementService.makeTableFromTemplate = function (labelsPRow, labelsPPage, labelW) {\r\n                \r\n            $(\".label-template table\").wrap('<td style=\"width:' + labelW + 'px;\"></td>');\r\n\r\n                productManagementService.wrapItems($(\".label-template table\").parent(), labelsPRow, '<tr />');\r\n                productManagementService.wrapItems($(\".label-template table\").parent().parent(), labelsPPage / labelsPRow, '<table class=\"table-to-delete\" style=\"page-break-after:always;\"><tbody></tbody></table>');\r\n         \r\n            // fix empty elements\r\n            $('.label-template div div div').each(function (_, el) {\r\n                if ($(el).children().length === 0) {\r\n                    $(el).remove();\r\n                }\r\n            })\r\n\r\n            $('.label-template .table-to-delete').parent().css('height', 'unset');\r\n        }\r\n\r\n        /**\r\n         * This function wraps elements\r\n         * @param {jquerySelector} selector - jquery selector\r\n         * @param {number} count - count items per wrap\r\n         * @param {string} wraper - string that used as wrapper\r\n         * @returns {void} \r\n         */\r\n            productManagementService.wrapItems = function (selector, count, wraper) {\r\n\r\n                var items = selector;\r\n                var itemsArr = items.get();\r\n                for (var i = 0; i < items.length; i += count) {\r\n                    $(itemsArr.slice(i, i + count)).wrapAll(wraper);\r\n                }\r\n\r\n            }\r\n\r\n            return productManagementService;\r\n        }\r\n\r\n\r\n    ]);\r\n","import { unpackStr } from \"./unpackWorkerHelper\";\r\n\r\nangular.module('services').service('productsService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider', '$interval', 'webOnlyProvider', 'helperService',\r\n    'liveSearchService', '$rootScope', 'jsStoreProvider', 'barcodeService', 'deviceInfo',\r\nfunction ($q, $http, configService, remoteRequestProvider, localDBProvider, $interval, webOnlyProvider, helperService,\r\n    liveSearchService, $rootScope, jsStoreProvider, barcodeService, deviceInfo) {\r\n    \r\n    $rootScope.$on('dataChanged.StocktakeTask', function (event) {\r\n        // disable product reload due to system overload\r\n        //var injector = angular.element('body').injector();\r\n        //var me = injector.get('productsService');\r\n        //me.loadProducts('force');\r\n    });\r\n\r\n    const useSql = localStorage.getItem('useSqlite');\r\n    this.useSqlite = useSql === null ? true : useSql === 'true';\r\n\r\n    this.stopLoadCheck = null;\r\n    this.startProductsAutoUpdate = function () {\r\n\r\n        if (!this.stopLoadCheck) {\r\n            this.stopLoadCheck = $interval(function (p) {\r\n                if (configService.isOnline) {\r\n                    // refrech data\r\n                    var injector = angular.element('body').injector();\r\n                    var me = injector.get('productsService');\r\n                    if (!!me.stopLoadCheck)\r\n                        return me.loadProducts(false);\r\n                }\r\n            }, 60000 * 5);\r\n        }\r\n\r\n        var deferred = $q.defer();\r\n        deferred.resolve(null);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.stopProductsAutoUpdate = function () {\r\n        if (this.stopLoadCheck) {\r\n            try {\r\n                $interval.cancel(this.stopLoadCheck);\r\n                this.stopLoadCheck = null;\r\n            }\r\n            catch (e) {\r\n            }\r\n\r\n        }\r\n    };\r\n\r\n    this.reloadWhenOutletChanged = function () {\r\n        //if (configService.isSite) {\r\n        //    return remoteRequestProvider.getLiveSearchProducs()\r\n        //        .then(function (data) {\r\n        //            return liveSearchService.fillData(data);\r\n        //        });\r\n        //} else {\r\n        return this.loadProducts(true);\r\n        //}\r\n    };\r\n\r\n    // critical section to escape from duplication\r\n    this.lockProductsUpdate = false;\r\n\r\n    this.getProvider = function () {\r\n        if (configService.isSite && !window.isSupported) return webOnlyProvider;\r\n        return configService.isSite || deviceInfo.isSimulator || (buildConfiguration.platform == 'android' && !this.useSqlite)  ? jsStoreProvider : localDBProvider;\r\n    };\r\n\r\n    this.loadProducts = function (force, getHash) {\r\n        if (this.lockProductsUpdate) {\r\n            return helperService.resolvePromise(null);\r\n        }\r\n\r\n        this.lockProductsUpdate = true;\r\n        var THIS = this;\r\n        console.log('useSqlite: ' + this.useSqlite);\r\n        var provider = this.getProvider();\r\n        var isForce = force === 'force' || force === true;\r\n        var pr;\r\n\r\n        const isFirst = localStorage.getItem('useSqlite') === null;\r\n\r\n        if (configService.isSite && !window.isSupported) {\r\n            pr = remoteRequestProvider.getLiveSearchProducs()\r\n                .then(function (data) {\r\n                    return liveSearchService.fillData(data.Products);\r\n                });\r\n        } else if (configService.isSite || configService.isOnline) {\r\n            console.time('checkProductsOld');\r\n\r\n            pr = provider.checkProductsOld(isForce)\r\n                .then(function (res) {\r\n                    console.timeEnd('checkProductsOld');\r\n                    if (res) {\r\n                        console.time('getProductsHash');\r\n                        return provider.getProductsHash(getHash ? false : isForce)\r\n                            .then(function (hash) {\r\n                                console.timeEnd('getProductsHash');\r\n                                console.time('loadProducts request');\r\n                                return remoteRequestProvider.loadProducts(hash);\r\n                            })\r\n                            .then((resp) => {\r\n                                // const compareResult = resp.headers('compare-result') === 'true';\r\n                                // const productHash = resp.headers('products-hash');\r\n                                if (typeof resp.data.Products === 'string') {\r\n                                    resp.data.Products = JSON.parse(resp.data.Products);\r\n                                }\r\n                                var data = {\r\n                                    hash: resp.data.ProductHash,\r\n                                    arr: Array.isArray(resp.data.Products) ? resp.data.Products : []\r\n                                };\r\n                                \r\n\r\n                                if (!resp.data.CompareResult) {\r\n                                    if (data.arr.length > 10000) {\r\n                                        localStorage.setItem('useSqlite', 'false');\r\n                                        THIS.useSqlite = false;\r\n                                    } else {\r\n                                        localStorage.setItem('useSqlite', 'true');\r\n                                        THIS.useSqlite = true;\r\n                                    }\r\n                                    provider = THIS.getProvider();\r\n                                }\r\n\r\n                                console.timeEnd('loadProducts request');\r\n                                if (!resp.data || resp.data.CompareResult) {\r\n                                    if (typeof (provider.buildIndexes) === 'function')\r\n                                        return provider.buildIndexes();\r\n                                    else\r\n                                        return helperService.resolvePromise(false);\r\n                                }\r\n\r\n                                console.time('products unzip');\r\n                                console.timeEnd('products unzip');\r\n                                console.time('refreshProducts');\r\n                               \r\n                                return provider.refreshProducts(data);\r\n                            })\r\n                            .then(function (data) {\r\n                                console.timeEnd('refreshProducts');\r\n                                console.time('getLiveSearchProducs');\r\n                                return provider.getLiveSearchProducs(data);\r\n                            })\r\n                            .then(function (data) {\r\n                                console.timeEnd('getLiveSearchProducs');\r\n                                console.time('fillData live search');\r\n                                return liveSearchService.fillData(data);\r\n                            })\r\n                            .then(function (res) {\r\n                                console.timeEnd('fillData live search');\r\n                                $rootScope.$broadcast('products.reloaded');\r\n                                var deferred2 = $q.defer();\r\n                                deferred2.resolve(res);\r\n                                return deferred2.promise;\r\n                            });\r\n                    } else {\r\n                        return provider.getLiveSearchProducs()\r\n                        .then(function (data) {\r\n                            return liveSearchService.fillData(data);\r\n                        });\r\n                    }\r\n                });\r\n        } else {\r\n            pr = provider.getLiveSearchProducs()\r\n                .then(function (data) {\r\n                    return liveSearchService.fillData(data);\r\n                });\r\n        }\r\n\r\n        return pr.then(function (res) {\r\n            THIS.lockProductsUpdate = false;\r\n            return helperService.resolvePromise(res);\r\n        }).catch(function (err) {\r\n            THIS.lockProductsUpdate = false;\r\n            return helperService.rejectPromise(err);\r\n        });\r\n    };\r\n\r\n    // make search by like in the barcode, name, sku, family\r\n    this.search = function (text, quickKeySearch, quickKey, productID) {\r\n        this.weightBasedBarcode = null;\r\n        var THIS = this;\r\n        var qkeyTemplate = null;\r\n        var barcode = null;\r\n        var weightBasedBarcode = null;\r\n\r\n        if (quickKeySearch === true) {\r\n            qkeyTemplate = configService.quickKeyTemplateID;\r\n\r\n            if (!qkeyTemplate) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(0);\r\n                return deferred.promise;\r\n            }\r\n\r\n            barcode = null;\r\n            text = null;\r\n            productID = null;\r\n\r\n            if (!quickKey) {\r\n                // return quick keys as search result. no real search\r\n                var qtemplate = helperService.extractCurrentQuickKeyInfo();\r\n                var deferred = $q.defer();\r\n                deferred.resolve(!qtemplate ? 0 : qtemplate.length);\r\n                return deferred.promise;\r\n            }\r\n        }\r\n        else if (!!productID) {\r\n            barcode = null;\r\n            text = null;\r\n        }\r\n        else {\r\n            barcode = text;\r\n            if (!!text) {\r\n                text += '%';\r\n            }\r\n\r\n            // try to detect weight based barcode\r\n            weightBasedBarcode = barcodeService.parceBarcodeWeightBased(barcode);\r\n        }\r\n\r\n        var provider = (configService.isSite && !window.isSupported) ? webOnlyProvider : this.getProvider();\r\n\r\n        var pr = helperService.resolvePromise(0);\r\n\r\n        if (weightBasedBarcode) {\r\n            // search by weight based barcode, then standard if nothing will be found\r\n            pr = provider.search(weightBasedBarcode, '', null, null, null)\r\n                .then(function () { return provider.getSearchCount(); });\r\n        }\r\n\r\n        pr = pr.then(function (cnt) {\r\n            if (!cnt) {\r\n                THIS.weightBasedBarcode = null;\r\n                return provider.search(barcode, text, qkeyTemplate, quickKey, productID).\r\n                    then(function () { return provider.getSearchCount(); });\r\n            } else {\r\n                THIS.weightBasedBarcode = weightBasedBarcode;\r\n                return helperService.resolvePromise(cnt);\r\n            }\r\n        });\r\n\r\n        //var pr = provider.search(barcode, text, qkeyTemplate, quickKey, productID).\r\n        //    then(function () { return provider.getSearchCount(); });\r\n        return pr;\r\n    };\r\n\r\n    this.getProductByID = function (productID) {\r\n        var provider = (configService.isSite && !window.isSupported) ? webOnlyProvider : this.getProvider();\r\n\r\n        var pr = provider.getProductByID(productID);\r\n        return pr;\r\n    };\r\n\r\n    this.getSearchPage = function (page, pageSize, quickKeySearch, quickKey, productID) {\r\n\r\n        if (quickKeySearch!==true || quickKey != null) {\r\n            var provider = (configService.isSite && !window.isSupported) ? webOnlyProvider : this.getProvider();\r\n            return provider.getSearchPage(page, pageSize, productID);\r\n        }\r\n        else {\r\n            var qi = helperService.extractCurrentQuickKeyInfo();\r\n            var start = page * pageSize, stop = page * pageSize + pageSize;\r\n            var arr = !!qi ? helperService.extractCurrentQuickKeyInfo().slice(start, stop) : [];\r\n            var res=[];\r\n            angular.forEach(arr, function (el) {\r\n                var obj = {\r\n                    Family: el.label,\r\n                    FamilyID: el.labelID,\r\n                    FamilyImageID: el.imageID,\r\n                    Name:el.label,\r\n                    ProductID: el.labelID,\r\n                    cnt:0,\r\n                    isFamily: 1,\r\n                    QuickKeyTemplateID: configService.quickKeyTemplateID,\r\n                    QuickKeyID: el.labelID,\r\n                    ImageType: el.imageContentType\r\n                };\r\n                res.push(obj);\r\n            });\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve({data:res, page:page});\r\n            return deferred.promise;\r\n        }\r\n    };\r\n\r\n    this.familySearch = function (familyID) {\r\n        const provider = this.getProvider();\r\n\r\n        var pr = provider.familySearch(familyID).\r\n        then(function () { return provider.getFamilySearchCount(); });\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.getFamilySearchPage = function (page, pageSize) {\r\n        const provider = this.getProvider();\r\n\r\n        return provider.getFamilySearchPage(page, pageSize);\r\n    };\r\n\r\n    this.getFamilySearchFull = function (familyID) {\r\n        const provider = this.getProvider();\r\n\r\n        return provider.familySearch(familyID);\r\n    };\r\n\r\n    // form requests for all images\r\n    this.getProductImages = function (isProduct,productIDs, callback) {\r\n        $.each(productIDs, function (idx, productID) {\r\n            var fun = isProduct ? remoteRequestProvider.loadImage : remoteRequestProvider.loadFamilyImage;\r\n\r\n            var f = fun(productID, 136, 68)\r\n                .then(function (res) {\r\n                    var type = res.data.ContentType;\r\n                    const objStr = unpackStr(res.data.Image);\r\n\r\n                    callback(productID, 'data:' + type + ';base64,' + objStr);\r\n                },\r\n                function (err) {\r\n                });\r\n        });\r\n    };\r\n\r\n    this.getGiftCardSettings = function () {\r\n\r\n        if (configService.isSite || deviceInfo.isSimulator) {\r\n            return remoteRequestProvider.getGiftCardSettings()\r\n            .then(function (res) {\r\n                var deferred = $q.defer();\r\n                configService.giftCardSettings = res.data.GiftCardSttings;\r\n                deferred.resolve(configService.giftCardSettings);\r\n                return deferred;\r\n            });\r\n        }\r\n        else {\r\n            if (configService.isOnline) {\r\n                return remoteRequestProvider.getGiftCardSettings()\r\n                        .then(function (res) {\r\n                            configService.giftCardSettings = res.data.GiftCardSttings;\r\n                            return localDBProvider.setGiftCardSettings(configService.giftCardSettings);\r\n                        });\r\n            }\r\n            else {\r\n                return localDBProvider.getGiftCardSettings()\r\n                .then(function (res) {\r\n                    var deferred = $q.defer();\r\n                    configService.giftCardSettings = res;\r\n                    deferred.resolve(configService.giftCardSettings);\r\n                    return deferred;\r\n                });\r\n            }\r\n        }\r\n    };\r\n\r\n    this.checkProductSerialNumber = function(productID, outletID, serialNumber){\r\n\r\n        if(configService.isOnline){\r\n\r\n            if(serialNumber.length === 0){\r\n                var deferred = $q.defer();\r\n                deferred.resolve({found: false});\r\n                return deferred.promise;\r\n            }\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.checkSerialNumber(productID, outletID, serialNumber)\r\n            .then(function (res) {\r\n                var deferred = $q.defer();\r\n\r\n                var result = {found: false};\r\n                if(res.data.length > 0){\r\n                    result.found = true;\r\n                    result.data = res.data;\r\n                }\r\n                \r\n\r\n                deferred.resolve(result);\r\n                return deferred.promise;\r\n            });\r\n    \r\n            return pr;\r\n        }\r\n        else{\r\n            var deferred = $q.defer();\r\n            deferred.resolve({found: false});\r\n            return deferred.promise;\r\n        }\r\n\r\n    };\r\n\r\n    // taxes part\r\n    // array below will contain all tenant taxes list\r\n    this.taxRules = [];\r\n    this.loadTaxRules = function () {\r\n        var THIS = this;\r\n        if (!configService.isSite && !configService.isOnline && !deviceInfo.isSimulator){\r\n            return localDBProvider.loadTaxRules()\r\n            .then(function (data) {\r\n                THIS.taxRules = data.data;\r\n                return helperService.resolvePromise(data);\r\n            });\r\n        }\r\n\r\n        var pr = remoteRequestProvider.loadTaxRules()\r\n        .catch(function (err) {\r\n            if (configService.isSite || deviceInfo.isSimulator)\r\n                throw err;\r\n\r\n            if (err.status !== -1)\r\n                throw err;\r\n            else {\r\n                return localDBProvider.loadTaxRules();\r\n            }\r\n        }).then(function (data) {\r\n                THIS.taxRules = !data || !data.data ? [] :  data.data;\r\n                return helperService.resolvePromise(data);\r\n            });\r\n\r\n        if (!configService.isSite && !deviceInfo.isSimulator) {\r\n            pr = pr.then(function (data) {\r\n                return localDBProvider.refreshTaxRules(data);\r\n            });\r\n        }\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.checkCheckoutProductsAvailability = function(products2, outletID) {\r\n        if(configService.isOnline){\r\n            var products = products2.filter(function(p) {\r\n                                return p.ProductType === 'Stock';\r\n                            });\r\n\r\n            if(products.length === 0){\r\n                var deferred = $q.defer();\r\n                deferred.resolve({insufficient : false});\r\n                return deferred.promise;\r\n            }\r\n\r\n            var request = [];\r\n\r\n            angular.forEach(products, function (el) {\r\n                if(el.CanEdit && el.CanDelete && el.SaleType === 'sale'){\r\n                    var prod = {\r\n                        ProductID: el.ProductID,\r\n                        Quantity: el.Count,\r\n                        Sku: el.Sku\r\n                    };\r\n                    request.push(prod);\r\n                }                \r\n            });\r\n\r\n            if(request.length === 0){\r\n                var deferred = $q.defer();\r\n                deferred.resolve({insufficient : false});\r\n                return deferred.promise;\r\n            }\r\n\r\n\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.checkCheckoutProductsAvailability(request, outletID)\r\n            .then(function (res) {\r\n                var deferred = $q.defer();\r\n\r\n                var result = {insufficient: false};\r\n                if(res.data){\r\n                    result.insufficient = res.data.insufficient;\r\n                    result.insufficientProducts = res.data.insufficientProducts;\r\n                    result.insufficientQuantitySKUs = res.data.insufficientQuantitySKUs;\r\n                }                \r\n\r\n                deferred.resolve(result);\r\n                return deferred.promise;\r\n            });\r\n    \r\n            return pr;\r\n        }\r\n        else{\r\n            var deferred = $q.defer();\r\n            deferred.resolve({insufficient: false});\r\n            return deferred.promise;\r\n        }  \r\n    };\r\n}]);\r\n","angular.module('services').service('receiptService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider', 'helperService', 'deviceInfo',\r\n    function ($q, $http, configService, remoteRequestProvider, localDBProvider, helperService, deviceInfo) {\r\n\r\n        this.fixTerminalReceipt = function(fe, attr, name) {\r\n            fe.attr(attr);\r\n            fe.css('display', 'none');\r\n            fe.attr('ng-bind-html', name);\r\n            fe.html('');\r\n            fe.parent().attr('not-print', '');\r\n        }\r\n\r\n        this.getReceiptTemplate = function (forceLocal, templateName, scopeObjectName) {\r\n            console.time('getReceiptTemplate fun');\r\n            var provider = (configService.isOnline && forceLocal !== true) || forceLocal === 'remote'  || deviceInfo.isSimulator ? remoteRequestProvider : localDBProvider;\r\n            var promise = null;\r\n\r\n            if (configService.isSite || forceLocal === 'remote') {\r\n\r\n                var v = forceLocal !== true ? null : configService.loadReceiptTemplate();\r\n\r\n                if (!!v) {\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve(JSON.parse(v));\r\n                    promise = deffered.promise;\r\n                }\r\n                else {\r\n                    if (!!templateName)\r\n                        promise = remoteRequestProvider.getReceiptTemplateByName(templateName, scopeObjectName);\r\n                    else\r\n                        promise = remoteRequestProvider.getReceiptTemplate(configService.receiptID);\r\n                }\r\n            }\r\n            else {\r\n                promise = provider.getReceiptTemplate(configService.receiptID);\r\n            }\r\n\r\n            promise = promise.then((receipt) => {\r\n                const deffered = $q.defer();\r\n                console.timeEnd('getReceiptTemplate fun');\r\n                console.time('getReceiptTemplate process');\r\n\r\n                // check if email template is empty use main receipt template\r\n                if (!receipt.data.EmailSubject)\r\n                    receipt.data.EmailSubject = \"\";\r\n                if (!receipt.data.EmailTemplate)\r\n                    receipt.data.EmailTemplate = receipt.data.Template;\r\n\r\n                if (forceLocal !== 'remote' && forceLocal !== true && configService.isOnline && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                    localDBProvider.saveReceiptTemplate(configService.receiptID, receipt.data);\r\n                }\r\n\r\n                if (forceLocal !== 'remote' && configService.isSite === true) {\r\n                    configService.saveReceiptTemplate(JSON.stringify(receipt));\r\n                }\r\n\r\n                // fix for additional card receipts\r\n                let supportMerchantCustomerReceiptPrint = true;\r\n                let supportLinklyMerchantCustomerReceiptPrint = true;\r\n\r\n                const el = $('<div data-base>' + receipt.data.Template + '</div>');\r\n                let fe = el.find(\"span:contains('{{itemTyroTerminalReceipts.MerchantReceipt}}')\");\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'merchant-receipt', \"itemTyroTerminalReceipts.MerchantReceipt\");\r\n                }\r\n                else {\r\n                    supportMerchantCustomerReceiptPrint = el.find('[ng-bind-html=\"itemTyroTerminalReceipts.MerchantReceipt\"]').length > 0;\r\n                }\r\n\r\n                fe = el.find(\"span:contains('{{itemLinklyTerminalReceipts.MerchantReceipt}}')\");\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'merchant-receipt', \"itemLinklyTerminalReceipts.MerchantReceipt\");\r\n                }\r\n                else {\r\n                    supportLinklyMerchantCustomerReceiptPrint = el.find('[ng-bind-html=\"itemLinklyTerminalReceipts.MerchantReceipt\"]').length > 0;\r\n                }\r\n\r\n                fe = el.find(\"span:contains('{{itemTyroTerminalReceipts.CustomerReceipt}}')\");\r\n\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'customer-receipt', \"itemTyroTerminalReceipts.CustomerReceipt\");\r\n                }\r\n                else\r\n                    supportMerchantCustomerReceiptPrint = el.find('[ng-bind-html=\"itemTyroTerminalReceipts.CustomerReceipt\"]').length > 0;\r\n\r\n                fe = el.find(\"span:contains('{{itemLinklyTerminalReceipts.CustomerReceipt}}')\");\r\n\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'customer-receipt', \"itemLinklyTerminalReceipts.CustomerReceipt\");\r\n                }\r\n                else\r\n                    supportLinklyMerchantCustomerReceiptPrint = el.find('[ng-bind-html=\"itemLinklyTerminalReceipts.CustomerReceipt\"]').length > 0;\r\n\r\n                fe = el.find(\"span:contains('{{itemTerminalReceipts.MerchantReceipt}}')\");\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'merchant-receipt', \"itemTerminalReceipts.MerchantReceipt\");\r\n                }\r\n                fe = el.find(\"span:contains('{{itemTerminalReceipts.CustomerReceipt}}')\");\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'customer-receipt', \"itemTerminalReceipts.CustomerReceipt\");\r\n                }\r\n\r\n                helperService.getReceiptProcessSettings(el);\r\n\r\n                receipt.data.Template = el.html();\r\n                configService.supportMerchantCustomerReceiptPrint = supportMerchantCustomerReceiptPrint;\r\n                configService.supportLinklyMerchantCustomerReceiptPrint = supportLinklyMerchantCustomerReceiptPrint;\r\n\r\n                console.timeEnd('getReceiptTemplate process');\r\n                deffered.resolve(receipt.data);\r\n                return deffered.promise;\r\n            });\r\n\r\n            return promise;\r\n        };\r\n\r\n        this.prepareCashManagementReceiptSaleModel = function (scope, obj) {\r\n            scope.receiptSaleModel = {};\r\n            scope.receiptSaleModel.Date = (new Date()).toDateString();\r\n            scope.receiptSaleModel.Time = '';\r\n            scope.receiptSaleModel.OutletName = configService.lastOutlet;\r\n            scope.receiptSaleModel.RegistryName = configService.lastRegistry;\r\n            scope.receiptSaleModel.UserName = configService.userName;\r\n            scope.receiptSaleModel.CashManagementReceipts = [];\r\n\r\n            angular.forEach(obj, function (el) {\r\n                scope.receiptSaleModel.CashManagementReceipts.push({\r\n                    CashManagementOperation: el.OperationType,\r\n                    CashManagementAmount: el.Amount,\r\n                    CashManagementNotes: el.Reasons\r\n                });\r\n            });\r\n        };\r\n\r\n        this.prepareVantivDeclineReceiptSaleModel = function (scope, obj, currency) {\r\n            scope.receiptSaleModel = {};\r\n            scope.receiptSaleModel.VantivTerminalReceipts = [];\r\n            scope.receiptSaleModel.Date = (new Date()).toDateString();\r\n            scope.receiptSaleModel.Time = '';\r\n            scope.receiptSaleModel.OutletName = configService.lastOutlet;\r\n            scope.receiptSaleModel.RegistryName = configService.lastRegistry;\r\n            scope.receiptSaleModel.UserName = configService.userName;\r\n            scope.receiptSaleModel.VantivTerminalReceipts.push(this.fillVantivTransactionData(obj, currency));\r\n        };\r\n\r\n        this.fillVantivTransactionData = function (transactionData, currency) {\r\n            var tags = [];\r\n            if (!!transactionData.emv) {\r\n                angular.forEach(transactionData.emv.tags, function (t) {\r\n                    tags.push({ key: t.key, value: t.value });\r\n                });\r\n            }\r\n\r\n            // code below for tests only!\r\n            //tags.push({ key: '111', value: '333' });\r\n            //tags.push({ key: '222', value: '444' });\r\n\r\n            return {\r\n                VantivMerchantID: transactionData.merchantId,\r\n                VantivTerminalID: transactionData.terminalId,\r\n                VantivReferenceNo: transactionData._processor.processorReferenceNumber,\r\n                VantivAccountNo: transactionData.accountNumber,\r\n                VantivCard: transactionData.cardLogo,\r\n                VanitvEntry: transactionData.entryMode,\r\n                VantivTransactionID: transactionData.transactionId,\r\n                VantivApprovalCode: transactionData.approvalNumber,\r\n                VantivResponseCode: transactionData._processor.processorResponseCode,\r\n                VantivExpressResponseCode: transactionData._processor.hostResponseCode,\r\n                VantivApprovedAmount: helperService.applyCurrency(transactionData._type === \"returnResponse\" ? -transactionData.totalAmount : transactionData.approvedAmount, currency),\r\n                VantivSignature: transactionData.signatureImage,\r\n                VantivApplicationID: !!transactionData.emv ? transactionData.emv.applicationIdentifier : null,\r\n                VantivCryptogram: !!transactionData.emv ? transactionData.emv.cryptogram : null,\r\n                VantivTags: tags\r\n            };\r\n        };\r\n\r\n    }]);\r\n","angular.module('services').service('registryService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', 'webOnlyProvider', 'cashManagementService',\r\n    'constants', 'cardPayService', 'errorService', 'deviceInfo', 'jsStoreProvider', 'orderStatusService',\r\nfunction ($q, configService, remoteRequestProvider, localDBProvider, webOnlyProvider, cashManagementService, constants, cardPayService, errorService, deviceInfo, jsStoreProvider, orderStatusService) {\r\n    this.currentSavingRegistryClose = null;\r\n\r\n    this.openRegistry = function (ID, registryID, userName) {\r\n        var provider = configService.isSite || deviceInfo.isSimulator ? webOnlyProvider : localDBProvider;\r\n\r\n        var pr = provider.openRegistry(ID, registryID, userName, !configService.isSite).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    /**\r\n     * @param {PosCloseRegistryData} obj\r\n     */\r\n    this.closeRegistry = function (obj) {\r\n        var self = this;\r\n        var provider = localDBProvider;\r\n        if (!obj.Note) {\r\n            obj.Note = '';\r\n        }\r\n\r\n        self.currentSavingRegistryClose = null;\r\n\r\n        if (configService.isSite || deviceInfo.isSimulator) {\r\n            obj.IsActive = 0;\r\n            obj.IsMobile = !configService.isSite;\r\n\r\n            var ordersPromise = fetchOrdersForCloseRegistry(obj.ID, obj);\r\n\r\n            var endOfDayPromise = cardPayService.getEndOfDayReport(this, obj.ID)\r\n                .then(function (res) {\r\n                    obj.EndOfDayReport = !!res ? JSON.stringify(res) : null;\r\n                });\r\n\r\n            return $q.all([ordersPromise, endOfDayPromise])\r\n                .then(function () {\r\n                    return remoteRequestProvider.closeRegistry([obj]);\r\n                });\r\n        } else {\r\n            var pr = sendOfflineOpenCloseRegistry(100)\r\n             .then(function () {\r\n                    var ordersPromise = fetchOrdersForCloseRegistry(obj.ID, obj);\r\n\r\n                    var endOfDayPromise = cardPayService.getEndOfDayReport(this, obj.ID)\r\n                        .then(function (endOfDayReport) {\r\n                            obj.EndOfDayReport = !!endOfDayReport ? JSON.stringify(endOfDayReport) : null;\r\n                        })\r\n                        .catch(function (err) {\r\n                            errorService.showError(err);\r\n                            obj.EndOfDayReport = null;\r\n                        });\r\n\r\n                    return $q.all([ordersPromise, endOfDayPromise]);\r\n                })\r\n                .then(function () {\r\n                   self.currentSavingRegistryClose = obj.ID;\r\n                   return provider.closeRegistry(obj.ID, obj.CashCounted, obj.CreditCardCounted, obj.GiftCardCounted,\r\n                    obj.LoyaltyCounted, obj.StoreCreditCounted, obj.Note, obj.customPayments, obj.EndOfDayReport)\r\n                    .then(function (res) {\r\n                    if (configService.isOnline) {\r\n                        obj.IsActive = 0;\r\n                        obj.IsMobile = !configService.isSite;\r\n                        return remoteRequestProvider.closeRegistry([obj])\r\n                        //return provider.getCloseRegistryAdditionalTotals(obj.ID).then(function (resTot) {\r\n                        //    obj.AdditionalTotals = resTot;\r\n                        //    return remoteRequestProvider.closeRegistry([obj]);\r\n                        //})\r\n                        .then(function (res) { return cashManagementService.sendOfflineCashManagement(obj.RegistryID); })\r\n                        .then(function (res) { return localDBProvider.sendClosecRegistry(obj.ID); })\r\n                        .then(function (res) { return localDBProvider.removeCashMovements(obj.ID); })\r\n                        .then(function (res) { return localDBProvider.removeSendedClosecRegistry(obj.ID, obj.RegistryID); })\r\n                        .then(function () { self.currentSavingRegistryClose = null; });\r\n                    }\r\n                    else {\r\n                        self.currentSavingRegistryClose = null;\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(res); // closure info will be sent later\r\n                        return deferred.promise;\r\n                    }\r\n                });\r\n            }).finally(function () {\r\n                self.currentSavingRegistryClose = null;\r\n            });\r\n\r\n\r\n            return pr;\r\n        }\r\n    };\r\n\r\n\r\n    this.updateRegistryCash = function (ID, amount) {\r\n        if (configService.isSite || deviceInfo.isSimulator) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        }\r\n\r\n        var provider = localDBProvider;\r\n        var pr = provider.updateRegistrySales(ID, amount, 0, 0, 0, 0).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    this.activeSalesFromLogin = null;\r\n    this.getActiveRegistrySales = function (registryID, userName, forceNetwork, mode, closeRegistryID) {\r\n        if(this.activeSalesFromLogin) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(this.activeSalesFromLogin);\r\n            this.activeSalesFromLogin = null;\r\n            return deferred.promise;\r\n        }\r\n        console.time('getActiveRegistrySales fun');\r\n        var provider = (configService.isSite || forceNetwork || deviceInfo.isSimulator) ? webOnlyProvider : localDBProvider;\r\n        return provider.getActiveRegistrySales(registryID, userName, mode, closeRegistryID)\r\n        .then(function(res) {\r\n            console.timeEnd('getActiveRegistrySales fun');\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n    };\r\n\r\n    this.getClosedRegistries = function (registryID, userName, forceNetwork) {\r\n        var provider = (configService.isSite || forceNetwork || deviceInfo.isSimulator) ? webOnlyProvider : localDBProvider;\r\n        return provider.getClosedRegistries(registryID, userName);\r\n    };\r\n\r\n    var registryService = this;\r\n    \r\n    function fetchOrdersForCloseRegistry(closeRegistryID, obj) {\r\n        if (orderStatusService.isTrackingEnabled(true)) {\r\n            return orderStatusService.getOrdersForCloseRegistry(closeRegistryID)\r\n                .then(function(orders) {\r\n                    obj.OrdersStatusHistory = orders;\r\n                })\r\n                .catch(function(err) {\r\n                    console.error('Failed to fetch order status history:', err);\r\n                });\r\n        } else {\r\n            return $q.resolve();\r\n        }\r\n    }\r\n    \r\n    function sendOfflineOpenCloseRegistry(count) {\r\n        var pr = localDBProvider.getRegisterStatisticToProcess(count, registryService.currentSavingRegistryClose).then(function (data) {\r\n            var arr = [];\r\n\r\n            $.each(data, function (idx, el) {\r\n                var obj = el;\r\n                obj.IsMobile = !configService.isSite;\r\n                arr.push(obj);\r\n            });\r\n\r\n            if (arr.length > 0) {\r\n                var orderPromises = arr.map(function(obj) {\r\n                    return fetchOrdersForCloseRegistry(obj.ID, obj)\r\n                        .then(function() {\r\n                            return obj;\r\n                        });\r\n                });\r\n\r\n                return $q.all(orderPromises)\r\n                    .then(function() {\r\n                        return remoteRequestProvider.closeRegistry(arr);\r\n                    })\r\n                    .then(function () {\r\n                        var promises = [];\r\n                        $.each(arr, function (idx, el) {\r\n                            var ppr = cashManagementService.sendOfflineCashManagement(el.RegistryID).then(function () {\r\n                                return localDBProvider.sendClosecRegistry(el.ID);\r\n                            });\r\n                            promises.push(ppr);\r\n                        });\r\n                        return $q.all(promises);\r\n                    },\r\n                    function (err) {\r\n                        // will be sent later\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(false);\r\n                        return deferred.promise;\r\n                    });\r\n            }\r\n        });\r\n\r\n        return pr.then(function () {\r\n            return localDBProvider.getRegisterStatisticToProcess().then(function (resp) {\r\n                if (resp.length > 0 && configService.isOnline === true) {\r\n                    return true;\r\n                } else {\r\n                    return false;\r\n                }\r\n            });\r\n        });\r\n    }\r\n\r\n    this.addCallback = function () {\r\n        if (!(configService.isSite  || deviceInfo.isSimulator)) {\r\n            configService.addCallbackFunction(sendOfflineOpenCloseRegistry);\r\n        }\r\n    }\r\n}]);\r\n","import unpackArray from \"./unpackWorkerHelper\";\r\nimport buildConfiguration from './configEnvironment';\r\n\r\nangular.module('services').service('remoteRequestProvider',\r\n    ['$q', '$http', 'configService', '$timeout', '$interval', '$rootScope',\r\n        function ($q, $http, configService, $timeout, $interval, $rootScope) {\r\n\r\n            this.login = function (dearPosName, userName, password, pin, pinToken, externalToken = null, tokenType = null, savedData = null) {\r\n                // *************** for debug !!! ***********************\r\n                //configService.applicationKey = '12345';\r\n                //configService.tenantID = '32145';\r\n                //configService.loginUserID = '34534534';\r\n                //configService.userName = userName;\r\n                //configService.role = 'Administrator';\r\n                //deferred.resolve(null);\r\n                //return deferred.promise;\r\n                // ***************************************************\r\n    \r\n                const req = {\r\n                    UserName: userName,\r\n                    Password: password,\r\n                    PosApplicationName: dearPosName,\r\n                    PinToken: pinToken,\r\n                    Pin: pin,\r\n                    AppVersion: buildConfiguration.appVersion,\r\n                    ExternalToken: externalToken,\r\n                    TokenType: tokenType,\r\n                    Platform: buildConfiguration.platform,\r\n                    GetConfig: false\r\n                };\r\n\r\n                if (savedData) {\r\n                    req.Password = null;\r\n                    req.UserID = savedData.UserID;\r\n                    req.GetConfig = true;\r\n                    req.ApplicationKey = savedData.ApplicationKey;\r\n                }\r\n                return $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosAccount',\r\n                    data: req\r\n                });\r\n            };\r\n\r\n            this.changePassword = function (userID, passwordOld, passwordNew) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUser?ID=' + userID,\r\n                    data: {\r\n                        OldPassword: passwordOld,\r\n                        NewPassword: passwordNew\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getUserPosOutletsRegistry = function (userID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOutlet?UserID=' + userID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getNextSequence = function (posOutletID, posRegistryID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrder/GetNextSequence?RegistryID=' + posRegistryID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getCurrentSequence = function (posOutletID, posRegistryID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosRegistrySequence/GetCurrentSequence?RegistryID=' + posRegistryID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getPosOutlet = function (posOutletID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOutlet?ID=' + posOutletID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getPosOutletsRegistry = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOutlet'\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadProducts = function (hash) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosProduct3',\r\n                    params: {\r\n                        ProductHash: !!hash ? hash : null,\r\n                        outletLocationMappingID: configService.lastECSMappingOutletID,\r\n                        ignoreNullValues: true\r\n                    }\r\n\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadImage = function (productID, sX, sY) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    //url: configService.connectionURL + '/PosProductImage?ID=' + productID + '&Width=' + sX + '&Height=' + sY\r\n                    url: configService.baseImageURL + '/PosProductImage?ID=' + productID + '&Width=' + sX + '&Height=' + sY\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadFamilyImage = function (productID, sX, sY) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    //            url: configService.connectionURL + '/PosProductFamilyImage?ID=' + productID + '&Width=' + sX + '&Height=' + sY\r\n                    url: configService.baseImageURL + '/PosProductFamilyImage?ID=' + productID + '&Width=' + sX + '&Height=' + sY\r\n                });\r\n                return req;\r\n            };\r\n\r\n\r\n            this.loadCostomersAll = function (hash, checkCount = false) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n//                    url: configService.connectionURL + '/PosLoadCustomer' + (!!hash ? ('?CustomerHash=' + hash) : '')\r\n                    url: configService.connectionURL + '/PosLoadCustomer2',\r\n                    params: {\r\n                        CustomerHash: hash,\r\n                        checkCount: checkCount\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadCustomers = function (text, page, limit, filters) {\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                if (!configService.isOnline) {\r\n                    var deferred = $q.defer();\r\n                    deferred.reject('Cannot load customers when offline');\r\n                    return deferred.promise;\r\n                }\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCustomer2',\r\n                    params: {\r\n                        Name: filters.CustomerName ? filters.CustomerName : null,\r\n                        Phone: filters.CustomerPhone ? filters.CustomerPhone : null,\r\n                        Email: filters.CustomerEmail ? filters.CustomerEmail : null,\r\n                        Term: text ? encodeURIComponent(text) : null,\r\n                        ID: filters.CustomerID ? filters.CustomerID : null,\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        SaleBarcode: filters.SaleBarcode ? filters.SaleBarcode : null\r\n                    }\r\n                });\r\n\r\n                return req.then(function (res) {\r\n                    if (res.data && res.data.Customers) {\r\n                        res.data.Customers = res.data.Customers.map(function (c) {\r\n                            var customer = Object.assign({}, c);\r\n                            customer.Attributes = [];\r\n                            if (c.Attributes && c.Attributes !== '') {\r\n                                const arr = c.Attributes.split(';');\r\n                                for (var i = 0; i < arr.length; i++) {\r\n                                    var value = c['AdditionalAttribute' + (i + 1)];\r\n                                    if (value) {\r\n                                        customer.Attributes.push({Name: arr[i], Value: value});\r\n                                    }\r\n                                }\r\n                            }\r\n                            return customer;\r\n                        });\r\n                    }\r\n                    return res;\r\n                });\r\n            };\r\n\r\n\r\n            this.loadFakeCustomer = function (email, id) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCustomer2',\r\n                    params: {\r\n                        Email: email,\r\n                        FakeServerKey: id\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getCustomer = function (Id) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCustomer2',\r\n                    params: {\r\n                        ID: Id\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            this.createCustomer = function (customer) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosCustomer',\r\n                    data: customer\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadCountries = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCountry'\r\n                });\r\n\r\n                return req;\r\n            }\r\n\r\n            this.updateCustomer = function (customer) {\r\n                angular.extend(customer, { userName: configService.userName });\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosCustomer',\r\n                    data: customer\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.removeCustomer = function (customerID) {\r\n                var req = $http({\r\n                    method: 'DELETE',\r\n                    url: configService.connectionURL + '/PosCustomer?ID' + customerID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.processSale = function (sale) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosOrder',\r\n                    data: { Data: sale }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getReceiptTemplate = function (receiptID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosReceipt?ID=' + receiptID + '&Type=ANGULARJS&RootProperty=receiptSaleModel',\r\n                    cache: false\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getLabelTemplate = function (receiptID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosReceipt?ID=' + receiptID + '&Type=ANGULARJS&RootProperty=labelModel',\r\n                    cache: false\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getReceiptTemplateByName = function (receiptName, receiptScopeObject) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosReceipt?ReportShortName=' + receiptName + '&Type=ANGULARJS&RootProperty=' + receiptScopeObject,\r\n                    cache: false\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadSalesHistory = function (page, limit, filters, sorting, searchText) {\r\n\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                if (!sorting) {\r\n                    sorting = {};\r\n                }\r\n                var isStatusArray = false;\r\n                var statusArr = null;\r\n                if (filters.StatusID && typeof filters.StatusID === 'string') {\r\n                    try {\r\n                        statusArr = JSON.parse(filters.StatusID);\r\n                        if (statusArr && Array.isArray(statusArr)) {\r\n                            isStatusArray = true;\r\n                        }\r\n                    } catch (e) {\r\n                        isStatusArray = false;\r\n                    }\r\n                }\r\n\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrderList',\r\n                    params: {\r\n                        DateFrom: filters.DateFrom ? filters.DateFrom : null,\r\n                        DateTo: filters.DateTo ? filters.DateTo : null,\r\n                        DateOffset: new Date().getTimezoneOffset(),\r\n                        ID: filters.SaleID ? filters.SaleID : null,\r\n                        CustomerName: filters.Customer ? filters.Customer : null,\r\n                        OrderNumber: filters.ReceiptNumber ? filters.ReceiptNumber : null,\r\n                        OutletID: filters.OutletID && filters.OutletID != '0' ? filters.OutletID : null,\r\n                        UserName: filters.UserName ? filters.UserName : null,\r\n                        Status: filters.StatusID && filters.StatusID != '0' && typeof filters.StatusID === 'string' && !isStatusArray ? filters.StatusID : null,\r\n                        SearchText: searchText ? searchText : null,\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        SortField: sorting.FieldName ? sorting.FieldName : null,\r\n                        SortDirection: sorting.Direction ? sorting.Direction : null,\r\n                        ApplicationID: configService.applicationID,\r\n                        LastRequestDate: filters.LastRequestDate ? filters.LastRequestDate : null,\r\n                        Statuses: filters.StatusID && isStatusArray && statusArr.length ? statusArr : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.parkSale = function (sale, info) {\r\n                var obj = {\r\n                    sale: sale,\r\n                    info: info,\r\n                    Date: new Date(),\r\n                    OrderID: sale.ID,\r\n                    OrderNumber: sale.OrderNumber,\r\n                    SalesRepresentative: info.userName,\r\n                    RegistryID: info.registryID\r\n                };\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosOrder',\r\n                    data: { Data: [obj] }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadParkedSales = function (page, limit, outletID, filters) {\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrderList',\r\n                    params: {\r\n                        ID: filters.SaleID ? filters.SaleID : null,\r\n                        OutletID: outletID,\r\n                        Status: 'PARKED',\r\n                        Page: page,\r\n                        Limit: limit,\r\n                        ApplicationID: configService.applicationID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadPosUsers = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosUser'\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.sendEmailReceipt = function (orderID, baseOrderID, email, emailSubject, emailBody, ignoreOrderID, templateID, documentBody) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosReceiptEmail',\r\n                    data: {\r\n                        OrderID: orderID,\r\n                        BaseOrderID: baseOrderID,\r\n                        EmailSubject: emailSubject,\r\n                        EmailBody: emailBody,\r\n                        Email: email,\r\n                        IgnoreOrderID: ignoreOrderID === true,\r\n                        TemplateID: templateID,\r\n                        DocumentBody: documentBody\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            /**\r\n             * @param {PosCloseRegistryData[]} objArr\r\n             */\r\n            this.closeRegistry = function (objArr) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosCloseRegistry',\r\n                    data: { Data: objArr }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getPosUsers = function (currentUserName, page, limit, filters) {\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosUserManagement',\r\n                    params: {\r\n                        CurrentUserName: currentUserName,\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        ID: filters.ID ? filters.ID : null,\r\n                        UserName: filters.UserName ? filters.UserName : null,\r\n                        RoleName: filters.RoleName && filters.RoleName != '0' ? filters.RoleName : null,\r\n                        OutletID: filters.OutletID && filters.OutletID != '0' ? filters.OutletID : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.searchSaleRepresentatives = function (page, limit, outletID, filters) {\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosSearchSaleRepresentatives',\r\n                    params: {\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        OutletID: outletID? outletID: null,\r\n                        ID: filters.ID ? filters.ID : null,\r\n                        Name: filters.Name ? filters.Name : null,\r\n                        HideAllLocations: filters.HideAllLocations ? filters.HideAllLocations : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadSaleRepresentativesAll = function (hash) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosLoadSaleRepresentatives' + (!!hash ? ('?SaleRepresentativesHash=' + hash) : '')\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            this.createPosUser = function (user) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosUserManagement',\r\n                    data: {\r\n                        UserName: user.UserName,\r\n                        Name: user.Name,\r\n                        RoleName: user.RoleFullName,\r\n                        OutletID: user.PosOutletID,\r\n                        CurrentUser: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.updatePosUser = function (user) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUserManagement',\r\n                    data: {\r\n                        ID: user.UserId,\r\n                        Name: user.Name,\r\n                        RoleName: user.RoleFullName,\r\n                        OutletID: user.PosOutletID,\r\n                        CurrentUser: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.removePosUser = function (ID) {\r\n                var req = $http({\r\n                    method: 'DELETE',\r\n                    url: configService.connectionURL + '/PosUserManagement',\r\n                    params: {\r\n                        ID: ID,\r\n                        CurrentUser: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.activateUser = function (ID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUserActivation',\r\n                    data: {\r\n                        ID: ID,\r\n                        isLocked: false\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.deactivateUser = function (ID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUserActivation',\r\n                    data: {\r\n                        ID: ID,\r\n                        isLocked: true\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.discardParkedSale = function (ID) {\r\n                var req = $http({\r\n                    method: 'DELETE',\r\n                    url: configService.connectionURL + '/PosOrder',\r\n                    params: {\r\n                        ID: ID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            function checkConnection() {\r\n\r\n                if (!configService.applicationID || !configService.tenantID) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n                    return deferred.promise;\r\n                }\r\n                else {\r\n                    var req = $http({\r\n                        method: 'GET',\r\n                        url: configService.connectionURL + '/PosPing',\r\n                        params: {\r\n                            configID: configService.applicationID,\r\n                            tenantID: configService.tenantID\r\n                        },\r\n                        byPassCancellation: true\r\n                    });\r\n\r\n                    return req;\r\n                }\r\n            }\r\n\r\n            configService.setPingFunction(ping);\r\n\r\n            $interval(function () {\r\n                ping();\r\n            }, configService.pingFrequency);\r\n\r\n            function ping() {\r\n                var canProcess = (Math.floor(Date.now()/1000) - configService.lastPingCall) > configService.pingMinInterval;\r\n                if (!canProcess) return;\r\n\r\n                configService.lastPingCall = Math.floor(Date.now() / 1000);\r\n                if (configService.hasNetworkConnection === true || configService.isSite === true) {\r\n                    checkConnection().then(function (resp) {\r\n                        $timeout(function () {\r\n                            configService.setNetworkMode(configService.hasNetworkConnection, true);\r\n                        });\r\n                        if (!!resp && !!resp.data) {\r\n                            if (resp.data.BlockSales === true) {\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('header.blockSales');\r\n                                });\r\n                            } else if (resp.data.LastPosChange && resp.data.LastPosChange !== configService.lastPosChange) {\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('header.updateSettings');\r\n                                });\r\n                            }\r\n                        }\r\n\r\n                    }, function (err) {\r\n                        console.log('error ', err);\r\n                        if (!!err && err.hasOwnProperty('headers')) {\r\n                            err = err.data;\r\n                        }\r\n                        $timeout(function () {\r\n                            configService.setNetworkMode(configService.hasNetworkConnection, false);\r\n                        });\r\n                    });\r\n                } else {\r\n                    $timeout(function () {\r\n                        configService.setNetworkMode(configService.hasNetworkConnection, false);\r\n                    });\r\n                }\r\n            }\r\n\r\n            this.addCashMovements = function (objArr) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosCashManagement',\r\n                    data: { Data: objArr }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.recoverPassword = function (posName, userName) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosPasswordRecovery',\r\n                    data: {\r\n                        PosApplicationName: posName,\r\n                        UserName: userName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getPosDiscounts = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosDiscounts'\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getLiveSearchProducs = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosProduct3',\r\n                    params: {\r\n                        isLiveDataRequest: true,\r\n                        outletLocationMappingID: configService.lastECSMappingOutletID\r\n                    }\r\n                });\r\n\r\n                req = req.then(function (resp) {\r\n                    var deferred = $q.defer();\r\n\r\n                    const restored = unpackArray(resp.data.Products);\r\n\r\n                    var arr = Array.isArray(restored) ? restored : [];\r\n\r\n                    deferred.resolve(arr);\r\n                    return deferred.promise;\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadLiveCustomers = function (checkCount = false) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosLoadCustomer2',\r\n                    params: {\r\n                        isLiveDataRequest: true,\r\n                        checkCount: checkCount\r\n                    }\r\n                });\r\n\r\n                req = req.then(function (resp) {\r\n                    var deferred = $q.defer();\r\n\r\n                    const restored = unpackArray(resp.data.Customers);\r\n\r\n                    var arr = Array.isArray(restored) ? restored : [];\r\n\r\n                    deferred.resolve(arr);\r\n                    return deferred.promise;\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.savePin = function (pinToken) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUserPin',\r\n                    data: {\r\n                        PinToken: pinToken,\r\n                        UserID: configService.loginUserID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            this.getStockTakeData = function (prms) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/StockTake',\r\n                    params: prms\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.saveNewStockTake = function (data) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/StocktakeTask',\r\n                    data: data\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.updateStockTake = function (data) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/StocktakeTask',\r\n                    data: data\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadStocktakeList = function (page, limit, status, sorting) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/StocktakeTask',\r\n                    params: {\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        Status: status,\r\n                        SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                        SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.deleteStocktake = function (taskID) {\r\n                var req = $http({\r\n                    method: 'DELETE',\r\n                    url: configService.connectionURL + '/StocktakeTask',\r\n                    params: {\r\n                        TaskID: taskID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.startStocktake = function (taskID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/Stocktake',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        status: 'IN PROGRESS',\r\n                        userName: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadStocktake = function (taskID, page, limit, sorting, text, mode) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/StocktakeProcess',\r\n                    params: {\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        TaskID: taskID,\r\n                        SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                        SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null,\r\n                        searchString: text,\r\n                        searchMode: mode\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.adjustStocktakeItem = function (taskID, itemID, isAbsolute, value, locationID, batchSN, expiryDate, productID, receivedDate) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/StocktakeProcess',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        itemID: itemID,\r\n                        isAbsolute: isAbsolute,\r\n                        value: value,\r\n                        locationID: locationID,\r\n                        batchSN: batchSN,\r\n                        expiryDate: expiryDate,\r\n                        productID: productID,\r\n                        receivedDate: receivedDate\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.completeStocktake = function (taskID, localDate) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/Stocktake',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        status: 'COMPLETED',\r\n                        userName: configService.lastUserName,\r\n                        localDate: localDate\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.cancelStocktake = function (taskID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/Stocktake',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        status: 'VOIDED',\r\n                        userName: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.undoStocktake = function (taskID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/Stocktake',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        status: 'UNDO',\r\n                        userName: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.dataChangeStatuses = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosChangeEvent',\r\n                    cache: false,\r\n                    byPassCancellation: true\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getSaleCoupons = function (couponCode) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCoupon',\r\n                    params: {\r\n                        CouponCode: couponCode\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getGiftCardSettings = function () {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosGiftCard',\r\n                    data: JSON.stringify({\r\n                        ReturnType: 'GiftCardSettings'\r\n                    })\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            this.checkSerialNumber = function (productID, outletID, serialNumber) {\r\n\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCheckSerialNumber',\r\n                    params: {\r\n                        ProductID: productID,\r\n                        OutletID: outletID,\r\n                        SerialNumber: serialNumber\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getDashboardData = function(startDate, endDate, viewMode, outletID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosDashboard',\r\n                    params: {\r\n                        ApplicationID: configService.applicationID,\r\n                        DateFrom: startDate,\r\n                        DateTo: endDate,\r\n                        ViewMode: viewMode,\r\n                        UserID: configService.loginUserID,\r\n                        OutletID: !!outletID && outletID!=='0' ? outletID : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadClickAndCollectSales = function(outletID, page, limit, filters){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosClickAndCollect',\r\n                    params: {\r\n                        OutletID: outletID,\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        CustomerSearch: filters.CustomerSearch? filters.CustomerSearch: null,\r\n                        SaleNumberSearch: filters.SaleNumberSearch? filters.SaleNumberSearch: null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadClickAndCollectSale = function(outletID, taskID, fromOrderLines){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosClickAndCollect',\r\n                    params: {\r\n                        OutletID: outletID,\r\n                        TaskID: taskID,\r\n                        FromOrderLines: fromOrderLines\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.clickAndCollectAutoPick = function(outletID, taskID, fromOrderLines){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosClickAndCollectAutoPick',\r\n                    params: {\r\n                        OutletID: outletID,\r\n                        TaskID: taskID,\r\n                        FromOrderLines: fromOrderLines\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.clickAndCollectFulfill = function (payload) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosClickAndCollectFulfilment',\r\n                    data: JSON.stringify(payload)\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadTaxRules = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosTaxRules'\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.checkCheckoutProductsAvailability = function (products, outletID) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosCheckoutProductsAvailability',\r\n                    data: JSON.stringify({Data: products}),\r\n                    params: {\r\n                        OutletID: outletID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.checkGiftCardExists = function (code) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosGiftCard/',\r\n                    data: JSON.stringify({\r\n                        ReturnType: 'GiftCardExists',\r\n                        GiftCardCodes: [code]\r\n                    })\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadDEARSales  = function(page, limit, filters){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrderListDEARSales',\r\n                    params: {\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        DateFrom: filters.DateFrom ? filters.DateFrom : null,\r\n                        DateTo: filters.DateTo ? filters.DateTo : null,\r\n                        SearchText: filters.searchText? filters.searchText: null,\r\n                        DateOffset: new Date().getTimezoneOffset(),\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadDEARSale  = function(taskID){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrderListDEARSales',\r\n                    params: {\r\n                        TaskID: taskID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.linkingExternal = function (posName, userName, password, token, tokenType) {\r\n                return $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosExternalAuth',\r\n                    data: {\r\n                        PosApplicationName: posName,\r\n                        UserName: userName,\r\n                        Password: password,\r\n                        ExternalToken: token,\r\n                        TokenType: tokenType,\r\n                        Platform: buildConfiguration.platform\r\n                    }\r\n                });\r\n            };\r\n\r\n            this.getLLCustomerRewards = function (LLMerchantID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosLoyaltyLionCustomerRewards',\r\n                    params: {\r\n                        MerchantID: LLMerchantID\r\n                    }\r\n                });\r\n                return req;\r\n            };\r\n\r\n        }]);","angular.module(\"mainApp\").controller('reportCloseRegistryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', 'registryService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService', '$filter', '$location',\r\n        function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, registryService, $uibModal,\r\n            helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, $filter, $location) {\r\n\r\n            $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constCloseRegistryViewName }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            $scope.locations = [];\r\n            $scope.registries = [];\r\n            $scope.mode = '';\r\n            $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n            $scope.dataPage = 1;\r\n            $scope.dataPageDisplay;\r\n            $scope.itemsByPage = 20;\r\n            $scope.isLoading = false;\r\n\r\n            $scope.triggerChangeOutletFilter = true;\r\n            $scope.triggerChangeRegisterFilter = true;\r\n            $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n            $scope.ifcss = { 'height': (window.innerHeight * 0.9) - 230 + 'px' };\r\n\r\n            $scope.currentFilter = {\r\n                fromDate: helperService.getFormatedDate2(new Date()),\r\n                toDate: helperService.getFormatedDate2(new Date()),\r\n                registries: [],\r\n                outletID: '0',\r\n                registryID: '0'\r\n            };\r\n\r\n            $scope.prepareAnyDayClosureData = {\r\n                mode: 'warning',\r\n                closureDate: null\r\n            };\r\n\r\n            $scope.onLoad = function () {\r\n                $.blockUI();\r\n                var backFilter = window.localStorage.getItem('reportRegisterClosure');\r\n                if (backFilter) {\r\n                    window.localStorage.removeItem('reportRegisterClosure');\r\n                    backFilter = JSON.parse(backFilter);\r\n                    $scope.currentFilter.fromDate = backFilter.fromDate;\r\n                    $scope.currentFilter.toDate = backFilter.toDate;\r\n                    // $scope.currentFilter.outletID = backFilter.outletID;\r\n                    // $scope.currentFilter.registryID = backFilter.registryID;\r\n                }\r\n                \r\n                stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n                    .then(function (res) {\r\n                        $scope.locations = res.data.locations;\r\n                        $scope.registries = res.data.registries;\r\n                        $scope.currentFilter.registries = res.data.registries;\r\n\r\n                        if ($scope.locations.length == 1) {\r\n                            $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                        }\r\n\r\n                        $timeout(function () {\r\n                            $timeout(function () { $('input, select').trigger('refresh'); });\r\n                        });\r\n\r\n                        if (backFilter) {\r\n                            $timeout(function () {\r\n                                // $scope.dataPage = backFilter.dataPage;\r\n                                $scope.loadGrid();\r\n                            });\r\n                        }\r\n\r\n                        $.unblockUI();\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                    });\r\n            };\r\n\r\n\r\n\r\n            $scope.$watch('currentFilter.registryID',\r\n                function (newValue, oldValue) {\r\n\r\n                    if ($scope.triggerChangeRegisterFilter) {\r\n                        $scope.getReports();\r\n                    }\r\n\r\n                    $scope.triggerChangeRegisterFilter = true;\r\n                }\r\n            );\r\n\r\n            $scope.updateRegistriesCombo = function (outletID) {\r\n\r\n                $scope.currentFilter.registryID = '0';\r\n                $timeout(function () {\r\n                    $scope.currentFilter.registries = []\r\n                        .concat($scope.registries.filter(function (v) {\r\n                            return v.PosOutletID == outletID;\r\n                        }));\r\n\r\n                    if (!outletID || outletID == '0')\r\n                        $scope.currentFilter.registries = $scope.registries;\r\n\r\n                    $timeout(function () {\r\n                        $('#selectRegisterReportRegisterClosure').trigger('refresh');\r\n                    }, 10);\r\n                });\r\n\r\n            };\r\n\r\n\r\n            $scope.$watch('currentFilter.outletID',\r\n                function (newValue, oldValue) {\r\n\r\n                    $scope.updateRegistriesCombo(newValue);\r\n\r\n                    if ($scope.triggerChangeOutletFilter) {\r\n                        $scope.getReports();\r\n                    }\r\n\r\n                    $scope.triggerChangeOutletFilter = true;\r\n                }\r\n            );\r\n\r\n            $scope.dateSelectedCallback = function (from, to) {\r\n                $scope.currentFilter.fromDate = from;\r\n                $scope.currentFilter.toDate = to;\r\n                $scope.getReports();\r\n            }\r\n\r\n            const scrollReachBottomCallback = function () {\r\n                if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                    $scope.selectPage($scope.dataPage + 1);\r\n                }\r\n            }\r\n\r\n            initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n            function getPages(total) {\r\n                var step = $scope.itemsByPage;\r\n                $scope.totalPages = Math.ceil(total / step);\r\n                $scope.totalRecords = total;\r\n                if ($scope.totalPages === 0) {\r\n                    $scope.totalPages = 1;\r\n                }\r\n            };\r\n\r\n\r\n            $scope.clear = function () {\r\n                $scope.triggerChangeOutletFilter = false;\r\n                $scope.triggerChangeRegisterFilter = false;\r\n                $scope.currentFilter.outletID = '0';\r\n                $scope.currentFilter.registryID = '0';\r\n                $scope.currentFilter.fromDate = helperService.getFormatedDate2(new Date());\r\n                $scope.currentFilter.toDate = helperService.getFormatedDate2(new Date());\r\n\r\n                $timeout(function () {\r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                });\r\n\r\n                $scope.getReports();\r\n            };\r\n\r\n\r\n\r\n            // grid control\r\n            $scope.gridControl = function (tableState) {\r\n                var sort = {};\r\n\r\n                if (!!tableState.sort.predicate) {\r\n                    sort.FieldName = tableState.sort.predicate;\r\n                    sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n                }\r\n\r\n                $.blockUI();\r\n                $scope.loadGrid(sort)\r\n                    .then(function () {\r\n                        $.unblockUI();\r\n                    }).catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.reportCloseRegistryData = [];\r\n\r\n            $scope.loadGrid = function (keepData, sorting) {\r\n                $scope.isLoading = true;\r\n                var lst = reportService.loadRegistryCloseList(\r\n                        $scope.currentFilter.fromDate,\r\n                        $scope.currentFilter.toDate,\r\n                        $scope.currentFilter.outletID,\r\n                        $scope.currentFilter.registryID,\r\n                        $scope.dataPage,\r\n                        $scope.itemsByPage,\r\n                        sorting,\r\n                    ).then(function (data) {\r\n                        if (!keepData)\r\n                            $scope.reportCloseRegistryData = [];\r\n\r\n                        $scope.dataPage = data.data.Page;\r\n\r\n                        getPages(data.data.Total);\r\n\r\n                        angular.forEach(data.data.Rows, function (el) {\r\n                            el.OpeningTime = helperService.getFormatedDateWithLocalTime2(el.OpeningTime);\r\n                            if (el.IsActive == false)\r\n                                el.ClosingTime = !!el.ClosingTime ? helperService.getFormatedDateWithLocalTime2(el.ClosingTime) : '';\r\n                            else\r\n                                el.ClosingTime = gettextCatalog.getString('Still open.');\r\n                            $scope.reportCloseRegistryData.push(el);\r\n                        });\r\n\r\n                        $timeout(function () {\r\n                            $scope.raiseViewChanged();\r\n                        });\r\n\r\n                        $scope.isLoading = false;\r\n                    });\r\n\r\n                return lst;\r\n            }\r\n\r\n            $timeout(function () {\r\n                $scope.mode = 'common';\r\n                initSelects();\r\n            });\r\n\r\n            $scope.getReports = function () {\r\n                $scope.dataPage = 1;\r\n                $scope.loadGrid();\r\n            };\r\n\r\n            $scope.selectPage = function (page) {\r\n                $scope.dataPage = page;\r\n                $scope.loadGrid(true);\r\n            };\r\n\r\n            $scope.currentReport = {};\r\n\r\n            $scope.showDetails = function (row) {\r\n                $scope.currentReport = $.extend($scope.currentReport, row);\r\n\r\n                $.blockUI();\r\n                reportService.loadClosureRegistryDetails(row.ID)\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        $scope.currentReport = $.extend($scope.currentReport, res);\r\n\r\n                        $timeout(function () {\r\n                            showReportCloseRegistryDetailsDialog();\r\n                        });\r\n\r\n                        $timeout(function () {\r\n                            $scope.raiseViewChanged();\r\n                        });\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n            $scope.firstTimeOpenDlg = true;\r\n            function showReportCloseRegistryDetailsDialog() {\r\n                var $windowElement = $('#reportCloseRegistryDetailsDialogPartial');\r\n                helperService.showDialog($windowElement, function () { });\r\n\r\n                $timeout(function () {\r\n                    $('input, select').trigger('refresh');\r\n                    if ($scope.firstTimeOpenDlg) {\r\n                        $scope.firstTimeOpenDlg = false;\r\n                    }\r\n                });\r\n            }\r\n\r\n            $scope.closeReportCloseRegistryDetailsDialog = function () {\r\n                var $windowElement = $('#reportCloseRegistryDetailsDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n                $scope.currentReport = {};\r\n                $scope.mode = 'common';\r\n            };\r\n\r\n            $scope.raiseViewChanged = function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            };\r\n\r\n            $scope.receiptTemplate = null;\r\n            $scope.receiptEmailTemplate = null;\r\n            $scope.receiptEmailSubject = null;\r\n            $scope.addFormatting = function (tpl) {\r\n                return reportService.formatCurrencyInTemplate(tpl,\r\n                    ['currentReport.CashExpected',\r\n                        'currentReport.CashCounted',\r\n                        'currentReport.CashReceived',\r\n                        'currentReport.CashCounted',\r\n                        'currentReport.TotalExpected',\r\n                        'currentReport.TotalCounted',\r\n                        'currentReport.CashCountedToBank',\r\n                        'itemCashMovements.Amount',\r\n                        'itemNonCashPayments.CashExpected',\r\n                        'itemNonCashPayments.CashCounted',\r\n                    ], 'currency : \"\"');\r\n            };\r\n\r\n            $scope.printReport = function () {\r\n                $.blockUI();\r\n                return reportService.getReportTemplate('ClosureRegisterReport', 'currentReport')\r\n                    .then(function (res) {\r\n                        //                $scope.receiptTemplate = res.Template;\r\n                        //                $scope.receiptEmailTemplate = res.EmailTemplate;\r\n                        //                $scope.receiptEmailSubject = res.EmailSubject;\r\n                        res.Template = $scope.addFormatting(res.Template);\r\n\r\n\r\n                        printService.preparePrintTemplate($scope, $('div.receipt-template'), { ngmHideFonts: \"yes\" }, res.Template);\r\n                        //                printService.preparePrintTemplate($scope, $('div.receipt-email-template'), {}, res.EmailTemplate);\r\n                        var deffered = $q.defer();\r\n\r\n                        $timeout(function () {\r\n                            deffered.resolve(true);\r\n                        });\r\n\r\n                        return deffered.promise;\r\n                    })\r\n                    .then(function (res) {\r\n                        return printService.printReceipt($('div.receipt-template div'), false, true);\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            // email functions\r\n            $scope.emailReport = function (emailCtrl) {\r\n                $.blockUI();\r\n                return reportService.getReportTemplate('ClosureRegisterReport', 'currentReport')\r\n                    .then(function (res) {\r\n                        $scope.receiptEmailSubject = res.EmailSubject;\r\n                        res.EmailTemplate = $scope.addFormatting(res.EmailTemplate);\r\n                        printService.preparePrintTemplate($scope, $('div.receipt-email-template'), {}, res.EmailTemplate);\r\n                        var deffered = $q.defer();\r\n\r\n                        $timeout(function () {\r\n                            deffered.resolve(true);\r\n                        });\r\n\r\n                        return deffered.promise;\r\n                    })\r\n                    .then(function (res) {\r\n                        var emailBody = emailService.setEmailToken('div.receipt-email-template').html();\r\n                        var email = emailCtrl.$viewValue;\r\n                        var emailSubject = reportService.formatEmailSubject($scope.receiptEmailSubject, [\r\n                            { key: 'CONTACTNAME', value: configService.userName },\r\n                            { key: 'POSNAME', value: configService.posName },\r\n                            { key: 'OUTLETNAME', value: $scope.currentReport.OutletName },\r\n                            { key: 'REGISTERNAME', value: $scope.currentReport.RegistryName },\r\n                            { key: 'OPENINGTIME', value: $scope.currentReport.OpeningTime },\r\n                            { key: 'CLOSINGTIME', value: $scope.currentReport.ClosingTime },\r\n                        ]);\r\n\r\n                        return emailService.sendEmailReceipt(null, null, email, emailSubject, emailBody, true);\r\n                    })\r\n                    .then(function (result) {\r\n                        $.unblockUI();\r\n                        helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                        // show message box about sending result\r\n                        $scope.reportEmailSentStatus = result.Result == true;\r\n                        helperService.showDialog('#reportSentEmailStatus');\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        if (!!err && err.status === 400)\r\n                            errorService.showError(err);\r\n                        else if (!!err && err.status === -1) {\r\n                            var message = gettextCatalog.getString(\"Error sending email.\") + \"<br/>\" + gettextCatalog.getString(\"Connection problems.\");\r\n                            errorService.showError(message);\r\n                        }\r\n                        else\r\n                            errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n                    });\r\n            };\r\n\r\n\r\n            $scope.getSurchargeRate = function (surcharge) {\r\n                if (surcharge.SurchargeRateType == 'percentage') {\r\n                    return surcharge.SurchargeRate + ' %';\r\n                }\r\n                else {\r\n                    return $filter('currency')(surcharge.SurchargeRate);\r\n                }\r\n            };\r\n\r\n            $scope.toggleRow = function (row) {\r\n                if (row.isActive === true) {\r\n                    row.isActive = false;\r\n                } else {\r\n                    row.isActive = true;\r\n                }\r\n            };\r\n\r\n            $scope.firstshowPrepareClosureDayFormShow = true;\r\n            $scope.showPrepareClosureDay = function () {\r\n                $scope.prepareAnyDayClosureData.mode = 'warning'; \r\n                $scope.prepareAnyDayClosureData.closureDate = null;\r\n\r\n                var $windowElement = $('#prepareAnyDayClosureModal');\r\n                helperService.showDialog($windowElement);\r\n\r\n                $timeout(function () {\r\n                    if ($scope.firstshowPrepareClosureDayFormShow) {\r\n                        $scope.firstshowPrepareClosureDayFormShow = false;\r\n                        helperService.setDatepicker($scope.dateFormat, '#closureDate');\r\n                    }\r\n\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            };\r\n\r\n            $scope.closePrepareAnyDayClosure = function () {\r\n                var $windowElement = $('#prepareAnyDayClosureModal');\r\n                helperService.hideDatePickers('#closureDate');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.redirectToClosureDay = function () {\r\n                $scope.closePrepareAnyDayClosure();\r\n\r\n                // redirect to register close form with parameters\r\n                window.localStorage.setItem('forceRegisterClose', JSON.stringify({\r\n                    CloseDay: helperService.toDateFromDatepickerParameterUTC($scope.prepareAnyDayClosureData.closureDate, '23:59:59'),\r\n                    ID: $scope.currentReport.ID,\r\n                    RegistryID: $scope.currentReport.RegistryID,\r\n                    RegistryName: $scope.currentReport.RegistryName,\r\n                    PosOutletID: $scope.currentReport.PosOutletID,\r\n                    PosOutletName: $scope.currentReport.OutletName,\r\n                    reportFilters: {\r\n                        fromDate: $scope.currentFilter.fromDate,\r\n                        toDate: $scope.currentFilter.toDate,\r\n                        outletID: $scope.currentFilter.outletID,\r\n                        registryID: $scope.currentFilter.registryID,\r\n                        dataPage: $scope.dataPage\r\n                    }\r\n                }));\r\n\r\n                $location.path('/opencloseregistry');\r\n            };\r\n        }\r\n    ]);","angular.module(\"mainApp\").controller('reportGiftCardController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService', 'csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constGiftCardViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n        $scope.totalValueSold = 0;\r\n        $scope.totalValueRedeemed = 0;\r\n        $scope.totalOutstandingBalance = 0;\r\n        $scope.totalGiftCardActive = 0;\r\n        $scope.data = [];\r\n        $scope.details = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 20;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.currentFilter = {\r\n            orderByColumnId: 1,\r\n            orderDesc: false,\r\n        };\r\n\r\n        $scope.mode = '';\r\n        $scope.giftCardFilter = \"\";\r\n\r\n        $scope.selectedDetails = [];\r\n        $scope.showGiftCardDetails = function( ID ) {\r\n            if(!ID){\r\n                return;\r\n            }\r\n            $scope.selectedDetails = [];\r\n                var l = $scope.details.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.details[i].ID == ID) {\r\n                        $scope.selectedDetails.push($scope.details[i]);\r\n                    }\r\n                }\r\n                helperService.showDialog('#reportGiftCardDetails', function() {\r\n                    $timeout(function(){\r\n                        $('#giftCardDetailsMOdalBody').trigger('resize.content');\r\n                    });\r\n                });\r\n          };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n        });\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n\r\n        $scope.getReport = function () {\r\n            $scope.dataPage = 1;\r\n            $scope.loadGrid();\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.loadGrid(true);\r\n        };\r\n\r\n        $scope.onLoad = function () {\r\n            $scope.getReport();\r\n        };\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.loadGrid = function (keepData, sorting) {\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n\r\n            var prms = {\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.giftCardFilter,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            return reportService.loadReportGiftCard(prms).then(function (res) {\r\n                if (!keepData) {\r\n                    $scope.data = [];\r\n                    $scope.details = [];\r\n                }\r\n                getPages(res.data.MaxRows);\r\n\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                if (!keepData) {\r\n                    $scope.data = res.data.Values;\r\n                    $scope.details = res.data.Details;\r\n\r\n                    $scope.data.unshift({\r\n                        GiftCardCode: 'Summary',\r\n                        InitialBalance: res.data.TotalValueSold,\r\n                        CurrentBalance: res.data.TotalBalance\r\n                    });\r\n                } else {\r\n                    $scope.data = $scope.data.concat(res.data.Values);\r\n                    $scope.details = $scope.details.concat(res.data.Details);\r\n                } \r\n                $scope.totalGiftCardActive = res.data.TotalActiveCards;\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var email = emailCtrl.$viewValue;\r\n            var emailSubject = emailSubject.$viewValue;\r\n\r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.listOfColumns.length; i++) {\r\n                colIDs.push($scope.listOfColumns[i].id);\r\n            }\r\n            var prms = {\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.giftCardFilter,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            return reportService.loadReportGiftCardEmail(prms)\r\n             .then(function (result) {\r\n                 $.unblockUI();\r\n                 helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                 // show message box about sending result\r\n                 $scope.reportEmailSentStatus = true;\r\n                 helperService.showDialog('#reportSentEmailStatus');\r\n             })\r\n             .catch(function (err) {\r\n                 $.unblockUI();\r\n                 errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n             });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.listOfColumns.length; i++) {\r\n                colIDs.push($scope.listOfColumns[i].id);\r\n            }\r\n            var prms = {\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.giftCardFilter,\r\n                ColumnList: colIDs\r\n            };\r\n\r\n            return reportService.loadReportGiftCardCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"GiftCardReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: ' + path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"GiftCardReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n\r\n    ]);","angular.module(\"mainApp\").controller('reportInTransitController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constInTransitViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.popoverUrl = \"reportInTransitColumnSelectorPartial.html\";\r\n        \r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.totals = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.selectedColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.selectedAdditionalColumns = [];\r\n\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.range = function(n) {\r\n            return new Array(n);\r\n        };\r\n\r\n        $scope.showCustomiser = function(){\r\n            helperService.showDialog($('#reportInTransitGridCustomiser'), function() { });\r\n        };\r\n\r\n        $scope.closeCustomiser = function(){\r\n            helperService.closeDialog($('#reportInTransitGridCustomiser'));\r\n        };\r\n\r\n        $scope.selectColumn = function(arr, col) {\r\n            var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == col.id) {\r\n                        found = true;\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            if (!found) {\r\n                arr.push(col);\r\n            }\r\n        }\r\n\r\n        $scope.isColumnSelected = function( arr, v ) {\r\n                var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n          };\r\n\r\n        $scope.columnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.additionalColumnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedAdditionalColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedAdditionalColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.columnHeaderFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n\r\n        $scope.currentFilter = {\r\n            outletID: '0',\r\n            groupFamilies: false,\r\n            orderByColumnId: -1,\r\n            orderDesc: false,\r\n            searchText: ''\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n\r\n            // init controls\r\n\r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                $scope.getReport();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderByColumnId',\r\n        function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderDesc',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n\r\n        $scope.$watch('currentFilter.groupFamilies',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.totals = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadInTransitReport(prms).then(function (res) {\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.totals = res.data.Totals;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                if ($scope.selectedColumns.length == 0) {\r\n                    var l = $scope.listOfColumns.length;\r\n                    for (var i = 0; i < l; i++) {\r\n                        if ($scope.listOfColumns[i].isDefault === true) {\r\n                            $scope.selectedColumns.push($scope.listOfColumns[i]);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var email = emailCtrl.$viewValue;\r\n            var emailSubject = emailSubject.$viewValue;\r\n\r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            return reportService.loadInTransitReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n\r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs\r\n            };\r\n            \r\n            return reportService.loadInTransitReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"InTransitReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"InTransitReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n]);\r\n","angular.module(\"mainApp\").controller('reportInventoryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constInventoryViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.popoverUrl = \"reportInventoryColumnSelectorPartial.html\";\r\n        \r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.totals = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.selectedColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.selectedAdditionalColumns = [];\r\n\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.range = function(n) {\r\n            return new Array(n);\r\n        };\r\n\r\n        $scope.showCustomiser = function(){\r\n            helperService.showDialog($('#reportInventoryGridCustomiser'), function() { });\r\n        };\r\n\r\n        $scope.closeCustomiser = function(){\r\n            helperService.closeDialog($('#reportInventoryGridCustomiser'));\r\n        };\r\n\r\n        $scope.selectColumn = function(arr, col) {\r\n            var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == col.id) {\r\n                        found = true;\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            if (!found) {\r\n                arr.push(col);\r\n            }\r\n        }\r\n\r\n        $scope.isColumnSelected = function( arr, v ) {\r\n                var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n          };\r\n\r\n        $scope.columnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.additionalColumnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedAdditionalColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedAdditionalColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.columnHeaderFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n        $scope.reportType = 'OnHand';\r\n        $scope.reportTypes = [\r\n            {Type: 'OnHand', Text: 'Inventory On Hand', variantsGroupEnabled: true}, \r\n            {Type: 'LowStock', Text: 'Low Stock', variantsGroupEnabled: true}, \r\n            {Type: 'Levels', Text: 'All Inventory Levels',  variantsGroupEnabled: true},\r\n        ];\r\n\r\n\r\n        $scope.getCurrentReportType = function() {\r\n            var l = $scope.reportTypes.length;\r\n            for (var i = 0; i < l; i++) {\r\n                if ($scope.reportTypes[i].Type === $scope.reportType) {\r\n                    return $scope.reportTypes[i];\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.currentFilter = {\r\n            reportType: 'OnHand',\r\n            outletID: '0',\r\n            groupFamilies: false,\r\n            orderByColumnId: -1,\r\n            orderDesc: false,\r\n            searchText: ''\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            \r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                $scope.getReport();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('reportType',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderByColumnId',\r\n        function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderDesc',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n\r\n        $scope.$watch('currentFilter.groupFamilies',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n\r\n            var prms = {\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.totals = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadInventoryReport(prms)\r\n            .then(function (res) {\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.totals = res.data.Totals;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                if ($scope.selectedColumns.length == 0) {\r\n                    var l = $scope.listOfColumns.length;\r\n                    for (var i = 0; i < l; i++) {\r\n                        if ($scope.listOfColumns[i].isDefault === true) {\r\n                            $scope.selectedColumns.push($scope.listOfColumns[i]);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n           var email = emailCtrl.$viewValue;\r\n           var emailSubject = emailSubject.$viewValue;\r\n\r\n           var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            return reportService.loadInventoryReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n               // orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n               // orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs\r\n            };\r\n\r\n            return reportService.loadInventoryReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"InventoryReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"InventoryReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n]);\r\n","angular.module(\"mainApp\").controller('reportPaymentTypeSummaryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService', '$interval',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService, $interval) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constPaymentTypeSummaryViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.showModal = false;\r\n        $scope.data = [];\r\n        $scope.headers = [];\r\n        $scope.methods = [];\r\n        $scope.outelts = [];\r\n        $scope.registries = [];\r\n        $scope.users = [];\r\n        $scope.mode = '';\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.triggerChangeOutletFilter = true;\r\n        $scope.triggerChangeRegisterFilter = true;\r\n        $scope.triggerChangeUserFilter = true;\r\n\r\n        $scope.currentFilter = {\r\n            fromDate: helperService.getFormatedDate2(new Date()),\r\n            toDate: helperService.getFormatedDate2(new Date()),\r\n            registries: [],\r\n            outletID: '0',\r\n            registryID: '0',\r\n            userID: '0'\r\n        };\r\n        $scope.grid = {\r\n            minimumColumnSize: 105,\r\n            rowHeight: 50,\r\n            enableColumnMenus: false,\r\n            enableFiltering: false,\r\n            enableSorting: false,\r\n            excessRows: 50,\r\n            excessColumns:25,\r\n           // fastWatch: true,\r\n            columnDefs: [\r\n            ],\r\n            onRegisterApi: function(gridApi) {\r\n                $scope.gridApi = gridApi;\r\n            },\r\n            customScroller: function myScrolling(uiGridViewport, scrollHandler) {\r\n                uiGridViewport.on('scroll', function myScrollingOverride(event) {\r\n                    $('body').find('.tooltip').remove();\r\n                    scrollHandler(event);\r\n                });\r\n            }\r\n        };\r\n\r\n        $scope.gridData = [];\r\n\r\n        $scope.toggleRow = function (row, i) {\r\n\r\n            row.isActive = true;\r\n            $.blockUI({fadeIn: 0});\r\n\r\n            $timeout(function() {\r\n                $scope.gridData = $scope.data[i].Details;\r\n                $scope.selectedData = $scope.data[i];\r\n                $scope.grid.data = $scope.data[i].Details;\r\n                //row.isActive = true;\r\n                $scope.showModal = true;\r\n                var element = $('#detailsModal');\r\n                if (element) {\r\n                    helperService.showDialog(element, function() { \r\n                        $.unblockUI(); \r\n                    }, \r\n                    function() { \r\n                        $interval(function() {\r\n                            $scope.gridApi.core.handleWindowResize();\r\n                            $('.ui-grid-viewport').get(0).scrollBy(1, 0);\r\n                        }, 500, 5);\r\n                    }, \r\n                    function() {\r\n                        $scope.showModal = false;\r\n                        $scope.data.forEach(function(x) {\r\n                            x.isActive = false;\r\n                        });\r\n                        $.unblockUI();\r\n                    });\r\n                } else {\r\n                    console.log('element not found');\r\n                }\r\n            }, 100);\r\n        };\r\n\r\n        $scope.goBack = function () {\r\n            var element = $('#detailsModal');\r\n            $.blockUI();\r\n            helperService.closeDialog(element);\r\n        };\r\n\r\n        $scope.renderCompleted = function () {\r\n           $.unblockUI();\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            initSelects();\r\n        });\r\n\r\n\r\n        $scope.clear = function () {         \r\n            $scope.triggerChangeOutletFilter = false;\r\n            $scope.triggerChangeRegisterFilter = false;\r\n            $scope.triggerChangeUserFilter = false;\r\n            $scope.currentFilter.outletID = '0';\r\n            $scope.currentFilter.userID = '0';\r\n            $scope.currentFilter.registryID = '0';\r\n            $scope.currentFilter.fromDate = helperService.getFormatedDate2(new Date());\r\n            $scope.currentFilter.toDate = helperService.getFormatedDate2(new Date());\r\n            \r\n            $timeout(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n                \r\n            });\r\n\r\n            $scope.getReport();\r\n        };\r\n\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n\r\n            $scope.getReport();\r\n        };\r\n\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                $scope.locations = res.data.locations;\r\n\r\n                if (res.data.singleLocation === true) {\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else {\r\n                    if ($scope.locations.length === 1)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n\r\n                $scope.registries = res.data.registries;\r\n                $scope.currentFilter.registries = res.data.registries;\r\n               \r\n                return reportService.loadUserAvailableUsers();\r\n            })\r\n            .then(function (res) {\r\n                $scope.users = res.data.users;\r\n\r\n                // code below is important. Async execution means that comboboxes can be initialized before actual data will have come\r\n                // so we need to refresh comboboxes after actual data is loaded to scope\r\n                $.unblockUI();\r\n                \r\n                $scope.getReport();\r\n                \r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n          function (newValue, oldValue) {\r\n              \r\n            $scope.updateRegistriesCombo(newValue);                  \r\n                          \r\n\r\n\r\n            if($scope.triggerChangeOutletFilter)\r\n                $scope.getReport();\r\n\r\n            $scope.triggerChangeOutletFilter = true;\r\n          });\r\n\r\n          $scope.$watch('currentFilter.registryID',\r\n          function (newValue, oldValue) {            \r\n\r\n            if($scope.triggerChangeRegisterFilter)\r\n              $scope.getReport();\r\n\r\n            $scope.triggerChangeRegisterFilter = true;\r\n\r\n          });\r\n\r\n          $scope.$watch('currentFilter.userID',\r\n          function (newValue, oldValue) {            \r\n\r\n            if($scope.triggerChangeUserFilter)\r\n              $scope.getReport();\r\n\r\n            $scope.triggerChangeUserFilter = true;\r\n\r\n          });\r\n\r\n\r\n        $scope.updateRegistriesCombo = function (outletID) {\r\n            $scope.currentFilter.registryID = '0';\r\n            $timeout(function () {\r\n                $scope.triggerChangeRegisterFilter = false;\r\n    \r\n                $scope.currentFilter.registries = [].concat($scope.registries.filter(function (v) {\r\n                        return v.PosOutletID == outletID;\r\n                    }));\r\n    \r\n                if(outletID == null || outletID == \"0\")\r\n                    $scope.currentFilter.registries = $scope.registries;\r\n    \r\n    \r\n                $timeout(function () {\r\n                    $('#selectRegisterReportPaymentTypeSummary').trigger('refresh');\r\n                }, 10);\r\n            });\r\n\r\n        };\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n                // init controls\r\n\r\n                $timeout(function () {\r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n                });\r\n            }\r\n        });\r\n\r\n        $scope.isProcessed = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.getReport = function () {\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate)\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            if (!$scope.currentFilter.userID || $scope.currentFilter.userID == '0')\r\n                prms.UserName = null;\r\n            else\r\n                prms.UserName = $scope.users.filter(function (u) { return u.UserID == $scope.currentFilter.userID; })[0].UserName;\r\n\r\n            if (!$scope.currentFilter.registryID || $scope.currentFilter.registryID == '0')\r\n                prms.RegistryID = null;\r\n            else\r\n                prms.RegistryID = $scope.currentFilter.registryID;\r\n\r\n            if (!$scope.currentFilter.outletID || $scope.currentFilter.outletID == '0')\r\n                prms.PosOutletID = null;\r\n            else\r\n                prms.PosOutletID = $scope.currentFilter.outletID;\r\n\r\n            $.blockUI();\r\n            $scope.data = [];\r\n            $scope.headers = [];\r\n\r\n            return reportService.loadPaymentTypeSummary(prms)\r\n            .then(function (res) {\r\n                $scope.data = res.data.Values;\r\n\r\n                angular.forEach(res.data.Dates, function (el) {\r\n                    if($scope.headers.indexOf(helperService.getFormatedDateOnlyAsIs(el)) < 0)\r\n                        $scope.headers.push(helperService.getFormatedDateOnlyAsIs(el));\r\n                });\r\n\r\n                $scope.filterForm.$setPristine();\r\n                \r\n                $scope.updateGrid();\r\n\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n        \r\n        var valueCellTemplate = \"<div\\n\" +\r\n        \"  class=\\\"ui-grid-cell-contents\\\"\\n\" +\r\n        \"   ng-if=\\\"COL_FIELD\\\">\\n\" +\r\n        \"   <span class=\\\"amount\\\">{{COL_FIELD | number:2}}</span>\\n\" +\r\n        //    \"<span class=\\\"currency\\\">{{grid.appScope.currency_symbol}}</span>\\n\" + \r\n        \"</div>\";\r\n\r\n        var tooltipCellTemplate = \"<div\\n\" +\r\n        \"  class=\\\"ui-grid-cell-contents\\\"\\n\" +\r\n        \"   title=\\\"{{COL_FIELD}}\\\" tooltip-trigger=\\\"'outsideClick'\\\"  uib-tooltip=\\\"{{COL_FIELD}}\\\"  tooltip-append-to-body=\\\"true\\\" >\" +\r\n        \"        {{COL_FIELD}}\" +\r\n        \"</div>\";\r\n\r\n        $scope.updateGrid = function () {\r\n            var arr = new Array(4 + $scope.headers.length);\r\n            arr.push(\r\n                {name: \"Order number\", field: 'OrderNumber', cellTooltip: true, cellTemplate: tooltipCellTemplate, enableSorting: false, cellClass: 'custom-cell', headerCellClass: 'custom-header-cell',minWidth: 140},\r\n                {name: \"Customer\", field: 'Customer',  cellTooltip: true, cellTemplate: tooltipCellTemplate, enableSorting: false, cellClass: 'custom-cell', headerCellClass: 'custom-header-cell', minWidth: 140},\r\n                {name: \"Totals by Order\", field: 'Total', enableSorting: false, cellClass: 'custom-cell', headerCellClass: 'custom-header-cell', minWidth: 140 }\r\n            );\r\n            $scope.headers.forEach(function(x,i){ \r\n                arr.push({field: 'Values['+i +']', name: x, cellTemplate: valueCellTemplate, enableSorting: false, cellClass: 'custom-cell', headerCellClass: 'custom-header-cell'  });\r\n            });\r\n           \r\n            $scope.grid.columnDefs = arr;\r\n            $scope.grid.data = '$scope.gridData';\r\n            \r\n        };\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate)\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            if (!$scope.currentFilter.userID || $scope.currentFilter.userID == '0')\r\n                prms.UserName = null;\r\n            else\r\n                prms.UserName = $scope.users.filter(function (u) { return u.UserID == $scope.currentFilter.userID; })[0].UserName;\r\n\r\n            if (!$scope.currentFilter.registryID || $scope.currentFilter.registryID == '0')\r\n                prms.RegistryID = null;\r\n            else\r\n                prms.RegistryID = $scope.currentFilter.registryID;\r\n\r\n            if (!$scope.currentFilter.outletID || $scope.currentFilter.outletID == '0')\r\n                prms.PosOutletID = null;\r\n            else\r\n                prms.PosOutletID = $scope.currentFilter.outletID;\r\n\r\n\r\n\r\n           var email = emailCtrl.$viewValue;\r\n           var emailSubj = emailSubject.$viewValue;\r\n\r\n           prms.emailTo = email;\r\n           prms.subject = emailSubj;\r\n\r\n            return reportService.loadPaymentTypeSummaryReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate)\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            if (!$scope.currentFilter.userID || $scope.currentFilter.userID == '0')\r\n                prms.UserName = null;\r\n            else\r\n                prms.UserName = $scope.users.filter(function (u) { return u.UserID == $scope.currentFilter.userID; })[0].UserName;\r\n\r\n            if (!$scope.currentFilter.registryID || $scope.currentFilter.registryID == '0')\r\n                prms.RegistryID = null;\r\n            else\r\n                prms.RegistryID = $scope.currentFilter.registryID;\r\n\r\n            if (!$scope.currentFilter.outletID || $scope.currentFilter.outletID == '0')\r\n                prms.PosOutletID = null;\r\n            else\r\n                prms.PosOutletID = $scope.currentFilter.outletID;\r\n\r\n            return reportService.loadPaymentTypeSummaryReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"PaymentTypeSummaryReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"PaymentTypeSummaryReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n\r\n    ]);","angular.module(\"mainApp\").controller('reportProductPerformanceController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constProductPerformanceViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.popoverUrl = \"reportProductPerformanceColumnSelectorPartial.html\";\r\n        \r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.selectedColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.selectedAdditionalColumns = [];\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.showCustomiser = function(){\r\n            helperService.showDialog($('#reportProdPerfGridCustomiser'), function(){ });\r\n        };\r\n\r\n        $scope.closeCustomiser = function(){\r\n            helperService.closeDialog($('#reportProdPerfGridCustomiser'));\r\n        };\r\n\r\n        $scope.selectColumn = function(arr, col) {\r\n            var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == col.id) {\r\n                        found = true;\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            if (!found) {\r\n                arr.push(col);\r\n            }\r\n        }\r\n\r\n        $scope.chunk = function(arr, size) {\r\n            var newArr = [];\r\n            for (var i=0; i<arr.length; i+=size) {\r\n              newArr.push(arr.slice(i, i+size));\r\n            }\r\n            return newArr;\r\n          }\r\n          \r\n        $scope.chunkedColumnsData = $scope.chunk($scope.listOfColumns, 5);\r\n\r\n        $scope.isColumnSelected = function( arr, v ) {\r\n                var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n          };\r\n\r\n        $scope.columnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.additionalColumnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedAdditionalColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedAdditionalColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.columnHeaderFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n\r\n        $scope.getCurrentReportType = function() {\r\n            var l = $scope.reportTypes.length;\r\n            for (var i = 0; i < l; i++) {\r\n                if ($scope.reportTypes[i].Type === $scope.reportType) {\r\n                    return $scope.reportTypes[i];\r\n                }\r\n            }\r\n        };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n            $scope.getReport(true);\r\n        }\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.currentFilter = {\r\n            outletID: '0',\r\n            fromDate: null,\r\n            toDate: null,\r\n            groupFamilies: false,\r\n            orderByColumnId: 1,\r\n            orderDesc: false,\r\n            searchText: ''\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            \r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                $scope.getReport();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderByColumnId',\r\n        function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderDesc',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n\r\n        $scope.$watch('currentFilter.groupFamilies',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter(!$scope.currentFilter.fromDate ? new Date() : $scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadProductPerformanceReport(prms)\r\n            .then(function (res) {\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.chunkedColumnsData = $scope.chunk($scope.listOfColumns, 5);\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                if ($scope.selectedColumns.length == 0) {\r\n                    var l = $scope.listOfColumns.length;\r\n                    for (var i = 0; i < l; i++) {\r\n                        if ($scope.listOfColumns[i].isDefault === true) {\r\n                            $scope.selectedColumns.push($scope.listOfColumns[i]);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n           var email = emailCtrl.$viewValue;\r\n           var emailSubject = emailSubject.$viewValue;\r\n\r\n           var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter(!$scope.currentFilter.fromDate ? new Date() : $scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            return reportService.loadProductPerformanceReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter(!$scope.currentFilter.fromDate ? new Date() : $scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n            };\r\n\r\n            return reportService.loadProductPerformanceReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"ProductPerformanceReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"ProductPerformanceReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n]);\r\n","angular.module(\"mainApp\").controller('reportSalesSummaryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constSalesSummaryViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.popoverUrl = \"reportSalesSummaryColumnSelectorPartial.html\";\r\n        \r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.totals = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.selectedColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.selectedAdditionalColumns = [];        \r\n\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.chunk = function(arr, size) {\r\n            var newArr = [];\r\n            for (var i=0; i<arr.length; i+=size) {\r\n              newArr.push(arr.slice(i, i+size));\r\n            }\r\n            return newArr;\r\n          }\r\n\r\n        $scope.showCustomiser = function(){\r\n            helperService.showDialog($('#reportSalesSummaryGridCustomiser'), function(){ });\r\n        };\r\n\r\n        $scope.closeCustomiser = function(){\r\n            helperService.closeDialog($('#reportSalesSummaryGridCustomiser'));\r\n        };\r\n          \r\n        $scope.chunkedColumnsData = $scope.chunk($scope.listOfColumns, 6);\r\n        $scope.selectColumn = function(arr, col) {\r\n            var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == col.id) {\r\n                        found = true;\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            if (!found) {\r\n                arr.push(col);\r\n            }\r\n        }\r\n\r\n        $scope.isColumnSelected = function( arr, v ) {\r\n                var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n          };\r\n\r\n        $scope.columnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.additionalColumnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedAdditionalColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedAdditionalColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.columnHeaderFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n            $scope.getReport(true);\r\n        }\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n        $scope.reportType = 'Summary';\r\n        $scope.reportTypes = [\r\n            {Type: 'Summary', Text: 'Summary', variantsGroupEnabled: false, showProductEnabled: false}, \r\n            {Type: 'Outlet', Text: 'Outlet', variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Register', Text: 'Register',  variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'User', Text: 'User',  variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'SaleRep', Text: 'Sales Representative',  variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Customer', Text: 'Customer',  variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Product', Text: 'Product', variantsGroupEnabled: true, showProductEnabled: false}, \r\n            {Type: 'Brand', Text: 'Brand', variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Category', Text: 'Product Category', variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Tag', Text: 'Product Tag', variantsGroupEnabled: true, showProductEnabled: true}\r\n        ];\r\n\r\n\r\n        $scope.getCurrentReportType = function() {\r\n            var l = $scope.reportTypes.length;\r\n            for (var i = 0; i < l; i++) {\r\n                if ($scope.reportTypes[i].Type === $scope.reportType) {\r\n                    return $scope.reportTypes[i];\r\n                }\r\n            }\r\n        };\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n        \r\n        $scope.currentFilter = {\r\n            fromDate: helperService.getFormatedDate2(new Date()),\r\n            toDate: helperService.getFormatedDate2(new Date()),\r\n            reportType: 'Summary',\r\n            outletID: '0',\r\n            showProducts: false,\r\n            groupFamilies: false,\r\n            orderByColumnId: 1,\r\n            orderDesc: false,\r\n            searchText: '',\r\n            showTotals: true\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            \r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                $scope.getReport(true);\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('reportType',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderByColumnId',\r\n        function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderDesc',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n              $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.showProducts',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n              $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.groupFamilies',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n              $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n                // init controls\r\n            }\r\n        });\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n            \r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                showProducts: $scope.currentFilter.showProducts && $scope.getCurrentReportType().showProductEnabled,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            if (prms.StartDate && prms.EndDate) {\r\n                var startDate = moment(prms.StartDate);\r\n                var endDate = moment(prms.EndDate);\r\n                if (Math.abs(startDate.diff(endDate, 'years', true)) > 1) {\r\n                    errorService.showError(gettextCatalog.getString('You can set up a max 1-year period for reporting only.'));\r\n                    return;\r\n                }\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.totals = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadSalesSummary(prms).then(function (res) {\r\n\r\n                if ($.trim($scope.currentFilter.searchText) === '') {\r\n                    $scope.currentFilter.showTotals = true;\r\n                }\r\n                else {\r\n                    $scope.currentFilter.showTotals = false;\r\n                }\r\n\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.chunkedColumnsData = $scope.chunk($scope.listOfColumns, 6);\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.totals = res.data.Totals;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                if ($scope.selectedColumns.length == 0) {\r\n                    var l = $scope.listOfColumns.length;\r\n                    for (var i = 0; i < l; i++) {\r\n                        if ($scope.listOfColumns[i].isDefault === true) {\r\n                            $scope.selectedColumns.push($scope.listOfColumns[i]);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var email = emailCtrl.$viewValue;\r\n           var emailSubject = emailSubject.$viewValue;\r\n\r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                showProducts: $scope.currentFilter.showProducts && $scope.getCurrentReportType().showProductEnabled,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n            \r\n            reportService.loadSalesSummaryEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                showProducts: $scope.currentFilter.showProducts && $scope.getCurrentReportType().showProductEnabled,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            return reportService.loadSalesSummaryCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"SalesSummaryReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+ path ? path.replace('///storage/emulated/0', 'storage'): ''),\r\n                            customClass: 'reportFileSaved'\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"SalesSummaryReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n]);\r\n","angular.module('services').factory('reportService',\r\n    ['helperService', 'configService', '$q', 'webOnlyProvider', 'constants', 'gettextCatalog',\r\n        'remoteRequestProvider', 'receiptService', 'printService', '$timeout','$sce',\r\n        function (helperService, configService, $q, webOnlyProvider, constants, gettextCatalog,\r\n         remoteRequestProvider, receiptService, printService, $timeout, $sce) {\r\n\r\n            var reportService = {};\r\n\r\n            reportService.getReportTemplate = function (reportName, reportScopeObjectName) {\r\n                return receiptService.getReceiptTemplate('remote', reportName, reportScopeObjectName);\r\n            };\r\n\r\n            reportService.loadRegistryCloseList = function (\r\n                                        fromDate,\r\n                                        toDate,\r\n                                        outletID,\r\n                                        registryID,\r\n                                        page, limit, sorting) {\r\n\r\n\r\n                var prm = {\r\n                    StartDate: !!fromDate ? helperService.toDateFromDatepickerParameter(fromDate) : null,\r\n                    EndDate: !!toDate ? helperService.toDateFromDatepickerParameter(toDate) : null,\r\n                    RegistryID: (!registryID || registryID == '0') ? null : registryID,\r\n                    OutletID: (!outletID || outletID == '0') ? null : outletID,\r\n                    SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                    SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null,\r\n                    Page: page ? page : null,\r\n                    Limit: limit ? limit : null,\r\n                    UserID: configService.loginUserID\r\n                };\r\n\r\n                return webOnlyProvider.loadRegistryCloseList(prm);\r\n            }\r\n\r\n            reportService.getPaymentTypeName = function (sname) {\r\n                var pname = sname;\r\n                switch (sname) {\r\n                    case 'CashPayment':\r\n                    case 'cash':\r\n                        pname = gettextCatalog.getString('Cash');\r\n                        break;\r\n                    case 'CreditCardPayment':\r\n                    case 'credit card':\r\n                        pname = gettextCatalog.getString('Credit card');\r\n                        break;\r\n                    case 'GiftCardPayment':\r\n                    case 'gift card':\r\n                        pname = gettextCatalog.getString('Gift Card');\r\n                        break;\r\n                    case 'LoyaltyPayment':\r\n                    case 'loyalty':\r\n                        pname = gettextCatalog.getString('Loyalty');\r\n                        break;\r\n                    case 'StoreCreditPayment':\r\n                    case 'store credits':\r\n                        pname = gettextCatalog.getString('Store Credit');\r\n                        break;\r\n                    case 'Rounding':\r\n                        pname = gettextCatalog.getString('Cash rounding');\r\n                        break;\r\n                }\r\n\r\n                return pname;\r\n            };\r\n\r\n            reportService.loadClosureRegistryDetails = function (registryCloseID) {\r\n                return webOnlyProvider.loadClosureRegistryDetails(registryCloseID)\r\n                .then(function (data) {\r\n                    var res = {};\r\n                    res.totalPayment = 0;\r\n                    res.newPayment = 0;\r\n                    res.payments = [];\r\n                    res.cashManagement = [];\r\n                    res.laybyTotal = 0;\r\n                    res.layby = [];\r\n                    res.laybyClosedTotal = 0;\r\n                    res.laybyClosed = [];\r\n                    res.onaccountTotal = 0;\r\n                    res.onaccount = [];\r\n                    res.onaccountClosedTotal = 0;\r\n                    res.onaccountClosed = [];\r\n                    res.returnsTotal = 0;\r\n                    res.returns = [];\r\n                    res.CashExpected = 0;\r\n                    res.CashCounted = 0;\r\n                    res.CashReceived = 0;\r\n                    res.CashMovements = [];\r\n                    res.CashManagementOffset = 0; // will contain cash that was added to cash drawer\r\n                    res.NonCashPayments = [];\r\n                    res.TotalExpected = 0;\r\n                    res.TotalCounted = 0;\r\n                    res.IsActive = data.data.IsActive;\r\n                    res.giftCardCount = 0;\r\n                    res.CloseTime = data.data.CloseTime;\r\n                    res.OpenTime = data.data.OpenTime;\r\n                    res.IsLatest = data.data.IsLatest;\r\n\r\n                    // cash management\r\n                    angular.forEach(data.data.CashManagement, function (el) {\r\n                        el.OperationTime = helperService.getFormatedDateWithLocalTime2(el.OperationTime);\r\n                        if (el.OperationType == 'Cash out' || el.OperationType == 'Petty cash out')\r\n                            el.Amount = -el.Amount;\r\n\r\n                        res.cashManagement.push(el);\r\n                        var vr = {\r\n                            UserName: el.SalesRepresentative,\r\n                            Amount: el.Amount,\r\n                            Type: el.OperationType\r\n                        };\r\n\r\n                        // adjust payments sums inverted operation due to counters include cash management\r\n                        res.CashManagementOffset += el.Amount;\r\n\r\n                        res.CashMovements.push(vr);\r\n                    });\r\n\r\n                    // surcharges\r\n                    res.Surcharges =data.data.Surcharges; \r\n\r\n                    // total calculated including refunds\r\n                    angular.forEach(data.data.Payments, function (el) {\r\n                        var pname = reportService.getPaymentTypeName(el.CounterName);\r\n                        var counted = el.Counter;\r\n\r\n                        res.TotalExpected += el.Counter;\r\n\r\n                        if (!!el.Counted)\r\n                            counted = el.Counted;\r\n\r\n                        if (el.CounterName == 'CashPayment') {\r\n                            res.CashExpected += el.Counter;\r\n                            res.CashCounted += el.Counted;\r\n                            counted = el.Counted;\r\n                        }\r\n\r\n                        res.TotalCounted += counted;\r\n\r\n                        if (el.Counter != 0 || counted != 0) {\r\n\r\n                            res.payments.push({\r\n                                CounterName: pname,\r\n                                Counter: el.Counter,\r\n                                Counted: counted,\r\n                                Diff: el.Counter - counted,\r\n                                IsCustom: el.IsCustom,\r\n                                PosPayments: el.PosPayments.map(function(p){\r\n                                    p.PaymentDate2 = helperService.getFormatedDate(p.PaymentDate);\r\n                                    return p;\r\n                                })\r\n                            });\r\n\r\n                            if (el.CounterName != 'CashPayment') {\r\n                                res.NonCashPayments.push({\r\n                                    PaymentTypeName: pname,\r\n                                    CashExpected: el.Counter,\r\n                                    CashCounted: counted\r\n                                });\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    res.paymentOnAccountCount = 0;\r\n                    res.paymentLayByCount = 0;\r\n\r\n                    angular.forEach(data.data.AdditionalCounters, function (el) {\r\n                        if (el.CounterType == 'SALE') {\r\n                            switch (el.CounterName) {\r\n                                case constants.newSaleTotalCountName:\r\n                                    res.saleTotalCount = el.Counter;\r\n                                    break;\r\n                                case constants.newSaleCountName:\r\n                                    res.saleCount = el.Counter;\r\n                                    break;\r\n                                case constants.newOnAccountCountName:\r\n                                    res.onAccountCount = el.Counter;\r\n                                    break;\r\n                                case constants.newLaybyCountName:\r\n                                    res.layByCount = el.Counter;\r\n                                    break;\r\n                                case constants.newTaxCountName:\r\n                                    res.taxCount = el.Counter;\r\n                                    break;\r\n                                case constants.newSaleDiscountName:\r\n                                    res.discountCount = el.Counter;\r\n                                    break;\r\n                                case constants.giftCardSaleCountName:\r\n                                    res.giftCardCount = el.Counter;\r\n                                    break;\r\n                            }\r\n                        }\r\n                        else\r\n                            if (el.CounterType == 'PAYMENT') {\r\n                                switch (el.CounterName) {\r\n                                    case constants.newPaymentCountName:\r\n                                        res.newPayment = el.Counter;\r\n                                        break;\r\n                                    case constants.newOnAccountCountName:\r\n                                        res.paymentOnAccountCount = el.Counter;\r\n                                        break;\r\n                                    case constants.newLaybyCountName:\r\n                                        res.paymentLayByCount = el.Counter;\r\n                                        break;\r\n                                    case constants.roundingTotalName:\r\n                                        res.payments.push({\r\n                                            CounterName: gettextCatalog.getString('Cash rounding'),\r\n                                            Counter: el.Counter,\r\n                                            Counted: el.Counter,\r\n                                            Diff: 0,\r\n                                            PosPayments: data.data.CashRoundingPosPayments.map(function(p){\r\n                                                p.PaymentDate2 = helperService.getFormatedDate(p.PaymentDate);\r\n                                                return p;\r\n                                            })                                           \r\n                                            \r\n                                        });\r\n\r\n                                        res.NonCashPayments.push({\r\n                                            PaymentTypeName: gettextCatalog.getString('Cash rounding'),\r\n                                            CashExpected: el.Counter,\r\n                                            CashCounted: el.Counter\r\n                                        });\r\n\r\n                                        break;\r\n                                }\r\n                            }\r\n                            else\r\n                                if (el.CounterType == 'REFUND') {\r\n                                    switch (el.CounterName) {\r\n                                        case constants.refundTotalName:\r\n                                            res.refundCount = el.Counter;\r\n                                            break;\r\n                                    }\r\n\r\n                                }\r\n\r\n                    });\r\n\r\n                    res.totalPayment += res.newPayment + res.paymentOnAccountCount + res.paymentLayByCount;\r\n\r\n                    if (res.IsActive) {\r\n                        res.CashExpected += res.CashManagementOffset;\r\n                    }\r\n                    else {\r\n                        angular.forEach(res.payments, function (el) {\r\n                            if (el.CounterName.toLowerCase() == 'cash') {\r\n                                // el.Counter -= res.CashManagementOffset;\r\n                                el.Counted -= res.CashManagementOffset;\r\n                                el.Diff = el.Counter - el.Counted;\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    if (!res.IsActive) {\r\n                        res.CashExpected += res.CashManagementOffset;\r\n                    }\r\n\r\n                    res.CashReceived = res.CashExpected - res.CashManagementOffset;\r\n\r\n                    res.TotalExpected = res.CashExpected;\r\n                    res.TotalCounted = res.CashCounted;\r\n                    res.CashCountedToBank = res.CashCounted;\r\n\r\n                    if (!res.IsActive) {\r\n                        res.CashCountedToBank -= res.CashManagementOffset;\r\n                    }\r\n\r\n                    angular.forEach(res.NonCashPayments, function (el) {\r\n                        res.TotalExpected += el.CashExpected;\r\n                        res.TotalCounted += el.CashCounted;\r\n                    });\r\n\r\n                    res.accountCounters = [];\r\n                    angular.forEach(data.data.AccountData, function (el) {\r\n                        el.PaymentTypeName = reportService.getPaymentTypeName(el.PaymentType);\r\n                        el.Date2 = helperService.getFormatedDateAsIs(el.Date);\r\n                        res.accountCounters.push(el);\r\n                        switch (el.Status) {\r\n                            case 'LAYBY':\r\n                                res.layby.push(el);\r\n                                res.laybyTotal += el.Amount;\r\n                                break;\r\n                            case 'LAYBY_CLOSED':\r\n                                res.laybyClosed.push(el);\r\n                                res.laybyClosedTotal += el.Amount;\r\n                                break;\r\n                            case 'ONACCOUNT':\r\n                                res.onaccount.push(el);\r\n                                res.onaccountTotal += el.Amount;\r\n                                break;\r\n                            case 'ONACCOUNT_CLOSED':\r\n                                res.onaccountClosed.push(el);\r\n                                res.onaccountClosedTotal += el.Amount;\r\n                                break;\r\n                            case 'RETURN':\r\n                                if (el.Amount > 0)\r\n                                    el.Amount = -el.Amount;\r\n                                res.returns.push(el);\r\n                                res.returnsTotal += el.Amount;\r\n                                break;\r\n                        }\r\n                    });\r\n\r\n                    // reorder payments\r\n                    var p1 = res.payments.filter(function (el) { return el.IsCustom !== true });\r\n                    var p2 = res.payments.filter(function (el) { return el.IsCustom === true }).sort(function (a, b) {\r\n                        return a.CounterName < b.CounterName ? -1 :\r\n                               a.CounterName > b.CounterName ? 1 : 0;\r\n                    });\r\n\r\n                    res.payments = p1.concat(p2);\r\n\r\n                    // add end of day values to cash management part\r\n                    var camnt = helperService.DEARRound(res.CashCounted - res.CashExpected, 2);\r\n                    var closeTime = !!res.CloseTime ? helperService.getFormatedDateWithLocalTime2(res.CloseTime) : '';\r\n\r\n                    if (camnt != 0) {\r\n                        var vr = {\r\n                            OperationTime: closeTime,\r\n                            Amount: camnt,\r\n                            OperationType: camnt > 0 ? \"Overpayment is created\" : \"Till is short of cash\"\r\n                        };\r\n                        res.cashManagement.unshift(vr);\r\n                    }\r\n\r\n                    if (!!closeTime) {\r\n                        var vr = {\r\n                            Amount: res.CashCounted,\r\n                            OperationType: 'Till Closing Balance',\r\n                            OperationTime: closeTime\r\n                        };\r\n                        res.cashManagement.unshift(vr);\r\n                    }\r\n\r\n                    // convert report data into html if any\r\n                    if(!!data.data.CloseReport) {\r\n                        res.CloseOfDayReportHTML = $sce.trustAsHtml(reportService.EndOfDayReportConvertToHTML(data.data.CloseReport));\r\n                    }\r\n\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve(res);\r\n                    return deffered.promise;\r\n                });\r\n            };\r\n\r\n            reportService.formatCurrencyInObject = function (obj, fields) {\r\n                angular.forEach(fields, function (f) {\r\n                    if (!!obj[f]) {\r\n                        obj[f] = $filter('currency')(obj[f], \"\");\r\n                    }\r\n                    else\r\n                        obj[f] = $filter('currency')(0, \"\");\r\n                });\r\n            };\r\n\r\n            reportService.formatCurrencyInTemplate = function (tpl, fields, filter) {\r\n                angular.forEach(fields, function (f) {\r\n                    var fw = \"{{\" + f + \"}}\";\r\n                    var fwn = \"{{\" + f + \" | \" + filter + \"}}\";\r\n                    while (tpl.indexOf(fw) >= 0) {\r\n                        tpl = tpl.replace(fw, fwn);\r\n                    }\r\n                });\r\n\r\n                return tpl;\r\n            };\r\n\r\n            reportService.formatEmailSubject = function (subj, fields) {\r\n                angular.forEach(fields, function (f) {\r\n                    var fw = \"[\" + f.key + \"]\";\r\n                    var fwn = f.value;\r\n                    while (subj.indexOf(fw) >= 0) {\r\n                        subj = subj.replace(fw, fwn);\r\n                    }\r\n                });\r\n\r\n                return subj;\r\n            };\r\n\r\n            reportService.printCashManagementReport = function (scope, obj) {\r\n                return receiptService.getReceiptTemplate(true)\r\n                .then(function (res) {\r\n\r\n                    receiptService.prepareCashManagementReceiptSaleModel(scope, obj);\r\n                    var tpl = reportService.formatCurrencyInTemplate(res.Template, ['itemCashManagementReceipts.CashManagementAmount'], 'currency');\r\n                    printService.preparePrintTemplate(scope, $('div.receipt-template'), { ngmHideFonts: \"yes\" }, tpl);\r\n                    var deffered = $q.defer();\r\n\r\n                    $timeout(function () {\r\n                        deffered.resolve(true);\r\n                    });\r\n\r\n                    return deffered.promise;\r\n                })\r\n                .then(function (res) {\r\n                    $('div[ngm-cashmanagement]').show();\r\n                    return printService.printReceipt($('div[ngm-cashmanagement]'), false, true);\r\n                });\r\n            }\r\n\r\n            reportService.printVantivDeclineReceipt = function (scope, obj, currency) {\r\n                return receiptService.getReceiptTemplate(true)\r\n                .then(function (res) {\r\n\r\n                    receiptService.prepareVantivDeclineReceiptSaleModel(scope, obj, currency);\r\n                    printService.preparePrintTemplate(scope, $('div.vantiv-decline-receipt-template'), { ngmHideFonts: \"yes\" }, res.Template);\r\n                    var deffered = $q.defer();\r\n\r\n                    $timeout(function () {\r\n                        deffered.resolve(true);\r\n                    });\r\n\r\n                    return deffered.promise;\r\n                })\r\n                .then(function (res) {\r\n                    $('div.vantiv-decline-receipt-template div[ngm-terminal]').show();\r\n                    return printService.printReceipt($('div.vantiv-decline-receipt-template div[ngm-terminal]'), false, true);\r\n                });\r\n            }\r\n\r\n            reportService.loadUserAvailableUsers = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'userEnabledUsers'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            reportService.loadPaymentTypeSummary = function (prms) {\r\n                return webOnlyProvider.loadPaymentTypeSummary(prms);\r\n            };\r\n\r\n            reportService.loadSalesSummary= function (prms) {\r\n                return webOnlyProvider.loadSalesSummary(prms);\r\n            };\r\n\r\n            reportService.loadSalesSummaryCSV= function (prms) {\r\n                return webOnlyProvider.loadSalesSummaryCSV(prms);\r\n            };\r\n\r\n            reportService.loadSalesSummaryEmail= function (prms) {\r\n                return webOnlyProvider.loadSalesSummaryEmail(prms);\r\n            };\r\n\r\n            reportService.loadProductPerformanceReport= function (prms) {\r\n                return webOnlyProvider.loadProductPerformanceReport(prms);\r\n            };\r\n\r\n            reportService.loadProductPerformanceReportCSV= function (prms) {\r\n                return webOnlyProvider.loadProductPerformanceReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadProductPerformanceReportEmail= function (prms) {\r\n                return webOnlyProvider.loadProductPerformanceReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadInventoryReport = function (prms) {\r\n                return webOnlyProvider.loadInventoryReport(prms);\r\n            };\r\n\r\n            reportService.loadInventoryReportCSV = function (prms) {\r\n                return webOnlyProvider.loadInventoryReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadInventoryReportEmail = function (prms) {\r\n                return webOnlyProvider.loadInventoryReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadInTransitReport = function (prms) {\r\n                return webOnlyProvider.loadInTransitReport(prms);\r\n            };\r\n\r\n            reportService.loadInTransitReportEmail = function (prms) {\r\n                return webOnlyProvider.loadInTransitReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadInTransitReportCSV = function (prms) {\r\n                return webOnlyProvider.loadInTransitReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadReportGiftCard = function (prms) {\r\n                return webOnlyProvider.loadReportGiftCard(prms);\r\n            };\r\n\r\n            reportService.loadReportGiftCardCSV = function (prms) {\r\n                return webOnlyProvider.loadReportGiftCardCSV(prms);\r\n            };\r\n\r\n            reportService.loadReportGiftCardEmail = function (prms) {\r\n                return webOnlyProvider.loadReportGiftCardEmail(prms);\r\n            };\r\n\r\n            reportService.loadSurchargeReport = function (prms) {\r\n                return webOnlyProvider.loadSurchargeReport(prms);\r\n            };\r\n\r\n            reportService.loadSurchargeReportCSV = function (prms) {\r\n                return webOnlyProvider.loadSurchargeReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadSurchargeReportEmail = function (prms) {\r\n                return webOnlyProvider.loadSurchargeReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadPaymentTypeSummaryReportCSV = function (prms) {\r\n                return webOnlyProvider.loadPaymentTypeSummaryReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadPaymentTypeSummaryReportEmail = function (prms) {\r\n                return webOnlyProvider.loadPaymentTypeSummaryReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadStoreCredit = function (prms) {\r\n                return webOnlyProvider.loadStoreCredit(prms)\r\n                .then(function (res) {\r\n                    var totalIssued = 0;\r\n                    var totalRedeemed = 0;\r\n                    var totalBalance = 0;\r\n                    var totalOpeningBalance = 0;\r\n                    angular.forEach(res.data, function (el) {\r\n                        totalIssued += el.IssuedAmount;\r\n                        totalRedeemed += el.RedeemedAmount;\r\n                        totalBalance += el.StoreCredits;\r\n                        totalOpeningBalance += el.OpeningBalance;\r\n                    });\r\n\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve({\r\n                        data: res.data,\r\n                        totalIssued: totalIssued, \r\n                        totalRedeemed: totalRedeemed,\r\n                        totalBalance: totalBalance,\r\n                        totalOpeningBalance: totalOpeningBalance\r\n                    });\r\n                    return deffered.promise;\r\n                });\r\n            };\r\n\r\n            reportService.EndOfDayReportConvertToHTML = function(report) {\r\n                var obj = JSON.parse(report);\r\n                var prn = $('<div></div>');\r\n\r\n                angular.forEach(obj.reportLines, function(line){\r\n                    var formats = line.format;\r\n                    var type=line.type;\r\n                    var value = line.value;\r\n\r\n                    var el = $('<div></div>');\r\n\r\n                    if(type=='TEXT') {\r\n                        if(formats.indexOf('BOLD')>=0)\r\n                            el.css('font-weight', 'bold');\r\n                        if(formats.indexOf('DOUBLE_WIDTH')>=0)\r\n                            el.css('font-size', '20px');\r\n                        if(formats.indexOf('DOUBLE_HEIGHT')>=0)\r\n                            el.css('font-size', '20px');\r\n                        el.text(value);\r\n                    } else if(type=='TICKET_FEED') {\r\n                        var el = $('<div>'+value.replace(new RegExp('\\n','g'), '<br/>')+'</div>');\r\n                    } else if(type=='LINE_SEPARATOR_DOUBLE') {\r\n                        var el = $('<div style=\"border: 0; background-color: #000; height: 3px; width: 100%;\"></div>');\r\n                    }\r\n\r\n                    prn.append(el);\r\n                });\r\n\r\n                return prn.html();\r\n            }\r\n\r\n            reportService.loadStoreCreditCSV = function (prms) {\r\n                return webOnlyProvider.loadStoreCreditCSV(prms);\r\n            };\r\n\r\n            reportService.loadStoreCreditEmail = function (prms) {\r\n                return webOnlyProvider.loadStoreCreditEmail(prms);\r\n            };\r\n\r\n            return reportService;\r\n        }\r\n    ]);\r\n","angular.module(\"mainApp\").controller('reportStoreCreditController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService', 'csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constPaymentTypeSummaryViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n\r\n        $scope.totalValueRedeemed = 0;\r\n        $scope.totalOutstandingBalance = 0;\r\n        $scope.totalValueIssued = 0;\r\n        $scope.data = [];\r\n\r\n        $scope.mode = '';\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.typesSelect = [{\r\n            id: \"customer\",\r\n            name: \"By Customer\"\r\n        },\r\n        {\r\n            id: \"date\",\r\n            name: \"By Date\"\r\n        }];\r\n\r\n        $scope.currentFilter = {\r\n            fromDate: helperService.getFormatedDate2(new Date()),\r\n            toDate: helperService.getFormatedDate2(new Date()),\r\n            outletID: null,\r\n            type: \"customer\"\r\n        };\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n            $scope.getReport();\r\n        }\r\n        \r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n\r\n            $timeout(function () {\r\n                initSelects();\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n\r\n            $scope.getReport();\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.type', function(oldValue, newValue) {\r\n            if(oldValue != newValue) {\r\n                $scope.getReport();\r\n            }\r\n        });\r\n\r\n        $scope.isProcessed = function () {\r\n            return $scope.filterForm.$dirty === false;\r\n        };\r\n\r\n        $scope.getReport = function () {\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                Type: $scope.currentFilter.type\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.data = [];\r\n            $scope.totalValueRedeemed = 0;\r\n            $scope.totalOutstandingBalance = 0;\r\n            $scope.totalValueIssued = 0;\r\n\r\n            $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n            return reportService.loadStoreCredit(prms)\r\n            .then(function (res) {\r\n                $scope.data = res.data;\r\n\r\n                $.each(res.data, function(idx, el) {\r\n                    el.DateFormated = el.Date ? $scope.getDateByFormat(el.Date, 'LL') : '';\r\n                });\r\n\r\n                $scope.data.unshift({\r\n                    Name: \"Totals\",\r\n                    IssuedAmount: res.totalIssued,\r\n                    RedeemedAmount: -res.totalRedeemed,\r\n                    StoreCredits: res.totalBalance,\r\n                    OpeningBalance: res.totalOpeningBalance\r\n                });\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                Type: $scope.currentFilter.type\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            var email = emailCtrl.$viewValue;\r\n            var emailSubject = emailSubject.$viewValue;\r\n\r\n            prms.emailTo = email;\r\n            prms.subject = emailSubject;\r\n\r\n                return reportService.loadStoreCreditEmail(prms)\r\n                .then(function (result) {\r\n                    $.unblockUI();\r\n                    helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                    // show message box about sending result\r\n                    $scope.reportEmailSentStatus = true;\r\n                    helperService.showDialog('#reportSentEmailStatus');\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    helperService.closeDialog('#emailReportDialogPartial');\r\n                    $scope.reportEmailSentStatus = false;\r\n                    helperService.showDialog('#reportSentEmailStatus');\r\n                });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            // form file name\r\n            var fromd = $scope.currentFilter.fromDate.replace(/\\//g, '_');\r\n            var tod = $scope.currentFilter.toDate.replace(/\\//g, '_');\r\n\r\n            $.blockUI();\r\n            \r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                Type: $scope.currentFilter.type\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            return reportService.loadStoreCreditCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"StoreCreditReport_\"+fromd + \"_\" + tod +\".csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"StoreCreditReport_\"+fromd + \"_\" + tod +\".csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n    }\r\n\r\n    ]);","angular.module(\"mainApp\").controller('reportSurchargeController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constSurchargeViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n\r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.groupRegister = false;\r\n        \r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.currentFilter = {\r\n            fromDate: helperService.getFormatedDate2(new Date()),\r\n            toDate: helperService.getFormatedDate2(new Date()),\r\n            outletID: '0',\r\n            groupRegister: false,\r\n            searchText: ''\r\n        };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            \r\n            // init controls\r\n\r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n\r\n                $scope.getReport(true);\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n          function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n          });\r\n\r\n          $scope.$watch('groupRegister',\r\n          function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n          });\r\n\r\n          $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n            $scope.getReport(true);\r\n        }\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupRegister: $scope.groupRegister,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.totals = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadSurchargeReport(prms)\r\n            .then(function (res) {\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.totals = res.data.Totals;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n           var email = emailCtrl.$viewValue;\r\n           var emailSubject = emailSubject.$viewValue;\r\n\r\n           var colIDs = [];\r\n            for (var i = 0; i < $scope.listOfColumns.length; i++) {\r\n                colIDs.push($scope.listOfColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupRegister: $scope.groupRegister,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n        \r\n            return reportService.loadSurchargeReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.listOfColumns.length; i++) {\r\n                colIDs.push($scope.listOfColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupRegister: $scope.groupRegister,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs\r\n            };\r\n\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n        \r\n            return reportService.loadSurchargeReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"SurchargeReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"SurchargeReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n\r\n    ]);","import buildConfiguration from './configEnvironment';\r\n\r\nangular.module('services').factory('httpRequestInterceptor',\r\n    ['configService', '$timeout', '$q', 'uuid2', '$rootScope', '$injector', 'googleHelperService', \r\n        function (configService, $timeout, $q, uuid2, $rootScope, $injector, googleHelperService) {\r\n    return {\r\n        request: function (config) {\r\n            var q = typeof (config.url) == 'string' ? config.url.toLowerCase() : null;\r\n            var webRequest = q!=null &&\r\n                            (q.indexOf('http://') == 0 ||\r\n                             q.indexOf('https://') == 0) &&\r\n                             q.indexOf('/externalapi/pos/') > 0;\r\n\r\n            \r\n            \r\n            // if request contains the following filed in config - it will be bypassed for cancellation\r\n\r\n            if (webRequest && !configService.isSite) {\r\n\r\n                var byPassCancellation = config.byPassCancellation === true;\r\n\r\n                if (q.indexOf('/posquickkeyimages?id=') > 0)\r\n                    byPassCancellation = true;\r\n\r\n                if (!byPassCancellation) {\r\n                    var canceller = $q.defer();\r\n                    config.timeout = canceller.promise;\r\n                    config.gid = uuid2.newguid();\r\n\r\n                    $rootScope.currentRequests[config.gid] = {\r\n                        tmr: $timeout(function () {\r\n                            if ($rootScope.isBlockUIVisible) {\r\n                                $rootScope.showCancellation();\r\n                            }\r\n                        }, configService.requestTimeout),\r\n                        canceller: canceller,\r\n                        config: config\r\n                    };\r\n                }\r\n            }\r\n\r\n            if (config.method != \"OPTIONS\" && config.url.indexOf(configService.baseURL) !== -1) {\r\n                if (!!configService.applicationKey) {\r\n                    config.headers['api-auth-applicationkey'] = configService.applicationKey;\r\n                }\r\n\r\n                if (!!configService.tenantID) {\r\n                    config.headers['api-auth-accountid'] = configService.tenantID;\r\n                }\r\n\r\n                if (!!configService.loginUserID) {\r\n                    config.headers['api-auth-userid'] = configService.loginUserID;\r\n                }\r\n            }\r\n\r\n            if (buildConfiguration.configuration === 'Debug' && q!=null && (q.indexOf('127.0.0.1') > 0 || q.indexOf('ngrok') > 0)) {\r\n                config.headers['ngrok-skip-browser-warning'] = 'true';\r\n            }\r\n\r\n            var hdr = [];\r\n            for (var key in config.headers) {\r\n                if (config.headers.hasOwnProperty(key)) {\r\n                    hdr.push(key + ':' + config.headers[key]);\r\n                }\r\n            }\r\n\r\n            //if (webRequest)\r\n            //    console.log('web request:' + config.url + ', method:' + config.method + ', headers:' + hdr.join(', '));\r\n            //else\r\n            //    console.log('request:' + config.url + ', method:' + config.method + ', headers:' + hdr.join(', '));\r\n            return config;\r\n        },\r\n        responseError: function (response) {\r\n            var config = response.config;\r\n            var webRequest = typeof (config.url) == 'string' && (config.url.indexOf('http://') == 0 || config.url.indexOf('https://') == 0);\r\n            var isPing = config.url.indexOf('ExternalApi/POS/PosPing') > 0;\r\n            var isSaleSaleOrder = webRequest && config.method === 'POST' && config.url.indexOf('ExternalApi/POS/PosOrder') > 0;\r\n\r\n            if (webRequest) {\r\n                var tmr = $rootScope.currentRequests[config.gid];\r\n\r\n                if (!!tmr) {\r\n                    tmr.canceller.resolve(null);\r\n                    $timeout.cancel(tmr.tmr);\r\n                    delete $rootScope.currentRequests[config.gid];\r\n                    $rootScope.hideCancellation();\r\n                }\r\n            }\r\n\r\n\r\n            // retry request in the case of network errors\r\n            // sale order is repeated 1 times due to thay are in queue\r\n            var retryAttempts = isSaleSaleOrder ? 1 : 10;   // 10 attempts is allowed\r\n            var retryTimeout = 3000; // 3 sec. between attempts\r\n\r\n            if (response.status === 403) {\r\n                $rootScope.logoutUser(response.data);\r\n                return $q.reject(response);\r\n            }\r\n\r\n            if (response.status === -1 && (!config.retryAttempt || config.retryAttempt < retryAttempts) && !config.bypassRetry) {\r\n\r\n                if (!config.retryAttempt)\r\n                    config.retryAttempt = 1;\r\n                else\r\n                    config.retryAttempt++;\r\n\r\n                return $timeout(function () {\r\n                    console.log('restart request: ' + config.url + '. Attempt: ' + (config.retryAttempt + 1));\r\n                    var $http = $injector.get('$http');\r\n                    return $http(config);\r\n                }, retryTimeout);\r\n            }\r\n\r\n            if (response.status === -1 && !isPing) {\r\n                $timeout(function () {\r\n                    configService.setNetworkMode(configService.hasNetworkConnection, false);\r\n                });\r\n            }\r\n\r\n            return $q.reject(response);\r\n        },\r\n        response: function (response) {\r\n            var config = response.config;\r\n\r\n            var webRequest = typeof (config.url) == 'string' && (config.url.indexOf('http://') == 0 || config.url.indexOf('https://') == 0);\r\n\r\n            if (webRequest) {\r\n                var tmr = $rootScope.currentRequests[config.gid];\r\n\r\n                if (!!tmr) {\r\n                    tmr.canceller.resolve(null);\r\n                    $timeout.cancel(tmr.tmr);\r\n                    delete $rootScope.currentRequests[config.gid];\r\n                    $rootScope.hideCancellation();\r\n                }\r\n            }\r\n\r\n            if (webRequest && !configService.isOnline && response.status == 200) {\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                var p = deferred.promise.then(function () {\r\n                    configService.setNetworkMode(true);\r\n                })\r\n                .finally(function () {\r\n                    deferred.resolve(response);\r\n                });\r\n\r\n                return p;\r\n            }\r\n\r\n            return response;\r\n        }\r\n    };\r\n    }])\r\n.run(['$rootScope', 'helperService', '$timeout', 'loginService', 'errorService', 'googleHelperService',\r\n    function ($rootScope, helperService, $timeout, loginService, errorService, googleHelperService) {\r\n        $rootScope.currentRequests = {};\r\n        $rootScope.isCancelDialogVisible = false;\r\n        $rootScope.isBlockUIVisible = false;\r\n\r\n        $rootScope.showCancellation = function () {\r\n            if (Object.keys($rootScope.currentRequests).length > 0 && !$rootScope.isCancelDialogVisible) {\r\n                $rootScope.isCancelDialogVisible = true;\r\n\r\n                // show custom window\r\n                helperService.showDialog('#requestCancelModalDlg');\r\n            }\r\n        };\r\n\r\n        $rootScope.hideCancellation = function () {\r\n            if (Object.keys($rootScope.currentRequests).length == 0 && $rootScope.isCancelDialogVisible) {\r\n                // hide custom window\r\n                helperService.closeDialog('#requestCancelModalDlg');\r\n\r\n                $rootScope.isCancelDialogVisible = false;\r\n            }\r\n        };\r\n\r\n        $rootScope.cancelAllRequests = function () {\r\n            var isLoggedOn = loginService.isLoggedIn();\r\n\r\n            helperService.closeDialog('#requestCancelModalDlg');\r\n            $rootScope.isCancelDialogVisible = false;\r\n\r\n            var gotoLogin = false;\r\n\r\n            Object.keys($rootScope.currentRequests).forEach(function (key) {\r\n                var tmr = $rootScope.currentRequests[key];\r\n//                if (tmr.config.url.indexOf('/PosLoadCustomer') > 0 ||\r\n//                    tmr.config.url.indexOf('/PosLoadCustomer2') > 0)\r\n                // will go to login if request was interrupted by user because if data was not received\r\n                // it will lead to unpredictable behavior of the code.\r\n                gotoLogin = true;\r\n\r\n                tmr.config.isCancelled = true;\r\n                tmr.canceller.resolve(null);\r\n                $timeout.cancel(tmr.tmr);\r\n                delete $rootScope.currentRequests[key];\r\n            });\r\n\r\n            if(gotoLogin)\r\n            {\r\n                $rootScope.$broadcast('header.logoff');\r\n                \r\n                googleHelperService.logout();\r\n                \r\n            }\r\n        };\r\n\r\n\r\n        $rootScope.logoutUser = function (error) {\r\n            helperService.closeDialog('#requestCancelModalDlg');\r\n            $rootScope.isCancelDialogVisible = false;\r\n\r\n            if (error) {\r\n                errorService.showError(error);\r\n            }\r\n            $rootScope.$broadcast('header.logoff');\r\n            \r\n            googleHelperService.logout();\r\n        };\r\n    }]);\r\n\r\nangular.module('services').config(\r\n    function ($httpProvider) {\r\n        $httpProvider.interceptors.push('httpRequestInterceptor');\r\n        $httpProvider.defaults.timeout = 60000; // 1 min timeout for all requests\r\n\r\n    });","import {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport unpackArray from './unpackWorkerHelper';\r\nimport { convertToAPI, convertFromOld } from '../../TypePosScripts/ConverterService';\r\nimport Enumerable from 'linq';\r\nimport { AddressType, StartCalcLevel, FinancialStatusType } from '../../TypePosScripts/Enums';\r\n\r\n\r\nangular.module('services').service('saleService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', 'constants',\r\n    'gettextCatalog', 'helperService', 'uuid2', 'orderByFilter', '$timeout', '$rootScope', 'webOnlyProvider',\r\n    'barcodeService', 'cardPayService', '$sce', 'receiptService', '$interval', '$filter', 'errorService',\r\n    'loyaltyService', 'jsStoreProvider', 'deviceInfo', 'orderStatusService',\r\n    function ($q, configService, remoteRequestProvider, localDBProvider, constants,\r\n        gettextCatalog, helperService, uuid2, orderBy, $timeout, $rootScope, webOnlyProvider,\r\n        barcodeService, cardPayService, $sce, receiptService, $interval, $filter, errorService,\r\n        loyaltyService, jsStoreProvider, deviceInfo, orderStatusService) {\r\n\r\n        var saleService = {};\r\n\r\n        saleService.needUpdateSequenceNumber = false;\r\n\r\n        saleService.OfflineStatus = {\r\n            Error: 'error',\r\n            ErrorHistory: 'errorHistory',\r\n            Parked: 'parked'\r\n        };\r\n\r\n        /*get next sequence for order*/\r\n        saleService.getNextSequence = function (posOutletID, posRegistryID) {\r\n            //var provider = configService.isSite ? remoteRequestProvider : localDBProvider;\r\n\r\n            if (configService.isSite || deviceInfo.isSimulator) {\r\n                var v = configService.getNextSequenceNumber(helperService);\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(v);\r\n                return deferred.promise;\r\n            } else {\r\n                var provider = localDBProvider;\r\n\r\n                var pr = provider.getNextSequence(posOutletID, posRegistryID);\r\n\r\n                pr = pr.then(function (resp) {\r\n                    if (resp.data) {\r\n                        return resp.data;\r\n                    } else {\r\n                        return resp;\r\n                    }\r\n                });\r\n\r\n                return pr;\r\n            }\r\n        };\r\n\r\n        /*\r\n        Current method load next sequence number from server and update local value.\r\n        Should be executed when order has been saved through API\r\n        */\r\n        saleService.updateNextSequenceNumber = function (isAfterSale) {\r\n            var posOutletID = configService.lastOutletID;\r\n            var posRegistryID = configService.lastRegistryID;\r\n\r\n            var pr = null;\r\n\r\n            if (configService.isSite == true || deviceInfo.isSimulator) {\r\n                pr = $q.defer();\r\n                pr.resolve(0);\r\n                pr = pr.promise;\r\n            } else {\r\n                pr = localDBProvider.loadOfflineSalesCount(null, null, null, null);\r\n            }\r\n\r\n            return pr.then(function (queuedCnt) {\r\n\r\n                if (queuedCnt == 0 && configService.isOnline) {\r\n\r\n                    var provider = remoteRequestProvider;\r\n                    var pr = provider.getCurrentSequence(posOutletID, posRegistryID);\r\n\r\n                    pr = pr.then(function (resp) {\r\n\r\n                        if (configService.isSite || deviceInfo.isSimulator) {\r\n\r\n                            if (resp) {\r\n                                var v = resp.data;\r\n                                if (parseInt(v) === 0) {\r\n                                    v = helperService.pad(parseInt(v) + 1, 6);\r\n                                }\r\n                                configService.setNextSequenceNumber(v);\r\n                            }\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve();\r\n                            return deferred.promise;\r\n                        } else {\r\n                            return localDBProvider.setNextSequence(posOutletID, posRegistryID, resp.data);\r\n                        }\r\n                    });\r\n\r\n                    return pr;\r\n                } else { // no connection currently, so increment sequence number ourself\r\n                    var v = 0;\r\n\r\n                    if (isAfterSale === true) {\r\n                        if (configService.isSite) {\r\n                            // this will increment current sequence number and save it to local storage automatically\r\n                            v = configService.getNextSequenceNumber(helperService);\r\n\r\n                        } else {\r\n                            // this will increment current sequence number and save it to local db automatically\r\n                            return localDBProvider.getNextSequence(posOutletID, posRegistryID);\r\n                        }\r\n                    }\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(v);\r\n                    return deferred.promise;\r\n                }\r\n            });\r\n        };\r\n\r\n\r\n        saleService.stopLoadCheck = null;\r\n        saleService.startSequenceAutoUpdate = function () {\r\n\r\n            if (!this.stopLoadCheck) {\r\n                this.stopLoadCheck = $interval(function (p) {\r\n\r\n                    var posOutletID = configService.lastOutletID;\r\n                    var posRegistryID = configService.lastRegistryID;\r\n\r\n                    if (configService.isOnline && posRegistryID != null) {\r\n\r\n                        var pr = null;\r\n\r\n                        if (configService.isSite == true || deviceInfo.isSimulator) {\r\n                            pr = $q.defer();\r\n                            pr.resolve(0);\r\n\r\n                            pr = pr.promise;\r\n                        } else {\r\n                            pr = localDBProvider.loadOfflineSalesCount(null, null, null, null);\r\n                        }\r\n\r\n                        pr.then(function (cnt) {\r\n                            if (cnt == 0) {\r\n                                // refrech data\r\n                                var injector = angular.element('body').injector();\r\n                                var me = injector.get('saleService');\r\n\r\n                                var deferred = $q.defer();\r\n                                deferred.resolve(null);\r\n                                deferred.promise.then(function () {\r\n                                    me.updateNextSequenceNumber();\r\n                                });\r\n                                return deferred.promise;\r\n                            }\r\n                        });\r\n\r\n                        return;\r\n                    }\r\n                }, 1000 * 60);\r\n            }\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        };\r\n\r\n        saleService.stopSequenceAutoUpdate = function () {\r\n            if (saleService.stopLoadCheck != null) {\r\n                try {\r\n                    $interval.cancel(saleService.stopLoadCheck);\r\n                    saleService.stopLoadCheck = null;\r\n                } catch (e) {}\r\n            }\r\n        };\r\n\r\n        saleService.isStandardPaymentType = function (paymentShortName) {\r\n            if (!paymentShortName || typeof (paymentShortName) != 'string') return false;\r\n\r\n            switch (paymentShortName.toLowerCase()) {\r\n                case 'cash':\r\n                case 'credit card':\r\n                case 'gift card':\r\n                case 'loyalty':\r\n                case 'store credits':\r\n                case 'Rounding':\r\n                    return true;\r\n                    //                    break;\r\n            }\r\n\r\n            return false;\r\n        };\r\n\r\n        /**\r\n         * @param {ISale} sale\r\n        Current method should detect if we are online|offline\r\n        in the case of inline - push sale to api\r\n        in the case of offline - push sale to local db for further push it when become online\r\n        */\r\n        saleService.processSale = function (sale, rawSale, info, keepOrderNumber) {\r\n            var callInBackGround = (rawSale.cantProcessOffline !== true && configService.isSite === false && !deviceInfo.isSimulator);\r\n            rawSale.OperationID = sale.OperationID;\r\n            var isRemoteProvider = configService.isSite || (configService.isOnline && callInBackGround === false);\r\n            var provider = isRemoteProvider ? remoteRequestProvider : localDBProvider;\r\n            var pr = saleService.updateRegistrySales(configService.registrySalesID, sale, rawSale);\r\n\r\n            var saleInfo = info;\r\n\r\n            if (!saleInfo.statusID) {\r\n                saleInfo.statusID = 'pending';\r\n                saleInfo.status = constants.parkStatuses['pending'];\r\n            }\r\n            if (parseInt(sale.ClearOrderNumber) === 0 && !rawSale.IsFromDearSale) {\r\n                return pr.then(function () {\r\n                        return saleService.getNextSequence(configService.lastOutletID, configService.lastRegistryID);\r\n                    })\r\n                    .then(function (data) {\r\n                        if (!keepOrderNumber) {\r\n                            sale.OrderNumber = (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                                data + (configService.registrySuffix ? configService.registrySuffix : \"\");\r\n                            rawSale.OrderNumber = (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                                data + (configService.registrySuffix ? configService.registrySuffix : \"\");\r\n                        }\r\n                        sale.ClearOrderNumber = data;\r\n                        rawSale.ClearOrderNumber = data;\r\n\r\n                        saleInfo.saleObject = sale;\r\n                        var pr = isRemoteProvider ? provider.processSale([sale]) : provider.addOfflineSale(rawSale, saleInfo);\r\n                        pr = pr.then(function (resp) {\r\n                            // add order state change log\r\n                            orderStatusService.trackOrder(sale.OrderID, configService.registrySalesID, {\r\n                                saleInfo: saleInfo,\r\n                                sale: sale,\r\n                                rawSale: rawSale,\r\n                                offlineStatusParked: saleService.OfflineStatus.Parked\r\n                            }).catch(function(err) {\r\n                                console.error('Failed to track order:', err);\r\n                            });\r\n\r\n                            if (configService.isOnline && callInBackGround === true) {\r\n                                return saleService.sendOfflineSales(100, true, sale, rawSale)\r\n                                    .then(function () {\r\n                                        var deferred = $q.defer();\r\n                                        deferred.resolve({\r\n                                            Success: true\r\n                                        });\r\n                                        return deferred.promise;\r\n                                    });\r\n                            } else if (configService.isSite) {\r\n                                if (!!resp && !!resp.data && !!resp.data.Errors && resp.data.Errors.length > 0) {\r\n                                    return saleService._processError(resp.data.Errors[0], sale.OrderNumber);\r\n                                }\r\n\r\n                                var isSuccess = resp.data.Success && resp.data.Success.length > 0 || resp.data.Duplicate && resp.data.Duplicate.length > 0;\r\n                        \r\n                                if (!isSuccess) {\r\n                                    var deferred = $q.defer();\r\n                                    deferred.reject(resp);\r\n                                    return deferred.promise;\r\n                                }\r\n\r\n                                if (!!resp.data && !!resp.data.NewRegistryID)\r\n                                    configService.lastRegistryID = resp.data.NewRegistryID;\r\n\r\n                                saleService.updateSaleOrderNumberForCurrentSale(resp, sale, rawSale);\r\n                                saleService.updateNextSequenceNumber(true);\r\n                            } else {\r\n                                if (!!resp && !!resp.data && !!resp.data.Errors && resp.data.Errors.length > 0) {\r\n                                    return saleService._processError(resp.data.Errors[0], sale.OrderNumber);\r\n                                }\r\n                            }\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve({\r\n                                Success: true\r\n                            });\r\n                            return deferred.promise;\r\n                        }, function (err) {\r\n                            console.log('error ', err);\r\n                            if (!!err && err.hasOwnProperty('headers')) {\r\n                                err = err.data;\r\n                            }\r\n                            if (!err) {\r\n                                err = {\r\n                                    message: gettextCatalog.getString(\"There is a problem connecting to the server.<br/> Please check your internet connection.\"),\r\n                                    status: -1\r\n                                };\r\n                            }\r\n                            var deferred = $q.defer();\r\n                            // call error processing\r\n                            deferred.reject(err);\r\n                            return deferred.promise;\r\n                        });\r\n\r\n                        if (configService.isSite) {\r\n                            pr = pr.then(function(res) {\r\n                                if (res && typeof res.status !== 'undefined' && res.status === -2) {\r\n                                    var info = angular.copy(saleInfo);\r\n                                    info.statusID = saleService.OfflineStatus.ErrorHistory;\r\n                                    var storeProvider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                                    storeProvider.addOfflineSale(rawSale, info, configService.isSite ? res.message : undefined)\r\n                                }\r\n\r\n                                return res;\r\n                            })\r\n                        }\r\n\r\n                        return pr;\r\n                    });\r\n            } else {\r\n                saleInfo.saleObject = sale;\r\n                pr = pr\r\n                    .then(function () {\r\n                        return isRemoteProvider ? provider.processSale([sale]) : provider.addOfflineSale(rawSale, saleInfo);\r\n                    });\r\n\r\n                pr = pr.then(function (resp) {\r\n                    // add order state change log\r\n                    orderStatusService.trackOrder(sale.OrderID, configService.registrySalesID, {\r\n                        saleInfo: saleInfo,\r\n                        sale: sale,\r\n                        rawSale: rawSale,\r\n                        offlineStatusParked: saleService.OfflineStatus.Parked\r\n                    }).catch(function(err) {\r\n                        console.error('Failed to track order:', err);\r\n                    });\r\n                    if (configService.isOnline && callInBackGround === true) {\r\n                        return saleService.sendOfflineSales(100, true, sale, rawSale)\r\n                            .then(function () {\r\n                                var deferred = $q.defer();\r\n                                deferred.resolve({\r\n                                    Success: true\r\n                                });\r\n                                return deferred.promise;\r\n                            });\r\n                    } else if (configService.isSite) {\r\n                        if (!!resp && !!resp.data && !!resp.data.Errors && resp.data.Errors.length > 0) {\r\n                            return saleService._processError(resp.data.Errors[0], sale.OrderNumber);\r\n                        }\r\n\r\n                        var isSuccess = resp.data.Success && resp.data.Success.length > 0 || resp.data.Duplicate && resp.data.Duplicate.length > 0;\r\n                        \r\n                        if (!isSuccess) {\r\n                            var deferred = $q.defer();\r\n                            deferred.reject(resp);\r\n                            return deferred.promise;\r\n                        }\r\n\r\n                        if (!!resp.data && !!resp.data.NewRegistryID)\r\n                            configService.registrySalesID = resp.data.NewRegistryID;\r\n\r\n                        saleService.updateSaleOrderNumberForCurrentSale(resp, sale, rawSale);\r\n                        saleService.updateNextSequenceNumber();\r\n                    } else {\r\n                        if (!!resp && !!resp.data && !!resp.data.Errors && resp.data.Errors.length > 0) {\r\n                            return saleService._processError(resp.data.Errors[0], sale.OrderNumber);\r\n                        }\r\n                    }\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve({\r\n                        Success: true\r\n                    });\r\n                    return deferred.promise;\r\n                }, function (err) {\r\n                    console.log('error ', err);\r\n                    if (!!err && err.hasOwnProperty('headers')) {\r\n                        err = err.data;\r\n                    }\r\n                    if (!err) {\r\n                        err = {\r\n                            message: gettextCatalog.getString(\"There is a problem connecting to the server.<br/> Please check your internet connection.\"),\r\n                            status: -1\r\n                        };\r\n                    }\r\n                    var deferred = $q.defer();\r\n                    // call error processing\r\n                    deferred.reject(err);\r\n                    return deferred.promise;\r\n                });\r\n\r\n                if (configService.isSite) {\r\n                    pr = pr.then(function(res) {\r\n                        if (res && typeof res.status !== 'undefined' && res.status === -2) {\r\n                            var info = angular.copy(saleInfo);\r\n                            info.statusID = saleService.OfflineStatus.ErrorHistory;\r\n                            var storeProvider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                            storeProvider.addOfflineSale(rawSale, info, configService.isSite ? res.message : undefined)\r\n                        }\r\n\r\n                        return res;\r\n                    })\r\n                }\r\n\r\n                return pr;\r\n            }\r\n        };\r\n\r\n        saleService._processError = function(errorData, orderNumber, returnBool = false) {\r\n            if (errorData) {\r\n                var error = errorData.Errors.length > 0 && errorData.Errors[0] && errorData.Errors[0]\r\n                    ? errorData.Errors[0] : null;\r\n                if (error && error.ErrorMessage && error.ErrorMessage.startsWith('Product not found')\r\n                    || error && error.IsPermanent) {\r\n                    var deferred = $q.defer();\r\n                    var message = error.ErrorMessage;\r\n                    if (error.ErrorMessage.startsWith('Product not found')) {\r\n                        message = gettextCatalog.getString('The sale {{orderNumber}} could not be saved because it contains a deleted product.', {orderNumber: orderNumber});\r\n                    }\r\n                   var err = {\r\n                        Success: false,\r\n                        message: message,\r\n                        status: -2\r\n                    };\r\n                    deferred.resolve(err);\r\n                    return returnBool ? err : deferred.promise;\r\n                }\r\n\r\n                var deferred = $q.defer();\r\n                deferred.reject(errorData);\r\n                return returnBool ? false : deferred.promise;\r\n            }\r\n\r\n            return true\r\n        }\r\n\r\n        saleService.saveSale = function (sale, rawSale, saleType, skipAnalyticData) {\r\n            var isNewSale = helperService.showNewCheckoutUI(rawSale);\r\n\r\n            sale = angular.extend(sale, {\r\n                payloadVersion: !isNewSale ? configService.payloadVersion : rawSale.PayloadVersion\r\n            });\r\n            sale.Barcode = rawSale.Barcode;\r\n            rawSale.OutletID = sale.OutletID;\r\n            rawSale.OutletName = sale.OutletName;\r\n            if (rawSale.IsParked !== true) {\r\n                rawSale.RegistryID = sale.RegistryID;\r\n            }\r\n            rawSale.UserName = sale.UserName;\r\n\r\n            var isParkSave = saleType === saleService.OfflineStatus.Parked || sale.FinancialStatus === FinancialStatusType.Parked;\r\n            var rawForStorage = saleService.buildRawSaleForStorage(\r\n                rawSale,\r\n                isParkSave,\r\n                !isNewSale ? configService.payloadVersion : rawSale.PayloadVersion\r\n            );\r\n            sale.RawSaleObject = JSON.stringify(rawForStorage);\r\n            sale.CalculatedAnalyticData = skipAnalyticData === true ? null : calculateAnalyticData(sale, rawSale);\r\n            sale.LocalDate = 'ldt_' + helperService.toDateWithCurrentTimeZone(new Date());\r\n            // move coupon info to sale level\r\n            if (rawSale.selectedCouponID) {\r\n                sale.selectedCoupon = rawSale.selectedCoupon;\r\n                sale.selectedCouponID = rawSale.selectedCouponID;\r\n                sale.selectedCouponDealID = rawSale.selectedCouponDealID;\r\n            } else {\r\n                delete sale.selectedCoupon;\r\n                delete sale.selectedCouponID;\r\n                delete sale.selectedCouponDealID;\r\n            }\r\n\r\n            var st = {\r\n                statusID: saleType,\r\n                status: constants.parkStatuses[saleType],\r\n                userName: configService.lastUserName,\r\n                registryID: configService.lastRegistryID,\r\n                registryName: configService.lastRegistry,\r\n                outletID: configService.lastOutletID\r\n            };\r\n\r\n            var prm = saleService.processSale(sale, rawSale, st, skipAnalyticData);\r\n            var allowAsync =\r\n                (!!sale.Payments &&\r\n                    sale.Payments.length > 0 &&\r\n                    sale.Payments[sale.Payments.length - 1].ShortName !== 'gift card') || // gift card is disable in offline mode\r\n                saleType === 'parked' || // parking is allowed in site offline mode\r\n                saleType === 'onaccount' ||\r\n                saleType === 'layby';\r\n\r\n            if (configService.isSite && allowAsync) {\r\n                // for site we need to check if request is failed and put it into queue to send async\r\n                prm = prm.then(\r\n                    function (res) {\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(res);\r\n                        return deferred.promise;\r\n                    },\r\n                    function (err) {\r\n                        // push to async queue\r\n                        var info = $.extend(st, {\r\n                            applicationID: configService.applicationID,\r\n                            applicationKey: configService.applicationKey,\r\n                            tenantID: configService.tenantID\r\n                        });\r\n\r\n                        saleService.addSaleToQueue(sale, rawSale, info);\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(err);\r\n                        return deferred.promise;\r\n                    });\r\n            }\r\n\r\n            return prm;\r\n        };\r\n\r\n        saleService.parkSale = function (sale, rawSale) {\r\n            return saleService.saveSale(sale, rawSale, saleService.OfflineStatus.Parked);\r\n        };\r\n\r\n        saleService.discardParkedSale = function (saleID) {\r\n            // Track discard of parked order (voided)\r\n            var trackPromise = orderStatusService.trackOrder(saleID, configService.registrySalesID, 'voided')\r\n                .catch(function(err) {\r\n                    console.error('Failed to track discard status:', err);\r\n                });\r\n            \r\n            if (!configService.isSite && !deviceInfo.isSimulator) {\r\n                return trackPromise.then(function() {\r\n                    return localDBProvider.removeSale(saleID, saleService.OfflineStatus.Parked);\r\n                }).then(function () {\r\n                    return remoteRequestProvider.discardParkedSale(saleID);\r\n                });\r\n            } else {\r\n                return trackPromise.then(function() {\r\n                    return remoteRequestProvider.discardParkedSale(saleID);\r\n                });\r\n            }\r\n        };\r\n\r\n        saleService.laybySale = function (sale, rawSale) {\r\n            rawSale.OrderType = 'LAYBY';\r\n            return saleService.saveSale(sale, rawSale, 'layby');\r\n        };\r\n\r\n        saleService.onaccountSale = function (sale, rawSale) {\r\n            rawSale.OrderType = 'ONACCOUNT';\r\n            // check customer credit limit if it's > 0\r\n            var customer = rawSale.customer;\r\n            if (!!customer) {\r\n                if (customer.IsOnCreditHold) {\r\n                    var deferred = $q.defer();\r\n                    var errorMessage = gettextCatalog.getString('Customer is on credit hold!');\r\n                    deferred.reject(errorMessage);\r\n                    return deferred.promise;\r\n                } else if (customer.CreditLimit > 0) {\r\n                    var amountToSave = helperService.DEARRound(rawSale.Balance, 2);\r\n                    var alreadyUsed = helperService.DEARRound(customer.Account, 2);\r\n                    var limit = helperService.DEARRound(customer.CreditLimit, 2);\r\n                    if ((amountToSave + alreadyUsed) > limit) {\r\n                        var deferred = $q.defer();\r\n                        var errorMessage = gettextCatalog.getString('Credit limit exceeded!') +\r\n                            '<br/>' +\r\n                            gettextCatalog.getString('Customer outstanding balance including this order is ') +\r\n                            $filter('currency')(amountToSave + alreadyUsed) +\r\n                            ', ' +\r\n                            gettextCatalog.getString('whereas the customer credit limit is ') + $filter('currency')(limit);\r\n                        deferred.reject(errorMessage);\r\n                        return deferred.promise;\r\n                    }\r\n                }\r\n\r\n            }\r\n\r\n            return saleService.saveSale(sale, rawSale, 'onaccount');\r\n        };\r\n\r\n        saleService.removeParkedSale = function (saleID, statusID) {\r\n            var provider = localDBProvider;\r\n            var pr = provider.removeSale(saleID, statusID);\r\n            return pr;\r\n        };\r\n\r\n        saleService.loadOfflineSales = function (saleID, statusID, exeptStatusID) {\r\n            var deferred = $q.defer();\r\n            if (configService.isSite === false && !deviceInfo.isSimulator) {\r\n                var provider = localDBProvider;\r\n                var pr = provider.loadOfflineSales(configService.lastDearPosName, saleID, statusID, exeptStatusID)\r\n                    .then(function (data) {\r\n                        var arr = [];\r\n                        $.each(data, function (idx, el) {\r\n                            el.sale = JSON.parse(el.Packed);\r\n\r\n                            el.sale = convertFromOld(el.sale);\r\n                            el.info = JSON.parse(el.InfoPacked);\r\n                            el.Status = el.StatusID;\r\n                            delete el.Packed;\r\n                            delete el.InfoPacked;\r\n                            arr.push(el);\r\n                        });\r\n\r\n                        deferred = $q.defer();\r\n                        deferred.resolve(arr);\r\n                        return deferred.promise;\r\n                    });\r\n                return pr;\r\n            } else {\r\n                deferred.resolve([]);\r\n                return deferred.promise;\r\n            }\r\n\r\n        };\r\n\r\n\r\n        saleService.loadOnlineParkedSales = function (page, limit, outletID, filters) {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadParkedSales(page, limit, outletID, filters)\r\n                .catch(function (err) {\r\n                    if (err.status !== -1 || !configService.isSite)\r\n                        throw err;\r\n                    else {\r\n                        var provider = jsStoreProvider;\r\n                        return provider.loadParkedSales(page, limit, outletID, filters)\r\n                            .then(function (res) {\r\n                                var deferred = $q.defer();\r\n                                deferred.resolve(res.data);\r\n                                return deferred.promise;\r\n                            });\r\n                    }\r\n                });\r\n\r\n            return pr;\r\n        };\r\n\r\n        saleService.loadSalesHistory = function (page, limit, filters, sorting, searchText) {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadSalesHistory(page, limit, filters, sorting, searchText).then(function (res) {\r\n                var deferred = $q.defer();\r\n\r\n                $.each(res.data.Orders, function (idx, el) {\r\n                    el.OrderDate = moment.utc(el.OrderDateUTC).local().format('YYYY-MM-DD[T]HH:mm:ss');\r\n                    if(!el.DeliveryTasks) {\r\n                        el.DeliveryTasks = gettextCatalog.getString('N/A');\r\n                        el.HideDelivery = true;\r\n                    } else {\r\n                        var lst = el.DeliveryTasks.split(', ');\r\n                        var l = Enumerable.from(lst)\r\n                        .select()\r\n                        .distinct()\r\n                        .orderBy(function(v){ return Number(v.substr(3));})\r\n                        .toArray().join(', ');\r\n                        el.DeliveryTasks = l;\r\n                    }\r\n\r\n                    if(el.ExtendedFlags) {\r\n                        try{\r\n                            var flags = JSON.parse(el.ExtendedFlags);\r\n                            if(flags && flags.SEE === 'true') {\r\n                                el.ReceiptWasEmailed = true;\r\n                            }\r\n                        } catch(e) {\r\n\r\n                        }\r\n                    }\r\n                });\r\n\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n\r\n        };\r\n\r\n        saleService.loadPosUsers = function () {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadPosUsers().then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        saleService.isSendInProgress = false;\r\n        saleService.sendOfflineSales = function (count, forceStatusID, sale, rawSale) {\r\n            if (saleService.isSendInProgress) {\r\n                console.log('send already in progress');\r\n                return Promise.resolve(false);\r\n            }\r\n\r\n            saleService.isSendInProgress = true;\r\n            try {\r\n                var pr = localDBProvider.loadOfflineSales(null, null, null, forceStatusID === true ? null : saleService.OfflineStatus.Error, count)\r\n                .then(function (data) {\r\n                    var sales = [];\r\n                    var ofs = [];\r\n                    $.each(data, function (idx, el) {\r\n                        let offlineSale = JSON.parse(el.InfoPacked).saleObject;\r\n                        sales.push(offlineSale);\r\n                        let date = new Date();\r\n                        try {\r\n                            date = moment(offlineSale.Date).toDate()\r\n                        } catch (e) {\r\n                            console.error(e);\r\n                        }\r\n                        ofs.push({\r\n                            createdDate: date\r\n                        });\r\n                    });\r\n\r\n                helperService.checkNSetIndicator(ofs);\r\n\r\n                    if (sales.length > 0) {\r\n                        return remoteRequestProvider.processSale(sales)\r\n                            .then(function (resp) {\r\n\r\n                                var promises = [];\r\n\r\n                                if (!resp) {\r\n                                    var deferred = $q.defer();\r\n                                    deferred.reject('Connection error');\r\n                                    promises.push(deferred.promise);\r\n                                } else {\r\n                                    if (resp.data.Duplicate && resp.data.Duplicate.length > 0) {\r\n                                        $.each(resp.data.Duplicate, function (idx, el) {\r\n                                            var ppr = localDBProvider.removeSale(el.OrderID, null, el.OperationID);\r\n                                            promises.push(ppr);\r\n                                        });\r\n                                    }\r\n\r\n                                    if (resp.data.Success && resp.data.Success.length > 0) {\r\n                                        $.each(resp.data.Success, function (idx, el) {\r\n                                            var ppr = localDBProvider.removeSale(el.OrderID, null, el.OperationID);\r\n                                            promises.push(ppr);\r\n                                        });\r\n\r\n                                        saleService.needUpdateSequenceNumber = true;\r\n                                    }\r\n\r\n                                    saleService.updateSaleOrderNumberForCurrentSale(resp, sale, rawSale);\r\n\r\n                                    if (resp.data.Errors && resp.data.Errors.length > 0) {\r\n                                        $.each(resp.data.Errors, function (idx, el) {\r\n                                            var orderNumber = sales.find(x => x.OrderID === el.OrderID).OrderNumber;\r\n                                            var ignoreError = saleService._processError(el, orderNumber, true);\r\n                                            if (ignoreError && !ignoreError.Success && ignoreError.message) {\r\n                                                errorService.showError(ignoreError.message);\r\n                                            }\r\n                                            var ppr = !ignoreError\r\n                                                ? localDBProvider.makeErrorOrder(el.OrderID, null, el.OperationID)\r\n                                                : localDBProvider.makeErrorHistoryOrder(el.OrderID, ignoreError.message);\r\n                                            promises.push(ppr);\r\n                                        });\r\n                                    }\r\n                                }\r\n\r\n                                return Promise.all(promises);\r\n                            })\r\n                            .then(function (resp) {\r\n                                return localDBProvider.loadOfflineSalesCount(null, null, null, forceStatusID === true ? null : saleService.OfflineStatus.Error)\r\n                                    .then(function (cnt) {\r\n                                        // cnt - count of rest sales that are not sent yet.\r\n                                        if (cnt == 0) {\r\n\r\n                                            return localDBProvider.clearCoupons()\r\n                                                .then(function () {\r\n                                                    return saleService.getPosDiscounts();\r\n                                                })\r\n                                                .then(function () {\r\n                                                    if (saleService.needUpdateSequenceNumber) {\r\n                                                        return saleService.updateNextSequenceNumber()\r\n                                                            .then(function () {\r\n                                                                saleService.needUpdateSequenceNumber = false;\r\n                                                                return false;\r\n                                                            });\r\n                                                    }\r\n                                                });\r\n                                        } else {\r\n                                            var deferred = $q.defer();\r\n                                            deferred.resolve(null);\r\n                                            return deferred.promise;\r\n                                        }\r\n                                    });\r\n                            });\r\n                    } else {\r\n                        saleService.isSendInProgress = false;\r\n                        return false;\r\n                    }\r\n                })\r\n                .finally(() => {\r\n                    saleService.isSendInProgress = false;\r\n                });\r\n            }\r\n            catch (e) {\r\n                saleService.isSendInProgress = false;\r\n                throw e;\r\n            }\r\n\r\n            return pr.then(function () {\r\n                return localDBProvider.loadOfflineSales(null, null, null, saleService.OfflineStatus.Error)\r\n                    .then(function (resp) {\r\n                        if (resp.length > 0 && configService.isOnline === true) {\r\n                            return true;\r\n                        } else {\r\n                            return false;\r\n                        }\r\n                    });\r\n            });\r\n        };\r\n\r\n\r\n        saleService.addCallback = function () {\r\n            if (!(configService.isSite || deviceInfo.isSimulator))\r\n                configService.addCallbackFunction(saleService.sendOfflineSales);\r\n        };\r\n\r\n        /*\r\n         * The function below will work correctly if updateBasePriceWithDiscount was called just before\r\n         */\r\n        saleService.updatePriceWithTax = function (currentSale, isTaxInclusive) {\r\n            var isStandaloneReturn = currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = currentSale.standAloneExchange === true;\r\n\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                var sign = el.Price < 0 || isStandaloneReturn || isStandaloneExchange ? -1 : 1;\r\n\r\n                if (sign > 0) {\r\n                    el.PriceWithTax = isTaxInclusive ? el.BasePriceWithDiscount :\r\n                        el.BasePriceWithDiscount + saleService.calculateTax(el.Taxes, el.BasePriceWithDiscount);\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.updateBasePriceWithDiscount = function (currentSale) {\r\n\r\n            var isStandaloneReturn = currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = currentSale.standAloneExchange === true;\r\n            var copyCurrentSale = currentSale;\r\n\r\n            $.each(copyCurrentSale.CheckoutItems, function (idx, el) {\r\n                var sign = el.Price < 0 || isStandaloneReturn || isStandaloneExchange ? -1 : 1;\r\n                var price = el.BasePrice - el.itemDiscount * sign;\r\n\r\n                if (sign > 0) {\r\n\r\n                    el.BasePriceWithDiscount = el.BasePrice - el.itemDiscount * sign;\r\n\r\n                    // now apply global discount. skip this for exchange/return because we can't return twice\r\n                    // if (copyCurrentSale.discountValue > 0 && copyCurrentSale.ReturnID == null) {\r\n                    //     var discountCoeff = sign > 0 ? copyCurrentSale.Total / (copyCurrentSale.BaseTotal) : el.DiscountCoeff;\r\n                    //\r\n                    //     el.BasePriceWithDiscount = that.DEARRound((el.BasePrice - el.itemDiscount * sign) * discountCoeff, 4);\r\n                    // }\r\n                }\r\n            });\r\n        };\r\n\r\n        /*\r\n         * This function converts object wich used in app for display current sale and contains additional fileds, to model wich will be send to server.\r\n         * @param {} currentSale\r\n         * @param {} status\r\n         * @returns {}\r\n         BasePrice - initial price without any discounts\r\n         Price - price of item reduced by item discount. If no item discount exists, then Price == BasePrise\r\n         PriceWithDiscount - fully reduced price with item and total discount\r\n         DiscountCoeff - reduce coefficient applied by global discount\r\n         BasePriceWithDiscount - fully reduced price with item and total discount\r\n         */\r\n        saleService.convertCurrentSaleForAPI = function (currentSale, status, isContinue, savedTaxInclusive, newGuidValue, isPartiallyPaid, isPaymentStage) {\r\n            var isNewSale = helperService.showNewCheckoutUI(currentSale);\r\n\r\n            if (isNewSale)\r\n                return convertToAPI(currentSale, status, isContinue, newGuidValue, isPartiallyPaid);\r\n\r\n            var isStandaloneReturn = currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = currentSale.standAloneExchange === true;\r\n            var isParked = currentSale.IsParked === true && !!currentSale.RegistryID;\r\n\r\n            var copyCurrentSale = currentSale; //angular.copy(currentSale);\r\n\r\n            // this is to leave a chance to process older payments in payments history if new one will process by different manner\r\n            copyCurrentSale.conversionVersion = \"2\";\r\n\r\n            var that = helperService;\r\n            var doNotConsolidate = false;\r\n            var taxPrecision = (configService.taxCalculationMethod == 'Row Total' ? 2 : 4);\r\n\r\n            if (copyCurrentSale.OrderType === 'ONACCOUNT' && status === 'CLOSED') {\r\n                if (isPartiallyPaid) {\r\n                    status = \"ONACCOUNT\";\r\n                } else {\r\n                    status = 'ONACCOUNT_CLOSED';\r\n                }\r\n            }\r\n\r\n            if (copyCurrentSale.OrderType === 'LAYBY' && status === 'CLOSED') {\r\n                if (isPartiallyPaid) {\r\n                    status = \"LAYBY\";\r\n                } else {\r\n                    status = 'LAYBY_CLOSED';\r\n                }\r\n            }\r\n\r\n            var paymentClose = status == \"CLOSED\" || (status.indexOf(\"_CLOSED\") + 7) == status.length;\r\n\r\n            switch (status) {\r\n                case \"OPEN\":\r\n                case \"PARKED\":\r\n                case \"CLOSED\":\r\n                case \"SAVED\":\r\n                    doNotConsolidate = false;\r\n                    break;\r\n                case \"LAYBY\":\r\n                case \"LAYBY_CLOSED\":\r\n                case \"ONACCOUNT\":\r\n                case \"ONACCOUNT_CLOSED\":\r\n                    doNotConsolidate = true;\r\n                    break;\r\n            }\r\n\r\n            if (isStandaloneReturn || isStandaloneExchange)\r\n                doNotConsolidate = true;\r\n\r\n            var taxInclusive = configService.taxInclucive === \"True\";\r\n            if (savedTaxInclusive != null && savedTaxInclusive != undefined) {\r\n                taxInclusive = savedTaxInclusive;\r\n            }\r\n\r\n            var currentSaleObject = {\r\n                OrderID: copyCurrentSale.ID,\r\n                OperationID: !copyCurrentSale.OperationID ? uuid2.newguid() : copyCurrentSale.OperationID,\r\n                Date: moment.utc(),\r\n                LaybyDate: copyCurrentSale.LaybyDate,\r\n                RegistryID: isParked ? copyCurrentSale.RegistryID : configService.lastRegistryID,\r\n                Currency: configService.currency,\r\n                TaxInclusive: taxInclusive,\r\n                DoNotConsolidate: doNotConsolidate,\r\n                FinancialStatus: isStandaloneExchange ? 'RETURN' : status,\r\n                SalesRepresentative: copyCurrentSale.salesRepresentative ? copyCurrentSale.salesRepresentative.Name : \"\",\r\n                UserName: isParked ? sale.UserName || '' : configService.userName,\r\n                CustomerID: copyCurrentSale.customer.ID,\r\n                CustomerName: copyCurrentSale.customer.Name,\r\n                Lines: [],\r\n                Payments: [],\r\n                Surcharges: [],\r\n                OrderNumber: isParked ? copyCurrentSale.OrderNumber : (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                    (copyCurrentSale.ClearOrderNumber ? copyCurrentSale.ClearOrderNumber : '000000') +\r\n                    (configService.registrySuffix ? configService.registrySuffix : \"\"),\r\n                ClearOrderNumber: copyCurrentSale.ClearOrderNumber ? copyCurrentSale.ClearOrderNumber : '000000',\r\n                CustomerNote: copyCurrentSale.comment,\r\n                Total: Number(copyCurrentSale.Total),\r\n                RegistryCloseID: configService.registrySalesID,\r\n                SequenceGeneration: 'client',\r\n                standaloneRefund: isStandaloneReturn,\r\n                standaloneExchange: isStandaloneExchange,\r\n                ParentOrderID: copyCurrentSale.parentOrderID,\r\n                LoyaltyUpdate: copyCurrentSale.LoyaltyUpdate,\r\n                UpdateReceiptView: false,\r\n                UpdateRegistrySequenceIfDuplicate: !isParked,\r\n                OutletName: configService.lastOutlet,\r\n                OutletID: configService.lastECSMappingOutletID\r\n            };\r\n\r\n            if (isStandaloneReturn || standaloneExchange) {\r\n                currentSaleObject.OrderNumber = copyCurrentSale.ClearOrderNumber;\r\n                currentSaleObject.ClearOrderNumber = copyCurrentSale.ClearOrderNumber;\r\n                currentSaleObject.AdjustRefunds = copyCurrentSale.AdjustRefunds;\r\n                var line = {\r\n                    ProductID: null,\r\n                    ProductName: isStandaloneReturn ? 'Standalone Refund' : 'Standalone Exchange',\r\n                    SKU: isStandaloneReturn ? 'Standalone Refund' : 'Standalone Exchange',\r\n                    Quantity: 1,\r\n                    Price: 0,\r\n                    TotalPerLine: 0,\r\n                    Tax: 0,\r\n                    TaxRuleID: null,\r\n                    CalculateTax: false,\r\n                    ImageID: null,\r\n                    ProductType: null\r\n                };\r\n\r\n                currentSaleObject.Lines.push(line);\r\n            }\r\n\r\n            // var taxesAmount = {};\r\n            // var taxesAmountTotal = 0;\r\n            $.each(copyCurrentSale.CheckoutItems, function (idx, el) {\r\n                var sign = el.Price < 0 || isStandaloneReturn || isStandaloneExchange ? -1 : 1;\r\n                //// for refunds and exchanges we need to take real price, because  then we will calculate discrepancy between\r\n                /// Real product price  - applied deal(on product level) and BasePriceWithDiscount(including ORDER level discount)\r\n                // it seems the bug: when tax is exclusive, PriceWithTax contains not discounted price but with tax for nondiscounted price\r\n                // it's invalid as tax is calculated after discount is applied\r\n                //var price = (sign > 0 ? el.BasePrice : el.PriceWithTax) - el.itemDiscount;\r\n\r\n                if (typeof (el.sign) !== \"undefined\")\r\n                    sign = el.sign;\r\n\r\n                var price = el.BasePrice - el.itemDiscount + ((sign > 0 || taxInclusive === true) ? 0 : that.DEARRound(saleService.calculateTax(el.Taxes, el.BasePrice - el.itemDiscount), 4));\r\n\r\n                if (sign > 0) {\r\n                    el.PriceWithDiscount = el.BasePrice - el.itemDiscount * sign;\r\n\r\n                    if (sign > 0)\r\n                        el.DiscountCoeff = 1;\r\n\r\n                    el.BasePriceWithDiscount = el.BasePrice - el.itemDiscount * sign;\r\n\r\n                    // now apply global discount. skip this for exchange/return because we can't return twice\r\n                    if (copyCurrentSale.discountValue > 0 && copyCurrentSale.ReturnID == null) {\r\n\r\n                        var surchargeTotal = saleService.surchargeSum(currentSale) + saleService.surchargeTaxSum(currentSale);\r\n\r\n                        var discountCoeff = sign > 0 ? (copyCurrentSale.Total - surchargeTotal) / (copyCurrentSale.BaseTotal) : el.DiscountCoeff;\r\n\r\n                        el.BasePriceWithDiscount = that.DEARRound((el.BasePrice - el.itemDiscount * sign) * discountCoeff, 4);\r\n\r\n                        el.PriceWithDiscount = that.DEARRound(price * discountCoeff, 4);\r\n                        el.DiscountCoeff = discountCoeff; // this we will use when refund items.\r\n\r\n                    }\r\n                }\r\n\r\n                el.Price = that.DEARRound(price, 4);\r\n                el.Amount = that.DEARRound(price * el.Count, 4);\r\n\r\n                if (price >= 0 && (isStandaloneReturn || isStandaloneExchange) !== true) {\r\n\r\n                    // the line below reduces tax multiple times. This tax shouldn't depend on total discount\r\n                    //el.Tax = that.DEARRound(el.Tax * copyCurrentSale.taxReduceCoeff, taxPrecision);\r\n\r\n                    if (copyCurrentSale.ReturnID == null) {\r\n                        var line = {\r\n                            ProductID: el.SaleType === 'customsale' ? null : el.ProductID,\r\n                            Quantity: el.Count,\r\n                            Price: that.DEARRound(price, 4),\r\n                            TotalPerLine: that.DEARRound(price * el.Count, 2),\r\n                            Tax: that.DEARRound(el.Tax, taxPrecision),\r\n                            TaxRuleID: el.TaxRuleID,\r\n                            CalculateTax: false,\r\n                            ImageID: el.ImageID,\r\n                            ProductType: el.ProductType,\r\n                            SerialNumber: el.SerialNumber\r\n                        };\r\n                        if (el.SaleType === 'customsale') {\r\n                            line.ProductName = el.Name;\r\n                        }\r\n\r\n                        if (!!el.GiftCardCode)\r\n                            line.GiftCardCode = el.GiftCardCode;\r\n\r\n                        if (!!el.GiftCardExpirationDate)\r\n                            line.GiftCardExpirationDate = helperService.toDateFromDatepickerParameter(el.GiftCardExpirationDate);\r\n\r\n                        currentSaleObject.Lines.push(line);\r\n                    }\r\n                    el.itemAppliedDiscount = el.itemDiscount;\r\n                }\r\n            });\r\n\r\n            if (!!currentSale.Surcharges && currentSale.Surcharges.length > 0) {\r\n\r\n                $.each(currentSale.Surcharges, function (idx, surcharge) {\r\n\r\n                    var line = {\r\n                        Total: surcharge.CalculatedValue,\r\n                        Tax: surcharge.Tax,\r\n                        Name: surcharge.Name,\r\n                        Type: surcharge.Type,\r\n                        Value: surcharge.Value,\r\n                        SurchargeID: surcharge.SurchargeID,\r\n                        TaxRuleID: surcharge.TaxRuleID,\r\n                        PaymentRealAmount: surcharge.PaymentRealAmount\r\n                    };\r\n\r\n                    if (surcharge.PaymentID)\r\n                        line.PaymentID = surcharge.PaymentID;\r\n\r\n                    if (surcharge.PaymentShortName)\r\n                        line.PaymentShortName = surcharge.PaymentShortName;\r\n\r\n                    currentSaleObject.Surcharges.push(line);\r\n                });\r\n            }\r\n\r\n            /*If sale has discount, add discount to payment items*/\r\n            if (copyCurrentSale.discountValue > 0) {\r\n                var discountPaymentLine = {\r\n                    ID: uuid2.newguid(),\r\n                    PaymentProcessorID: null,\r\n                    Amount: copyCurrentSale.discountValue,\r\n                    Date: moment.utc(),\r\n                    ShortName: \"Discount\"\r\n                };\r\n                currentSaleObject.Payments.push(discountPaymentLine);\r\n            }\r\n\r\n            $.each(copyCurrentSale.Payments, function (idx, el) {\r\n                if (el.Amount >= 0 && copyCurrentSale.ReturnID == null) {\r\n                    var p = {\r\n                        ID: el.ID,\r\n                        PaymentProcessorID: el.PaymentProcessorID,\r\n                        Amount: el.Amount,\r\n                        Date: el.Date,\r\n                        ShortName: el.ShortName,\r\n                        Loyalty: (copyCurrentSale.customer.ID != null ? el.Loyalty : 0),\r\n                        ServerTransactionID: el.ServerTransactionID, // makes sense for card pay\r\n                        ClientTransactionID: el.ClientTransactionID, // makes sense for card pay\r\n                        Reference: el.Reference\r\n                    };\r\n\r\n                    if (!!el.GiftCardID) {\r\n                        p.GiftCardID = el.GiftCardID;\r\n                    }\r\n\r\n                    if (!!el.Surcharge) {\r\n                        p.Surcharge = el.Surcharge;\r\n                    }\r\n\r\n                    currentSaleObject.Payments.push(p);\r\n                }\r\n            });\r\n\r\n            /*If sale has rounding add it too payment(chech if other payments exist is for adding rounding to sale or refund)*/\r\n            if (copyCurrentSale.CashRounding && copyCurrentSale.CashRounding !== 0 &&\r\n                currentSaleObject.Payments.length > 0 && copyCurrentSale.ReturnID == null) {\r\n                var roundingPaymentLine = {\r\n                    ID: uuid2.newguid(),\r\n                    PaymentProcessorID: null,\r\n                    Amount: helperService.DEARRound(copyCurrentSale.CashRounding, 2),\r\n                    Date: moment.utc(),\r\n                    ShortName: \"Rounding\"\r\n                };\r\n                currentSaleObject.Payments.push(roundingPaymentLine);\r\n            }\r\n\r\n            /*If sale has return id then its refund*/\r\n            if (copyCurrentSale.ReturnID !== null || isStandaloneReturn || isStandaloneExchange) {\r\n                //  currentSale.ID = currentSaleObject.OrderID;\r\n                //  currentSaleObject.RefundForOrderID = currentSaleObject.OrderID;\r\n                currentSaleObject.RefundForOrderID = copyCurrentSale.ID;\r\n                currentSaleObject.FinancialStatus = 'RETURN';\r\n                currentSaleObject.OperationID = uuid2.newguid();\r\n\r\n                if (isContinue !== true) {\r\n                    // orderid below will be used as posorderid as well\r\n                    currentSaleObject.OrderID = !!copyCurrentSale.newRefundOrder ? copyCurrentSale.newRefundOrder : uuid2.newguid();\r\n                } else {\r\n                    currentSaleObject.OrderID = copyCurrentSale.PosOrderID; // in the case or refund continue set order id as pos order id\r\n                    if (isStandaloneReturn || isStandaloneExchange)\r\n                        currentSaleObject.RefundForOrderID = copyCurrentSale.PosOrderID;\r\n                }\r\n\r\n                var existRefund = !!copyCurrentSale.Refunds && copyCurrentSale.Refunds.length > 0 ?\r\n                    copyCurrentSale.Refunds[0].RefundID : null;\r\n\r\n                var refundID = (isContinue === true || isStandaloneReturn === true || isStandaloneExchange === true || isPaymentStage === true) && !!existRefund ? existRefund : (!!newGuidValue ? newGuidValue : uuid2.newguid());\r\n\r\n                refund = {\r\n                    RefundID: refundID,\r\n                    Date: moment.utc(),\r\n                    Note: copyCurrentSale.Note,\r\n                    Lines: [],\r\n                    Payments: [],\r\n                    Surcharges: []\r\n                };\r\n\r\n                if (isStandaloneReturn || isStandaloneExchange) {\r\n                    refund.Note = \"Refund without receipt.\";\r\n                }\r\n\r\n                // this is to not duplicate refunds on next payment refund operation\r\n                if (isContinue !== true || !copyCurrentSale.Refunds || copyCurrentSale.Refunds.length == 0) {\r\n                    copyCurrentSale.Refunds = [{\r\n                        RefundID: refund.RefundID\r\n                    }]; // fake record\r\n                }\r\n\r\n                // taxesAmount = {};\r\n                // taxesAmountTotal = 0;\r\n\r\n                $.each(copyCurrentSale.CheckoutItems, function (idx, el) {\r\n\r\n                    var line = {\r\n                        ProductID: el.SaleType === 'customsale' ? null : el.ProductID,\r\n                        Quantity: el.return || isStandaloneReturn || isStandaloneExchange ? Math.abs(el.Count) : el.Count * -1,\r\n                        Price: Math.abs(el.PriceWithDiscount),\r\n                        TotalPerLine: that.DEARRound(Math.abs(el.PriceWithDiscount * el.Count), 2),\r\n                        //Price: Math.abs(el.Price),\r\n                        //TotalPerLine: Math.abs(el.Price * el.Count),\r\n                        Tax: Math.abs(that.DEARRound(el.Tax, taxPrecision)),\r\n                        TaxRuleID: el.TaxRuleID,\r\n                        CalculateTax: false,\r\n                        ImageID: el.ImageID,\r\n                        ProductType: el.ProductType,\r\n                        SerialNumber: el.SerialNumber,\r\n                        OverriddenPrice: Math.abs(el.Price),\r\n                        MissingInInvoice: el.MissingInInvoice\r\n                    };\r\n\r\n\r\n                    if (!!el.GiftCardCode)\r\n                        line.GiftCardCode = el.GiftCardCode;\r\n\r\n                    if (!!el.GiftCardExpirationDate)\r\n                        line.GiftCardExpirationDate = helperService.toDateFromDatepickerParameter(el.GiftCardExpirationDate);\r\n\r\n                    if (el.SaleType === 'customsale') {\r\n                        line.ProductName = el.Name;\r\n                    }\r\n\r\n                    refund.Lines.push(line);\r\n                });\r\n\r\n\r\n                if (!!copyCurrentSale.Surcharges && copyCurrentSale.Surcharges.length > 0) {\r\n\r\n                    $.each(currentSale.Surcharges, function (idx, surcharge) {\r\n                        var line = {\r\n                            Total: -1 * surcharge.CalculatedValue,\r\n                            Tax: -1 * surcharge.Tax,\r\n                            Name: surcharge.Name,\r\n                            Type: surcharge.Type,\r\n                            Value: surcharge.Value,\r\n                            SurchargeID: surcharge.SurchargeID,\r\n                            TaxRuleID: surcharge.TaxRuleID,\r\n                            PaymentRealAmount: surcharge.PaymentRealAmount,\r\n                            ServerTransactionID: surcharge.ServerTransactionID,\r\n                            ClientTransactionID: surcharge.ClientTransactionID,\r\n                            SaleServerTransactionID: surcharge.SaleServerTransactionID\r\n                        };\r\n\r\n                        if (surcharge.PaymentID)\r\n                            line.PaymentID = surcharge.PaymentID;\r\n\r\n                        if (surcharge.PaymentShortName)\r\n                            line.PaymentShortName = surcharge.PaymentShortName;\r\n\r\n                        refund.Surcharges.push(line);\r\n                    });\r\n\r\n                    currentSaleObject.Surcharges = []; // as we are refund/exchange, remove surcharges from the sale root\r\n                }\r\n\r\n                // payments in refund\r\n                var pms = [].concat(copyCurrentSale.Payments, currentSaleObject.Payments);\r\n\r\n                $.each(pms, function (idx, el) {\r\n                    //$.each(copyCurrentSale.Payments, function (idx, el) {\r\n                    var payment = {\r\n                        ID: el.ID,\r\n                        PaymentProcessorID: el.PaymentProcessorID,\r\n                        Amount: el.Amount < 0 || el.ShortName === 'Discount' ? Math.abs(el.Amount) : Math.abs(el.Amount) * -1,\r\n                        Date: el.Date,\r\n                        ShortName: el.ShortName,\r\n                        Loyalty: Math.abs(el.Loyalty),\r\n                        ServerTransactionID: el.ServerTransactionID, // makes sense for card pay\r\n                        ClientTransactionID: el.ClientTransactionID, // makes sense for card pay\r\n                        SaleServerTransactionID: el.SaleServerTransactionID,\r\n                        Reference: el.Reference\r\n                    };\r\n\r\n                    if (!!el.Surcharge) {\r\n                        payment.Surcharge = angular.copy(el.Surcharge);\r\n                        payment.Surcharge.CalculatedValue *= -1;\r\n                        payment.Surcharge.CalculatedValueWithTax *= -1;\r\n                        payment.Surcharge.Tax *= -1;\r\n                    }\r\n\r\n                    refund.Payments.push(payment);\r\n                });\r\n\r\n                currentSaleObject.Payments = currentSaleObject.Payments.filter(function (el) {\r\n                    return el.ShortName !== 'Discount';\r\n                });\r\n\r\n                /*If sale has rounding add it too payment(chech if other payments exist is for adding rounding to sale or refund)*/\r\n                var paymentsSum = 0;\r\n                $.each(copyCurrentSale.Payments, function (idx, el) {\r\n                    paymentsSum += Number(el.Amount);\r\n                });\r\n\r\n                if (copyCurrentSale.CashRounding && copyCurrentSale.CashRounding !== 0 && refund.Payments.length > 0) {\r\n                    var roundingPaymentLine = {\r\n                        ID: uuid2.newguid(),\r\n                        PaymentProcessorID: null,\r\n                        Amount: paymentsSum > 0 ? (helperService.DEARRound(copyCurrentSale.CashRounding, 2) * -1) : helperService.DEARRound(copyCurrentSale.CashRounding, 2),\r\n                        Date: moment.utc(),\r\n                        ShortName: \"Rounding\"\r\n                    };\r\n\r\n                    //if (isStandaloneReturn === true) {\r\n                    //    roundingPaymentLine.Amount = helperService.DEARRound(paymentsSum - copyCurrentSale.Total, 2);\r\n                    //}\r\n\r\n                    refund.Payments.push(roundingPaymentLine);\r\n                }\r\n\r\n                currentSaleObject.Refunds = [refund];\r\n            }\r\n\r\n            //$.each(copyCurrentSale.CheckoutItems, function (idx, el) {\r\n            //    var price = el.BasePrice - el.itemAppliedDiscount;\r\n            //    el.PriceWithDiscount = el.BasePrice - el.itemAppliedDiscount;\r\n            //    el.DiscountCoeff = 1;\r\n\r\n            //    if (copyCurrentSale.discountValue > 0) {\r\n            //        var discountCoeff = copyCurrentSale.Total / (copyCurrentSale.BaseTotal);\r\n            //        //el.BasePriceWithDiscount = that.DEARRound(el.BasePrice * discountCoeff, 4);\r\n            //        el.PriceWithDiscount = that.DEARRound(price * discountCoeff, 4);\r\n            //    }\r\n\r\n            //    if (price >= 0) {\r\n            //        el.Price = that.DEARRound(price, 4);\r\n            //        el.Amount = that.DEARRound(price * el.Count, 4);\r\n            //        el.Tax = that.DEARRound(el.Tax * copyCurrentSale.taxReduceCoeff, taxPrecision);\r\n            //    }\r\n            //});\r\n\r\n            return currentSaleObject;\r\n        };\r\n\r\n        /**\r\n         * This function calculates tax by sum, simple implementation\r\n         * @param {} taxObject\r\n         * @param {} total\r\n         * @returns {}\r\n         */\r\n        saleService.calculateTax = function (taxObject, total, isTaxInclusive) {\r\n            var tax = 0;\r\n            var taxPrecision = configService.taxCalculationMethod == 'Row Total' ? 2 : 4;\r\n            var taxTypeInclusive = isTaxInclusive === true ? true :\r\n                isTaxInclusive === false ? false :\r\n                configService.taxInclucive === 'True' ? true :\r\n                false;\r\n\r\n            if (taxTypeInclusive && parseFloat(taxObject.effectivePercentInclusive) > 0) {\r\n                var percent = 0;\r\n                percent = parseFloat(taxObject.effectivePercentInclusive);\r\n                tax = total * percent / 100;\r\n            } else if (parseFloat(taxObject.effectivePercentExclusive) > 0) {\r\n                var percent = 0;\r\n                percent = parseFloat(taxObject.effectivePercentExclusive);\r\n                tax = total * percent / 100;\r\n            }\r\n            tax = helperService.DEARRound(tax, taxPrecision);\r\n            return tax;\r\n        };\r\n\r\n        saleService.getTaxPercent = function (taxObject, isTaxInclusive) {\r\n            const taxTypeInclusive = isTaxInclusive === true ? true :\r\n                isTaxInclusive === false ? false :\r\n                configService.taxInclucive === 'True' ? true :\r\n                false;\r\n            if (taxTypeInclusive && parseFloat(taxObject.effectivePercentInclusive) > 0) {\r\n                return  parseFloat(taxObject.effectivePercentInclusive);\r\n            } else if (parseFloat(taxObject.effectivePercentExclusive) > 0) {\r\n                return parseFloat(taxObject.effectivePercentExclusive)\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n\r\n\r\n        /**\r\n         * This function calculates sub total sum of sale (without disount and tax(if it is excluded))\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.subTotalSum = function (arr, sale) {\r\n            var sum = 0;\r\n            var standAloneReturn = !!sale && sale.standAloneReturn === true;\r\n\r\n            if (arr)\r\n                $.each(arr, function (idx, el) {\r\n                    var isNegative = el.Price < 0;\r\n                    if (standAloneReturn) {\r\n                        //isNegative = false;\r\n                        el.sign = -1;\r\n                        el.itemDiscount = 0;\r\n                        el.BasePriceWithDiscount = el.BasePrice;\r\n                    }\r\n\r\n                    if (isNegative === false) {\r\n                        if (el.itemDiscount == null || el.itemDiscount == undefined)\r\n                            el.itemDiscount = 0;\r\n\r\n                        if (el.Count > 0) {\r\n                            sum += helperService.DEARRound(el.Amount, 2);\r\n                        }\r\n                    } else {\r\n                        //                    el.itemDiscount = 0;\r\n                        //                     sum += el.Count * (el.BasePrice + el.itemDiscount);\r\n                        ///  (el.sign && el.BasePriceWithDiscount < 0? el.sign : 1)) this is needed in case if product has negative BasePriceWithDiscount\r\n                        /// AND el.sign = -1; this happens when we making refund AND item was alredy refunded. so, value added to sum, should be negative\r\n                        sum += helperService.DEARRound(-el.Count * (el.BasePriceWithDiscount * (el.sign && el.BasePriceWithDiscount < 0 ? el.sign : 1)), 2);\r\n                    }\r\n                });\r\n\r\n            return sum;\r\n        };\r\n\r\n        //saleService.subTotalSumForReceipt = function (arr) {\r\n        //    var sum = 0;\r\n        //    if (arr)\r\n        //        $.each(arr, function (idx, el) {\r\n        //            if (el.Price >= 0) {\r\n        //                if (el.itemDiscount == null || el.itemDiscount == undefined)\r\n        //                    el.itemDiscount = 0;\r\n\r\n        //                if (el.Count > 0) {\r\n        //                    sum += el.Count * (el.BasePrice - el.itemDiscount);\r\n        //                }\r\n        //            }\r\n        //            else {\r\n        //                sum += el.Count * el.Price;\r\n        //            }\r\n        //        });\r\n\r\n        //    return sum;\r\n        //}\r\n\r\n        /**\r\n         * This function calculates total product line type discount\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.totalItemsDiscount = function (arr) {\r\n            var sum = 0;\r\n            if (arr)\r\n                $.each(arr, function (idx, el) {\r\n                    if (el.Count > 0) {\r\n                        sum += el.Count * (el.itemDiscount);\r\n                    }\r\n                });\r\n            return sum;\r\n        };\r\n\r\n        /**\r\n         * This function calculates total tax for sale as sum of each product tax\r\n         * @param {} item\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.calculateTotalTax = function (item, arr, isTaxInclusive) {\r\n            var taxPrecision = configService.taxCalculationMethod == 'Row Total' ? 2 : 4;\r\n            var tax = 0;\r\n            if (item)\r\n                $.each(arr, function (idx, el) {\r\n                    if (el.Count > 0) {\r\n                        var isNegative = el.Price < 0;\r\n                        var taxObject = el.Taxes;\r\n                        if (item.standAloneReturn === true) {\r\n                            isNegative = false;\r\n                            el.itemDiscount = 0;\r\n                            el.BasePriceWithDiscount = el.BasePrice;\r\n                        }\r\n\r\n                        if (isNegative === false)\r\n                            tax += helperService.DEARRound(saleService.calculateTax(taxObject, el.Count * (el.BasePrice - el.itemDiscount), isTaxInclusive), 2); // if use 4 this can differ from other calculations\r\n                        //                        tax += helperService.DEARRound(saleService.calculateTax(taxObject, el.Count * (el.BasePrice - el.itemDiscount), isTaxInclusive), taxPrecision);\r\n                        else\r\n                            tax += helperService.DEARRound(saleService.calculateTax(taxObject, -el.Count * el.BasePriceWithDiscount, isTaxInclusive), 2);\r\n                        //                        tax += helperService.DEARRound(saleService.calculateTax(taxObject, -el.Count * el.BasePriceWithDiscount, isTaxInclusive), taxPrecision);\r\n                    }\r\n                });\r\n            item.CalculatedTax = helperService.DEARRound(tax, taxPrecision);\r\n        };\r\n\r\n\r\n        saleService.isDiscountInvalid = false;\r\n        /**\r\n         * This function calculates total sum of sale\r\n         * @param {} item\r\n         * @returns {}\r\n         * excludeCalculatedSurcharges == true if not count surcharges that are already calculated into total sum\r\n         */\r\n        saleService.totalSum = function (item, isTaxInclusive, excludeCalculatedSurcharges) {\r\n            if (helperService.showNewCheckoutUI(item)) return 0;\r\n\r\n            saleService.isDiscountInvalid = false;\r\n\r\n            //        var posTaxInclucive = configService.taxInclucive === \"True\";\r\n            var posTaxInclucive = isTaxInclusive === true ? true :\r\n                isTaxInclusive === false ? false :\r\n                configService.taxInclucive === 'True' ? true :\r\n                false;\r\n\r\n\r\n            if (item) {\r\n                var taxPrecision = configService.taxCalculationMethod == 'Row Total' ? 2 : 4;\r\n                var discount = item.Discount;\r\n                saleService.calculateTotalTax(item, item.CheckoutItems, posTaxInclucive);\r\n\r\n                //if tax is include, need to remove tax part from sub total, to calculate discount coeff\r\n                var total = saleService.subTotalSum(item.CheckoutItems, item);\r\n\r\n                var subSum = posTaxInclucive ? (total - item.CalculatedTax) : total;\r\n                // coeff is not required because all calculations does nothing\r\n                // and in exchange case subSum can be 0, as well as CalculatedTax\r\n                // var coeff = item.CalculatedTax / subSum;\r\n\r\n                //sum with tax\r\n                item.BaseTotal = total + (posTaxInclucive ? 0 : item.CalculatedTax);\r\n\r\n                if (item.isDiscountPercent) {\r\n                    discount = helperService.DEARRound(total / 100 * item.Discount, 2);\r\n                } else {\r\n                    discount = helperService.DEARRound(item.Discount, 2);\r\n                }\r\n\r\n                if (total <= 0)\r\n                    discount = 0;\r\n\r\n                item.discountValue = discount;\r\n                item.DiscountTax = helperService.DEARRound(item.CalculatedTax / total * discount * -1, taxPrecision);\r\n                if (!item.DiscountTax)\r\n                    item.DiscountTax = 0;\r\n                // calculateDiscountTax(item);\r\n\r\n                if (posTaxInclucive) {\r\n                    item.taxReduceCoeff = total;\r\n                    //if tax is include, this is algoritm of tax calculation with discount\r\n\r\n                    // the line below is nonsence, because is equal to innitial CalculatedTax\r\n                    // item.CalculatedTax = total / (1 + coeff) * coeff;\r\n\r\n                    // surcharge tax\r\n                    var stax = excludeCalculatedSurcharges === true || (!!item.Surcharges && item.Surcharges.length > 0) ?\r\n                        saleService.surchargeTaxSum(item) :\r\n                        (!!item.SurchargeToRefund && total < 0) ? -item.SurchargeTaxToRefund : 0;\r\n\r\n                    item.CalculatedTax = helperService.DEARRound(item.CalculatedTax + item.DiscountTax + stax, taxPrecision);\r\n\r\n                    if (!item.taxReduceCoeff)\r\n                        item.taxReduceCoeff = 1;\r\n                    else\r\n                        item.taxReduceCoeff = (total - discount) / item.taxReduceCoeff;\r\n\r\n                    if (!item.CalculatedTax) {\r\n                        item.taxReduceCoeff = 1;\r\n                        item.CalculatedTax = 0;\r\n                    }\r\n\r\n                    // return total sum to pay\r\n                    if (!!discount && (helperService.DEARRound(total, 2) - discount) < 0)\r\n                        saleService.isDiscountInvalid = true;\r\n\r\n                    var ssum = excludeCalculatedSurcharges === true || (!!item.Surcharges && item.Surcharges.length > 0) ?\r\n                        saleService.surchargeSum(item) :\r\n                        (!!item.SurchargeToRefund && total < 0) ? -item.SurchargeToRefund : 0;\r\n\r\n                    return helperService.DEARRound(total, 2) - discount + helperService.DEARRound(ssum, 2);\r\n                } else {\r\n                    //if (!coeff) {\r\n                    //    coeff = 0;\r\n                    //}\r\n                    item.taxReduceCoeff = total + item.CalculatedTax;\r\n\r\n                    //if tax is exclude, this is algoritm of tax calculation with discount\r\n                    // the line below is nonsence because is equal to initial CalculatedTax\r\n                    // item.CalculatedTax = total * coeff;\r\n                    var stax = excludeCalculatedSurcharges === true || (!!item.Surcharges && item.Surcharges.length > 0) ?\r\n                        saleService.surchargeTaxSum(item) :\r\n                        (!!item.SurchargeToRefund && total < 0) ? -item.SurchargeTaxToRefund : 0;\r\n\r\n                    item.CalculatedTax = helperService.DEARRound(item.CalculatedTax + item.DiscountTax + stax, taxPrecision);\r\n\r\n                    if (!item.taxReduceCoeff)\r\n                        item.taxReduceCoeff = 1;\r\n                    else\r\n                        item.taxReduceCoeff = (total - discount + item.CalculatedTax) / item.taxReduceCoeff;\r\n\r\n                    if (!item.taxReduceCoeff) {\r\n                        item.taxReduceCoeff = 1;\r\n                    }\r\n\r\n                    // return total sum to pay\r\n                    if (!!discount && (helperService.DEARRound(total, 2) - discount + helperService.DEARRound(item.CalculatedTax, 2)) < 0)\r\n                        saleService.isDiscountInvalid = true;\r\n\r\n                    var ssum = excludeCalculatedSurcharges === true || (!!item.Surcharges && item.Surcharges.length > 0) ?\r\n                        saleService.surchargeSum(item) :\r\n                        (!!item.SurchargeToRefund && total < 0) ? -item.SurchargeToRefund : 0;\r\n\r\n                    //if (ssum < 0)\r\n                    //    ssum -= stax;\r\n\r\n                    return helperService.DEARRound(total, 2) - discount +\r\n                        helperService.DEARRound(item.CalculatedTax, 2) +\r\n                        helperService.DEARRound(ssum, 2);\r\n                }\r\n            }\r\n            return 0;\r\n        };\r\n\r\n        /**\r\n         * This function calculates total sum for products with taxes\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.totalSumWithTax = function (arr) {\r\n            var value = 0;\r\n            $.each(arr, function (idx, el) {\r\n                if (el.Count > 0) {\r\n                    value += el.PriceWithTax * el.Count;\r\n                }\r\n            });\r\n            return value;\r\n        };\r\n\r\n        /**\r\n         * Items total EXCLUDING card surcharges and their tax.\r\n         */\r\n        saleService.itemsTotalExSurcharge = function (sale) {\r\n            if (!helperService.showNewCheckoutUI(sale)) {\r\n                return helperService.DEARRound(saleService.totalSum(sale, sale.TaxInclusive, true), 2);\r\n            }\r\n\r\n            var itemsTotal = helperService.DEARRound((sale.Total || 0), 2);\r\n            var surcharge = 0, surchargeTax = 0;\r\n            var payments = (sale && sale.Payments) || [];\r\n            for (var i = 0; i < payments.length; i++) {\r\n                var pSurcharge = payments[i] && (payments[i].InitialSurcharge || payments[i].Surcharge);\r\n                if (pSurcharge) {\r\n                    surcharge    += (pSurcharge.CalculatedValue || 0);\r\n                    surchargeTax += (pSurcharge.Tax || 0);\r\n                }\r\n            }\r\n\r\n            var itemsOnly = helperService.DEARRound(itemsTotal - surcharge - (sale.TaxInclusive ? 0 : surchargeTax), 2);\r\n            return Math.abs(itemsOnly) < 0.005 ? 0 : itemsOnly;\r\n        };\r\n\r\n        /**\r\n         * Sum of payments EXCLUDING surcharge (and its tax), using existing per-payment metadata.\r\n         */\r\n        function paymentsSumExSurcharge(payments) {\r\n            payments = payments || [];\r\n            var sum = 0;\r\n            for (var i = 0; i < payments.length; i++) {\r\n                sum += saleService.getAmountWithoutSurcharge(payments[i]);\r\n            }\r\n            return sum;\r\n        }\r\n\r\n        /**\r\n         * Single source of truth for Remaining/Due:\r\n         *   Remaining = Items total (no surcharge) – Payments (no surcharge)\r\n         */\r\n        saleService.calcRemainingDue = function (sale) {\r\n            var items = saleService.itemsTotalExSurcharge(sale);\r\n            var paidEx = helperService.DEARRound(paymentsSumExSurcharge(sale.Payments || []), 2);\r\n            var remaining = helperService.DEARRound(items - paidEx, 2);\r\n            return Math.abs(remaining) < 0.005 ? 0 : remaining;\r\n        };\r\n\r\n        /**\r\n         * This function calculates amount of loyalty points wich customer earns with current sale\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.totalLoyaltyPoints = function (arr) {\r\n            var value = 0;\r\n            $.each(arr, function (idx, el) {\r\n                if (el.Count > 0) {\r\n                    value += el.LoyaltyPoints;\r\n                }\r\n            });\r\n            return value;\r\n        };\r\n\r\n        saleService.totalPaymentsLoyaltyPoints = function (sale) {\r\n            var value = 0;\r\n            $.each(sale.Payments, function (idx, el) {\r\n                if (!!el.Loyalty && !!el.Amount)\r\n                    value += el.Loyalty;\r\n            });\r\n            return value;\r\n        };\r\n\r\n        /**\r\n         * This function calculates amount of loyalty points wich will be removed from customer couse of refund(can be return part of earned loyalty points)\r\n         * @param {} earnLoyalty\r\n         * @param {} item\r\n         * @param {} Amount\r\n         * @returns {}\r\n         */\r\n        // saleService.calculateLoaylty = function (earnLoyalty, item, Amount) {\r\n        //     var loyalty = 0;\r\n        //     if (earnLoyalty === true && configService.enableLoyalty === true /*&& $scope.currentSale.customer.EnableLoyaltyPoints === true*/) {\r\n        //         var totalLoyalty = item.LoyaltyPointsTotal;\r\n        //         var totalAmount = item.TotalSumWithTax;\r\n        //         var discount = helperService.DEARRound(item.Discount, 2);\r\n        //         var loyaltyRatio = totalLoyalty * (totalAmount - discount) / totalAmount;\r\n        //         loyalty = helperService.DEARRound(loyaltyRatio * Amount / (totalAmount - discount), 2);\r\n        //         item.LoyaltyPoints += loyalty;\r\n        //     }\r\n\r\n        //     item.lastLoyaltyUpdateAmount = loyalty;\r\n        //     return loyalty;\r\n        // }\r\n\r\n        /*\r\n         Calculates proposed loyalty based on loyalty ratio for each\r\n         item in the checkout. So checkout items should contain loyalty ratio\r\n         result sign automatically depends on the total payments sign\r\n         sale - current sale with correct checkout items\r\n        */\r\n        saleService.calculateLoyaltyEx = function (sale, Amount) {\r\n            if (configService.enableLoyalty !== true) return 0;\r\n\r\n            var checkoutItems = sale.CheckoutItems;\r\n\r\n            // calculate all payments sum that client should really pay\r\n            // for current sale state Sum can be <0 if system should return\r\n            // money to customer\r\n            // also each product can hase its own layalty ratio\r\n            // it means that even if there is no money to return/pay == 0,\r\n            // loylaty change can be != 0\r\n            var total = Amount;\r\n\r\n            // now calculate ratio of each product in checkout\r\n            // positive amount - earn loyalty\r\n            // negative amount - return loyalty\r\n\r\n            var sumRefund = 0;\r\n            var sumSale = 0;\r\n\r\n            // get total sum for new items\r\n            // do the same for refund items\r\n            $.each(checkoutItems, function (idx, el) {\r\n                if (el.Amount > 0) sumSale += el.Amount;\r\n                else if (el.Amount < 0) sumRefund += el.Amount;\r\n            });\r\n\r\n            // set items layout ratio per single unit (this is why it's divided by Count)\r\n            $.each(checkoutItems, function (idx, el) {\r\n                if (el.Amount > 0 && sumSale != 0)\r\n                    el.LoyaltyRatio = Math.abs(el.LoyaltyPointsEarning * el.Amount / el.Count / sumSale); // absolute loyalty ratio\r\n                else if (el.Amount < 0 && sumRefund != 0)\r\n                    el.LoyaltyRatio = Math.abs(el.LoyaltyPointsEarning * el.Amount / el.Count / sumRefund); // absolute loyalty ratio\r\n                else el.LoyaltyRatio = 0;\r\n            });\r\n\r\n            var currentLoyaltySum = 0;\r\n\r\n            // current refund|pay amount\r\n            var separatePaySum = 0;\r\n            var separateReturnSum = 0;\r\n            $.each(checkoutItems, function (idx, el) {\r\n                if (el.Amount > 0) separatePaySum += Math.abs(el.Amount);\r\n                else if (el.Amount < 0) {\r\n                    separateReturnSum += Math.abs(el.Amount);\r\n                }\r\n            });\r\n\r\n            // if total sum >0 it means we have direct sale or exchange with extra pay\r\n            // so total sum to use in loyalty is: full refund + total\r\n            if (total >= 0) {\r\n\r\n                // calc loyalty earning\r\n                $.each(checkoutItems, function (idx, el) {\r\n                    if (el.Amount > 0) // earning\r\n                        currentLoyaltySum += el.LoyaltyRatio * el.Count * (separateReturnSum + total);\r\n                    else if (el.Amount < 0) // returning /// separateReturnSum should be negative otherwise we will receive loyalty for exchanged amount twice\r\n                        currentLoyaltySum -= el.LoyaltyRatio * el.Count * separateReturnSum;\r\n                });\r\n            } else {\r\n                // in this case we refund difference\r\n                // calc loyalty earning\r\n                $.each(checkoutItems, function (idx, el) {\r\n                    if (el.Amount > 0) // earning\r\n                        currentLoyaltySum += el.LoyaltyRatio * el.Count * separatePaySum;\r\n                    else if (el.Amount < 0) // returning\r\n                        currentLoyaltySum -= Math.abs(el.LoyaltyRatio * el.Count * (separatePaySum + Math.abs(total)));\r\n                });\r\n            }\r\n\r\n            return currentLoyaltySum;\r\n        };\r\n\r\n\r\n        saleService.totalLoyaltyRefunds = function (sale) {\r\n            var value = 0;\r\n\r\n            if (sale.Refunds && sale.Refunds[0].Payments) {\r\n                $.each(sale.Refunds[0].Payments, function (idx, el) {\r\n                    if (el.ShortName === 'loyalty' && !!el.Amount)\r\n                        value += el.Amount;\r\n                });\r\n            }\r\n\r\n            return value;\r\n        };\r\n\r\n        /*\r\n          This function converts local sale object to receipt model\r\n          @param {} currentSale\r\n          @param {} receiptSaleModel\r\n          @param {} sumToPayLeft\r\n          @param {} currency\r\n          @returns {}\r\n         */\r\n        saleService.updateReceipt = function (currentSale, receiptSaleModel, sumToPayLeft, currency, taxInclusive) {\r\n            var isStandaloneReturn = currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = currentSale.standAloneExchange === true;\r\n            var isRefund = !!currentSale.Refunds && currentSale.Refunds.length > 0;\r\n            var total = saleService.totalSum(currentSale, taxInclusive) < 0;\r\n\r\n            if (currentSale.customer.ID == null) {\r\n                receiptSaleModel.Customer = [];\r\n            } else {\r\n\r\n                if (currentSale.returnLoyaltyPoints === false) {\r\n\r\n                    receiptSaleModel.Customer = [{\r\n                        CustomerName: currentSale.customer.Name,\r\n                        CustomerLoyaltyPoints: helperService.applyCurrency(currentSale.CustomerLoyaltyPoints, currency),\r\n                        SaleLoyaltyPoints: 0,\r\n                        CustomerLoyaltyPointsUsed: 0,\r\n                        TotalLoyaltyPoints: helperService.applyCurrency(currentSale.CustomerLoyaltyPoints, currency)\r\n                    }];\r\n\r\n                    // in the case of external LL\r\n                    if (currentSale.Customer.LLEmail && loyaltyService.loyaltyEnabled) {\r\n                        if (currentSale.Customer.LLCustomerID != '0' && !!currentSale.Customer.LLCustomerID) {\r\n                            receiptSaleModel.Customer.CustomerLoyaltyPoints = currentSale.Customer.LLInitialBalance;\r\n                            receiptSaleModel.Customer.TotalLoyaltyPoints = currentSale.Customer.LLInitialBalance;\r\n                            receiptSaleModel.Customer.LLDiscountCode = currentSale.Customer.LLDiscountCode;\r\n                        } else {\r\n                            receiptSaleModel.Customer.CustomerLoyaltyPoints = \"\";\r\n                            receiptSaleModel.Customer.TotalLoyaltyPoints = \"\";\r\n                            receiptSaleModel.Customer.LLDiscountCode = \"\";\r\n                        }\r\n                    }\r\n                } else {\r\n\r\n                    var lpSum = currentSale.LoyaltyPoints;\r\n                    if (isRefund)\r\n                        lpSum = saleService.totalPaymentsLoyaltyPoints(currentSale);\r\n\r\n                    var usedL = isRefund ? -saleService.totalLoyaltyRefunds(currentSale) : currentSale.CustomerLoyaltyPointsUsed;\r\n                    var calcCustomerLoyaltyPoints = currentSale.CustomerLoyaltyPoints; //isRefund ? (currentSale.CustomerLoyaltyPoints - currentSale.LoyaltyPointsTotal) : currentSale.CustomerLoyaltyPoints;\r\n                    receiptSaleModel.Customer = [{\r\n                        CustomerName: currentSale.customer.Name,\r\n                        CustomerLoyaltyPoints: helperService.applyCurrency(calcCustomerLoyaltyPoints, currency),\r\n                        SaleLoyaltyPoints: helperService.applyCurrency(lpSum, currency),\r\n                        CustomerLoyaltyPointsUsed: helperService.applyCurrency(usedL, currency),\r\n                        TotalLoyaltyPoints: helperService.applyCurrency(calcCustomerLoyaltyPoints - usedL + lpSum, currency)\r\n                    }];\r\n\r\n                    // in the case of external LL\r\n                    if (currentSale.customer && !currentSale.Customer) {\r\n                        currentSale.Customer = currentSale.customer;\r\n                    }\r\n\r\n                    if (currentSale.Customer.LLEmail && loyaltyService.loyaltyEnabled) {\r\n                        if (currentSale.Customer.LLCustomerID != '0' && !!currentSale.Customer.LLCustomerID) {\r\n                            receiptSaleModel.Customer.CustomerLoyaltyPoints = currentSale.Customer.LLInitialBalance;\r\n                            receiptSaleModel.Customer.TotalLoyaltyPoints = currentSale.Customer.LLInitialBalance;\r\n                            receiptSaleModel.Customer.LLDiscountCode = currentSale.Customer.LLDiscountCode;\r\n                        } else {\r\n                            receiptSaleModel.Customer.CustomerLoyaltyPoints = \"\";\r\n                            receiptSaleModel.Customer.TotalLoyaltyPoints = \"\";\r\n                            receiptSaleModel.Customer.LLDiscountCode = \"\";\r\n                        }\r\n                    }\r\n\r\n                }\r\n\r\n                // append email and phones\r\n                if (!!currentSale.customer.Contacts && currentSale.customer.Contacts.length > 0) {\r\n                    var cnts = currentSale.customer.Contacts.filter(function (c) {\r\n                        return c.Default === true;\r\n                    });\r\n                    if (cnts.length === 0)\r\n                        cnts = currentSale.customer.Contacts;\r\n                    var cnt = cnts[0];\r\n                    receiptSaleModel.Customer[0].Email = cnt.Email;\r\n                    receiptSaleModel.Customer[0].Phone = cnt.Phone;\r\n                    receiptSaleModel.Customer[0].MobilePhone = cnt.MobilePhone;\r\n                }\r\n\r\n                // append addresses\r\n                // Check if sale address available else add customer address\r\n                if (sale.CustomerShippingAddressLine1) {\r\n                    receiptSaleModel.Customer[0].City = sale.CustomerShippingCity;\r\n                    receiptSaleModel.Customer[0].Country = sale.CustomerShippingCountry;\r\n                    receiptSaleModel.Customer[0].Line1 = sale.CustomerShippingAddressLine1;\r\n                    receiptSaleModel.Customer[0].Line2 = sale.CustomerShippingAddressLine2;\r\n                    receiptSaleModel.Customer[0].Postcode = sale.CustomerShippingZip;\r\n                    receiptSaleModel.Customer[0].State = sale.CustomerShippingProvince;\r\n                } else if (!!currentSale.customer.Addresses && currentSale.customer.Addresses.length > 0) {\r\n                    var caddrs = Enumerable.from(currentSale.customer.Addresses).where(function (x) {\r\n                            return x.Type === AddressType.Shipping\r\n                        })\r\n                        .orderByDescending(function (x) {\r\n                            return x.DefaultForType;\r\n                        }).toArray();\r\n                    if (caddrs.length === 0)\r\n                        caddrs = currentSale.customer.Addresses;\r\n                    var caddr = caddrs[0];\r\n\r\n                    if (!!caddr.City || !!caddr.Country || !!caddr.Line1 || !!caddr.Line2 || !!caddr.Postcode || !!caddr.State) {\r\n\r\n                        receiptSaleModel.Customer[0].City = caddr.City;\r\n                        receiptSaleModel.Customer[0].Country = caddr.Country;\r\n                        receiptSaleModel.Customer[0].Line1 = caddr.Line1;\r\n                        receiptSaleModel.Customer[0].Line2 = caddr.Line2;\r\n                        receiptSaleModel.Customer[0].Postcode = caddr.Postcode;\r\n                        receiptSaleModel.Customer[0].State = caddr.State;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (typeof currentSale.salesRepresentative === \"undefined\" ||\r\n                currentSale.salesRepresentative === null ||\r\n                currentSale.salesRepresentative.ID == null) {\r\n                receiptSaleModel.SalesRepresentative = [];\r\n            } else {\r\n                receiptSaleModel.SalesRepresentative = [{\r\n                    SalesRepresentativeName: currentSale.salesRepresentative.Name\r\n                }];\r\n            }\r\n\r\n\r\n            var receiptNumber =\r\n                currentSale.OrderNumber;\r\n\r\n            receiptSaleModel.ReceiptNumber = receiptNumber;\r\n            receiptSaleModel.Barcode = currentSale.Barcode;\r\n\r\n            receiptSaleModel.CheckoutProductCount = currentSale.CheckoutItems.length;\r\n            receiptSaleModel.Date = currentSale.Date;\r\n            receiptSaleModel.Time = '';\r\n            receiptSaleModel.OutletName = configService.lastOutlet;\r\n            receiptSaleModel.RegistryName = configService.lastRegistry;\r\n            receiptSaleModel.SubTotal = helperService.applyCurrency(saleService.subTotalSum(currentSale.CheckoutItems, currentSale), currency);\r\n            receiptSaleModel.Discount = helperService.applyCurrency(currentSale.discountValue, currency);\r\n            receiptSaleModel.Total = helperService.applyCurrency(saleService.totalSum(currentSale, taxInclusive), currency);\r\n            receiptSaleModel.DiscountPercentage = `${helperService.DEARRound((sale.DiscountValue / sale.SubTotal) * 100, 2).toFixed(2)}%`;\r\n            //            receiptSaleModel.Balance = helperService.applyCurrency(sumToPayLeft, currency);\r\n            receiptSaleModel.Balance = helperService.applyCurrency(currentSale.Balance, currency);\r\n\r\n            var totalTax = currentSale.CalculatedTax;\r\n            //totalTax += saleService.surchargeTaxSum(currentSale, taxInclusive);\r\n\r\n            receiptSaleModel.CalculatedTax = helperService.applyCurrency(totalTax, currency);\r\n\r\n            receiptSaleModel.Change = helperService.applyCurrency(helperService.DEARRound(currentSale.CashChangeAmount, 6), currency);\r\n            if (currentSale.comment) {\r\n                receiptSaleModel.Notes = [{\r\n                    SalesNote: currentSale.comment\r\n                }];\r\n            } else {\r\n                receiptSaleModel.Notes = [];\r\n            }\r\n\r\n\r\n            receiptSaleModel.CheckoutProducts = [];\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                var isNegative = el.BasePrice < 0;\r\n                var price = 0;\r\n                var amount = 0;\r\n\r\n                if (isNegative == false) {\r\n                    if (el.BasePrice < el.BasePriceWithDiscount || el.BasePrice === 0) {\r\n                        price = el.BasePriceWithDiscount;\r\n                        amount = helperService.DEARRound(el.BasePriceWithDiscount * el.Count, 4);\r\n                    } else {\r\n                        price = el.BasePrice;\r\n                        amount = helperService.DEARRound(el.BasePrice * el.Count, 4);\r\n                    }\r\n                } else {\r\n                    if (isStandaloneReturn !== true && isStandaloneExchange !== true) {\r\n                        price = -el.BasePriceWithDiscount;\r\n                        amount = -el.Count * el.BasePriceWithDiscount;\r\n                    } else {\r\n                        price = el.BasePriceWithDiscount;\r\n                        amount = el.Count * el.BasePriceWithDiscount;\r\n                    }\r\n                }\r\n\r\n                price = helperService.applyCurrency(price, currency);\r\n                amount = helperService.applyCurrency(amount, currency);\r\n\r\n                receiptSaleModel.CheckoutProducts.push({\r\n                    ProductCount: el.Count,\r\n                    ProductName: el.Name,\r\n                    ProductAmount: el.BasePrice < 0 && el.Amount == 0 ? \"-\" + amount : amount,\r\n                    ProductPrice: el.BasePrice < 0 && el.Price == 0 ? \"-\" + price : price,\r\n                    ProductSku: el.Sku,\r\n                    ProductID: el.ProductID,\r\n                    ProductBarCode: el.BarCode,\r\n                    ProductDiscount: el.Price >= 0 ? (el.itemDiscount > 0 ? \"-\" + helperService.applyCurrency(el.itemDiscount * el.Count, currency) :\r\n                        el.itemAppliedDiscount && el.itemAppliedDiscount > 0 ? \"-\" + helperService.applyCurrency(el.itemAppliedDiscount * el.Count, currency) : null) : null,\r\n                    ProductShortDescription: el.ProductShortDescription,\r\n                    ProductSerialNumber: el.SerialNumber,\r\n                    AdditionalAttribute1: el.CF1,\r\n                    AdditionalAttribute2: el.CF2,\r\n                    AdditionalAttribute3: el.CF3,\r\n                    AdditionalAttribute4: el.CF4,\r\n                    AdditionalAttribute5: el.CF5,\r\n                    AdditionalAttribute6: el.CF6,\r\n                    AdditionalAttribute7: el.CF7,\r\n                    AdditionalAttribute8: el.CF8,\r\n                    AdditionalAttribute9: el.CF9,\r\n                    AdditionalAttribute10: el.CF10,\r\n                    ProductDiscountPercentage : (el.ItemDiscount && el.ItemDiscount > 0 && price > 0) ? `${helperService.DEARRound((el.ItemDiscount / price) * 100, 2).toFixed(2)}%` : null\r\n                });\r\n            });\r\n\r\n            receiptSaleModel.Payments = [];\r\n\r\n            //Rounding displays as path of payments and doesnt have special place in receipt template\r\n            if (currentSale.CashRounding && currentSale.CashRounding !== 0) {\r\n                var rounding = {\r\n                    PaymentTypeName: gettextCatalog.getString(\"Payment (cash rounding)\"),\r\n                    PaymentAmount: helperService.applyCurrency(currentSale.CashRounding, currency)\r\n                };\r\n                receiptSaleModel.Payments.push(rounding);\r\n            }\r\n\r\n            var total = 0;\r\n            $.each(currentSale.Payments, function (idx, el) {\r\n                if (!!el.Amount) { // skip zero payments. Zero payments are required for SIM to correctly process roundings\r\n                    total += el.Amount;\r\n                    receiptSaleModel.Payments.push({\r\n                        PaymentTypeName: el.PaymentTypeName,\r\n                        PaymentAmount: helperService.applyCurrency(el.Amount, currency),\r\n                        PaymentDate: !!el.Date ? helperService.getFormatedDate(el.Date) : ''\r\n                    });\r\n                }\r\n            });\r\n\r\n            receiptSaleModel.Surcharges = [];\r\n            if (!!currentSale.Surcharges && currentSale.Surcharges.length > 0) {\r\n                receiptSaleModel.Surcharges.push({\r\n                    Surcharge: helperService.applyCurrency(helperService.DEARRound(saleService.surchargeSum(currentSale), 2), currency)\r\n                });\r\n            }\r\n\r\n            receiptSaleModel.Received = helperService.applyCurrency(helperService.DEARRound(currentSale.CashChangeAmount + total, 4), currency);\r\n\r\n            barcodeService.clearBarcodes();\r\n\r\n            if ($(\"canvas.barcode\").is(\"#code93\")) {\r\n                barcodeService.initBarcode(\"code93\", \"code93\", receiptSaleModel.Barcode.toUpperCase(), receiptSaleModel.Barcode.toUpperCase(), \"includetext includecheck\");\r\n            }\r\n            if ($(\"canvas.barcode\").is(\"#code128\")) {\r\n                barcodeService.initBarcode(\"code128\", \"code128\", receiptSaleModel.Barcode, receiptSaleModel.Barcode, \"includetext\");\r\n            }\r\n\r\n            /* /generating barcodes for reciept */\r\n\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('receipt.template', $('.receipt-template'));\r\n\r\n                /* generating barcodes for product */\r\n                $(\"canvas.product_barcode\").each(function (i, elem) {\r\n                    var type = $(this).attr(\"type\");\r\n                    var id = $(this).attr(\"id\");\r\n                    var text = $(this).attr(\"b_value\");\r\n\r\n                    barcodeService.initBarcode(id, type, text, text, \"includetext\");\r\n                });\r\n                /* /generating barcodes for product */\r\n\r\n                /* Draw generated barcodes */\r\n                barcodeService.renderBarcodes();\r\n            });\r\n\r\n            // common approach for terminal receipts all of them will be printed one by one and then main receipt\r\n            receiptSaleModel.VantivTerminalReceipts = [];\r\n            receiptSaleModel.TyroTerminalReceipts = [];\r\n            receiptSaleModel.LinklyTerminalReceipts = [];\r\n\r\n            saleService.fillTransactionData(currentSale, receiptSaleModel, currency);\r\n        };\r\n\r\n        saleService.fillTransactionData = function (currentSale, receiptSaleModel, currency) {\r\n            var cfg = configService.getCardPaymentSettings();\r\n\r\n            var printMerchantCopy = !!cfg && cfg.printTriPOSMerchantReceipt === true;\r\n\r\n            // check if vaniv data exists\r\n            angular.forEach(currentSale.Payments, function (p) {\r\n                if (!!p.TransactionMetaData) {\r\n\r\n                    switch (cardPayService.detectProvider(p.TransactionMetaData)) {\r\n                        case 'triPOSReaderProvider':\r\n                            var v = receiptService.fillVantivTransactionData(p.TransactionMetaData, currency);\r\n                            if (!!v) {\r\n                                receiptSaleModel.VantivTerminalReceipts.push(v);\r\n                                if (printMerchantCopy === true)\r\n                                    // create one more element instead of push the same twice to prevent angular error\r\n                                    receiptSaleModel.VantivTerminalReceipts.push(\r\n                                        receiptService.fillVantivTransactionData(p.TransactionMetaData, currency));\r\n                            }\r\n                            break;\r\n\r\n                        case 'tyroReaderProvider':\r\n                            var v = saleService.fillTyroTransactionData(p.TransactionMetaData, true);\r\n                            if (!!v) {\r\n                                receiptSaleModel.TyroTerminalReceipts.push(v);\r\n                            }\r\n                            var v = saleService.fillTyroTransactionData(p.TransactionMetaData, false);\r\n                            if (!!v) {\r\n                                receiptSaleModel.TyroTerminalReceipts.push(v);\r\n                            }\r\n\r\n                            break;\r\n                        case 'linklyPaymentReaderProvider':\r\n                            var v = saleService.fillLinklyPaymentTransactionData(p.TransactionMetaData, true);\r\n                            if (!!v) {\r\n                                receiptSaleModel.LinklyTerminalReceipts.push(v);\r\n                            }\r\n                            var v = saleService.fillLinklyPaymentTransactionData(p.TransactionMetaData, false);\r\n                            if (!!v) {\r\n                                receiptSaleModel.LinklyTerminalReceipts.push(v);\r\n                            }\r\n    \r\n                            break;\r\n                    }\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.fillTyroTransactionData = function (transactionData, isMerchant) {\r\n            var s = !!transactionData.merchantReceipt && isMerchant ? transactionData.merchantReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />') :\r\n                !!transactionData.customerReceipt && !isMerchant ? transactionData.customerReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />') : null;\r\n            if (!s)\r\n                return null;\r\n\r\n            if (isMerchant)\r\n                return {\r\n                    MerchantReceipt: $sce.trustAsHtml('<pre style=\"background-color: unset;border: none;\">' + s + '</pre>')\r\n                };\r\n            else\r\n                return {\r\n                    CustomerReceipt: $sce.trustAsHtml('<pre style=\"background-color: unset;border: none;\">' + s + '</pre>')\r\n                };\r\n        };\r\n\r\n        saleService.fillLinklyPaymentTransactionData = function (transactionData, isMerchant) {\r\n            var s = !!transactionData.merchantReceipt && isMerchant ? transactionData.merchantReceipt.replaceAll(',', '<br />') :\r\n                !!transactionData.customerReceipt && !isMerchant ? transactionData.customerReceipt.replaceAll(',', '<br />') : null;\r\n            if (!s)\r\n                return null;\r\n\r\n            if (isMerchant)\r\n                return {\r\n                    MerchantReceipt: $sce.trustAsHtml('<pre style=\"background-color: unset;border: none;\">' + s + '</pre>')\r\n                };\r\n            else\r\n                return {\r\n                    CustomerReceipt: $sce.trustAsHtml('<pre style=\"background-color: unset;border: none;\">' + s + '</pre>')\r\n                };\r\n        };\r\n\r\n        /**\r\n         * Loads  pos discounts into localdb and temp array\r\n         * @returns {}\r\n         */\r\n\r\n        var productDeals = [];\r\n        saleService.getPosDiscounts = function () {\r\n            var provider = configService.isOnline ? remoteRequestProvider : localDBProvider;\r\n            var pr = provider.getPosDiscounts();\r\n\r\n            if (configService.isOnline && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                pr = pr.then(function (resp) {\r\n\r\n                    // var encoded = atob(resp.data.Discounts);\r\n\r\n                    // var objStr = pako.inflate(encoded,\r\n                    //     { to: 'string' });\r\n\r\n                    // var restored = JSON.parse(objStr);\r\n\r\n                    return helperService.unpack(saleService, resp.data.Discounts)\r\n                        .then(function (restored) {\r\n                            productDeals = restored;\r\n                            productDeals = getPreparedDeals();\r\n                            return localDBProvider.refreshPosDiscounts(restored);\r\n                        });\r\n\r\n                    //     productDeals = restored;\r\n                    //     productDeals = getPreparedDeals();\r\n                    // return localDBProvider.refreshPosDiscounts(restored);\r\n                });\r\n            } else {\r\n                pr = pr.then(function (resp) {\r\n                    if (resp.data) {\r\n                        const restored = unpackArray(resp.data.Discounts);\r\n\r\n                        productDeals = restored;\r\n                        productDeals = getPreparedDeals();\r\n                        return resp.data;\r\n                    } else {\r\n                        productDeals = resp;\r\n                        productDeals = getPreparedDeals();\r\n                        return resp;\r\n                    }\r\n                });\r\n            }\r\n            return pr;\r\n        };\r\n\r\n        /*\r\n         * check if tags string contaons tagName\r\n         * @param {} tags\r\n         * @param {} tag\r\n         * @returns {}\r\n         */\r\n        function checkTag(tags, tag) {\r\n            var hasTag = false;\r\n            if (tag && tags && typeof (tags) == 'string') {\r\n                var result = tags.split(',');\r\n                $.each(result, function (idx, el) {\r\n                    if (tag === el) {\r\n                        hasTag = true;\r\n                        return false;\r\n                    }\r\n                });\r\n            }\r\n\r\n            return hasTag;\r\n        }\r\n\r\n        /*\r\n         * check if product is affected by deal\r\n         * @param {} deals\r\n         * @param {} dealDiscountID\r\n         * @returns {}\r\n         */\r\n        function hasThisDeal(deals, dealDiscountID) {\r\n            var result = deals.filter(function (deal) {\r\n                return deal.dealDiscountID === dealDiscountID;\r\n            });\r\n            return result.length > 0;\r\n        }\r\n\r\n        /*\r\n         * check if customer has current deal\r\n         * @param {} customerDeals\r\n         * @param {} dealID\r\n         * @returns {}\r\n         */\r\n        function customerHasThatDeal(customerDeals, dealID) {\r\n            var has = false;\r\n            $.each(customerDeals, function (idx, el) {\r\n                if (el.DealID === dealID || el.dealID === dealID) {\r\n                    has = true;\r\n                    return false;\r\n                }\r\n            });\r\n            return has;\r\n        }\r\n\r\n        // check if at least one product in checkout has coupon discount enabled\r\n        saleService.hasAvailableCoupons = function (currentSale) {\r\n            var currentDate = new Date();\r\n\r\n            var customerDeals = currentSale.Discounts;\r\n\r\n            var hasAvailableCoupons = false;\r\n            var cdl = productDeals.filter(function (d) {\r\n                return d.allowCoupons === true;\r\n            });\r\n\r\n            $.each(cdl, function (dscIdx, disc) {\r\n                if (customerHasThatDeal(customerDeals, disc.dealID) || disc.customersGroup === 'All' || disc.customersGroup === 'POS') {\r\n\r\n                    $.each(disc.triggers, function (tIdx, tElement) {\r\n                        $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                            if (el.CanEdit &&\r\n                                (((el.ProductID === tElement.productID && tElement.productID && !tElement.isFamily) || (tElement.productID && tElement.isFamily && el.FamilyID === tElement.productID) || !tElement.productID || tElement.productID === newGuid) && ((el.CategoryID === tElement.categoryID && tElement.categoryID) || !tElement.categoryID) &&\r\n                                    ((el.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                    (checkTag(el.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate)) {\r\n                                hasAvailableCoupons = true;\r\n                                return false;\r\n                            }\r\n                        });\r\n\r\n                        if (hasAvailableCoupons)\r\n                            return false;\r\n                    });\r\n\r\n                    if (hasAvailableCoupons)\r\n                        return false;\r\n                }\r\n            });\r\n\r\n            return hasAvailableCoupons;\r\n        };\r\n\r\n        // filter deals in according to selectedCoupon\r\n        saleService.filterProductDeals = function (currentSale) {\r\n            var couponID = currentSale.selectedCouponID;\r\n            var filteredProductDeals = productDeals.filter(function (d) {\r\n                if (d.allowCoupons !== true) return true; // if deal is not coupon, get it\r\n                if (!d.coupons) return false;\r\n                if (!!d.coupons && !couponID) return false;\r\n\r\n                var coups = d.coupons.filter(function (c) {\r\n                    return c.ID === couponID;\r\n                });\r\n\r\n\r\n\r\n                return coups.length > 0;\r\n            });\r\n\r\n            return filteredProductDeals;\r\n        };\r\n\r\n        // see CalculatorHelperService.ts getTaxObject\r\n        saleService.getTaxObject = function (currentSale, el) {\r\n            var tenantTax = configService.tenantTaxRule;\r\n            var outletTax = configService.lastOutletTax;\r\n            var customerTaxObject = null;\r\n\r\n            if (!configService.ignoreCustomerTaxRule && !!currentSale.customer && !!currentSale.customer.TaxRuleID) {\r\n                customerTaxObject = {\r\n                    ruleID: currentSale.customer.TaxRuleID,\r\n                    effectivePercentInclusive: currentSale.customer.EffectivePercentInclusive,\r\n                    effectivePercentExclusive: currentSale.customer.EffectivePercentExclusive\r\n                };\r\n            }\r\n\r\n            var taxObject = (!!el && el.Taxes !== 'null' && el.Taxes && typeof el.Taxes === \"string\") ? JSON.parse(el.Taxes) :\r\n                !!customerTaxObject ? customerTaxObject :\r\n                outletTax !== 'null' ? JSON.parse(outletTax) :\r\n                JSON.parse(tenantTax);\r\n\r\n            if (!!el && el.Taxes !== 'null')\r\n                taxObject.isProductTax = true;\r\n\r\n            return taxObject;\r\n        };\r\n\r\n        saleService.applyCustomerTax = function (currentSale, leaveTaxAsIs) {\r\n            var taxInclisuve = configService.taxInclucive === \"True\";\r\n            var taxes = saleService.getTaxObject(currentSale);\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (el.Taxes.isProductTax !== true && el.CanEdit == true) {\r\n                    updateItemTaxRelatedFields(el, taxes, taxInclisuve, leaveTaxAsIs);\r\n                }\r\n            });\r\n        };\r\n\r\n\r\n        function updateItemTaxRelatedFields(el, taxes, taxInclisuve, leaveTaxAsIs) {\r\n            var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n            if (leaveTaxAsIs !== true || !el.Taxes) {\r\n                el.Taxes = taxes;\r\n            }\r\n\r\n            var priceWithTax = taxInclisuve ? el.Price : el.Price + saleService.calculateTax(el.Taxes, el.Price);\r\n            el.Tax = saleService.calculateTax(el.Taxes, el.Price * el.Count);\r\n            el.TaxRuleID = el.Taxes.ruleID;\r\n            el.LoyaltyPoints = loyaltyEarning ? (priceWithTax * loyaltyEarning * el.Count) : 0;\r\n            el.PriceWithTax = priceWithTax;\r\n        }\r\n\r\n        function updateProductWithZeroPrice(el) {\r\n            var taxInclisuve = configService.taxInclucive === \"True\";\r\n            var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n\r\n            var amountWithTax = taxInclisuve ? el.Amount : el.Amount + el.Tax;\r\n\r\n            el.LoyaltyPoints = loyaltyEarning ? (amountWithTax * loyaltyEarning) : 0;\r\n\r\n            if (el.Count != 0) {\r\n                el.PriceWithTax = helperService.DEARRound(amountWithTax / el.Count, 2);\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Return discount for current order\r\n         * @param {} customer\r\n         * @param {} checkOutItems\r\n         * @returns {}\r\n         */\r\n        var newGuid = constants.newGuid;\r\n        saleService.getSaleDiscounts = function (currentSale, taxInclusive, scope, leaveTaxAsIs) {\r\n            // as this function is called each time when current sale is recalculated, so save\r\n            // current sale here\r\n\r\n            var isStandaloneReturn = !!currentSale && currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = !!currentSale && currentSale.standAloneExchange === true;\r\n\r\n            if (isStandaloneReturn || isStandaloneExchange) {\r\n                saleService.totalSum(currentSale, taxInclusive, true);\r\n                helperService.storeCurrentSale(currentSale, scope);\r\n                return;\r\n            }\r\n\r\n            var customerDeals = currentSale.customer.Discounts;\r\n            var itemsToRemove = [];\r\n            var removedItemsMap = {}; // assume that saparated items can have only one split, i.e. with the same SeparatedItemID can be only one item\r\n\r\n            saleService.applyCustomerTax(currentSale, leaveTaxAsIs);\r\n\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (el.CanEdit) {\r\n                    el.deals = [];\r\n                    el.itemDiscount = 0;\r\n                }\r\n\r\n                if (el.SeparatedItemID && el.CanEdit) {\r\n                    $.each(currentSale.CheckoutItems, function (id, parentEl) {\r\n                        if (parentEl.ID === el.SeparatedItemID) {\r\n                            parentEl.Count = parseFloat(parentEl.Count) + parseFloat(el.Count);\r\n                            itemsToRemove.push(idx);\r\n                            removedItemsMap[el.ComplexSeparatedItemID] = el;\r\n                            return false;\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n\r\n            $.each(productDeals, function (idx, el) {\r\n                el.affectedProducts = [];\r\n            });\r\n\r\n            // cause product deals can have coupon deals and coupon deal can be disabled\r\n            // we need to filter productDeals and remove all coupon deals that don't work for the moment\r\n            // coupon deal starts to work when it contains coupon number that is selected. Only one coupon can be set for current sale.\r\n            var filteredProductDeals = saleService.filterProductDeals(currentSale);\r\n\r\n            $.each(orderBy(itemsToRemove, '', true), function (i, y) {\r\n                currentSale.CheckoutItems.splice(y, 1);\r\n            });\r\n\r\n            var currentDate = new Date();\r\n\r\n\r\n            /*calculate order level discount*/\r\n            saleService.totalSum(currentSale, taxInclusive, true);\r\n            var total = currentSale.BaseTotal;\r\n            var totalDiscounts = [];\r\n            $.each(orderBy(filteredProductDeals, ['dealDiscountID'], false), function (idx, disc) {\r\n                if ((disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                    (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) && (disc.triggers[0].productID === newGuid || (disc.targets[0] && disc.targets[0].productID === newGuid)) &&\r\n                    (customerHasThatDeal(customerDeals, disc.dealID) || disc.customersGroup === 'All' || disc.customersGroup === 'POS')) {\r\n                    var result = calculateOrderDiscount(disc, total, currentSale.CheckoutItems);\r\n                    if (result.discount)\r\n                        totalDiscounts.push(result);\r\n                }\r\n            });\r\n\r\n            var results = [];\r\n            $.each(totalDiscounts, function (idx, el) {\r\n                var addNewResult = true;\r\n                $.each(results, function (rIdx, r) {\r\n                    if (r.dealDiscountID === el.disc.dealDiscountID) {\r\n                        r.discount += el.discount;\r\n                        addNewResult = false;\r\n                        return false;\r\n                    }\r\n                });\r\n                if (addNewResult) {\r\n                    results.push({\r\n                        dealDiscountID: el.disc.dealDiscountID,\r\n                        discount: el.discount\r\n                    });\r\n                }\r\n            });\r\n\r\n            // search discounts for products\r\n            // Customers discount, discount matrix, product discount\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (currentSale.customer && currentSale.customer.Discount && currentSale.customer.Discount > 0 &&\r\n                    configService.applyCustomerDiscountAfterOtherDiscounts !== true\r\n                ) {\r\n                    var customerDiscount = currentSale.customer.Discount;\r\n\r\n                    var disc = {\r\n                        discountLineType: \"% Discount\",\r\n                        amount: customerDiscount\r\n                    };\r\n\r\n                    var result = calculateDiscountLine(disc, el, null);\r\n                    var discount = {\r\n                        applyProirity: result.applyProirity,\r\n                        discount: disc,\r\n                        totalDiscount: result.totalDiscount,\r\n                        itemDiscount: result.discount,\r\n                        itemsToSeparate: result.itemsToSeparate,\r\n                        dealDiscountID: null\r\n                    };\r\n                    el.deals.push(discount);\r\n                }\r\n                var appliedDiscount = false;\r\n                var appliedByTag = false;\r\n                var appliedById = false;\r\n                if (currentSale.customer.MatrixDiscounts) {\r\n                    $.each(currentSale.customer.MatrixDiscounts, function (mIdx, martrixItem) {\r\n                        if ((el.ProductID === martrixItem.ProductID &&\r\n                                (martrixItem.Type === 'Simple' ||\r\n                                    (martrixItem.Type === 'Quantity Based' && martrixItem.MinValue <= el.Count && martrixItem.MaxValue >= el.Count))) &&\r\n                            ((appliedById === true && martrixItem.ByTag === false) || (appliedByTag === true && martrixItem.ByTag === true) || appliedDiscount === false)\r\n                        ) {\r\n\r\n                            appliedDiscount = true;\r\n\r\n                            if (martrixItem.ByTag) {\r\n                                appliedByTag = true;\r\n                            } else {\r\n                                appliedById = true;\r\n                            }\r\n\r\n                            var disc = {\r\n                                discountLineType: martrixItem.DiscountLineType,\r\n                                amount: martrixItem.Amount\r\n                            };\r\n\r\n                            var result = calculateDiscountLine(disc, el, null);\r\n                            var discount = {\r\n                                applyProirity: result.applyProirity,\r\n                                discount: disc,\r\n                                totalDiscount: result.totalDiscount,\r\n                                itemDiscount: result.discount,\r\n                                itemsToSeparate: result.itemsToSeparate,\r\n                                dealDiscountID: null\r\n                            };\r\n                            el.deals.push(discount);\r\n                        }\r\n                    });\r\n                }\r\n                if (el.Discounts && appliedDiscount === false) {\r\n                    $.each(el.Discounts, function (prIdx, prDisc) {\r\n                        if ((prDisc.type === 'Simple' ||\r\n                                (prDisc.type === 'Quantity Based' && prDisc.minValue <= el.Count && prDisc.maxValue >= el.Count))) {\r\n\r\n                            var disc = {\r\n                                discountLineType: prDisc.discountLineType,\r\n                                amount: prDisc.amount\r\n                            };\r\n\r\n                            var result = calculateDiscountLine(disc, el, null);\r\n                            var discount = {\r\n                                applyProirity: result.applyProirity,\r\n                                discount: disc,\r\n                                totalDiscount: result.totalDiscount,\r\n                                itemDiscount: result.discount,\r\n                                itemsToSeparate: result.itemsToSeparate,\r\n                                dealDiscountID: null\r\n                            };\r\n                            el.deals.push(discount);\r\n                        }\r\n                    });\r\n                }\r\n\r\n\r\n            });\r\n\r\n            //deals discounts\r\n            $.each(orderBy(filteredProductDeals, ['dealDiscountID'], false), function (dscIdx, disc) {\r\n                if (customerHasThatDeal(customerDeals, disc.dealID) || disc.customersGroup === 'All' || disc.customersGroup === 'POS') {\r\n                    var productBuyCount = 0;\r\n                    var triggerItemIds = [];\r\n\r\n                    $.each(disc.triggers, function (tIdx, tElement) {\r\n                        $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                            if (el.CanEdit &&\r\n                                (((el.ProductID === tElement.productID && tElement.productID && !tElement.isFamily) || (tElement.productID && tElement.isFamily && el.FamilyID === tElement.productID) || !tElement.productID || tElement.productID === newGuid) && ((el.CategoryID === tElement.categoryID && tElement.categoryID) || !tElement.categoryID) &&\r\n                                    ((el.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                    (checkTag(el.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate)) {\r\n                                productBuyCount += el.Count;\r\n                                triggerItemIds.push(el.ProductID);\r\n                            }\r\n                        });\r\n                    });\r\n\r\n\r\n                    if (productBuyCount >= disc.buyValue || disc.buyValue == null) {\r\n\r\n                        $.each(disc.targets, function (targetDiscIdx, targetDisc) {\r\n                            $.each(currentSale.CheckoutItems, function (targetItemIdx, targetItem) {\r\n                                if (targetItem.CanEdit &&\r\n                                    (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                    (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n                                    (((targetItem.ProductID === targetDisc.productID && targetDisc.productID && !targetDisc.isFamily) || (targetDisc.productID && targetDisc.isFamily && targetItem.FamilyID === targetDisc.productID) || !targetDisc.productID) &&\r\n                                        ((targetItem.CategoryID === targetDisc.categoryID && targetDisc.categoryID) || !targetDisc.categoryID) &&\r\n                                        ((targetItem.BrandID === targetDisc.brandID && targetDisc.brandID) || !targetDisc.brandID) &&\r\n                                        (checkTag(targetItem.Tags, targetDisc.tagName) || !targetDisc.tagName)) &&\r\n                                    (disc.type === 'Simple' ||\r\n                                        (disc.type === 'Quantity Based' && disc.minValue <= targetItem.Count && disc.maxValue >= targetItem.Count)) && targetItem.CanEdit &&\r\n                                    (!hasThisDeal(targetItem.deals, disc.dealDiscountID) || (targetItem.itemsToSeparate > 0 && targetItem.itemsToSeparate !== targetItem.Count))) {\r\n                                    disc.affectedProducts.push({\r\n                                        productID: targetItem.ProductID,\r\n                                        price: targetItem.Price\r\n                                    });\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                        if (disc.targets.length === 0) {\r\n                            $.each(disc.triggers, function (tIdx, tElement) {\r\n\r\n                                $.each(currentSale.CheckoutItems, function (targetItemIdx, targetItem) {\r\n                                    if (targetItem.CanEdit &&\r\n                                        (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                        (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n\r\n                                        (((targetItem.ProductID === tElement.productID && tElement.productID && !tElement.isFamily) || (targetItem.FamilyID === tElement.productID && tElement.productID && tElement.isFamily) || !tElement.productID || tElement.productID === newGuid) &&\r\n                                            ((targetItem.CategoryID === tElement.categoryID && tElement.categoryID) || !tElement.categoryID) &&\r\n                                            ((targetItem.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                            (checkTag(targetItem.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                        (disc.type === 'Simple' ||\r\n                                            (disc.type === 'Quantity Based' && tElement.minValue <= targetItem.Count && tElement.maxValue >= targetItem.Count)) && targetItem.CanEdit &&\r\n                                        (!hasThisDeal(targetItem.deals, disc.dealDiscountID) || (targetItem.itemsToSeparate > 0 && targetItem.itemsToSeparate !== targetItem.Count))) {\r\n\r\n                                        if (disc.type === 'Quantity Based' && tElement.minValue <= targetItem.Count && tElement.maxValue >= targetItem.Count) {\r\n                                            disc.amount = tElement.amount;\r\n                                            disc.discountLineType = tElement.discountLineType;\r\n                                        }\r\n\r\n                                        disc.affectedProducts.push({\r\n                                            productID: targetItem.ProductID,\r\n                                            price: targetItem.Price\r\n                                        });\r\n                                    }\r\n                                });\r\n                            });\r\n\r\n                        }\r\n\r\n                        var affectedValue = 0;\r\n\r\n                        if (checkDifferentConditions(disc.dealDiscountID) === true) {\r\n                            affectedValue = disc.buyMore === false ? disc.getValue * Math.floor(productBuyCount / disc.buyValue) : disc.getValue;\r\n                        } else {\r\n                            affectedValue = disc.getValue * Math.floor(productBuyCount / (disc.buyValue + disc.getValue));\r\n                            affectedValue = (affectedValue > disc.getValue && disc.buyMore === true) ? disc.getValue : affectedValue;\r\n                        }\r\n\r\n\r\n\r\n\r\n\r\n                        $.each(orderBy(disc.affectedProducts, ['price'], false), function (targetDiscIdx, affectedProduct) {\r\n                            $.each(currentSale.CheckoutItems, function (targetItemIdx, targetItem) {\r\n                                if (targetItem.CanEdit &&\r\n                                    targetItem.ProductID === affectedProduct.productID &&\r\n                                    (affectedValue > 0 || (!affectedValue && affectedValue !== 0))) {\r\n\r\n                                    if (hasThisDeal(targetItem.deals, disc.dealDiscountID)) {\r\n                                        var otherItem = tryToFindOtherCheckoutItemByProductID(currentSale.CheckoutItems, targetItem.ProductID, disc.dealDiscountID);\r\n                                        if (otherItem != null) {\r\n                                            var value = affectedValue > otherItem.Count ? otherItem.Count : affectedValue ? affectedValue : null;\r\n                                            var result = calculateDiscountLine(disc, otherItem, value);\r\n                                            var discount = {\r\n                                                applyProirity: result.applyProirity,\r\n                                                discount: disc,\r\n                                                totalDiscount: result.totalDiscount,\r\n                                                itemDiscount: result.discount,\r\n                                                itemsToSeparate: result.itemsToSeparate,\r\n                                                dealDiscountID: disc.dealDiscountID\r\n                                            };\r\n                                            otherItem.deals.push(discount);\r\n                                            affectedValue -= value;\r\n                                            return false;\r\n                                        } else {\r\n                                            $.each(targetItem.deals, function (idxd, d) {\r\n                                                if (d.dealDiscountID === disc.dealDiscountID) {\r\n\r\n                                                    var value = affectedValue + d.itemsToSeparate > targetItem.Count ? targetItem.Count : affectedValue + d.itemsToSeparate;\r\n                                                    var result = calculateDiscountLine(disc, targetItem, value);\r\n                                                    d.itemsToSeparate = result.itemsToSeparate;\r\n                                                    d.totalDiscount = result.totalDiscount;\r\n                                                    affectedValue -= value;\r\n                                                    return false;\r\n                                                }\r\n                                            });\r\n                                        }\r\n                                    } else {\r\n                                        var value = affectedValue > targetItem.Count ? targetItem.Count : affectedValue ? affectedValue : null;\r\n                                        var result = calculateDiscountLine(disc, targetItem, value);\r\n                                        var discount = {\r\n                                            applyProirity: result.applyProirity,\r\n                                            discount: disc,\r\n                                            totalDiscount: result.totalDiscount,\r\n                                            itemDiscount: result.discount,\r\n                                            itemsToSeparate: result.itemsToSeparate,\r\n                                            dealDiscountID: disc.dealDiscountID\r\n                                        };\r\n                                        targetItem.deals.push(discount);\r\n                                        affectedValue -= value;\r\n                                        return false;\r\n                                    }\r\n                                }\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n            });\r\n\r\n            //choose best discount\r\n            var itemsToAdd = [];\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                var itemsWithOutDiscount = el.CanEdit ? el.Count : 0;\r\n\r\n                var deals = orderBy(el.deals, ['applyProirity', 'totalDiscount'], true);\r\n                for (var i = 0; i < deals.length && itemsWithOutDiscount > 0; i++) {\r\n                    var bestDiscount = deals[i];\r\n\r\n                    if (bestDiscount && el.CanEdit) {\r\n                        if (bestDiscount.itemsToSeparate && bestDiscount.itemsToSeparate < el.Count) {\r\n                            var newItem = {};\r\n                            angular.copy(el, newItem);\r\n                            el.Count -= bestDiscount.itemsToSeparate;\r\n                            newItem.Count = bestDiscount.itemsToSeparate;\r\n                            newItem.ID = uuid2.newguid();\r\n\r\n                            newItem.itemDiscount = helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n\r\n                            newItem.SeparatedItemID = el.ID;\r\n                            newItem.ComplexSeparatedItemID = el.ID + \"__\" + bestDiscount.dealDiscountID;\r\n                            newItem.Amount = (newItem.BasePrice - bestDiscount.itemDiscount) * newItem.Count;\r\n                            el.Amount = el.BasePrice * el.Count;\r\n                            el.Tax = saleService.calculateTax(newItem.Taxes, el.Amount);\r\n                            newItem.Tax = saleService.calculateTax(newItem.Taxes, newItem.Amount);\r\n                            itemsWithOutDiscount -= bestDiscount.itemsToSeparate;\r\n\r\n                            //TODO CHECH TAX!!\r\n                            if (taxInclusive) {\r\n                                var price = el.BasePrice + saleService.calculateTax(el.Taxes, el.BasePrice - el.itemDiscount);\r\n                                el.Price = el.BasePrice;\r\n                                el.PriceWithTax = el.BasePrice;\r\n                                el.Tax = saleService.calculateTax(el.Taxes, (el.BasePrice - el.itemDiscount) * el.Count);\r\n                                el.Amount = el.Price * el.Count;\r\n\r\n                                var sum = (newItem.BasePrice - newItem.itemDiscount) * newItem.Count;\r\n                                if (newItem.Price === newItem.itemDiscount) {\r\n                                    sum = 0;\r\n                                    newItem.itemDiscount = helperService.DEARRound(newItem.BasePrice, 2);\r\n                                }\r\n                                price = newItem.BasePrice + saleService.calculateTax(newItem.Taxes, sum);\r\n                                newItem.Price = newItem.BasePrice;\r\n                                newItem.PriceWithTax = newItem.BasePrice;\r\n                                newItem.Tax = saleService.calculateTax(newItem.Taxes, sum);\r\n                            }\r\n                            itemsToAdd.push(newItem);\r\n                        } else {\r\n\r\n                            el.itemDiscount = helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n\r\n                            el.Amount = (el.BasePrice - el.itemDiscount) * el.Count;\r\n                            el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n                            itemsWithOutDiscount = 0;\r\n\r\n                            //TODO CHECH TAX!!\r\n                            if (taxInclusive) {\r\n                                var sum = (el.BasePrice - el.itemDiscount) * el.Count;\r\n                                if (el.BasePrice === el.itemDiscount) {\r\n                                    sum = 0;\r\n                                    el.itemDiscount = helperService.DEARRound(el.BasePrice, 2);\r\n                                }\r\n                                //var price = taxInclusive ? el.BasePrice : el.BasePrice + saleService.calculateTax(el.Taxes, sum);\r\n                                el.Price = el.BasePrice;\r\n                                el.PriceWithTax = el.BasePrice;\r\n                                el.Tax = saleService.calculateTax(el.Taxes, sum);\r\n                            }\r\n\r\n\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n\r\n            $.each(itemsToAdd, function (idx, el) {\r\n                if (!!el.ComplexSeparatedItemID && !!removedItemsMap[el.ComplexSeparatedItemID]) {\r\n                    var oldEl = removedItemsMap[el.ComplexSeparatedItemID];\r\n                    el.Discount = oldEl.Discount;\r\n                    el.CustomDiscountType = oldEl.CustomDiscountType;\r\n                }\r\n                currentSale.CheckoutItems.push(el);\r\n            });\r\n\r\n            //apply customersDiscount after all discounts if needed\r\n            if (currentSale.customer && currentSale.customer.Discount && currentSale.customer.Discount > 0 &&\r\n                configService.applyCustomerDiscountAfterOtherDiscounts === true) {\r\n\r\n                $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                    var discountPercentage = currentSale.customer.Discount / 100;\r\n                    if (el.CanEdit) {\r\n                        el.itemDiscount = el.itemDiscount + helperService.DEARRound(((el.Price - el.itemDiscount) * discountPercentage), 2);\r\n                        el.Amount = (el.Price - el.itemDiscount) * el.Count;\r\n                        el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n\r\n                        //TODO CHECH TAX!!\r\n                        if (taxInclusive) {\r\n                            var sum = (el.BasePrice - el.itemDiscount) * el.Count;\r\n                            if (el.Price === el.itemDiscount) {\r\n                                sum = 0;\r\n                                el.itemDiscount = helperService.DEARRound(el.BasePrice, 2);\r\n                            }\r\n                            //var price = taxInclusive ? el.BasePrice : el.BasePrice + saleService.calculateTax(el.Taxes, sum);\r\n                            el.Price = el.BasePrice;\r\n                            el.PriceWithTax = el.BasePrice;\r\n                            el.Tax = saleService.calculateTax(el.Taxes, sum);\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            // check here custom discount\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (el.CanEdit) {\r\n                    if (el.CustomDiscountType === 'price' && el.Discount >= 0) {\r\n                        el.itemDiscount = helperService.DEARRound(el.BasePrice - el.Discount, 2);\r\n                        el.Amount = el.Discount * el.Count;\r\n                        el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n\r\n                        if (el.Price === 0) {\r\n                            updateProductWithZeroPrice(el);\r\n                        }\r\n\r\n                        if (el.itemDiscount === 0)\r\n                            el.Price = el.BasePrice;\r\n                    } else if (el.CustomDiscountType === 'percent' && el.Discount >= 0) {\r\n                        if (el.Discount > 100)\r\n                            el.Discount = 100;\r\n\r\n                        el.itemDiscount = helperService.DEARRound(el.Discount * el.BasePrice / 100, 2);\r\n                        el.Amount = (el.BasePrice - el.itemDiscount) * el.Count;\r\n                        el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n                        if (el.itemDiscount === 0)\r\n                            el.Price = el.BasePrice;\r\n                    }\r\n\r\n                    var sign = el.Price < 0 || isStandaloneReturn ? -1 : 1;\r\n                    if (sign > 0 && el.Discount >= 0 && (el.CustomDiscountType === 'percent' || el.CustomDiscountType === 'price')) {\r\n                        el.BasePriceWithDiscount = el.BasePrice - el.itemDiscount;\r\n                    }\r\n                    //else if (el.Discount == 0) {\r\n                    //    el.Price = el.BasePrice;\r\n                    //    el.itemDiscount = 0;\r\n                    //    el.Amount = (el.BasePrice) * el.Count;\r\n                    //    el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n                    //}\r\n                }\r\n            });\r\n\r\n            // reprocess here price based barcode products\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (el.CanEdit && el.priceBasedValue) {\r\n                    if ((el.Price - el.itemDiscount) > 0) {\r\n                        el.Count = helperService.DEARRound(el.priceBasedValue / (el.Price - el.itemDiscount), 4);\r\n                    } else {\r\n                        el.Count = 1;\r\n                        errorService.showError(gettextCatalog.getString('Final product price is zero, so product count is set to 1.'), null, 'Warning');\r\n                    }\r\n\r\n                    el.Amount = helperService.DEARRound((el.Price - el.itemDiscount) * el.Count, 2);\r\n                    el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n                }\r\n            });\r\n\r\n            saleService.totalSum(currentSale, taxInclusive, true);\r\n            total = currentSale.BaseTotal;\r\n            var prevDiscountValue = currentSale.Discount;\r\n\r\n            var bestTotalDiscount = orderBy(results, 'discount', true)[0];\r\n            if (currentSale.keepTotalDiscount !== true) {\r\n                if (bestTotalDiscount && bestTotalDiscount.discount > 0) {\r\n                    currentSale.Discount = bestTotalDiscount.discount > total ? total : bestTotalDiscount.discount;\r\n                    currentSale.isDiscountPercent = false;\r\n                } else {\r\n                    currentSale.Discount = 0;\r\n                }\r\n\r\n            }\r\n\r\n            if (currentSale.manuallyAppliedDiscount === true && currentSale.keepTotalDiscount !== true) {\r\n                currentSale.manuallyAppliedDiscount = false;\r\n\r\n                var message = gettextCatalog.getString(\"Please note that the total discount has been updated.\");\r\n                var skipwarn = localStorage.getItem('SkipDiscountSaleWarnMessage') === 'true';\r\n                if (!skipwarn) {\r\n                    helperService.showCustomDialog3(gettextCatalog.getString('Warning'), message,\r\n                        gettextCatalog.getString('Skip warning'), '', false, true, skipwarn,\r\n                        function (val) {\r\n                            localStorage.setItem('SkipDiscountSaleWarnMessage', val);\r\n                        });\r\n                }\r\n            }\r\n\r\n            helperService.storeCurrentSale(currentSale, scope);\r\n        };\r\n\r\n        //calculate posible discount\r\n        function calculateDiscountLine(discount, item, value) {\r\n            var result = {};\r\n            result.applyProirity = 0;\r\n            var buyValue = discount.buyValue === null ? 1 : discount.buyValue;\r\n            if (value === null) {\r\n                switch (discount.discountLineType) {\r\n                    case 'Discount Amount':\r\n                        result.discount = discount.amount > item.Price ? 0 : item.Price - discount.amount;\r\n                        break;\r\n                    case '% Discount':\r\n                        result.discount = item.Price * (100 - discount.amount) / 100;\r\n                        break;\r\n                    case 'Markup Amount':\r\n                        result.discount = item.Price + discount.amount;\r\n                        break;\r\n                    case '% Markup':\r\n                        result.discount = item.Price + (item.Price * discount.amount / 100);\r\n                        break;\r\n                    case 'Flat Amount':\r\n                        result.discount = discount.amount / item.Count;\r\n                        break;\r\n                    default:\r\n                        result.discount = 0;\r\n                        break;\r\n                }\r\n                result.discount = item.Price - result.discount;\r\n                result.totalDiscount = result.discount * item.Count;\r\n                if (discount.discountLineType === 'Price Override') {\r\n                    result.applyProirity = 1;\r\n                    result.discount = item.Price - discount.amount;\r\n                    result.totalDiscount = result.discount * item.Count;\r\n                }\r\n                return result;\r\n            } else {\r\n                var affectedValue = value;\r\n                switch (discount.discountLineType) {\r\n                    case 'Discount Amount':\r\n                        result.discount = discount.amount > item.Price ? 0 : item.Price - discount.amount;\r\n                        break;\r\n                    case '% Discount':\r\n                        result.discount = item.Price * (100 - discount.amount) / 100;\r\n                        break;\r\n                    case 'Markup Amount':\r\n                        result.discount = item.Price + discount.amount;\r\n                        break;\r\n                    case '% Markup':\r\n                        result.discount = item.Price + (item.Price * discount.amount / 100);\r\n                        break;\r\n                    case 'Flat Amount':\r\n                        result.discount = discount.amount / item.affectedValue;\r\n                        break;\r\n                    default:\r\n                        result.discount = 0;\r\n                        break;\r\n                }\r\n                result.discount = item.Price - result.discount;\r\n                result.totalDiscount = result.discount * affectedValue;\r\n                result.itemsToSeparate = affectedValue;\r\n\r\n                if (discount.discountLineType === 'Price Override') {\r\n                    result.applyProirity = 1;\r\n                    result.discount = item.Price - discount.amount;\r\n                    result.totalDiscount = result.discount * affectedValue;\r\n                }\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        function calculateOrderDiscount(discount, total, CheckoutItems) {\r\n            var result = {\r\n                disc: discount\r\n            };\r\n            var totalMultiplier = 0;\r\n            var affectedValue = discount.getValue;\r\n            totalMultiplier = Math.floor(total / discount.buyValue);\r\n            var productBuyCount = 0;\r\n            var applyTotalDiscount = false;\r\n\r\n            $.each(discount.triggers, function (tIdx, tEl) {\r\n                $.each(CheckoutItems, function (idx, el) {\r\n                    if ((((el.ProductID === tEl.productID && tEl.productID && !tEl.isFamily) || (el.FamilyID === tEl.productID && tEl.productID && tEl.isFamily) || !tEl.productID) &&\r\n                            ((el.CategoryID === tEl.categoryID && tEl.categoryID) || !tEl.categoryID) &&\r\n                            ((el.BrandID === tEl.brandID && tEl.brandID) || !tEl.brandID) &&\r\n                            (checkTag(el.Tags, tEl.tagName) || !tEl.tagName))) {\r\n                        productBuyCount += el.Count;\r\n                        //return false;\r\n                    }\r\n                });\r\n            });\r\n\r\n            if (Math.floor(productBuyCount / discount.buyValue) >= 1) {\r\n                totalMultiplier = Math.floor(productBuyCount / discount.buyValue);\r\n                applyTotalDiscount = true;\r\n            }\r\n\r\n            totalMultiplier = totalMultiplier > 0 ? discount.buyMore === false ? totalMultiplier : 1 : 0;\r\n            affectedValue *= totalMultiplier;\r\n\r\n            if ((discount.triggers[0].productID === newGuid || applyTotalDiscount === true) &&\r\n                discount.targets.length > 0 && discount.targets[0].productID === newGuid) {\r\n                switch (discount.discountLineType) {\r\n                    case 'Discount Amount':\r\n                        result.discount = total - discount.amount;\r\n                        break;\r\n                    case '% Discount':\r\n                        result.discount = total * (100 - discount.amount) / 100;\r\n                        break;\r\n                    case 'Markup Amount':\r\n                        result.discount = total + discount.amount;\r\n                        break;\r\n                    case '% Markup':\r\n                        result.discount = total + (total * discount.amount / 100);\r\n                        break;\r\n                    case 'Price Override':\r\n                        result.discount = discount.amount;\r\n                        break;\r\n                    case 'Flat Amount':\r\n                        result.discount = discount.amount;\r\n                        break;\r\n                    default:\r\n                        result.discount = 0;\r\n                        break;\r\n                }\r\n                result.discount = total - result.discount;\r\n                if (discount.discountLineType === \"% Discount\" && totalMultiplier === 0) {\r\n                    result.discount *= totalMultiplier;\r\n                } else if (discount.discountLineType !== \"% Discount\") {\r\n                    result.discount *= totalMultiplier;\r\n                }\r\n\r\n                return result;\r\n            } else if (discount.targets.length > 0 && discount.targets[0].productID !== newGuid) {\r\n\r\n                $.each(discount.targets, function (targetDiscIdx, targetDisc) {\r\n                    $.each(CheckoutItems, function (targetItemIdx, targetItem) {\r\n                        if ((((targetItem.ProductID === targetDisc.productID && targetDisc.productID && !targetDisc.isFamily) || (targetItem.FamilyID === targetDisc.productID && targetDisc.productID && targetDisc.isFamily) || !targetDisc.productID) &&\r\n                                ((targetItem.CategoryID === targetDisc.categoryID && targetDisc.categoryID) || !targetDisc.categoryID) &&\r\n                                ((targetItem.BrandID === targetDisc.brandID && targetDisc.brandID) || !targetDisc.brandID) &&\r\n                                (checkTag(targetItem.Tags, targetDisc.tagName) || !targetDisc.tagName)) && targetItem.CanEdit) {\r\n                            discount.affectedProducts.push({\r\n                                productID: targetItem.ProductID,\r\n                                price: targetItem.Price\r\n                            });\r\n                        }\r\n                    });\r\n                });\r\n\r\n                $.each(orderBy(discount.affectedProducts, ['price'], false), function (targetDiscIdx, affectedProduct) {\r\n                    $.each(CheckoutItems, function (targetItemIdx, targetItem) {\r\n                        if (targetItem.ProductID === affectedProduct.productID && (affectedValue > 0 || !affectedValue)) {\r\n\r\n                            var value = affectedValue > targetItem.Count ? targetItem.Count : affectedValue ? affectedValue : null;\r\n                            var itemDiscount = calculateDiscountLine(discount, targetItem, value);\r\n                            result.discount = itemDiscount.totalDiscount;\r\n                            affectedValue -= targetItem.Count;\r\n                            return false;\r\n                        }\r\n                    });\r\n                });\r\n\r\n                result.affectedValue = affectedValue;\r\n                return result;\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        function checkDifferentConditions(dealDiscountID) {\r\n            var diffConditins = false;\r\n\r\n            $.each(productDeals, function (idx, disc) {\r\n                if (disc.dealDiscountID === dealDiscountID) {\r\n                    $.each(disc.triggers, function (tIdx, tEl) {\r\n                        var found = false;\r\n                        $.each(disc.targets, function (tIdx, targetDisc) {\r\n                            if (((tEl.productID && tEl.productID === targetDisc.productID) ||\r\n                                    (tEl.categoryID && tEl.categoryID === targetDisc.categoryID) ||\r\n                                    (tEl.brandID && tEl.brandID === targetDisc.brandID) ||\r\n                                    (tEl.tagName && tEl.tagName === targetDisc.tagName))) {\r\n                                found = true;\r\n                            }\r\n\r\n                        });\r\n                        if (found === false) {\r\n                            diffConditins = true;\r\n                        }\r\n                    });\r\n\r\n                    $.each(disc.targets, function (tIdx, tEl) {\r\n                        var found = false;\r\n                        $.each(disc.triggers, function (tIdx, targetDisc) {\r\n                            if (((tEl.productID && tEl.productID === targetDisc.productID) ||\r\n                                    (tEl.categoryID && tEl.categoryID === targetDisc.categoryID) ||\r\n                                    (tEl.brandID && tEl.brandID === targetDisc.brandID) ||\r\n                                    (tEl.tagName && tEl.tagName === targetDisc.tagName))) {\r\n                                found = true;\r\n                            }\r\n\r\n                        });\r\n                        if (found === false) {\r\n                            diffConditins = true;\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n\r\n            return diffConditins;\r\n        }\r\n\r\n        function tryToFindOtherCheckoutItemByProductID(items, productID, dealDiscountID) {\r\n            var item = null;\r\n            $.each(items, function (idx, el) {\r\n                if (el.ProductID === productID && !hasThisDeal(el.deals, dealDiscountID)) {\r\n                    item = el;\r\n                    return el;\r\n                }\r\n            });\r\n            return item;\r\n        }\r\n\r\n        function getPreparedDeals() {\r\n            var preparedDeals = [];\r\n            var tenantTimeZone = configService.timeZone;\r\n            $.each(productDeals, function (idx, deal) {\r\n\r\n                var hasGroup = false;\r\n                $.each(preparedDeals, function (trIdx, preparedDeal) {\r\n                    if (preparedDeal.dealDiscountID === deal.dealDiscountID) {\r\n                        preparedDeal.triggers.push({\r\n                            brandID: deal.brandID,\r\n                            categoryID: deal.categoryID,\r\n                            productID: deal.productID,\r\n                            isFamily: deal.isFamily,\r\n                            tagName: deal.tagName,\r\n                            maxValue: deal.maxValue,\r\n                            minValue: deal.minValue,\r\n                            amount: deal.amount,\r\n                            discountLineType: deal.discountLineType\r\n                        });\r\n                        preparedDeal.targets = preparedDeal.targets.concat(deal.targets);\r\n                        hasGroup = true;\r\n                    }\r\n                });\r\n\r\n                if (hasGroup === false) {\r\n                    preparedDeals.push({\r\n                        amount: deal.amount,\r\n                        buyMore: deal.buyMore,\r\n                        buyValue: deal.buyValue,\r\n                        customersGroup: deal.customersGroup,\r\n                        dateFrom: !!deal.dateFrom ? deal.dateFrom + tenantTimeZone : null,\r\n                        dateTo: !!deal.dateTo ? deal.dateTo.replace(\"00:00:00\", \"23:59:59\") + tenantTimeZone : null,\r\n                        dealDiscountID: deal.dealDiscountID,\r\n                        dealID: deal.dealID,\r\n                        discountID: deal.discountID,\r\n                        discountLineType: deal.discountLineType,\r\n                        getValue: deal.getValue,\r\n                        tenantID: deal.tenantID,\r\n                        type: deal.type,\r\n                        maxValue: deal.maxValue,\r\n                        minValue: deal.minValue,\r\n                        targets: deal.targets,\r\n                        allowCoupons: deal.allowCoupons,\r\n                        singleCouponCodeUsage: deal.singleCouponCodeUsage,\r\n                        coupons: !!deal.coupons ? JSON.parse(deal.coupons) : null,\r\n                        triggers: [{\r\n                            brandID: deal.brandID,\r\n                            categoryID: deal.categoryID,\r\n                            productID: deal.productID,\r\n                            isFamily: deal.isFamily,\r\n                            tagName: deal.tagName,\r\n                            maxValue: deal.maxValue,\r\n                            minValue: deal.minValue,\r\n                            amount: deal.amount,\r\n                            discountLineType: deal.discountLineType\r\n                        }]\r\n                    });\r\n                }\r\n\r\n            });\r\n\r\n            saleService.removeDuplicates(preparedDeals);\r\n            saleService.mergeTargets(preparedDeals);\r\n\r\n            return preparedDeals;\r\n        }\r\n\r\n        saleService.getTriggerKey = function(trigger, isQuantityBased) {\r\n            var key = '@@1@@' + (!trigger.brandID ? 'null' : trigger.brandID) +\r\n                      '@@2@@' + (!trigger.categoryID ? 'null' : trigger.categoryID) +\r\n                      '@@3@@' + (!trigger.productID ? 'null' : trigger.productID) +\r\n                      '@@4@@' + (!trigger.tagName ? 'null' : trigger.tagName) +\r\n                      '@@5@@' + trigger.discountLineType;\r\n            if (isQuantityBased) {\r\n                key += '@@6@@' + (!trigger.minValue ? 'null' : trigger.minValue) +\r\n                       '@@7@@' + (!trigger.maxValue ? 'null' : trigger.maxValue);\r\n            }                      \r\n            return key;\r\n        };\r\n\r\n        saleService.getTargetKey = function(target) {\r\n            var key = '@@1@@' + (!target.brandID ? 'null' : target.brandID) +\r\n                      '@@2@@' + (!target.categoryID ? 'null' : target.categoryID) +\r\n                      '@@3@@' + (!target.productID ? 'null' : target.productID) +\r\n                      '@@4@@' + (!target.dealDiscountID ? 'null' : target.dealDiscountID) +\r\n                      '@@5@@' + (!target.tagName ? 'null' : target.tagName);\r\n            return key;\r\n        };\r\n\r\n        saleService.removeDuplicates = function(productDeals) {\r\n\r\n            $.each(productDeals, function (idx, deal) {\r\n                if(deal.triggers && Array.isArray(deal.triggers)) {\r\n                    var res = [];\r\n                    var map = {};\r\n                    var isQuantityBased = deal.type === 'Quantity Based';\r\n                    $.each(deal.triggers, function (idx, trigger) {\r\n                        var key = saleService.getTriggerKey(trigger, isQuantityBased);\r\n\r\n                        if(!map[key]) {\r\n                            res.push(trigger);\r\n                            map[key] = trigger;\r\n                        }\r\n                    });\r\n\r\n                    deal.triggers = res;\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.mergeTargets = function(productDeals) {\r\n\r\n            $.each(productDeals, function (idx, deal) {\r\n                if(deal.targets && Array.isArray(deal.targets)) {\r\n                    var res = [];\r\n                    var map = {};\r\n                    $.each(deal.targets, function (idx, target) {\r\n                        var key = saleService.getTargetKey(target);\r\n\r\n                        if(!map[key]) {\r\n                            res.push(target);\r\n                            map[key] = target;\r\n                        }\r\n                    });\r\n\r\n                    deal.target = res;\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.getProductAvailability = function (searchOpts) {\r\n            return webOnlyProvider.getProductAvailability(searchOpts);\r\n        };\r\n\r\n        saleService.getExpectedSums = function (sale, rawSale) {\r\n\r\n            var expectedSumsObj = {};\r\n            expectedSumsObj.cashExpected = 0;\r\n            expectedSumsObj.creditCardExpected = 0;\r\n            expectedSumsObj.giftCardExpected = 0;\r\n            expectedSumsObj.loyaltyExpected = 0;\r\n            expectedSumsObj.storeCreditExpected = 0;\r\n            if (sale.FinancialStatus != 'RETURN') {\r\n                // we need to check what payments we have processed already to escape from duplicates\r\n                if (!rawSale.alreadyCountedPayments) {\r\n                    rawSale.alreadyCountedPayments = {};\r\n                }\r\n\r\n                $.each(sale.Payments, function (idx, el) {\r\n                    if (rawSale.alreadyCountedPayments[el.ID] !== true) {\r\n\r\n                        rawSale.alreadyCountedPayments[el.ID] = true;\r\n\r\n                        switch (el.ShortName) {\r\n                            case \"cash\":\r\n                                expectedSumsObj.cashExpected += el.Amount;\r\n                                break;\r\n                            case \"gift card\":\r\n                                expectedSumsObj.giftCardExpected += el.Amount;\r\n                                break;\r\n                            case \"loyalty\":\r\n                                expectedSumsObj.loyaltyExpected += el.Amount;\r\n                                break;\r\n                            case \"credit card\":\r\n                                expectedSumsObj.creditCardExpected += el.Amount;\r\n                                break;\r\n                            case \"store credits\":\r\n                                expectedSumsObj.storeCreditExpected += el.Amount;\r\n                                break;\r\n                        }\r\n                    }\r\n                });\r\n\r\n            } else {\r\n                // we need to check what payments we have processed already to escape from duplicates\r\n                if (!rawSale.alreadyCountedRefunds) {\r\n                    rawSale.alreadyCountedRefunds = {};\r\n                }\r\n\r\n                $.each(sale.Refunds, function (idx, r) {\r\n                    $.each(r.Payments, function (idx, el) {\r\n                        if (rawSale.alreadyCountedRefunds[el.ID] !== true) {\r\n\r\n                            rawSale.alreadyCountedRefunds[el.ID] = true;\r\n\r\n                            switch (el.ShortName) {\r\n                                case \"cash\":\r\n                                    expectedSumsObj.cashExpected -= el.Amount;\r\n                                    break;\r\n                                case \"gift card\":\r\n                                    expectedSumsObj.giftCardExpected -= el.Amount;\r\n                                    break;\r\n                                case \"loyalty\":\r\n                                    expectedSumsObj.loyaltyExpected -= el.Amount;\r\n                                    break;\r\n                                case \"credit card\":\r\n                                    expectedSumsObj.creditCardExpected -= el.Amount;\r\n                                    break;\r\n                                case \"store credits\":\r\n                                    expectedSumsObj.storeCreditExpected -= el.Amount;\r\n                                    break;\r\n                            }\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n\r\n            return expectedSumsObj;\r\n        };\r\n\r\n        /*\r\n            usage doesn't found\r\n         */\r\n        // saleService.getAdditionalTotals = function (sale, rawSale) {\r\n        //     var totalsObj = [];\r\n        //\r\n        //     if (sale.FinancialStatus != 'RETURN') {\r\n        //         var totalSum = 0;\r\n        //         // need cycle to calculate real taken sum (including any rounding)\r\n        //         //$.each(rawSale.Payments, function (idx, el){\r\n        //         //    totalSum += el.Amount;\r\n        //         //});\r\n        //\r\n        //         var calcTotal = saleService.totalSum(rawSale);\r\n        //\r\n        //         if (sale.FinancialStatus == 'LAYBY_CLOSED' ||\r\n        //             sale.FinancialStatus == 'ONACCOUNT_CLOSED' ||\r\n        //             sale.FinancialStatus == 'CLOSED') {\r\n        //\r\n        //             $.each(sale.Payments, function (idx, el) {\r\n        //                 switch (el.ShortName) {\r\n        //                     case 'Rounding':\r\n        //                         totalsObj.push({ CounterName: constants.roundingTotalName, Counter: el.Amount, CounterType: 'PAYMENT' });\r\n        //                         break;\r\n        //                 }\r\n        //             });\r\n        //\r\n        //         }\r\n        //\r\n        //         var countSales = true;\r\n        //\r\n        //         totalsObj.push({ CounterName: constants.newSaleTotalCountName, Counter: calcTotal, CounterType: 'SALE' });\r\n        //         if (sale.FinancialStatus == 'ONACCOUNT') {\r\n        //             totalsObj.push({ CounterName: constants.newOnAccountCountName, Counter: calcTotal, CounterType: 'SALE' });\r\n        //         }\r\n        //         else if (sale.FinancialStatus == 'LAYBY') {\r\n        //             totalsObj.push({ CounterName: constants.newLaybyCountName, Counter: calcTotal, CounterType: 'SALE' });\r\n        //         }\r\n        //         else if (sale.FinancialStatus == 'LAYBY_CLOSED') {\r\n        //             totalsObj.push({ CounterName: constants.newLaybyCountName, Counter: calcTotal, CounterType: 'PAYMENT' });\r\n        //             countSales = false;\r\n        //         }\r\n        //         else if (sale.FinancialStatus == 'ONACCOUNT_CLOSED') {\r\n        //             totalsObj.push({ CounterName: constants.newOnAccountCountName, Counter: calcTotal, CounterType: 'PAYMENT' });\r\n        //             countSales = false;\r\n        //         }\r\n        //         else\r\n        //             totalsObj.push({ CounterName: constants.newSaleCountName, Counter: calcTotal, CounterType: 'SALE' });\r\n        //\r\n        //         if (countSales) {\r\n        //             totalsObj.push({ CounterName: constants.newTaxCountName, Counter: rawSale.CalculatedTax, CounterType: 'SALE' });\r\n        //             totalsObj.push({ CounterName: constants.newSaleDiscountName, Counter: rawSale.discountValue, CounterType: 'SALE' });\r\n        //         }\r\n        //     }\r\n        //     else {\r\n        //         var totalSum = 0;\r\n        //         $.each(rawSale.Payments, function (idx, el) {\r\n        //             totalSum += Math.abs(el.Amount);\r\n        //         });\r\n        //\r\n        //         totalsObj.push({ CounterName: constants.refundTotalName, Counter: totalSum, CounterType: 'REFUND' });\r\n        //     }\r\n        //\r\n        //     return totalsObj;\r\n        // };\r\n\r\n        saleService.buildRawSaleForStorage = function (rawSale, isParkSave, payloadVersion) {\r\n            var rawForStorage = angular.extend({}, rawSale, {\r\n                payloadVersion: payloadVersion\r\n            });\r\n            if (!isParkSave) {\r\n                rawForStorage.IsParked = false;\r\n                if (rawForStorage.isParked !== undefined) {\r\n                    rawForStorage.isParked = false;\r\n                }\r\n            }\r\n            return rawForStorage;\r\n        };\r\n\r\n        saleService.updateRegistrySales = function (ID, sale, rawSale) {\r\n            var expectedSums = saleService.getExpectedSums(sale, rawSale);\r\n            if (configService.isSite || deviceInfo.isSimulator) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n\r\n            var isParkSave = sale.FinancialStatus === FinancialStatusType.Parked;\r\n            sale.RawSaleObject = JSON.stringify(\r\n                saleService.buildRawSaleForStorage(rawSale, isParkSave, configService.payloadVersion)\r\n            );\r\n\r\n            var provider = localDBProvider;\r\n            //var pr = provider.updateRegistrySales(ID, expectedSums.cashExpected, expectedSums.creditCardExpected,\r\n            //                                      expectedSums.giftCardExpected, expectedSums.loyaltyExpected,\r\n            //                                      expectedSums.storeCreditExpected, additionalTotals);\r\n            var pr = provider.updateRegistrySales(ID, expectedSums.cashExpected, expectedSums.creditCardExpected);\r\n            return pr;\r\n        };\r\n\r\n        // coupon operations\r\n        saleService.saleCoupons = [];\r\n\r\n        saleService.getSaleCoupons = function (couponCode) {\r\n            saleService.saleCoupons = [];\r\n            var deferred = $q.defer();\r\n            var res = [];\r\n            deferred.resolve(res);\r\n            var p = deferred.promise;\r\n\r\n            if (!configService.isSite && !deviceInfo.isSimulator)\r\n                p = p.then(function (r) {\r\n                    return localDBProvider.getSaleCoupons(couponCode)\r\n                        .then(function (data) {\r\n                            var deferred = $q.defer();\r\n                            res = res.concat(data);\r\n                            deferred.resolve(res);\r\n                            return deferred.promise;\r\n                        });\r\n                });\r\n\r\n            if (configService.isSite || configService.isOnline) {\r\n                p = p.then(function (r) {\r\n                        return remoteRequestProvider.getSaleCoupons(couponCode);\r\n                    })\r\n                    .then(function (data) {\r\n                        var deferred = $q.defer();\r\n                        res = res.concat(data.data);\r\n                        deferred.resolve(res);\r\n                        return deferred.promise;\r\n                    });\r\n            }\r\n\r\n            return p.then(function (data) {\r\n                saleService.saleCoupons = data;\r\n                var deferred = $q.defer();\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            });\r\n        };\r\n\r\n        saleService.checkSingleUsageCouponIsAvailable = function (couponCode) {\r\n            var foundCouponUsages = saleService.saleCoupons.filter(function (c) {\r\n                return c.CouponCode == couponCode;\r\n            });\r\n\r\n            if (foundCouponUsages.length == 0) return true;\r\n\r\n            var couponToUse = saleService.getCouponFromDealsByCode(couponCode); // get first available coupon with this code taking into account one-off\r\n            var couponsInData = saleService.getCouponFromDealsByCode(couponCode, true); // get first available coupon with this code not taking into account one-off\r\n\r\n            return couponToUse != null || couponsInData == null;\r\n        };\r\n\r\n        saleService.getCouponFromDealsByCode = function (couponCode, ignoreOneOffType) {\r\n\r\n            const foundCouponUsages = saleService.saleCoupons.filter((c) => helperService.compareStrings(c.CouponCode, couponCode));\r\n\r\n            let res = null;\r\n            angular.forEach(productDeals, function (d) {\r\n                if (d.allowCoupons === true && !!d.coupons) {\r\n\r\n                    const fnd = d.coupons.filter((c) => helperService.compareStrings(c.Code, couponCode));\r\n\r\n                    if (fnd.length > 0 && (ignoreOneOffType === true || !(d.singleCouponCodeUsage === true && foundCouponUsages.length > 0))) {\r\n\r\n                        res = $.extend({\r\n                            DealID: d.dealID\r\n                        }, fnd[0]);\r\n\r\n                        return false;\r\n                    }\r\n                }\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        saleService.getGiftCardCodes = function (sale) {\r\n            var ids = [];\r\n            $.each(sale.CheckoutItems, function (idx, el) {\r\n                if (el.ProductType == 'GiftCard' && !!el.GiftCardCode)\r\n                    ids.push(el.GiftCardCode);\r\n            });\r\n\r\n            return ids;\r\n        };\r\n\r\n        saleService.checkRefundAvailable = function (sale) {\r\n            var ids = saleService.getGiftCardCodes(sale);\r\n            if (!ids || ids.length == 0) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve({\r\n                    data: {\r\n                        IsRefundAvailable: true\r\n                    }\r\n                });\r\n\r\n                return deferred.promise;\r\n            }\r\n            return webOnlyProvider.isGiftCardsRefundAvailable(ids);\r\n        };\r\n\r\n        function calculateAnalyticData(sale, rawSale) {\r\n            var items = [];\r\n            var isNewSale = helperService.showNewCheckoutUI(sale);\r\n            var taxInclusive = !isNewSale ? configService.taxInclucive === \"True\" : rawSale.IsTaxInclusive;\r\n            var taxPrecision = (configService.taxCalculationMethod == 'Row Total' ? 2 : 4);\r\n\r\n            if (rawSale.CheckoutItems && rawSale.CheckoutItems.length > 0) {\r\n                for (var i = 0; i < rawSale.CheckoutItems.length; i++) {\r\n                    var elementLine = rawSale.CheckoutItems[i];\r\n\r\n                    var sign = elementLine.Count >= 0 ? 1 : -1;\r\n\r\n                    //if (elementLine.return != true) {\r\n                    var newItem = {\r\n                        OutletName: configService.lastOutlet,\r\n                        PosOutletID: configService.lastOutletID,\r\n                        PosRegistryName: configService.lastRegistry,\r\n                        PosRegistryID: configService.lastRegistryID,\r\n                        Type: elementLine.return === true ? 'c' : 'p',\r\n                        FamilyID: elementLine.FamilyID,\r\n                        ProductID: elementLine.ProductID,\r\n                        ProductSKU: elementLine.Sku,\r\n                        ProductName: elementLine.Name,\r\n                        ProductOption1: elementLine.Option1,\r\n                        ProductOption2: elementLine.Option2,\r\n                        ProductOption3: elementLine.Option3,\r\n                        UserName: configService.lastUserName,\r\n                        TaxesIncluded: taxInclusive,\r\n                        BasePrice: (isNewSale && sign < 0) ? elementLine.BasePrice * -1 : elementLine.BasePrice,\r\n                        Price: (isNewSale && sign < 0) ? elementLine.Price * -1 : elementLine.Price,\r\n                        Quantity: isNewSale ? Math.abs(elementLine.Count) : elementLine.Count,\r\n                        SalesRepresentative: sale.SalesRepresentative\r\n                    };\r\n\r\n                    if (elementLine.return === true) {\r\n                        if (!isNewSale) {\r\n                            newItem.Total = -1 * helperService.DEARRound(elementLine.PriceWithDiscount * parseInt(elementLine.Count), 2);\r\n                            newItem.Tax = -1 * helperService.DEARRound(saleService.calculateTax(elementLine.Taxes, elementLine.Count * elementLine.BasePriceWithDiscount, taxInclusive), taxPrecision);\r\n                            newItem.Price = -1 * elementLine.PriceWithDiscount;\r\n                        } else {\r\n                            newItem.Total = helperService.DEARRound(elementLine.FinalAmount, 2);\r\n                            newItem.Tax = helperService.DEARRound(elementLine.FinalTaxAmount, taxPrecision);\r\n                            newItem.Price = sign < 0 ? elementLine.FinalPrice * -1 : elementLine.FinalPrice;\r\n                        }\r\n                    } else {\r\n                        if (!isNewSale) {\r\n                            newItem.Total = elementLine.Amount;\r\n                            newItem.Tax = elementLine.Tax;\r\n                        } else {\r\n                            newItem.Total = elementLine.FinalAmount;\r\n                            newItem.Tax = elementLine.FinalTaxAmount;\r\n                        }\r\n                    }\r\n\r\n                    items.push(newItem);\r\n                }\r\n            }\r\n\r\n            var srches = !!sale.Surcharges && sale.Surcharges.length > 0 ? sale.Surcharges : null;\r\n            if (isNewSale) {\r\n                // srches = CalculatorHelperService.getSurcharges(sale);\r\n                srches = CalculatorHelperService.getSurcharges(rawSale);\r\n            }\r\n\r\n            if (srches) {\r\n\r\n                var _surcharges = {};\r\n\r\n                for (var i = 0; i < srches.length; i++) {\r\n                    var surcharge = srches[i];\r\n\r\n                    if (typeof _surcharges[surcharge.SurchargeID] === 'undefined') {\r\n                        _surcharges[surcharge.SurchargeID] = {\r\n                            ProductID: surcharge.SurchargeID,\r\n                            OutletName: configService.lastOutlet,\r\n                            PosOutletID: configService.lastOutletID,\r\n                            PosRegistryName: configService.lastRegistry,\r\n                            PosRegistryID: configService.lastRegistryID,\r\n                            SurchargeName: surcharge.Name,\r\n                            SurchargeRate: surcharge.Value,\r\n                            SurchargeRateType: surcharge.Type,\r\n                            SurchargePaymentAmount: surcharge.PaymentRealAmount,\r\n                            Type: 's',\r\n                            UserName: configService.lastUserName,\r\n                            TaxesIncluded: taxInclusive,\r\n                            BasePrice: 0,\r\n                            Price: surcharge.Total,\r\n                            Quantity: 1,\r\n                            Tax: surcharge.Tax,\r\n                            Total: surcharge.Total,\r\n                            SalesRepresentative: sale.SalesRepresentative\r\n                        };\r\n                    } else {\r\n                        _surcharges[surcharge.SurchargeID].Price += surcharge.Total;\r\n                        _surcharges[surcharge.SurchargeID].Tax += surcharge.Tax;\r\n                        _surcharges[surcharge.SurchargeID].Total += surcharge.Total;\r\n                        _surcharges[surcharge.SurchargeID].SurchargePaymentAmount += surcharge.PaymentRealAmount;\r\n                    }\r\n                }\r\n\r\n                for (var id in _surcharges) {\r\n                    var item = _surcharges[id];\r\n\r\n                    item.Price = helperService.DEARRound(item.Price, 2);\r\n                    item.Tax = helperService.DEARRound(item.Tax, 2);\r\n                    item.Total = helperService.DEARRound(item.Total, 2);\r\n\r\n                    items.push(item);\r\n                }\r\n            }\r\n\r\n            if (!isNewSale) {\r\n                if (rawSale.discountValue > 0 || rawSale.Discount > 0) {\r\n                    var newItem = {\r\n                        OutletName: configService.lastOutlet,\r\n                        PosOutletID: configService.lastOutletID,\r\n                        PosRegistryName: configService.lastRegistry,\r\n                        PosRegistryID: configService.lastRegistryID,\r\n                        Type: 'd',\r\n                        UserName: configService.lastUserName,\r\n                        TaxesIncluded: taxInclusive,\r\n                        BasePrice: 0,\r\n                        Price: -1 * rawSale.discountValue,\r\n                        Quantity: 1,\r\n                        Tax: rawSale.DiscountTax,\r\n                        Total: -1 * rawSale.discountValue,\r\n                        SalesRepresentative: sale.SalesRepresentative\r\n                    };\r\n\r\n                    items.push(newItem);\r\n                }\r\n            } else {\r\n                if (rawSale.DiscountValue > 0 || rawSale.Discount > 0) {\r\n                    var newItem = {\r\n                        OutletName: configService.lastOutlet,\r\n                        PosOutletID: configService.lastOutletID,\r\n                        PosRegistryName: configService.lastRegistry,\r\n                        PosRegistryID: configService.lastRegistryID,\r\n                        Type: 'd',\r\n                        UserName: configService.lastUserName,\r\n                        TaxesIncluded: taxInclusive,\r\n                        BasePrice: 0,\r\n                        Price: -1 * rawSale.DiscountValue,\r\n                        Quantity: 1,\r\n                        Tax: rawSale.DiscountTax,\r\n                        Total: -1 * rawSale.DiscountValue,\r\n                        SalesRepresentative: sale.SalesRepresentative\r\n                    };\r\n\r\n                    items.push(newItem);\r\n                }\r\n            }\r\n\r\n            var rnd = !isNewSale && Math.abs(rawSale.CashRounding) > 0 && typeof rawSale.FullReturnRounding === 'undefined' ?\r\n                rawSale.CashRounding : 0;\r\n            if (isNewSale)\r\n                rnd = CalculatorHelperService.getRoundingsFromPayments(rawSale);\r\n            if (Math.abs(rnd) > 0) {\r\n                var rsum = helperService.DEARRound(rnd, 2);\r\n\r\n                var newItem = {\r\n                    OutletName: configService.lastOutlet,\r\n                    PosOutletID: configService.lastOutletID,\r\n                    PosRegistryName: configService.lastRegistry,\r\n                    PosRegistryID: configService.lastRegistryID,\r\n                    Type: 'r',\r\n                    UserName: configService.lastUserName,\r\n                    TaxesIncluded: taxInclusive,\r\n                    BasePrice: 0,\r\n                    Price: rsum,\r\n                    Quantity: 1,\r\n                    Tax: 0,\r\n                    Total: rsum,\r\n                    SalesRepresentative: sale.SalesRepresentative\r\n                };\r\n\r\n                items.push(newItem);\r\n            }\r\n\r\n            if (!isNewSale && !!rawSale.FullReturnRounding && Math.abs(rawSale.FullReturnRounding) > 0) {\r\n                var newItem = {\r\n                    OutletName: configService.lastOutlet,\r\n                    PosOutletID: configService.lastOutletID,\r\n                    PosRegistryName: configService.lastRegistry,\r\n                    PosRegistryID: configService.lastRegistryID,\r\n                    Type: 'r',\r\n                    UserName: configService.lastUserName,\r\n                    TaxesIncluded: taxInclusive,\r\n                    BasePrice: 0,\r\n                    Price: helperService.DEARRound(-1 * rawSale.FullReturnRounding, 2),\r\n                    Quantity: 1,\r\n                    Tax: 0,\r\n                    Total: helperService.DEARRound(-1 * rawSale.FullReturnRounding, 2),\r\n                    SalesRepresentative: sale.SalesRepresentative\r\n                };\r\n\r\n                items.push(newItem);\r\n            }\r\n\r\n            return items;\r\n        }\r\n\r\n        saleService.surchargeSum = function (currentSale) {\r\n            var surchargeAmount = 0;\r\n            if (!!currentSale.Surcharges && currentSale.Surcharges.length > 0) {\r\n                $.each(currentSale.Surcharges, function (idx, el) {\r\n                    surchargeAmount += el.CalculatedValue;\r\n                });\r\n            }\r\n\r\n            return surchargeAmount;\r\n        };\r\n\r\n        saleService.surchargeTaxSum = function (currentSale) {\r\n            var surchargeTaxAmount = 0;\r\n            if (!!currentSale.Surcharges && currentSale.Surcharges.length > 0) {\r\n                $.each(currentSale.Surcharges, function (idx, el) {\r\n                    surchargeTaxAmount += el.Tax;\r\n                });\r\n            }\r\n\r\n            return surchargeTaxAmount;\r\n        };\r\n\r\n        saleService.addSaleToQueue = function (sale, rawSale, info) {\r\n            var obj = {\r\n                sale: sale,\r\n                rawSale: rawSale,\r\n                info: info\r\n            };\r\n\r\n            var queue = helperService.getSaleQueue();\r\n            if (!queue)\r\n                queue = [];\r\n\r\n            queue.push(obj);\r\n            helperService.storeSaleQueue(queue);\r\n            // at this moment sale is in queue so we can remove it from local storage\r\n            helperService.storeCurrentSale(null);\r\n        };\r\n\r\n        saleService.queueToSendIsInProcess = false;\r\n\r\n        saleService.processQueueToSend = function () {\r\n\r\n            if (saleService.queueToSendIsInProcess) return;\r\n            // extract first\r\n            var obj = helperService.getQueueSaleToSend();\r\n            if (!obj) {\r\n                $rootScope.$broadcast(constants.events.HEADER_SYNC_STATUS_EVENT, constants.events.STATUS_OK_AFTER_ERROR_SEND);\r\n                return;\r\n            }\r\n\r\n            saleService.queueToSendIsInProcess = true;\r\n\r\n            configService.pingFunction();\r\n\r\n            // to support old versions, let empty applicarionid to pass through\r\n            if ((!!obj.info.applicationID && obj.info.applicationID != configService.applicationID) ||\r\n                (!!obj.info.tenantID && obj.info.tenantID != configService.tenantID)) {\r\n                // helperService.processQueueToSendFail(obj);\r\n                saleService.queueToSendIsInProcess = false;\r\n                return helperService.resolvePromise(false);\r\n            }\r\n\r\n            saleService.processSale(obj.sale, obj.rawSale, obj.info)\r\n                .then(function (res) {\r\n                    if (res && typeof res.status !== 'undefined' && res.status === -2) {\r\n                        obj.info.statusID = saleService.OfflineStatus.ErrorHistory;\r\n                        var storeProvider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                        return storeProvider.addOfflineSale(obj.rawSale, obj.info, configService.isSite ? res.message : undefined).then(function() {\r\n                            helperService.processQueueToSendSuccess(obj);\r\n                            saleService.queueToSendIsInProcess = false;\r\n                            return saleService.processQueueToSend();\r\n                        });\r\n                    } else {\r\n                        helperService.processQueueToSendSuccess(obj);\r\n                        saleService.queueToSendIsInProcess = false;\r\n                        return saleService.processQueueToSend();\r\n                    }\r\n                }, function (err) {\r\n                    // return back record and get new\r\n                    helperService.processQueueToSendFail(obj);\r\n                    $rootScope.$broadcast(constants.events.HEADER_SYNC_STATUS_EVENT, constants.events.STATUS_ERROR_SEND_ORDER);\r\n                    saleService.queueToSendIsInProcess = false;\r\n                });\r\n\r\n        };\r\n\r\n        if (configService.isSite) {\r\n            $interval(function () {\r\n                saleService.processQueueToSend();\r\n            }, 5 * 1000); // check each 5 sec.\r\n        }\r\n\r\n        saleService.surchargeCacheLastLoad = null;\r\n        saleService.surchargeCache = null;\r\n\r\n        saleService.getSurcharge = function () {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            var pr = deferred.promise;\r\n\r\n            var currentDate = new Date();\r\n            if (saleService.surchargeCacheLastLoad == null || saleService.surchargeCacheLastLoad.getTime() + 15 * 1000 < currentDate.getTime()) {\r\n\r\n                pr = pr.then(function () {\r\n                        return webOnlyProvider.loadSurcharges();\r\n                    })\r\n                    .then(function (res) {\r\n\r\n                        saleService.surchargeCache = res.data.Surcharges;\r\n                        saleService.surchargeCacheLastLoad = currentDate;\r\n                        if (!configService.isSite && !deviceInfo.isSimulator) {\r\n                            return localDBProvider.savePOSData(configService.applicationID, 'Surcharges',\r\n                                    JSON.stringify(saleService.surchargeCache))\r\n                                .then(function () {\r\n                                    return helperService.resolvePromise(saleService.surchargeCache);\r\n                                });\r\n                        } else\r\n                            return helperService.resolvePromise(saleService.surchargeCache);\r\n                    })\r\n                    .catch(function (err) {\r\n                        if (!configService.isSite && !deviceInfo.isSimulator && err.status === -1) {\r\n                            return localDBProvider.getPOSData(configService.applicationID, 'Surcharges')\r\n                                .then(function (res) {\r\n                                    if (res == null) {\r\n                                        saleService.surchargeCache = null;\r\n                                        return helperService.rejectPromise(null);\r\n                                    } else {\r\n                                        saleService.surchargeCache = JSON.parse(res.Data);\r\n                                        return helperService.resolvePromise(saleService.surchargeCache);\r\n                                    }\r\n                                });\r\n                        } else if (err.status !== -1 || saleService.surchargeCache == null) {\r\n                            saleService.surchargeCache = null;\r\n                            return helperService.rejectPromise(err);\r\n                        } else {\r\n                            return helperService.resolvePromise(saleService.surchargeCache);\r\n                        }\r\n                    });\r\n            } else {\r\n                pr = pr.then(function () {\r\n                    return helperService.resolvePromise(saleService.surchargeCache);\r\n                });\r\n            }\r\n\r\n            return pr.then(function (surcharges) {\r\n                var surchargeTax = configService.lastSurchargeTax ? JSON.parse(configService.lastSurchargeTax) : null;\r\n                if (!!surcharges && !!surchargeTax) {\r\n                    $.each(surcharges, function (idx, s) {\r\n                        s.TaxRuleID = surchargeTax.ruleID;\r\n                    });\r\n\r\n                    return helperService.resolvePromise(surcharges);\r\n                }\r\n            });\r\n        };\r\n\r\n        // this function will try to build sequence of most possible\r\n        // banknote denominations that can be used to pay specified amount\r\n        saleService.predictCashPayments = function (sumToPay) {\r\n            var denominations = configService.banknoteDenominations; // array of available banknotes\r\n            if (!denominations || denominations.length === 0 || !sumToPay || sumToPay < 0) return []; // nothing to calculate\r\n\r\n            var res = [];\r\n            var minInteger = Math.ceil(sumToPay); // nearest not less integer\r\n\r\n            var jq = Enumerable.from(denominations)\r\n                .where(function (x) {\r\n                    return x.Nominal < minInteger;\r\n                })\r\n                .select(function (x) {\r\n                    return x.Nominal;\r\n                });\r\n\r\n            var twoBanknoteCombinations = jq.join(jq,\r\n                    function (t) {\r\n                        return 1;\r\n                    },\r\n                    function (u) {\r\n                        return 1;\r\n                    },\r\n                    function (t, u) {\r\n                        return {\r\n                            first: t,\r\n                            second: u\r\n                        };\r\n                    })\r\n                .distinct(function (x) {\r\n                    return x.first + x.second;\r\n                })\r\n                .where(function (x) {\r\n                    return x.first + x.second > minInteger;\r\n                })\r\n                .select(function (x) {\r\n                    return x.first + x.second;\r\n                });\r\n\r\n            var oneBanknotes = Enumerable.from(denominations)\r\n                .where(function (x) {\r\n                    return x.Nominal > minInteger;\r\n                })\r\n                .select(function (x) {\r\n                    return x.Nominal;\r\n                });\r\n\r\n            res = Enumerable.from([minInteger])\r\n                .union(twoBanknoteCombinations)\r\n                .union(oneBanknotes)\r\n                .where(function (x) {\r\n                    return x > sumToPay;\r\n                })\r\n                .distinct()\r\n                .orderBy()\r\n                .take(4)\r\n                .toArray();\r\n\r\n            return res;\r\n        };\r\n\r\n        // enum all sale products and call callback\r\n        // sale is from server call, i.e. formatted as API structure\r\n        // callback(item, isDirectSaleData)\r\n        saleService.goThroughEntireSaleItems = function (sale, callback) {\r\n            $.each(sale.Data.Lines, function (i, l) {\r\n                callback(l, true);\r\n            });\r\n\r\n            $.each(sale.Data.Refunds, function (i, ref) {\r\n                $.each(ref.Lines, function (i, l) {\r\n                    callback(l, false);\r\n                });\r\n            });\r\n        };\r\n\r\n        saleService.goThroughEntireSalePayments = function (sale, callback) {\r\n            $.each(sale.Data.Payments, function (i, p) {\r\n                callback(p, true);\r\n            });\r\n\r\n            $.each(sale.Data.Refunds, function (i, ref) {\r\n                $.each(ref.Payments, function (i, p) {\r\n                    callback(p, false);\r\n                });\r\n            });\r\n        };\r\n\r\n        saleService.goThroughEntireSaleSurcharges = function (sale, callback) {\r\n            $.each(sale.Data.Surcharges, function (i, s) {\r\n                callback(s, true);\r\n            });\r\n\r\n            $.each(sale.Data.Refunds, function (i, ref) {\r\n                $.each(ref.Surcharges, function (i, s) {\r\n                    callback(s, false);\r\n                });\r\n            });\r\n        };\r\n\r\n        saleService.formPaymentID = function (el) {\r\n            var ptp = el.ShortName;\r\n            if (ptp.indexOf(\"BackofficePayment_\") === 0) {\r\n                ptp = \"BackofficePayment_\";\r\n            }\r\n\r\n            var res = null;\r\n\r\n            switch (ptp) {\r\n                case 'loyalty':\r\n                case 'gift card':\r\n                case 'BackofficePayment_':\r\n                case 'store credits':\r\n                case 'cash':\r\n                    res = ptp + '@@1@@';\r\n                    break;\r\n                case 'credit card':\r\n                    res = 'credit card@@1@@' + el.ServerTransactionID + '@@2@@' + el.ClientTransactionID + '@@3@@';\r\n                    if (el.Surcharge)\r\n                        res += el.Surcharge.SurchargeID + '@@4@@';\r\n                    break;\r\n                default:\r\n                    if (!saleService.isStandardPaymentType(ptp)) {\r\n                        res = ptp + '@@1@@';\r\n                        if (el.Surcharge) {\r\n                            res += '@@2@@@@3@@' + el.Surcharge.SurchargeID + '@@4@@';\r\n                        }\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        saleService.formSurchargeID = function (el) {\r\n            var ptp = el.PaymentShortName;\r\n            if (ptp.indexOf(\"BackofficePayment_\") === 0) {\r\n                ptp = \"BackofficePayment_\";\r\n            }\r\n\r\n            var res = null;\r\n\r\n            switch (ptp) {\r\n                case 'loyalty':\r\n                case 'gift card':\r\n                case 'BackofficePayment_':\r\n                case 'store credits':\r\n                case 'cash':\r\n                    res = ptp + '@@1@@';\r\n                    break;\r\n                case 'credit card':\r\n                    res = 'credit card@@1@@' + el.ServerTransactionID + '@@2@@' + el.ClientTransactionID + '@@3@@';\r\n                    res += el.SurchargeID + '@@4@@';\r\n                    break;\r\n                default:\r\n                    if (!saleService.isStandardPaymentType(ptp)) {\r\n                        res = ptp + '@@1@@';\r\n                        res += '@@2@@@@3@@' + el.SurchargeID + '@@4@@';\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        saleService.getAmountWithoutSurcharge = function (payment) {\r\n            if (!payment.Surcharge)\r\n                return payment.Amount;\r\n\r\n            return payment.Amount -\r\n                (payment.InitialSurcharge ?\r\n                    payment.InitialSurcharge.CalculatedValueWithTax :\r\n                    payment.Surcharge.CalculatedValueWithTax);\r\n        };\r\n\r\n        // this one will recalculate surcharges to refund in according with: https://dearsystems.atlassian.net/wiki/spaces/DDD/pages/974487676/Surcharge+calculations+during+sale+payment+refund+exchange\r\n        // grouped sale contains combine grouped sale created from initial sale and all its refunds/exchanges\r\n        // so groupedSale represents final state of sale, i.e. what products are sold finally excluding refunded\r\n        // and what final payments are done excluding refunds\r\n        // paymentValidation - object with amount limits. For custom payments and card payments it also\r\n        // contains sums to pay and surcharges to pay and limits\r\n        // payments - contains cash,storecredit, loyalty limits and amounts.\r\n        // this should be expanded by cashSurcharge, storeCreditSurcharge and loyaltySurcharge\r\n        // at first credit card/ custom methods are processed and surcharge is defined\r\n        // only after this cash/storecredit/loyalty points surcharges are calculated\r\n        saleService.recalcRefundSurcharges = function (groupedSale, paymentValidation, payments, changedFieldType) {\r\n            if (!groupedSale) return;\r\n\r\n            // calculate cash surcharge refund limit\r\n            //  (TotalSurcharge - SUM(CardSurchargeToRefundAmount))*(MAX(TotalToRefund -RestCashToRefund, 0)/TotalSale)\r\n            // get rest of cash payments\r\n            var totalToRefund = groupedSale.TotalToRefund - groupedSale.ExchangeAmount;\r\n\r\n            var cashPayments = helperService.mapToList(groupedSale.PaymentsMap).filter(function (p) {\r\n                return p.ShortName === 'cash';\r\n            });\r\n            var cashRest = cashPayments.length > 0 ? Math.max(cashPayments[0].Amount, 0) : 0;\r\n\r\n            var cashSurchargeLimit = helperService.DEARRound(groupedSale.TotalSale <= 0 ? 0 :\r\n                (groupedSale.TotalSurcharge + groupedSale.GhostSurcharge - saleService.cardNCustomSurchargeRefunds(paymentValidation)) *\r\n                (totalToRefund / groupedSale.TotalSale), 2);\r\n\r\n            if (cashRest > payments.cash) {\r\n                // we still refund cash\r\n                cashSurchargeLimit = 0;\r\n            }\r\n\r\n            var storeCreditSurchargeLimit = helperService.DEARRound(groupedSale.TotalSale <= 0 ? 0 :\r\n                (groupedSale.TotalSurcharge + groupedSale.GhostSurcharge - saleService.cardNCustomSurchargeRefunds(paymentValidation)) *\r\n                (totalToRefund / groupedSale.TotalSale), 2);\r\n\r\n            if (changedFieldType) {\r\n                storeCreditSurchargeLimit -= payments.cashSurcharge;\r\n                if (storeCreditSurchargeLimit < 0) {\r\n                    storeCreditSurchargeLimit = 0;\r\n                    payments.storeCreditSurcharge = 0;\r\n                }\r\n\r\n                cashSurchargeLimit -= payments.storeCreditSurcharge;\r\n                if (cashSurchargeLimit < 0) {\r\n                    cashSurchargeLimit = 0;\r\n                    payments.cashSurcharge = 0;\r\n                }\r\n            } else {\r\n                payments.cashSurcharge = 0;\r\n                payments.storeCreditSurcharge = 0;\r\n            }\r\n\r\n            paymentValidation.cashSurchargeAmount = cashSurchargeLimit;\r\n            paymentValidation.storeCreditSurchargeAmount = storeCreditSurchargeLimit;\r\n            payments.cashRounded = helperService.roundCash(payments.cash + payments.cashSurcharge);\r\n        };\r\n\r\n        // we know surcharges, refunded by cash/storecredit, so we need to reduce limits for all payment surcharge related\r\n        // methods\r\n        saleService.prepareSurchargeLimits = function (groupedSale, paymentValidation) {\r\n            if (!groupedSale) return;\r\n\r\n            var coeff = groupedSale.TotalSurcharge <= 0 ? 0 : (groupedSale.TotalSurcharge + groupedSale.GhostSurcharge) / groupedSale.TotalSurcharge;\r\n            if (coeff < 0) coeff = 0; // to compensate possible rounding error\r\n\r\n            var totalToRefund = groupedSale.TotalToRefund - groupedSale.ExchangeAmount;\r\n\r\n            $.each(paymentValidation.customPayments, function (i, p) {\r\n                if (p.Surcharge) {\r\n                    var src = groupedSale.PaymentsMap[p.id];\r\n                    var sm = src.Amount - (!src.InitialSurcharge ? 0 : src.InitialSurcharge.CalculatedValueWithTax);\r\n                    if (sm < 0)\r\n                        sm = 0;\r\n\r\n                    if (coeff && sm > 0)\r\n                        coeff *= Math.min(totalToRefund, sm) / sm;\r\n\r\n                    p.validationAmount = helperService.DEARRound(Math.min(totalToRefund, sm), 2);\r\n\r\n                    if (p.Surcharge.RefundSurcharge === true && coeff > 0 && src.InitialSurcharge.CalculatedValueWithTax > 0) {\r\n                        p.Surcharge.CalculatedValueWithTax = helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValueWithTax, 2);\r\n                        p.Surcharge.CalculatedValue = helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValue, 2);\r\n                        p.Surcharge.Tax = helperService.DEARRound(coeff * src.InitialSurcharge.Tax, 2);\r\n                    } else {\r\n                        p.Surcharge.CalculatedValueWithTax = 0;\r\n                        p.Surcharge.CalculatedValue = 0;\r\n                        p.Surcharge.Tax = 0;\r\n                    }\r\n                    p.Surcharge.AmountToRefund = 0;\r\n                    p.Surcharge.TaxToRefund = 0;\r\n                }\r\n            });\r\n\r\n            var map = helperService.mapToList(paymentValidation.cardPayments);\r\n            cardPayService.createCardPaymentMap(groupedSale);\r\n\r\n            $.each(map, function (i, p) {\r\n                if (p.Surcharge) {\r\n                    //                    var src = groupedSale.PaymentsMap[p.id];\r\n                    var src = groupedSale.PaymentsMap[p.Surcharge.PaymentID];\r\n                    if (!src)\r\n                        src = groupedSale.PaymentsMap2[p.id];\r\n\r\n                    if (coeff && p.validationAmount > 0)\r\n                        coeff *= Math.min(totalToRefund, p.validationAmount) / (!p.initialValidationPayment ? p.validationAmount : p.initialValidationPayment); //p.validationAmount;\r\n\r\n                    p.validationAmount = helperService.DEARRound(Math.min(totalToRefund, p.validationAmount), 2);\r\n\r\n                    if (p.Surcharge.RefundSurcharge === true && coeff > 0 && src.InitialSurcharge.CalculatedValueWithTax > 0) {\r\n                        p.Surcharge.CalculatedValueWithTax = helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValueWithTax, 2);\r\n                        p.Surcharge.CalculatedValue = helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValue, 2);\r\n                        p.Surcharge.Tax = helperService.DEARRound(coeff * src.InitialSurcharge.Tax, 2);\r\n                    } else {\r\n                        p.Surcharge.CalculatedValueWithTax = 0;\r\n                        p.Surcharge.CalculatedValue = 0;\r\n                        p.Surcharge.Tax = 0;\r\n                    }\r\n                    p.Surcharge.AmountToRefund = 0;\r\n                    p.Surcharge.TaxToRefund = 0;\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.cardNCustomSurchargeRefunds = function (paymentValidation) {\r\n            var sum = 0;\r\n            $.each(paymentValidation.customPayments, function (i, p) {\r\n                if (p.Surcharge)\r\n                    sum += p.Surcharge.AmountToRefund;\r\n            });\r\n            $.each(helperService.mapToList(paymentValidation.cardPayments), function (i, p) {\r\n                if (p.Surcharge)\r\n                    sum += p.Surcharge.AmountToRefund;\r\n            });\r\n\r\n            return sum;\r\n        };\r\n\r\n        saleService.cardNCustomSelectedRefunds = function (paymentValidation) {\r\n            var sum = 0;\r\n            $.each(paymentValidation.customPayments, function (i, p) {\r\n                sum += p.amount;\r\n            });\r\n            $.each(helperService.mapToList(paymentValidation.cardPayments), function (i, p) {\r\n                sum += p.amount;\r\n            });\r\n\r\n            return sum;\r\n        };\r\n\r\n        saleService.calcSelectedSurcharges = function (payments, paymentValidation) {\r\n            if (!payments) return 0;\r\n\r\n            if (!payments.cashSurcharge)\r\n                payments.cashSurcharge = 0;\r\n            if (!payments.storeCreditSurcharge)\r\n                payments.storeCreditSurcharge = 0;\r\n            return helperService.DEARRound(payments.cashSurcharge + payments.storeCreditSurcharge +\r\n                saleService.cardNCustomSurchargeRefunds(paymentValidation), 2);\r\n        };\r\n\r\n        saleService.calcTotalPay = function (payments, paymentValidation) {\r\n            if (!payments || !paymentValidation) return 0;\r\n            var sum = 0;\r\n            if (payments.cashRounded)\r\n                sum += payments.cashRounded;\r\n            if (payments.cashSurcharge)\r\n                sum -= payments.cashSurcharge;\r\n            if (payments.storeCredit)\r\n                sum += payments.storeCredit;\r\n            if (payments.loyaltyPoints)\r\n                sum += payments.loyaltyPoints;\r\n            return helperService.DEARRound(sum + saleService.cardNCustomSelectedRefunds(paymentValidation), 2);\r\n        };\r\n\r\n        saleService.createGhostSurchargeToRefund = function (currentSale, paymentShortName, surchargeAmountToRefund, paymentAmount) {\r\n            var isNewSale = helperService.showNewCheckoutUI(currentSale);\r\n\r\n            var surcharge = {};\r\n            surcharge.Name = \"Surcharge via \" + paymentShortName;\r\n            surcharge.SurchargeID = uuid2.newguid();\r\n            surcharge.CalculatedValue = -1 * helperService.DEARRound(surchargeAmountToRefund, 2);\r\n            surcharge.Tax = 0;\r\n            surcharge.TaxRuleID = '00000000-0000-0000-0000-000000000000';\r\n            surcharge.CalculatedValueWithTax = surcharge.CalculatedValue;\r\n            surcharge.PaymentRealAmount = paymentAmount;\r\n            surcharge.PaymentShortName = paymentShortName; // this is the mark of ghost surcharge\r\n            if (!isNewSale)\r\n                currentSale.Surcharges.push(surcharge);\r\n            else\r\n                CalculatorHelperService.addGhostSurcharge(currentSale, surcharge, paymentShortName);\r\n        };\r\n\r\n        saleService.calculateRefundSurcharges = function (currentSale) {\r\n            if (currentSale && currentSale.GroupedSale && currentSale.GroupedSale.PaymentsMap) {\r\n                currentSale.SurchargeTaxToRefund = 0;\r\n                currentSale.SurchargeToRefund = 0;\r\n\r\n                $.each(helperService.mapToList(currentSale.GroupedSale.PaymentsMap), function (i, p) {\r\n                    if (p.Surcharge && p.Surcharge.RefundSurcharge === true && p.Surcharge.AmountToRefund) {\r\n                        currentSale.SurchargeToRefund += p.Surcharge.AmountToRefund;\r\n                        currentSale.SurchargeTaxToRefund += p.Surcharge.TaxToRefund;\r\n                    }\r\n                });\r\n            }\r\n        };\r\n\r\n        saleService.addExchangeAmountToGroupedSale = function (currentSale, isTaxInclusive) {\r\n            currentSale.GroupedSale.ExchangeAmount = 0;\r\n            $.each(currentSale.CheckoutItems, function (i, el) {\r\n                if (el.Amount > 0)\r\n                    currentSale.GroupedSale.ExchangeAmount += el.Amount + (isTaxInclusive !== true ? el.Tax : 0);\r\n            });\r\n\r\n            currentSale.GroupedSale.ExchangeAmount = helperService.DEARRound(currentSale.GroupedSale.ExchangeAmount, 2);\r\n        };\r\n\r\n        saleService.getProductDeals = function () {\r\n            return productDeals;\r\n        };\r\n\r\n        saleService.setPaymentLimits = function (scope, paymentType, sumRest) {\r\n            sumRest = helperService.DEARRound(sumRest, 2);\r\n\r\n            switch (paymentType) {\r\n                case 'cash':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.cash;\r\n                    scope.refundDialogItem.Amount = !scope.payments.cash ?\r\n                        Math.min(scope.paymentValidation.cashAmount, sumRest) :\r\n                        scope.payments.cash;\r\n                    break;\r\n                case 'cashSurcharge':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.cashSurcharge;\r\n                    scope.refundDialogItem.Amount = !scope.payments.cashSurcharge ?\r\n                        scope.paymentValidation.cashSurchargeAmount :\r\n                        scope.payments.cashSurcharge;\r\n                    break;\r\n                case 'storeCredit':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.storeCredit;\r\n                    scope.refundDialogItem.Amount = !scope.payments.storeCredit ?\r\n                        Math.min(scope.paymentValidation.storeCreditAmount, sumRest) :\r\n                        scope.payments.storeCredit;\r\n                    break;\r\n                case 'storeCreditSurcharge':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.storeCreditSurcharge;\r\n                    scope.refundDialogItem.Amount = !scope.payments.storeCreditSurcharge ?\r\n                        scope.paymentValidation.storeCreditSurchargeAmount :\r\n                        scope.payments.storeCreditSurcharge;\r\n                    break;\r\n                case 'loyaltyPoints':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.loyaltyPoints;\r\n                    scope.refundDialogItem.Amount = !scope.payments.loyaltyPoints ?\r\n                        Math.min(scope.paymentValidation.loyaltyPointsAmount, sumRest) :\r\n                        scope.payments.loyaltyPoints;\r\n                    break;\r\n                case 'creditCard':\r\n                    var eid = scope.refundDialogItem.elementId;\r\n                    var val = scope.paymentValidation.cardPayments[eid].amount;\r\n                    scope.refundDialogItem.OldAmount = val;\r\n                    var valAmount = helperService.DEARRound(scope.paymentValidation.cardPayments[eid].validationAmount, 2);\r\n\r\n                    scope.refundDialogItem.Amount = !val ? Math.min(valAmount, sumRest) : val;\r\n                    break;\r\n\r\n                default:\r\n                    var eid = scope.refundDialogItem.elementId;\r\n                    var cp = scope.paymentValidation.customPayments.filter(function (el) {\r\n                        return el.id === eid;\r\n                    });\r\n                    scope.refundDialogItem.OldAmount = cp[0].amount;\r\n                    scope.refundDialogItem.Amount = !cp[0].amount ? Math.min(cp[0].validationAmount, sumRest) : cp[0].amount;\r\n                    break;\r\n            }\r\n        };\r\n\r\n        saleService.setRefundAmount = function ($scope, prm, isTaxInclusive, skipDialog) {\r\n            $scope.changepPaymentAmount();\r\n\r\n            if (skipDialog !== true) {\r\n                $timeout(function () {\r\n                    $scope.refundPaymentAmountDlg.hide(true);\r\n                });\r\n            }\r\n            $timeout(function () {\r\n                $scope.refundDialogItem.Amount = parseFloat($scope.refundDialogItem.Amount);\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                var prms = {\r\n                    paymentValidation: $scope.paymentValidation,\r\n                    payments: $scope.payments,\r\n                    selectedItem: $scope.selectedItem,\r\n                    operationSubName: $scope.operationSubName,\r\n                    actionMode: $scope.actionMode\r\n                };\r\n\r\n                if (prm === true) {\r\n                    var amountLimit = helperService.DEARRound($scope.getRemainingToRefund(false), 2) + $scope.refundDialogItem.OldAmount;\r\n                    var checkLimit = false;\r\n                    var forceMessage = false;\r\n                    switch ($scope.refundDialogItem.Type) {\r\n                        case 'cashSurcharge':\r\n                            if ($scope.refundDialogItem.Amount > $scope.paymentValidation.cashSurchargeAmount)\r\n                                forceMessage = true;\r\n                            break;\r\n                        case 'storeCreditSurcharge':\r\n                            if ($scope.refundDialogItem.Amount > $scope.paymentValidation.storeCreditSurchargeAmount)\r\n                                forceMessage = true;\r\n                            break;\r\n                        default:\r\n                            checkLimit = true;\r\n                            break;\r\n                    }\r\n\r\n                    if (checkLimit || forceMessage) {\r\n                        if (forceMessage || $scope.refundDialogItem.Amount > amountLimit) {\r\n                            errorService.showError(gettextCatalog.getString('Entered amount is larger than remaining amount.<br/>Please enter a smaller value.'));\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    switch ($scope.refundDialogItem.Type) {\r\n                        case 'cash':\r\n                            $scope.payments.cash = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            if ($scope.payments.cash > 0 && $scope.refundDialogItem.Amount != $scope.refundDialogItem.OldAmount) {\r\n                                $scope.payments.cashSurcharge = $scope.paymentValidation.cashSurchargeAmount;\r\n                                $scope.payments.storeCreditSurcharge = 0;\r\n                            }\r\n                            $scope.payments.cashRounded = helperService.roundCash($scope.payments.cash + $scope.payments.cashSurcharge);\r\n\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments, 'cash');\r\n                            else {\r\n                                prms.changedFieldType = 'cash';\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'cashSurcharge':\r\n                            $scope.payments.cashSurcharge = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            $scope.payments.cashRounded = helperService.roundCash($scope.payments.cash + $scope.payments.cashSurcharge);\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments, 'cash');\r\n                            else {\r\n                                prms.changedFieldType = 'cash';\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'storeCredit':\r\n                            $scope.payments.storeCredit = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            $scope.payments.storeCreditSurcharge = !$scope.paymentValidation.storeCreditAmount ? 0 :\r\n                                helperService.DEARRound($scope.paymentValidation.storeCreditSurchargeAmount * ($scope.payments.storeCredit / $scope.paymentValidation.storeCreditAmount), 2);\r\n                            if (isNewSale) {\r\n                                prms.changedFieldType = 'store credits';\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'storeCreditSurcharge':\r\n                            $scope.payments.storeCreditSurcharge = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments, 'store credits');\r\n                            else {\r\n                                prms.changedFieldType = 'store credits';\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'loyaltyPoints':\r\n                            $scope.payments.loyaltyPoints = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            prms.changedFieldType = 'loyalty';\r\n                            if (isNewSale) {\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'creditCard':\r\n                            var eid = $scope.refundDialogItem.elementId;\r\n                            var sum = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n\r\n                            $scope.paymentValidation.cardPayments[eid].amount = sum;\r\n                            if ($scope.paymentValidation.cardPayments[eid].Surcharge) {\r\n                                var surchargeAmount = $scope.paymentValidation.cardPayments[eid].Surcharge.CalculatedValue;\r\n\r\n                                var amountPercent = sum / $scope.paymentValidation.cardPayments[eid].validationAmount;\r\n                                var taxToRefund = helperService.DEARRound($scope.paymentValidation.cardPayments[eid].Surcharge.Tax * amountPercent, 2);\r\n                                var amountToRefund = surchargeAmount * amountPercent;\r\n                                $scope.paymentValidation.cardPayments[eid].Surcharge.AmountToRefund = helperService.DEARRound(amountToRefund, 2) + (isTaxInclusive ? 0 : taxToRefund);\r\n                                $scope.paymentValidation.cardPayments[eid].Surcharge.TaxToRefund = taxToRefund;\r\n                            }\r\n\r\n                            $scope.payments.creditCard = cardPayService.sumAllCardPayments($scope.paymentValidation.cardPayments);\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments);\r\n                            else {\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n\r\n                            break;\r\n\r\n                        default:\r\n                            var eid = $scope.refundDialogItem.elementId;\r\n                            var sum = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n\r\n                            var cp = $scope.paymentValidation.customPayments.filter(function (el) {\r\n                                return el.id === eid;\r\n                            });\r\n                            cp[0].amount = sum;\r\n\r\n                            if (cp[0].Surcharge) {\r\n                                var surchargeAmount = cp[0].Surcharge.CalculatedValue;\r\n\r\n                                var amountPercent = sum / cp[0].validationAmount;\r\n                                var taxToRefund = helperService.DEARRound(cp[0].Surcharge.Tax * amountPercent, 2);\r\n                                var amountToRefund = surchargeAmount * amountPercent;\r\n                                cp[0].Surcharge.AmountToRefund = helperService.DEARRound(amountToRefund, 2) + (isTaxInclusive ? 0 : taxToRefund);\r\n                                cp[0].Surcharge.TaxToRefund = taxToRefund;\r\n                            }\r\n\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments);\r\n                            else {\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                    }\r\n                } else if (typeof (prm) == 'string' && prm !== 'cancel') {\r\n\r\n                    switch ($scope.refundDialogItem.Type) {\r\n                        case 'cancel':\r\n                            break; // do nothing\r\n                        case 'cash':\r\n                            $scope.payments.cash = 0;\r\n                            break;\r\n                        case 'cashSurcharge':\r\n                            $scope.payments.cashSurcharge = 0;\r\n                            break;\r\n                        case 'storeCredit':\r\n                            $scope.payments.storeCredit = 0;\r\n                            break;\r\n                        case 'storeCreditSurcharge':\r\n                            $scope.payments.storeCreditSurcharge = 0;\r\n                            break;\r\n                        case 'loyaltyPoints':\r\n                            $scope.payments.loyaltyPoints = 0;\r\n                            break;\r\n                        case 'creditCard':\r\n                            $scope.payments.creditCard = 0;\r\n                            cardPayService.setAllCardAmountToZero($scope.paymentValidation.cardPayments);\r\n                            break;\r\n\r\n                        default:\r\n                            $.each($scope.paymentValidation.customPayments, function (i, p) {\r\n                                p.amount = 0;\r\n                                if (p.Surcharge) {\r\n                                    p.Surcharge.AmountToRefund = 0;\r\n                                    p.Surcharge.TaxToRefund = 0;\r\n                                }\r\n                            });\r\n                            break;\r\n                    }\r\n\r\n                    if (isNewSale)\r\n                        CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                }\r\n\r\n                $scope.refundDialogItem.Amount = 0;\r\n            });\r\n        };\r\n\r\n        saleService.loadDEARSales = function (page, limit, filters) {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadDEARSales(page, limit, filters).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        saleService.loadDEARSale = function (taskID) {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadDEARSale(taskID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n\r\n        saleService.attachFilesToOrder = function (orderID, files) {\r\n            return webOnlyProvider.attachFilesToOrder(orderID, configService.lastUserName, files);\r\n        };\r\n\r\n        saleService.removeAttachment = function (attachmentId) {\r\n            return webOnlyProvider.removeAttachment(attachmentId);\r\n        };\r\n\r\n        saleService.giftCardExists = function (code) {\r\n            var isRemoteProvider = configService.isSite || (configService.isOnline);\r\n            if (isRemoteProvider) {\r\n                $.blockUI();\r\n                return remoteRequestProvider.checkGiftCardExists(code).then(function (resp) {\r\n                    return resp.data;\r\n                });\r\n            } else {\r\n                return helperService.rejectPromise(gettextCatalog.getString('Cannot sell gift card while offline'));\r\n            }\r\n        };\r\n\r\n        saleService.checkPosSaleOrderExists = function (posOrderID) {\r\n            var isRemoteProvider = !!configService.isSite || !!configService.isOnline;\r\n            if (isRemoteProvider) {\r\n                $.blockUI();\r\n                return webOnlyProvider.checkSaleOrderExists(posOrderID).then(function (resp) {\r\n                    return helperService.resolvePromise(resp.data.result === true);\r\n                })\r\n                .catch(function(err) {\r\n                    return helperService.resolvePromise(false);\r\n                });\r\n            } else {\r\n                return helperService.resolvePromise(false);\r\n            }\r\n        };\r\n\r\n        saleService.isVoided = function (order) {\r\n            return order.Status && order.Status.endsWith('VOIDED');\r\n        };\r\n\r\n        saleService.loadLLCustomerRewards = function(merchantID){\r\n            var provider = remoteRequestProvider;\r\n            var deferred = $q.defer();\r\n\r\n            var pr = provider.getLLCustomerRewards(merchantID).then(function (res) {\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            }, function (err) {\r\n                deferred.resolve(err.data); // always resolve to mark as handled\r\n                return deferred.promise;\r\n            });\r\n    \r\n            return pr;\r\n        };\r\n\r\n        saleService.updateSaleOrderNumberForCurrentSale = function (resp, sale, rawSale) {\r\n            if (!resp?.data?.OrderNumberDetails?.length || !sale || !rawSale) {\r\n                return;\r\n            }\r\n\r\n            const details = resp.data.OrderNumberDetails;\r\n            const currentOrderId = sale.OrderID || rawSale.OrderID;\r\n\r\n            let match = null;\r\n\r\n            if (currentOrderId) {\r\n                match = details.find(d =>d.RegistrySequenceUpdated === true && d.OrderID && d.OrderID === currentOrderId);\r\n            }\r\n\r\n            if (!match) {\r\n                match = details.find(d => d.RegistrySequenceUpdated === true && d.OriginalOrderNumber && d.OriginalOrderNumber === sale.OrderNumber);\r\n            }\r\n\r\n            if (!match) {\r\n                return;\r\n            }\r\n\r\n            ['OrderNumber', 'ClearOrderNumber'].forEach(field => {\r\n                if (match[field]) {\r\n                    sale[field] = match[field];\r\n                    rawSale[field] = match[field];\r\n                }\r\n            });\r\n\r\n            sale.UpdateReceiptView = true;\r\n        }\r\n\r\n        return saleService;\r\n\r\n    }\r\n]);","import {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport Enumerable from 'linq';\r\nimport { convertFromOld, restoreTransactionMetadata } from '../../TypePosScripts/ConverterService';\r\nimport { StartCalcLevel } from '../../TypePosScripts/Enums';\r\n\r\n\r\nangular.module(\"mainApp\").controller('salesHistoryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'saleService', '$location', 'errorService', 'outletService',\r\n        'configService', 'gettextCatalog', 'helperService', 'orderByFilter', 'uuid2', 'receiptService',\r\n        'printService', 'emailService', '$q', 'cardPayService', '$filter', 'customerService', 'fontMeasureService', 'clickAndCollectService',\r\n        'webOnlyProvider', '$locale', '$window', 'orderStatusService',\r\n        /**\r\n        * @param {import('../../TypePosScripts/Typings/Typings').CardPayService} cardPayService - Somebody's name.\r\n            */\r\n        function ($scope, $rootScope, constants, loginService, $timeout, saleService, $location, errorService, outletService,\r\n            configService, gettextCatalog, helperService, orderBy, uuid2, receiptService,\r\n            printService, emailService, $q, cardPayService, $filter, customerService, fontMeasureService, clickAndCollectService,\r\n            webOnlyProvider, $locale, $window, orderStatusService) {\r\n\r\n            //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSellSectionName }); // to hide sidebar details\r\n            $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constSalesHistoryViewName }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n                //            $rootScope.$broadcast('login.show'); // show login page on application start\r\n            }\r\n\r\n            $scope.isLoyaltyEnabled = configService.enableLoyalty === true;\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            $scope.getImageUrl = function (imageID) {\r\n                if (imageID) {\r\n                    var subUrl = 'PosProductImage';\r\n                    var size = '&width=' + configService.imagesX + '&height=' + configService.imagesY;\r\n                    return configService.baseImageURL + '?ID=' + imageID + size;\r\n\r\n                }\r\n                return null;\r\n            };\r\n\r\n            $scope.isGiftCardRefundable = configService.isGiftCardRefundable();\r\n            $scope.floatPrecision = configService.fractionalLimit;\r\n\r\n            $scope.operationSubName = null;\r\n            $scope.nothingFound = false;\r\n            $scope.fullFilters = false;\r\n            $scope.filters = {\r\n                OutletID: '0',\r\n                StatusID: '0',\r\n                DateFrom: null,\r\n                DateTo: null\r\n            };\r\n\r\n            $scope.dearSalesFilters = {\r\n                searchText: null,\r\n                DateFrom: null,\r\n                DateTo: null\r\n            };\r\n\r\n            $scope.sorting = {};\r\n            $scope.lastRequestDateTime = moment().utc().format();\r\n\r\n            $scope.selectedPage = 1;\r\n            $scope.dearSalesSelectedPage = 1;\r\n            $scope.totalPages = 1;\r\n            $scope.dearSalesTotalPages = 1;\r\n            $scope.itemsByPage = 25;//15;\r\n            $scope.totalRecords = 0;\r\n\r\n            $scope.isLoading = false;\r\n\r\n            $scope.triggerChangeOutletFilter = false;\r\n            $scope.triggerChangeStatusFilter = false;\r\n\r\n            $scope.dateFormat = helperService.getDateFormat();\r\n            $scope.currentDir = 'desc';\r\n            $scope.newDir = 'asc';\r\n            $scope.sortFiled = 'Date';\r\n            //$scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n\r\n            $scope.fcss = { 'height': window.innerHeight * 0.8 + 'px' };\r\n\r\n            $scope.setFocus = helperService.setFocus;\r\n            $scope.returnedLoaylty = {\r\n                value: 0\r\n            };\r\n\r\n            $scope.canSeeAllSales = configService.canSeeAllSales;\r\n            $scope.canClearOfflineSales = configService.canClearOfflineSales;\r\n            $scope.gridType = 'pos';\r\n            $scope.selectedDearSale = null;\r\n\r\n            $scope.dearOrdersTotal = 0;\r\n\r\n            $scope.selectedAttachment = null;\r\n            $scope.isSite = configService.isSite;\r\n\r\n            $scope.canBeVoided = false;\r\n\r\n\r\n\r\n            $scope.changeGridType = function(type){\r\n               $scope.gridType = type;\r\n            };\r\n\r\n\r\n            $scope.dearSalesSearch = function (keepData) {\r\n                if(!keepData)\r\n                    $scope.dearSalesSelectedPage = 1;\r\n\r\n                $.blockUI();\r\n                saleService.loadDEARSales($scope.dearSalesSelectedPage, $scope.itemsByPage, $scope.dearSalesFilters).then(function (resp) {\r\n                    $.each(resp.Orders, function(idx,el){\r\n                        el.OrderDateFormated = $scope.getDateByFormat(el.SaleOrderDate, 'LL');\r\n\r\n                        if(keepData){\r\n                            if(!$scope.dearSales.filter(function(fEl){\r\n                                return fEl.TaskID === el.TaskID;\r\n                            }).length > 0){                            \r\n                                    $scope.dearSales.push(el);                            \r\n                            }\r\n                        }\r\n                    });\r\n                    \r\n\r\n                    if(!keepData){\r\n                        $scope.dearSales = resp.Orders;                        \r\n                    }\r\n    \r\n                    dearSalesGetPages(resp.Total);\r\n                        $.unblockUI();\r\n                    },\r\n                    function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            function dearSalesGetPages(total) {\r\n                $scope.dearOrdersTotal = total;\r\n                var step = $scope.itemsByPage;\r\n                $scope.dearSalesTotalPages = Math.ceil(total / step);\r\n                  if ($scope.dearSalesTotalPages === 0) {\r\n                    $scope.dearSalesTotalPages = 1;\r\n                }\r\n            }\r\n\r\n            const dearSalesScrollReachBottomCallback = function (){\r\n                if ($scope.dearSalesSelectedPage < $scope.dearSalesTotalPages) {\r\n                    $scope.dearSalesSelectedPage++;\r\n                    $scope.dearSalesSearch(true);\r\n                }                \r\n            };\r\n\r\n\r\n            $scope.isOnline = configService.isOnline;\r\n    \r\n            $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n                $scope.isOnline = object;\r\n                if ($scope.isOnline === false) {\r\n                    $scope.gridType = 'pos';\r\n                }\r\n            });\r\n\r\n            $scope.$on('deliveryDialog.closed', function (event) {\r\n                $scope.search();\r\n            });\r\n\r\n            $scope.dearSalesSelectRow = function(row){\r\n                $scope.selectedDearSale = row;\r\n                $scope.dialogMode = 'convertDEARSaleToPosSale';\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        gettextCatalog.getString('Would you like to return this item?'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n\r\n            };\r\n\r\n\r\n            $scope.convertDearSaleIntoPosSale = function(){\r\n                if($scope.selectedDearSale != null){\r\n                                     \r\n                    $.blockUI();\r\n                    var taskID = $scope.selectedDearSale.TaskID;\r\n                    saleService.loadDEARSale(taskID).then(function(dearSale){\r\n                        if(dearSale.PosOrderID){\r\n                            $.unblockUI();\r\n                            var item = {PosOrderID : dearSale.PosOrderID};\r\n                            $scope.selectItem(item);\r\n                        }\r\n                        else {\r\n                            $scope.dearSale = dearSale;\r\n                            $scope.dearSale.PickedLines = [];\r\n                            $scope.dearSale.fromOrderLines = false;\r\n                \r\n                            $scope.dearSale.InvoiceDateFormated = $scope.getDateByFormat($scope.dearSale.InvoiceDate, $scope.dateFormat);\r\n                            $scope.dearSale.DueDateFormated = $scope.getDateByFormat($scope.dearSale.DueDate, $scope.dateFormat);    \r\n            \r\n                            var resultSales = clickAndCollectService.convertDearSaleIntoPOSSaleWithRefunds($scope.dearSale);\r\n                            var isTaxInvlusive = resultSales[0].sale.IsTaxInclusive;\r\n                \r\n                            var currentSaleObjects = []; \r\n                            \r\n                            $.each(resultSales, function(idx, posSale){\r\n                                var apiPosSale = clickAndCollectService.convertCurrentSaleForAPI(posSale.sale, 'CLOSED', null, isTaxInvlusive, posSale.refundID); \r\n                                \r\n                                apiPosSale.OrderNumber = $scope.dearSale.InvoiceNumber;\r\n                                apiPosSale.IsFromDearSale = true;\r\n                                currentSaleObjects.push({apiPosSale, posSale: posSale.sale});\r\n                            });\r\n\r\n\r\n                            var prm = helperService.resolvePromise(true);\r\n\r\n                            $.each(currentSaleObjects, function (idx, sale) {\r\n                                prm = prm.then(function(){\r\n                                    return clickAndCollectService.saveSale(sale.apiPosSale, sale.posSale, null , true);\r\n                                });\r\n                            });\r\n\r\n                            prm.then(function(resp){\r\n                                if(resp.Errors && resp.Errors.length > 0){\r\n                                    var errorMessage = \"\";\r\n                                    $.each(resp.Errors, function(ids,error){\r\n                                        $.each(error.Errors, function(ids,error2){\r\n                                            errorMessage += error2.ErrorMessage + \"<br/>\";\r\n                                        });\r\n                                    });\r\n                                    $.unblockUI();\r\n                                    errorService.showError(errorMessage);\r\n                                }else{\r\n                                    $.unblockUI();\r\n                                    \r\n                                    var item = {PosOrderID : taskID};\r\n                                    $scope.selectItem(item);\r\n                                }\r\n                            }).catch(function(err){\r\n                                $.unblockUI();\r\n                                var error = gettextCatalog.getString(\"Failed to convert sale, please try again later or contact support.\");\r\n                                errorService.showError(error);                    \r\n                            });\r\n\r\n                        }\r\n                    },function(){\r\n                        $.unblockUI();\r\n            \r\n                        var error = gettextCatalog.getString(\"Failed to convert sale, please try again later or contact support.\");\r\n            \r\n                        errorService.showError(error);\r\n                    });                    \r\n                }\r\n                $scope.selectedDearSale = null;\r\n            };\r\n\r\n\r\n            $scope.$watch('filters.StatusID',\r\n                function (newValue, oldValue) {\r\n\r\n                    if ($scope.triggerChangeStatusFilter) {\r\n                        $scope.selectedPage = 1;\r\n                        $scope.search();\r\n                    }\r\n\r\n                    $scope.triggerChangeStatusFilter = true;\r\n                }\r\n            );\r\n\r\n            $scope.$watch('filters.OutletID',\r\n                function (newValue, oldValue) {\r\n\r\n                    if ($scope.triggerChangeOutletFilter) {\r\n                        $scope.selectedPage = 1;\r\n                        $scope.search();\r\n                    }\r\n\r\n                    $scope.triggerChangeOutletFilter = true;\r\n                }\r\n            );\r\n\r\n            $scope.dateSelectedCallback = function (from, to) {\r\n                $scope.filters.DateFrom = from;\r\n                $scope.filters.DateTo = to;\r\n                $scope.selectedPage = 1;\r\n                if ($scope.gridType !== 'pos') {\r\n                    $scope.dearSalesDateSelectedCallback(from, to);\r\n                } else {\r\n                    $scope.search();\r\n                }\r\n            };\r\n\r\n            $scope.dearSalesDateSelectedCallback = function (from, to) {\r\n                $scope.dearSalesFilters.DateFrom = from;\r\n                $scope.dearSalesFilters.DateTo = to;\r\n                $scope.dearSalesSelectedPage = 1;\r\n                $scope.dearSalesSearch();\r\n            };\r\n\r\n            const scrollReachBottomCallback = function () {\r\n                if ($scope.gridType != 'pos') {\r\n                    dearSalesScrollReachBottomCallback();\r\n                    return;\r\n                }\r\n                if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages) {\r\n                    $scope.selectedPage++;\r\n                    $scope.search(true);\r\n                }\r\n            };\r\n\r\n            initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n            $scope.abs = function (x) {\r\n                if (x)\r\n                    return helperService.DEARRound(Math.abs(x), 2);\r\n                return 0;\r\n            };\r\n\r\n            $scope.haveItemLine = function (arr, status) {\r\n                if (status === 'RETURN')\r\n                    return false;\r\n                var have = false;\r\n                $.each(arr, function (idx, el) {\r\n                    if (el.IsProduct === true || el.Name !== 'Rounding') {\r\n                        have = true;\r\n                    }\r\n                });\r\n                return have;\r\n            };\r\n\r\n            $scope.clear = function () {\r\n                $scope.triggerChangeOutletFilter = false;\r\n                $scope.triggerChangeStatusFilter = false;\r\n\r\n                $scope.filters.OutletID = '0';\r\n                $scope.filters.OutletID1 = '0';\r\n\r\n                $scope.filters.StatusID = '0';\r\n                $scope.filters.StatusID1 = '0';\r\n\r\n                $scope.filters.DateFrom = null;\r\n                $scope.filters.DateTo = null;\r\n\r\n                $scope.filters.DateFrom1 = null;\r\n                $scope.filters.DateTo1 = null;\r\n\r\n                $scope.searchInput = null;\r\n\r\n                $timeout(function () {\r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                });\r\n\r\n                $scope.search();\r\n            };\r\n\r\n            $scope.dateOptions = {\r\n                formatYear: 'yy',\r\n                maxDate: new Date(2020, 5, 22),\r\n                minDate: new Date(),\r\n                startingDay: 1\r\n            };\r\n            $scope.datePicker = {\r\n                opened: false\r\n            };\r\n            $scope.openDatePicker = function () {\r\n                $scope.datePicker.opened = true;\r\n            };\r\n            \r\n            $scope.customPaymentMethods = [];\r\n\r\n            $scope.getCustomPaymentMethod = function (shortName) {\r\n                var lst = $scope.customPaymentMethods.filter(function (el) { return el.loweredPaymentMethodName === shortName; });\r\n\r\n                return lst.length > 0 ? lst[0] : null;\r\n            };\r\n\r\n            function initMeasure() {\r\n                $(window).on('resize', function () {\r\n                    fontMeasureService.updateFontSize('history-row-total-parent', 'history-row-total', 13.5);\r\n                    \r\n                });\r\n            }\r\n\r\n            function getPaymentMethods() {\r\n                configService.getPaymentMethods($scope);\r\n\r\n                if (!!$scope.currentSale && !!$scope.currentSale.ReturnPayments) {\r\n                    angular.forEach($scope.currentSale.ReturnPayments, function (el) {\r\n                        if (el.PaymentTypeName == \"Non-POS\" && el.ShortName.indexOf(\"BackofficePayment_\") === 0) {\r\n                            if ($scope.getCustomPaymentMethod(el.ShortName) == null) {\r\n                                var obj = {\r\n                                    loweredPaymentMethodName: el.ShortName,\r\n                                    paymentProcessorID: el.ShortName.substr(\"BackofficePayment_\".length),\r\n                                    paymentMethodName: el.PaymentTypeName,\r\n                                    isCustom: false\r\n                                };\r\n\r\n                                $scope.customPaymentMethods.push(obj);\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n\r\n            }\r\n\r\n            $scope.getCustomPaymentMethodName = function (shortName) {\r\n                var lst = $scope.customPaymentMethods.filter(function (el) { return el.loweredPaymentMethodName === shortName; });\r\n\r\n                return lst.length > 0 ? lst[0].paymentMethodName : shortName;\r\n            };\r\n\r\n\r\n            // array for sales\r\n            $scope.data = [];\r\n            $scope.statuses = constants.parkStatuses;\r\n            $scope.filterSelectors = {};\r\n\r\n            $scope.translateStatuses = function () {\r\n                return [\r\n                    // commented as it can not exist \r\n                    // { StatusName: gettextCatalog.getString(\"Open\"), StatusID: \"OPEN\" },\r\n                    { StatusName: gettextCatalog.getString(\"Closed\"), StatusID: \"CLOSED\" },\r\n                    { StatusName: gettextCatalog.getString(\"Layby\"), StatusID: \"LAYBY\" },\r\n                    { StatusName: gettextCatalog.getString(\"Layby closed\"), StatusID: \"LAYBY_CLOSED\" },\r\n                    { StatusName: gettextCatalog.getString(\"On account\"), StatusID: \"ONACCOUNT\" },\r\n                    { StatusName: gettextCatalog.getString(\"On account closed\"), StatusID: \"ONACCOUNT_CLOSED\" },\r\n                    { StatusName: gettextCatalog.getString(\"Returned\"), StatusID: \"RETURN\" },\r\n                    { StatusName: gettextCatalog.getString(\"Voided\"), StatusID: [\"LAYBY_VOIDED\", \"LAYBY_CLOSED_VOIDED\"] }\r\n                ];\r\n            };\r\n\r\n            $scope.filterSelectors.statuses = $scope.translateStatuses();\r\n\r\n            $scope.$on('changeLanguage', function (event) {\r\n                $scope.filterSelectors.statuses = $scope.translateStatuses();\r\n            });\r\n\r\n            $scope.financialStatusName = function (code, isPartial, sale, shouldPayExtra) {\r\n                if (!sale) return;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI(sale.RawSaleObject);\r\n\r\n                var nativeSale = isNewSale ? convertFromOld(sale.RawSaleObject) : null;\r\n\r\n                if (sale.StandaloneRefund === true || sale.StandaloneExchange)\r\n                    code = 'RETURN';\r\n\r\n                if(nativeSale && isPartial) {\r\n                    isPartial = nativeSale.IsPartialPaid;\r\n                }\r\n\r\n                var res = $scope.filterSelectors.statuses.filter(function (v) { \r\n                    return Array.isArray(v.StatusID) ? v.StatusID.indexOf(code) !== -1 : v.StatusID === code;\r\n                });\r\n                var t = code;\r\n                var isRefund = code === 'RETURN';                \r\n                var isExchange = code === 'RETURN' && (sale.Lines && sale.Lines.length > 0 || sale.StandaloneExchange);\r\n                \r\n                if (isExchange)\r\n                    isRefund = false;\r\n\r\n                if (res.length > 0) {\r\n                    if (isNewSale && isExchange)\r\n                        t = gettextCatalog.getString(\"Exchanged\");\r\n                    else\r\n                        t = res[0].StatusName;\r\n                }\r\n\r\n                var isVoided = code && code.endsWith('VOIDED');\r\n\r\n                if (isVoided) {\r\n                    if (code === 'LAYBY_VOIDED') {\r\n                        t = gettextCatalog.getString(\"Layby\") + '. ' + gettextCatalog.getString(\"Voided\");\r\n                    } else if (code == 'LAYBY_CLOSED_VOIDED') {\r\n                        t = gettextCatalog.getString(\"Layby closed\") + '. ' + gettextCatalog.getString(\"Voided\");\r\n                    }\r\n                    return t;\r\n                } else if (isPartial) {\r\n                    t += \" \" + gettextCatalog.getString(\"partially\");\r\n                    if (isNewSale && (shouldPayExtra !== undefined && shouldPayExtra !== null)) {\r\n                        var balance = nativeSale.Balance;\r\n\r\n                        if (balance) {\r\n                            if (shouldPayExtra && !isRefund) {\r\n                                t += \". \" + gettextCatalog.getString(\"Payment is required.\");\r\n                            } else if (isRefund || isExchange){\r\n                                t += \". \" + gettextCatalog.getString(\"Refund is required.\");\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (isNewSale && isExchange) {\r\n                        if (sale.Total > 0)\r\n                            t += \". \" + gettextCatalog.getString(\"Paid.\");\r\n                        else\r\n                            t += \". \" + gettextCatalog.getString(\"Refunded.\");\r\n                    }\r\n                }\r\n\r\n                return t;\r\n            };\r\n\r\n            $scope.filterSelectors.outlets = [];\r\n            $scope.filterSelectors.users = [];\r\n\r\n            function loadFilters() {\r\n                if ($scope.filterSelectors.outlets && $scope.filterSelectors.outlets.length > 0) {\r\n                    return helperService.resolvePromise(null);\r\n                }\r\n\r\n                return outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n                    $.each(resp.Outlets, function (idx, el) {\r\n                        $scope.filterSelectors.outlets.push({ OutletName: el.OutletName, OutletID: el.PosOutletID });\r\n                    });\r\n\r\n                    if ($scope.filterSelectors.outlets.length == 1) {\r\n                        $scope.filters.OutletID = $scope.filterSelectors.outlets[0].OutletID;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        initSelects();\r\n\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                    });\r\n\r\n                    return saleService.loadPosUsers().then(function (resp) {\r\n                        $scope.filterSelectors.users = [];\r\n                        $.each(resp.Users, function (idx, el) {\r\n                            $scope.filterSelectors.users.push({ UserName: el.UserName });\r\n                        });\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    });\r\n                });\r\n            }\r\n\r\n            $scope.reloadCurrentPage = function () {\r\n                var idx = !!$scope.selectedItem ? $scope.selectedItem.PosOrderID : null;\r\n                return $scope.onLoadInternal(idx);\r\n            };\r\n\r\n            // enable event when view is shown\r\n            $scope.onLoad = function () {\r\n                return $scope.onLoadInternal()\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.onLoadInternal = function (selectedID) {\r\n                window.localStorage.setItem('continueSale', null);\r\n                $scope.raiseViewChanged();\r\n                $scope.setDropdownPosition();\r\n                $.blockUI();\r\n\r\n                // printService.reconnect();\r\n\r\n                if (!selectedID) {\r\n                    $scope.data = [];\r\n                    $scope.filters.SaleID = null;\r\n                    $scope.filters.LastRequestDate = $scope.lastRequestDateTime;\r\n                } else {\r\n                    $scope.filters.SaleID = selectedID;\r\n                    $scope.filters.LastRequestDate = null;\r\n                }\r\n\r\n\r\n                return saleService.loadSalesHistory($scope.selectedPage, $scope.itemsByPage, $scope.filters, $scope.sorting, $scope.searchInput)\r\n                    .then(function (resp) {\r\n\r\n                        var unshiftedOrders = [];\r\n\r\n                        var tempData = orderBy(resp.Orders, 'OrderDate', true);\r\n                        $.each(tempData, function (idx, el) {\r\n                            \r\n                            el.OrderDateFormated = $scope.getDateByFormat(el.OrderDate, 'LL');\r\n                            if(el.LaybyDate){\r\n                                el.showLaybyDate = true;\r\n                                el.LaybyDate =  helperService.getFormatedDate2(el.LaybyDate);\r\n                            }\r\n\r\n                            if(el.Data){\r\n\r\n                                var payLoad = JSON.parse(el.Data.RawSaleObject);\r\n                                //if (payLoad.PayloadVersion == 3) {\r\n                                //    errorService.showError(gettextCatalog.getString('Order history data contains sales in new format. Please, update POS application to see them.'));\r\n                                //    return false;\r\n                                //}\r\n    \r\n                                \r\n                                // check if can continue payment\r\n                                var saleTotalPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid(el.Data)), 2);\r\n                                var saleTotalGrid = helperService.DEARRound(Math.abs($scope.getSaleGridTotal(el.Data)), 2);\r\n\r\n                                var isParentOnAcount = payLoad && payLoad.OrderType === 'ONACCOUNT' && helperService.DEARRound(payLoad.Balance,4)==0;\r\n\r\n                                el.isPartiallyPaid = !(el.Status == 'RETURN' && isParentOnAcount) &&\r\n                                    el.Status != 'ONACCOUNT' &&\r\n                                    el.Status != 'LAYBY' &&\r\n                                    el.Status != 'LAYBY_CLOSED' &&\r\n                                    el.Status != 'ONACCOUNT_CLOSED' &&\r\n                                    saleTotalGrid > saleTotalPaid;\r\n    \r\n                                if (el.Status === 'LAYBY') {\r\n                                    payLoad = convertFromOld(payLoad);\r\n    \r\n                                    if (payLoad.LaybyDate) {\r\n                                        el.showLaybyDate = true;\r\n                                        el.LaybyDate = helperService.getFormatedDate2(payLoad.LaybyDate);\r\n                                    }\r\n                                }\r\n                                \r\n                            }\r\n\r\n                            // if list\r\n                            if (el.Status && el.Status.endsWith('VOIDED')) {\r\n                                el.FinancialStatus = gettextCatalog.getString('Voided');\r\n                            }\r\n\r\n                            if (selectedID) {\r\n                                $.each($scope.data, function (index, item) {\r\n                                    if (item.OrderID === selectedID && el.OrderID === selectedID) {\r\n                                        $scope.data[index] = el;\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                            if (!$scope.data.filter(function (fEl) {\r\n                                return fEl.OrderID === el.OrderID;\r\n                            }).length > 0) {\r\n                                if ($scope.lastRequestDateTime < el.OrderDateUTC) {\r\n                                    unshiftedOrders.push(el);\r\n                                } else {\r\n                                    $scope.data.push(el);\r\n                                }\r\n                            }\r\n\r\n                        });\r\n\r\n                        unshiftedOrders = orderBy(unshiftedOrders, 'OrderDate', false);\r\n                        $.each(unshiftedOrders, function (idx, el) {\r\n                            $scope.data.unshift(el);\r\n                        });\r\n\r\n\r\n                        $scope.lastRequestDateTime = moment().utc().format();\r\n\r\n                        if (!selectedID)\r\n                            getPages(resp.Total);\r\n\r\n                        return loadFilters().then(function () {\r\n                            if ($scope.receiptTemplate) {\r\n                                $.unblockUI();\r\n                                var deferred2 = $q.defer();\r\n                                deferred2.resolve(null);\r\n                                return deferred2.promise;\r\n                            } else {\r\n                                return receiptService.getReceiptTemplate(true).then(function (receiptResp) {\r\n                                    var injectedString = '; white-space: pre-wrap;';\r\n                                    var position = receiptResp.Template.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                    var result = [receiptResp.Template.slice(0, position), injectedString, receiptResp.Template.slice(position)].join('');\r\n\r\n\r\n                                    var replacedString = '<canvas class=\"barcode\" id=\"code93\" type=\"code93\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code93}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code93}}</canvas><div class=\"barcode_img img_code93\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"barcode\" id=\"code128\" type=\"code128\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code128}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code128}}</canvas><div class=\"barcode_img img_code128\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean8\" type=\"ean8\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean8}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean13\" type=\"ean13\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean13}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-industrial2of5\" type=\"industrial2of5\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_industrial2of5}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upca\" type=\"upca\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upca}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upce\" type=\"upce\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upce}}\", replacedString);\r\n\r\n                                    $scope.receiptTemplate = result;\r\n\r\n                                    if (receiptResp.EmailTemplate) {\r\n                                        position = receiptResp.EmailTemplate.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                        result = [receiptResp.EmailTemplate.slice(0, position), injectedString, receiptResp.EmailTemplate.slice(position)].join('');\r\n\r\n                                        replacedString = '<div class=\"barcode_img img_code93\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_code128\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean8}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean13}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_industrial2of5}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upca}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upce}}\", replacedString);\r\n\r\n                                        $scope.receiptEmailTemplate = result;\r\n                                    } else {\r\n                                        $scope.receiptEmailTemplate = result;\r\n                                    }\r\n\r\n                                    $scope.receiptEmailSubject = receiptResp.EmailSubject;\r\n                                    $scope.receiptTemplateID = receiptResp.TemplateID;\r\n                                    $.unblockUI();\r\n                                    var deferred2 = $q.defer();\r\n                                    deferred2.resolve(null);\r\n                                    return deferred2.promise;\r\n\r\n                                });\r\n                            }\r\n                        });\r\n                    }\r\n                        //,function (err) {\r\n                        //    $.unblockUI();\r\n                        //    errorService.showError(err);\r\n                        //}\r\n                    );\r\n            };\r\n\r\n            $scope.search = function (keepData) {\r\n                $scope.nothingFound = false;\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                $scope.filters.SaleID = null;\r\n                helperService.hideKeyboard();\r\n                $scope.filters.LastRequestDate = $scope.lastRequestDateTime;\r\n\r\n                saleService.loadSalesHistory(\r\n                    $scope.selectedPage,\r\n                    $scope.itemsByPage,\r\n                    $scope.filters,\r\n                    $scope.sorting,\r\n                    $scope.searchInput,\r\n                ).then(function (resp) {\r\n                    var reverse = $scope.currentDir === 'desc';\r\n                    var filed = getServerFiledName($scope.sortFiled);\r\n\r\n                    if (!keepData)\r\n                        $scope.data = [];\r\n\r\n                    var unshiftedOrders = [];\r\n\r\n                    var tempData = orderBy(resp.Orders, filed, reverse);\r\n                    $.each(tempData, function (idx, el) {\r\n                        el.OrderDateFormated = $scope.getDateByFormat(el.OrderDate, 'LL');\r\n\r\n                        if(el.LaybyDate){\r\n                            el.showLaybyDate = true;\r\n                            el.LaybyDate =  helperService.getFormatedDate2(el.LaybyDate)\r\n                        }\r\n\r\n                        // check if can continue payment\r\n\r\n                        if(el.Data){\r\n                            var saleTotalPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid(el.Data)), 2);\r\n                            var saleTotalGrid = helperService.DEARRound(Math.abs($scope.getSaleGridTotal(el.Data)), 2);\r\n                            el.isPartiallyPaid = el.Status != 'ONACCOUNT' &&\r\n                                el.Status != 'LAYBY' &&\r\n                                el.Status != 'LAYBY_CLOSED' &&\r\n                                el.Status != 'ONACCOUNT_CLOSED' &&\r\n                                saleTotalGrid > saleTotalPaid;\r\n    \r\n                            if (el.Status === 'LAYBY') {\r\n                                var payLoad = JSON.parse(el.Data.RawSaleObject);\r\n                                payLoad = convertFromOld(payLoad);\r\n    \r\n                                if (!!payLoad.LaybyDate) {\r\n                                    el.showLaybyDate = true;\r\n                                    el.LaybyDate = helperService.getFormatedDate2(payLoad.LaybyDate);\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        if (el.Status && el.Status.endsWith('VOIDED')) {\r\n                            el.FinancialStatus = gettextCatalog.getString('Voided');\r\n                        }\r\n\r\n                        if (!$scope.data.filter(function (fEl) {\r\n                            return fEl.OrderID === el.OrderID;\r\n                        }).length > 0) {\r\n                            if ($scope.lastRequestDateTime < el.OrderDateUTC) {\r\n                                unshiftedOrders.push(el);\r\n                            } else {\r\n                                $scope.data.push(el);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n\r\n                    unshiftedOrders = orderBy(unshiftedOrders, 'OrderDate', false);\r\n                    $.each(unshiftedOrders, function (idx, el) {\r\n                        $scope.data.unshift(el);\r\n                    });\r\n\r\n                    $scope.data = orderBy($scope.data, 'OrderDate', true);\r\n\r\n                    $scope.lastRequestDateTime = moment().utc().format();\r\n\r\n                    getPages(resp.Total);\r\n\r\n                    $('#searchOrderInput').select();\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                }, function (err) {\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            function getPages(total) {\r\n                var step = $scope.itemsByPage;\r\n                $scope.totalPages = Math.ceil(total / step);\r\n                $scope.totalRecords = total;\r\n                if ($scope.totalPages === 0) {\r\n                    $scope.totalPages = 1;\r\n                }\r\n            };\r\n\r\n            $scope.getSaleTotalPaid = function (arr) {\r\n                var total = 0;\r\n                if (arr) {\r\n                    if (arr.FinancialStatus === 'RETURN' || (arr.FinancialStatus === 'CLOSED' && (arr.standaloneRefund === true || arr.StandaloneRefund === true || arr.standaloneExchange === true || arr.StandaloneExchange === true))) {\r\n                        for (var r = 0; r < arr.Refunds.length; r++) {\r\n                            if (arr.Refunds[r].IsFromChild !== true) { // child refund is from child and shouldn't be counted\r\n                                for (var i = 0; i < arr.Refunds[r].Payments.length; i++) {\r\n                                    var el = arr.Refunds[r].Payments[i];\r\n                                    if (el.ShortName !== \"Discount\" && el.ShortName !== \"Rounding\")\r\n                                        total += el.Amount;\r\n                                }\r\n                            }\r\n                        }\r\n                        total *= -1;\r\n                    }\r\n                    else {\r\n                        for (var i = 0; i < arr.Payments.length; i++) {\r\n                            var el = arr.Payments[i];\r\n                            if (el.ShortName !== \"Discount\" && el.ShortName !== \"Rounding\")\r\n                                total += el.Amount;\r\n                        }\r\n                    }\r\n                    if (total === 0) {\r\n                        for (var i = 0; i < arr.Payments.length; i++) {\r\n                            var el = arr.Payments[i];\r\n                            if (el.ShortName !== \"Discount\" && el.ShortName !== \"Rounding\")\r\n                                total += el.Amount;\r\n                        }\r\n                    }\r\n                }\r\n                return total;\r\n            };\r\n\r\n            $scope.getRoundingSign = function (selectedItem, paymentTypeName) {\r\n                var isNewSale = helperService.showNewCheckoutUI(selectedItem.RawSaleObject);\r\n\r\n                if (!selectedItem || !isNewSale) return '';\r\n                if (!selectedItem.RawSaleObject) return '';\r\n\r\n                var rndPayment = Enumerable.from(selectedItem.RawSaleObject.Payments)\r\n                    .where(function (p) { return p.ShortName === 'Rounding' && p.PaymentTypeName === paymentTypeName; })\r\n                    .sum(function (p) { return p.Amount; });\r\n\r\n                if (!rndPayment) return '';\r\n\r\n                if (Math.sign(selectedItem.RawSaleObject.Total) * Math.sign(rndPayment) < 0)\r\n                    return '-';\r\n            };\r\n\r\n            $scope.getRefundOperationName = function (selectedItem) {\r\n                var isPaid = true;\r\n                if (!selectedItem) return '';\r\n\r\n                if (selectedItem.Data.FinancialStatus === 'RETURN' && selectedItem.RawSaleObject.Total < 0)\r\n                    isPaid = false;\r\n\r\n                return isPaid ? gettextCatalog.getString('Paid') : gettextCatalog.getString('Refunded');\r\n            };\r\n\r\n            $scope.getSaleTotalDue = function (selectedItem) {\r\n                if (!selectedItem) return 0;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI(selectedItem.RawSaleObject);\r\n\r\n                if (!isNewSale) {\r\n                    return (selectedItem.IsPartialPaid === true || selectedItem.IsFromDearSale) && selectedItem.Data.Refunds.length > 0 ?\r\n                        selectedItem.PartiallyPaidDue :\r\n                        $scope.abs(selectedItem.RawSaleObject.Total - $scope.abs($scope.getSaleTotalPaid(selectedItem.Data)));\r\n                } else {\r\n                    return CalculatorHelperService.getSaleTotalDue($scope.currentSale, selectedItem);\r\n                }\r\n            };\r\n\r\n            $scope.getPartialPaidDue = function (arr) {\r\n\r\n                var data = arr.Data;\r\n                if (data) {\r\n                    if (data.FinancialStatus === 'RETURN') {\r\n                        var refundTotal = 0;\r\n                        var originalPaymentTotal = 0;\r\n                        for (var r = 0; r < data.Refunds.length; r++) {\r\n                            for (var i = 0; i < data.Refunds[r].Payments.length; i++) {\r\n                                var el = data.Refunds[r].Payments[i];\r\n                                refundTotal += el.Amount;\r\n                            }\r\n\r\n                            for (var i = 0; i < data.Refunds[r].Surcharges.length; i++) {\r\n                                var el = data.Refunds[r].Surcharges[i];\r\n                                refundTotal -= el.Total - ($scope.selectedItem.Data.TaxInclusive ? 0 : el.Tax);\r\n                            }\r\n                        }\r\n\r\n                        $.each(arr.RawSaleObject.ReturnPayments, function (idx, el) {\r\n                            originalPaymentTotal += el.Amount;\r\n                            if (!!el.Surcharge) {\r\n                                originalPaymentTotal -= el.Surcharge.CalculatedValue - ($scope.selectedItem.Data.TaxInclusive ? 0 : el.Surcharge.Tax);\r\n                            }\r\n                        });\r\n\r\n                        return helperService.DEARRound(originalPaymentTotal - refundTotal, 2);\r\n                    }\r\n                    else {\r\n                        var totalPaid = 0;\r\n                        var totalRefunded = 0;\r\n\r\n                        for (var i = 0; i < data.Payments.length; i++) {\r\n                            var el = data.Payments[i];\r\n                            if (el.ShortName !== \"Discount\")\r\n                                totalPaid += el.Amount;\r\n                        }\r\n\r\n                        for (var i = 0; i < data.Surcharges.length; i++) {\r\n                            var el = data.Surcharges[i];\r\n                            totalPaid -= el.Total - ($scope.selectedItem.Data.TaxInclusive ? 0 : el.Tax);\r\n                        }\r\n\r\n                        $.each(data.Refunds, function (idx, ref) {\r\n                            $.each(ref.Payments, function (idx2, el) {\r\n                                if (el.ShortName !== \"Discount\") {\r\n                                    totalRefunded += el.Amount;\r\n                                }\r\n                            });\r\n\r\n                            $.each(ref.Surcharges, function (idx2, el) {\r\n                                totalRefunded -= el.Total - ($scope.selectedItem.Data.TaxInclusive ? 0 : el.Tax);\r\n                            });\r\n                        });\r\n\r\n                        return helperService.DEARRound(totalPaid - totalRefunded, 2);\r\n                    }\r\n                }\r\n                return 0;\r\n            };\r\n\r\n            $scope.getSaleTotal = function (item, ignoreRounding) {\r\n                if (item) {\r\n                    var data = convertFromOld(item.RawSaleObject);\r\n                    var isNewSale = helperService.showNewCheckoutUI(data);\r\n\r\n                    if (!isNewSale) {\r\n                        var rounding = ignoreRounding !== true ? (data.CashRounding ? data.CashRounding : 0) : 0;\r\n                        return $scope.abs(data.Total) + rounding;\r\n                    } else return $scope.abs(data.Total);\r\n\r\n                }\r\n                return 0;\r\n            };\r\n\r\n            // in history grid shows real sale amount. If sale is not completed, shows sum that should be paid, if fully paid - show real paid sum\r\n            // fullGridRow - exclude rounding\r\n            $scope.getSaleGridTotal = function (item, fullGridRow) {\r\n                if (item) {\r\n                    var data = convertFromOld(item.RawSaleObject);\r\n                    var isNewSale = helperService.showNewCheckoutUI(data);\r\n\r\n                    if (!isNewSale) {\r\n                        return $scope.abs($scope.totalSum(data, item.TaxInclusive)) + (data.CashRounding ? data.CashRounding : 0);\r\n                    } else {\r\n                        return CalculatorHelperService.getHistoryOrderLineSum(data);\r\n                    }\r\n                }\r\n                return 0;\r\n            };\r\n\r\n            $scope.continueSale = function (saleID) {\r\n                var isPartialPayment = true;\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ saleID: saleID, type: 'continue', subType: isPartialPayment }));\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.continueReturnSale = function () {\r\n                $scope.actionMode = 'refund';\r\n\r\n                //            return $scope.reloadCurrentPage()\r\n                return $scope.reloadItem($scope.selectedItem.PosOrderID)\r\n                    .then(function () {\r\n                        $scope.changepPaymentAmount();\r\n                        $scope.saleType = 'return';\r\n                        $scope.operationName = 'Refund';\r\n                        $scope.operationSubName = \"continue\";\r\n\r\n                        $scope.submitSelectReturnItems(true);\r\n\r\n                        $timeout(function () {\r\n                            $scope.doneRefund(true);\r\n                        });\r\n                    })\r\n                    .catch(function (err) {\r\n                        $scope.processError(err, true);\r\n                        //$.unblockUI();\r\n                        //errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.continueExchangeSale = function () {\r\n                //            return $scope.reloadCurrentPage()\r\n                return $scope.reloadItem($scope.selectedItem.PosOrderID)\r\n                    .then(function () {\r\n                        $scope.changepPaymentAmount();\r\n                        $scope.saleType = 'return';\r\n                        $scope.operationName = 'Refund';\r\n                        $scope.operationSubName = \"continue\";\r\n\r\n                        $scope.submitSelectReturnItems(true);\r\n\r\n                        $timeout(function () {\r\n                            $scope.doneExchange(true);\r\n                        });\r\n                    })\r\n                    .catch(function (err) {\r\n                        $scope.processError(err, true);\r\n                        //$.unblockUI();\r\n                        //errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.returnSale = function () {\r\n                $scope.actionMode = 'refund';\r\n\r\n                if (!!$scope.selectedItem.nativeSalePayments)\r\n                    delete $scope.selectedItem.nativeSalePayments;\r\n\r\n                //            return $scope.reloadCurrentPage()\r\n                return $scope.reloadItem($scope.selectedItem.PosOrderID)\r\n                    .then(function () { return saleService.getSurcharge(); })\r\n                    .then(function (surcharges) {\r\n                        $scope.surcharges = {};\r\n                        $.each(surcharges, function (i, s) {\r\n                            $scope.surcharges[s.SurchargeID] = s;\r\n                        });\r\n\r\n                        $.blockUI();\r\n                        return saleService.checkRefundAvailable($scope.selectedItem.RawSaleObject)\r\n                            .then(function (data) {\r\n                                $.unblockUI();\r\n\r\n                                var deferred = $q.defer();\r\n\r\n                                if (data.data.IsRefundAvailable !== true) {\r\n                                    deferred.reject(data.data.Message);\r\n\r\n                                }\r\n                                else {\r\n                                    deferred.resolve(null);\r\n                                    // return main sale in any case as it can contain other refunds\r\n                                    //                                if($scope.selectedItem.Status == 'RETURN') {\r\n                                    var mainSaleID = $scope.selectedItem.SaleType === 2 ? $scope.selectedItem.OrderID :  $scope.selectedItem.RawSaleObject.ID;\r\n                                    deferred.promise = deferred.promise.then(function () {\r\n                                        return saleService.loadSalesHistory(null, null, { SaleID: mainSaleID });\r\n                                    });\r\n                                    //                              }\r\n                                }\r\n\r\n                                return deferred.promise;\r\n                            });\r\n                    })\r\n                    .then(function (resp) {\r\n                        // collect here info for grouped sale (https://dearsystems.atlassian.net/wiki/spaces/DDD/pages/974487676/Surcharge+calculations+during+sale+payment+refund+exchange)\r\n                        // we need in TotalSurcharge, TotalToRefund, TotalSale, all payment info grouped by payment type id\r\n                        // and surcharge id\r\n                        // CardSurchargeProrate \r\n                        var groupedSale = null;\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        var rawSaleObject = JSON.parse(resp.Orders[0].Data.RawSaleObject);\r\n                        rawSaleObject = convertFromOld(rawSaleObject);\r\n                        restoreTransactionMetadata(resp.Orders[0].Data, rawSaleObject);\r\n\r\n                        if (resp && isNewSale) {\r\n                            groupedSale = CalculatorHelperService.groupSalesTree(resp.Orders[0].Data, $scope.surcharges, $scope.customPaymentMethods);\r\n                        } else if (!!resp) {\r\n                            var paymap = {};\r\n                            var surmap = {};\r\n                            var ghostsurlist = [];\r\n\r\n                            groupedSale =\r\n                                {\r\n                                    TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n                                    GhostSurcharge: 0,\r\n                                    TotalSale: 0,\r\n                                    ExchangeAmount: 0,\r\n                                    PaymentsMap: {},\r\n                                    LoyaltyRefundCoeff: 1 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n                                };\r\n\r\n                            saleService.goThroughEntireSaleItems(resp.Orders[0], function (line, isDirectSaleData) {\r\n                                if(!line.MissingInInvoice){\r\n                                        if ((line.IsProduct || line.ProductID) ||\r\n                                        (isDirectSaleData && !line.IsProduct && !line.ProductID && line.Name==='Discount')) {\r\n                                        var sm = 0;\r\n                                        if (!isDirectSaleData && line.Quantity < 0) {\r\n                                            sm = Math.abs(line.TotalPerLine + ($scope.selectedItem.Data.TaxInclusive !== true ? line.Tax : 0));\r\n                                            //                                        sm = Math.abs(line.TotalPerLine);\r\n                                        } else\r\n                                            sm = Math.abs(line.TotalPerLine + ($scope.selectedItem.Data.TaxInclusive !== true ? line.Tax : 0));\r\n\r\n                                        if (line.Quantity < 0 || (line.Name==='Discount' && line.Price<0)) sm *= -1;\r\n\r\n                                        groupedSale.TotalSale += helperService.DEARRound(sm, 2);\r\n                                    }\r\n                                }                                \r\n                            });\r\n\r\n                            saleService.goThroughEntireSaleSurcharges(resp.Orders[0], function (item, isDirectSaleData) {\r\n                                var srch = angular.copy(item);\r\n                                $scope.restoreSurcharge(srch, $scope.selectedItem.Data.TaxInclusive);\r\n\r\n                                // set refundable flag from global surcharge list\r\n                                if ($scope.surcharges[srch.SurchargeID]) {\r\n                                    srch.RefundSurcharge = $scope.surcharges[srch.SurchargeID].RefundSurcharge;\r\n                                }\r\n\r\n                                if (item.PaymentShortName) {\r\n                                    // this is surcharge that was created as separation of cash surcharge refund\r\n                                    // but we still need to count it \r\n                                    srch.RefundSurcharge = true;\r\n                                    ghostsurlist.push(srch);\r\n                                    //groupedSale.TotalSurcharge += (!isDirectSaleData ? -1 : 1) * srch.CalculatedValueWithTax;\r\n                                } else if (item.PaymentID) {\r\n                                    surmap[item.PaymentID] = srch;\r\n                                    if (srch.RefundSurcharge === true)\r\n                                        groupedSale.TotalSurcharge += (!isDirectSaleData ? -1 : 1) * srch.CalculatedValueWithTax;\r\n                                }\r\n                            });\r\n\r\n                            saleService.goThroughEntireSalePayments(resp.Orders[0], function (item, isDirectSaleData) {\r\n                                $scope.setPaymentMethodName(item);\r\n\r\n                                //restore surcharges to payments\r\n                                var srch = surmap[item.ID];\r\n                                if (srch) {\r\n                                    item.Surcharge = srch;\r\n                                }\r\n                            });\r\n\r\n                            // group all surcharges\r\n                            // also group payments\r\n                            var paymentSum = 0;\r\n                            var loyaltyPaymentSum = 0;\r\n                            saleService.goThroughEntireSalePayments(resp.Orders[0], function (item, isDirectSaleData) {\r\n                                var id = saleService.formPaymentID(item);\r\n\r\n                                // collect only payments but not returns\r\n                                if (isDirectSaleData) {\r\n                                    if (item.ShortName === 'loyalty')\r\n                                        loyaltyPaymentSum += item.Amount;\r\n                                    else\r\n                                        paymentSum += item.Amount;\r\n                                } else if (item.Amount < 0) {\r\n                                    if (item.ShortName === 'loyalty')\r\n                                        loyaltyPaymentSum -= item.Amount;\r\n                                    else\r\n                                        paymentSum -= item.Amount;\r\n                                }\r\n\r\n                                var p = paymap[id];\r\n                                if (!p) {\r\n                                    item = angular.copy(item);\r\n                                    if (!isDirectSaleData) {\r\n                                        item.Amount *= -1;\r\n                                        if (item.Surcharge)\r\n                                            $scope.negateSurcharge(item.Surcharge);\r\n                                    }\r\n                                    paymap[id] = item;\r\n                                } else {\r\n                                    p.Amount += (!isDirectSaleData ? -1 : 1) * item.Amount;\r\n                                    if (item.Surcharge)\r\n                                        $scope.sumSurcharges(p.Surcharge, item.Surcharge, !isDirectSaleData); // add to p.Surcharge\r\n                                }\r\n                            });\r\n\r\n                            if ((paymentSum + loyaltyPaymentSum) > 0)\r\n                                groupedSale.LoyaltyRefundCoeff = paymentSum / (paymentSum + loyaltyPaymentSum);\r\n                            else\r\n                                groupedSale.LoyaltyRefundCoeff = 1;\r\n\r\n                            // go through ghost list\r\n                            $.each(ghostsurlist, function (i, srch) {\r\n                                groupedSale.GhostSurcharge -= srch.CalculatedValueWithTax;\r\n                            });\r\n\r\n                            groupedSale.GhostSurcharge = helperService.DEARRound(groupedSale.GhostSurcharge, 2);\r\n\r\n                            // create initial surcharge copy for next calculations\r\n                            groupedSale.PaymentsMap = {}; // all payments map for initial sale\r\n                            $.each(helperService.mapToList(paymap), function (i, p) {\r\n                                p.ID = uuid2.newguid();\r\n                                if (p.Surcharge) {\r\n                                    p.Surcharge.PaymentID = p.ID;\r\n                                    p.InitialSurcharge = angular.copy(p.Surcharge);\r\n                                }\r\n                                groupedSale.PaymentsMap[p.ID] = p;\r\n                            });\r\n                        }\r\n\r\n                        if ($scope.selectedItem.Status === 'RETURN' && !!resp) {\r\n                            var map = {};\r\n                            $scope.selectedItem.nativeSalePayments = [];\r\n\r\n                            // If we have cascade exchange, then we need to take only refunded product total, \r\n                            // as payment value(because payments array contains all payments(including initial sale payments))\r\n                            var maxReturnAmount = 0;\r\n\r\n                            $.each($scope.selectedItem.Data.Refunds, function (idx, el) {\r\n                                $.each(el.Lines, function (lidx, line) {\r\n                                    if (line.Quantity < 0) {\r\n                                        // is exclusive tax, add tax to get total line price\r\n                                        var sm = line.TotalPerLine + ($scope.selectedItem.Data.TaxInclusive !== true ? line.Tax : 0);\r\n\r\n                                        maxReturnAmount += sm;\r\n                                    }\r\n                                });\r\n                            });\r\n\r\n                            $.each($scope.selectedItem.Data.Refunds, function (idx, el) {\r\n                                $.each(el.Payments, function (lidx, line) {\r\n\r\n                                    maxReturnAmount -= line.Amount;\r\n\r\n                                });\r\n                            });\r\n\r\n                            $scope.selectedItem.maxReturnAmount = maxReturnAmount;\r\n\r\n                            var smap = {};\r\n                            $.each(resp.Orders[0].Data.Surcharges, function (i, s) {\r\n                                smap[s.PaymentID] = s;\r\n                            });\r\n\r\n                            $.each(resp.Orders[0].Data.Payments, function (i, e) {\r\n                                if (!map[e.ID]) {\r\n                                    $scope.selectedItem.nativeSalePayments.push(e);\r\n                                }\r\n                                map[e.ID] = e;\r\n                            });\r\n\r\n                            $.each(resp.Orders[0].Data.Refunds, function (idx, ref) {\r\n                                smap = {};\r\n                                $.each(ref.Surcharges, function (i, s) {\r\n                                    smap[s.PaymentID] = s;\r\n                                });\r\n\r\n                                if (!!ref.Payments && !ref.IsFromChild) {\r\n                                    $.each(ref.Payments, function (idx, p) {\r\n                                        var pc = angular.copy(p);\r\n                                        if (!!pc.Amount)\r\n                                            pc.Amount = -1 * pc.Amount;\r\n\r\n                                        if (!map[pc.ID]) {\r\n                                            $scope.selectedItem.nativeSalePayments.push(pc);\r\n                                            map[pc.ID] = pc;\r\n                                        }\r\n                                    });\r\n                                }\r\n                            });\r\n                        }\r\n\r\n                        $scope.changepPaymentAmount();\r\n                        //$('#salesHistoryGridContainer').block({ message: null, baseZ: 1000 });\r\n                        //$location.path('/sell').search({ saleID: saleID, type: 'return' });\r\n                        $scope.hideDetails = true;\r\n                        $scope.saleType = 'return';\r\n                        $scope.operationName = 'Refund';\r\n                        $scope.operationSubName = null;\r\n\r\n                        $scope.currentSale = angular.copy($scope.selectedItem.RawSaleObject);\r\n                        isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                        if (groupedSale)\r\n                            $scope.currentSale.GroupedSale = groupedSale;\r\n\r\n                        // clear change amount to prevent propagation of invalid value  to refund sale\r\n                        $scope.currentSale.CashChangeAmount = 0;\r\n                        if (!isNewSale && !!$scope.selectedItem.nativeSalePayments)\r\n                            $scope.currentSale.nativeSalePayments = $scope.selectedItem.nativeSalePayments;\r\n\r\n                        // check that we in chained return mode\r\n                        var isChainedReturn = $scope.isChainedRefundAllowed();\r\n\r\n                        $scope.currentSale.OrderNumber = $scope.selectedItem.OrderNumber;\r\n                        $scope.currentSale.ReturnID = uuid2.newguid();\r\n                        $scope.currentSale.RefundNumber = '';\r\n\r\n                        var refundsCopy = angular.copy($scope.selectedItem.Data.Refunds);\r\n\r\n                        // remove coupon info\r\n                        if (!isNewSale) {\r\n                            delete $scope.currentSale.selectedCoupon;\r\n                            delete $scope.currentSale.selectedCouponID;\r\n                            delete $scope.currentSale.selectedCouponDealID;\r\n                            $scope.currentSale.FullReturnRounding = 0;\r\n                            $scope.currentSale.additionalEstimateTotal = 0;\r\n                            $scope.currentSale.CalculatedTax = 0;\r\n                            $scope.currentSale.BaseTotal = 0;\r\n                            $scope.currentSale.SurchargeToRefund = 0;\r\n                            $scope.currentSale.SurchargeTaxToRefund = 0;\r\n                            $scope.currentSale.NonRefundableSurcharge = 0;\r\n\r\n                            var pmap = {};\r\n\r\n                            if ($scope.currentSale.Surcharges && $scope.currentSale.Surcharges.length > 0) {\r\n                                $.each($scope.currentSale.Surcharges, function (idx, el) {\r\n                                    if (!pmap[el.PaymentID]) {\r\n                                        pmap[el.PaymentID] = true;\r\n                                        if (el.RefundSurcharge === true) {\r\n                                            $scope.currentSale.SurchargeToRefund += el.CalculatedValue;\r\n                                            $scope.currentSale.SurchargeTaxToRefund += el.Tax;\r\n                                        }\r\n                                        else {\r\n                                            $scope.currentSale.NonRefundableSurcharge += el.CalculatedValue;\r\n                                        }\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                            // in chained refund we start refund as for non refunded sale\r\n                            // for only sold items\r\n                            if (isChainedReturn) {\r\n                                // leave only newly sold items\r\n                                $scope.currentSale.CheckoutItems = $scope.getSoldOnlyItems($scope.currentSale);\r\n                            }\r\n\r\n                            if (refundsCopy && refundsCopy.length > 0) {\r\n                                $.each(refundsCopy, function (reIdx, ref) {\r\n                                    $.each(ref.Surcharges, function (idx, el) {\r\n                                        if (!pmap[el.PaymentID]) {\r\n                                            pmap[el.PaymentID] = true;\r\n\r\n                                            $scope.restoreSurcharge(el, $scope.selectedItem.Data.TaxInclusive);\r\n                                            $scope.currentSale.SurchargeToRefund -= el.Total;\r\n                                            $scope.currentSale.SurchargeTaxToRefund -= el.Tax;\r\n                                        }\r\n                                    });\r\n                                });\r\n                            }\r\n\r\n                            $scope.currentSale.SurchargeTaxToRefund = helperService.DEARRound($scope.currentSale.SurchargeTaxToRefund, 2);\r\n                            $scope.currentSale.SurchargeToRefund = helperService.DEARRound($scope.currentSale.SurchargeToRefund, 2) + ($scope.selectedItem.Data.TaxInclusive ? 0 : $scope.currentSale.SurchargeTaxToRefund);\r\n                            $scope.currentSale.NonRefundableSurcharge = helperService.DEARRound($scope.currentSale.NonRefundableSurcharge, 2);\r\n\r\n                            var discountCoeff = 1;\r\n                            $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                if (el.DiscountCoeff && el.DiscountCoeff !== 0) {\r\n                                    discountCoeff = el.DiscountCoeff;\r\n                                }\r\n                            });\r\n\r\n                            $.each($scope.currentSale.CheckoutItems, function (idx, item) {\r\n                                $.each(refundsCopy, function (i, refItem) {\r\n                                    $.each(refItem.Lines, function (j, refLine) {\r\n                                        if (item.BaseCount === undefined || item.BaseCount == null)\r\n                                            item.BaseCount = item.Count; // initial item count for which Tax and Amount were calculated\r\n                                        if (refLine.Quantity < 0) {\r\n                                            // price comparing\r\n                                            // take into account that on exclusive tax OverriddenPrice contains tax but line.Price - does not.\r\n                                            var isPricesEqual = item.Price === refLine.OverriddenPrice;\r\n                                            if ($scope.selectedItem.Data.TaxInclusive !== true) {\r\n                                                isPricesEqual = helperService.DEARRound(item.TotalPerLine + item.Tax, 2) ===\r\n                                                    helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Quantity, 2);\r\n                                            } else {\r\n                                                isPricesEqual = helperService.DEARRound(item.TotalPerLine, 2) === helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Quantity, 2);\r\n                                            }\r\n\r\n                                            if ((item.Name && item.Name.indexOf('(Surcharge)') == -1)\r\n                                                && ((item.SaleType == 'sale' && (refLine.IsProduct == true || refLine.IsGiftCard == true) &&\r\n                                                    refLine.ProductID === item.ProductID && refLine.GiftCardCode === (item.GiftCardCode === undefined ? null : item.GiftCardCode) && (!item.SerialNumber ||\r\n                                                        item.SerialNumber === refLine.SerialNumber) && isPricesEqual) ||\r\n                                                    (item.SaleType == 'customsale' && refLine.IsProduct == false && item.Name == refLine.Name && isPricesEqual))\r\n                                            ) {\r\n\r\n                                                item.Count = parseFloat(item.Count) + refLine.Quantity;\r\n                                                refLine.Quantity = 0;\r\n                                            }\r\n                                        }\r\n                                    });\r\n                                });\r\n                            });\r\n\r\n                            $scope.currentSale.ReturnItems = $scope.currentSale.CheckoutItems;\r\n\r\n                            $.each($scope.currentSale.CheckoutItems, function (idx, item) {\r\n                                $.each($scope.selectedItem.Data.Lines, function (j, refLine) {\r\n                                    // price comparing\r\n                                    // take into account that on exclusive tax OverriddenPrice contains tax but line.Price - does not.\r\n                                    var isPricesEqual = item.Price === refLine.OverriddenPrice;\r\n                                    if ($scope.selectedItem.Data.TaxInclusive !== true) {\r\n                                        isPricesEqual = helperService.DEARRound(item.TotalPerLine + item.Tax, 2) ===\r\n                                            helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Quantity, 2);\r\n                                    } else {\r\n                                        isPricesEqual = helperService.DEARRound(item.TotalPerLine, 2) === helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Quantity, 2);\r\n                                    }\r\n\r\n                                    if (((item.SaleType == 'sale' && (refLine.IsProduct == true || refLine.IsGiftCard == true) &&\r\n                                        refLine.ProductID === item.ProductID && refLine.GiftCardCode === (item.GiftCardCode === undefined ? null : item.GiftCardCode) && (!item.SerialNumber ||\r\n                                            item.SerialNumber === refLine.SerialNumber) && isPricesEqual) ||\r\n                                        (item.SaleType == 'customsale' && refLine.IsProduct == false && item.Name == refLine.Name && isPricesEqual))\r\n                                    ) {\r\n                                        item.Count = refLine.Quantity - refLine.refundQuantity;// | 0;\r\n                                    }\r\n                                });\r\n                            });\r\n\r\n                            $scope.currentSale.ReturnPayments = $scope.currentSale.Payments;\r\n\r\n                            $scope.currentSale.CheckoutItems = [];\r\n                            $scope.currentSale.Payments = [];\r\n                            $scope.currentSale.Surcharges = [];\r\n\r\n                            $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                                el.maxCount = el.Count;\r\n                                if ($scope.selectedItem.canContinue == true || $scope.selectedItem.IsPartialPaid == true) {\r\n                                    el.minCount = el.Count;\r\n                                    el.return = true;\r\n                                }\r\n                                else {\r\n                                    el.return = false;\r\n                                    if (el.Count === 0) {\r\n                                        el.minCount = 0;\r\n                                    } else {\r\n                                        el.minCount = 1;\r\n                                    }\r\n                                }\r\n                            });\r\n\r\n                            $scope.currentSale.returnLoyaltyPoints = $scope.currentSale.customer.ID ? true : false;\r\n\r\n                        } else {\r\n                            // calculate refund payments\r\n                            var outData = CalculatorHelperService.calculateRefundCheckout($scope.currentSale, $scope.selectedItem, $scope.actionMode);\r\n                            outData.selectedItem = $scope.selectedItem;\r\n\r\n                            CalculatorHelperService.calculateRefundPayments($scope.currentSale, outData);\r\n                        }\r\n\r\n\r\n\r\n                        if ($scope.currentSale.customer.ID) {\r\n                            $scope.refundNeedCustomer = false;\r\n                        } else {\r\n                            $scope.currentSale.canChangeCustomer = true;\r\n                            $scope.addCustomer();\r\n                            $scope.refundNeedCustomer = true;\r\n                        }\r\n\r\n                        if (!isNewSale)\r\n                            $scope.currentSale.EstimateTotal = $scope.estimateTotalSum();\r\n                        else \r\n                            $scope.currentSale.newRefundOrder = null;\r\n\r\n                        $timeout($scope.submitSelectReturnItems, 1);\r\n\r\n                        /// We need to update customers loyalty points do show correct value in receipt.\r\n                        if (configService.isOnline && !!$scope.currentSale.customer.ID) {\r\n                            customerService.getCustomer($scope.currentSale.customer.ID).then(function (resp) {\r\n                                if (resp.Customers[0])\r\n                                    $scope.currentSale.customer = resp.Customers[0];\r\n\r\n                                $scope.currentSale.CustomerLoyaltyPoints = $scope.currentSale.customer.LoyaltyPoints ? $scope.currentSale.customer.LoyaltyPoints : 0;\r\n\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('popup.shown');\r\n                                }, 100);\r\n\r\n                            }, function (error) {\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('popup.shown');\r\n                                }, 100);\r\n                            });\r\n                        }\r\n                        else {\r\n                            $timeout(function () {\r\n                                $rootScope.$broadcast('popup.shown');\r\n                            }, 100);\r\n                        }\r\n\r\n                    })\r\n                    .catch(function (err) {\r\n                        $scope.processError(err, true);\r\n                        //                    $.unblockUI();\r\n                        //                    errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.raiseViewChanged = function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            };\r\n\r\n            $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n            $scope.getDateByFormatFromUtcToLocal = helperService.getDateByFormat;\r\n\r\n            $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n            $scope.firestLoad = true;\r\n\r\n            $scope.reloadItem = function (itemID, skipDialog) {\r\n                return $scope.onLoadInternal(itemID)\r\n                    .then(function (res) {\r\n                        var deferred = $q.defer();\r\n                        var lst = $scope.data.filter(function (l) { return l.PosOrderID === itemID; });\r\n                        if (lst.length > 0) {\r\n                            $scope.selectItemInternal(lst[0], skipDialog);\r\n                            deferred.resolve(lst[0]);\r\n                        } else deferred.resolve(null);\r\n\r\n                        return deferred.promise;\r\n                    });\r\n            };\r\n\r\n            // will present current action mode. in details: 'details', in refund: 'refund'\r\n            $scope.actionMode = null;\r\n\r\n            $scope.selectItem = function (item) {\r\n                $scope.actionMode = 'details';\r\n\r\n                return $scope.reloadItem(item.PosOrderID)\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.openSalesHistoryFilterDialog = function () {\r\n                $scope.filters.OutletID1 = $scope.filters.OutletID;\r\n                $scope.filters.StatusID1 = $scope.filters.StatusID;\r\n                $scope.filters.DateFrom1 = $scope.filters.DateFrom;\r\n                $scope.filters.DateTo1 = $scope.filters.DateTo;\r\n\r\n                $scope.actionMode = 'filters';\r\n\r\n                var $windowElement = $('#saleHistoryFilterDialogPartial');\r\n                helperService.showDialog($windowElement, function () {\r\n                    $scope.newGuidForRefund = uuid2.newguid();\r\n                    $scope.newGuidForRefund2 = uuid2.newguid();\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('update.maxwidth');\r\n                    });\r\n                });\r\n            };\r\n\r\n            $scope.closeSalesHistoryFilterDialog = function () {\r\n                $scope.actionMode = null;\r\n\r\n                var $windowElement = $('#saleHistoryFilterDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.applyFilters = function () {\r\n                $scope.filters.OutletID = $scope.filters.OutletID1;\r\n                $scope.filters.StatusID = $scope.filters.StatusID1;\r\n                $scope.filters.DateFrom = $scope.filters.DateFrom1;\r\n                $scope.filters.DateTo = $scope.filters.DateTo1;\r\n                $scope.actionMode = null;\r\n\r\n                if ($scope.gridType !== 'pos') {\r\n                    $scope.dearSalesFilters.DateFrom = from;\r\n                    $scope.dearSalesFilters.DateTo = to;\r\n                    $scope.dearSalesSelectedPage = 1;\r\n                }\r\n\r\n                var $windowElement = $('#saleHistoryFilterDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.getSaleShippingAddress = function() {\r\n                if ($scope.selectedItem && $scope.selectedItem.Data) {\r\n                    const data = $scope.selectedItem.Data;\r\n                    return `${data.CustomerShippingAddressLine1} ${data.CustomerShippingAddressLine2} ${data.CustomerShippingCity} ${data.CustomerShippingProvince} ${data.CustomerShippingZip} ${data.CustomerShippingCountry}`\r\n                }\r\n\r\n                return '-';\r\n            }\r\n\r\n            $scope.selectItemInternal = function (item, skipDialog) {\r\n\r\n                if (item) {\r\n\r\n                    $scope.hideDetails = false;\r\n                    $.each($scope.data, function (idx, el) {\r\n                        el.isSelected = false;\r\n                    });\r\n                    $scope.selectedItem = {};\r\n                    angular.copy(item, $scope.selectedItem);\r\n                    item.isSelected = true;\r\n                    $scope.selectedItem.RawSaleObject = JSON.parse(item.Data.RawSaleObject);\r\n                    $scope.selectedItem.RawSaleObject = convertFromOld($scope.selectedItem.RawSaleObject);\r\n                    $scope.selectedItem.RawSaleObject.IsFirstChild = $scope.selectedItem.IsFirstChild === true;\r\n\r\n                    restoreTransactionMetadata($scope.selectedItem.Data, $scope.selectedItem.RawSaleObject);\r\n\r\n                    $scope.selectedItem.IsPartialPaid = $scope.selectedItem.RawSaleObject.IsPartialPaid;\r\n\r\n                    $scope.selectedItem.isVoided = saleService.isVoided($scope.selectedItem);\r\n                    $scope.selectedItem.canBeVoided = configService.CanVoidSales &&\r\n                        ($scope.selectedItem.Status === 'LAYBY' || $scope.selectedItem.Status === 'LAYBY_CLOSED');\r\n\r\n                    // convert current selected item to pseudo sale\r\n                    // to simplify next chain action\r\n                    // non child refund - refund that was done in this refund/exchange sale\r\n                    // child refunds - refunds from nearest next chained exchanges, where\r\n                    // product sold in current refund, is refunded.\r\n                    // we need this info in parent refund to correctly show a status and\r\n                    // a number of items available for refund in parent exchange\r\n                    if (!!$scope.selectedItem.Data.Refunds &&\r\n                        $scope.selectedItem.Data.Refunds.length > 0 &&\r\n                        $scope.selectedItem.Status == 'RETURN') {\r\n                        // the non child refunds always will be 1\r\n                        var nonChildRefunds = $scope.selectedItem.Data.Refunds.filter(function (r) { return r.IsFromChild !== true; });\r\n\r\n                        // child refunds - refunds from next chained refund. They needs here for information\r\n                        var childRefunds = $scope.selectedItem.Data.Refunds.filter(function (r) { return r.IsFromChild === true; });\r\n\r\n                        // if there is child refunds, create pseudo sale\r\n                        // this is to use for chained exchanges/ refunds\r\n                        // extract from own refunds items that were sold in this refund (due to exchange)\r\n                        $scope.selectedItem.Data.InitialLines = $scope.selectedItem.Data.Lines; // for correct sums calculations\r\n                        $scope.selectedItem.Data.InitialRefunds = $scope.selectedItem.Data.Refunds;\r\n\r\n                        $scope.selectedItem.Data.Lines = nonChildRefunds[0].Lines.filter(function (r) { return r.Quantity > 0; });\r\n                        // leavs only real refund items\r\n                        nonChildRefunds[0].Lines = nonChildRefunds[0].Lines.filter(function (r) { return r.Quantity <= 0; });\r\n\r\n                        if (childRefunds.length > 0) {\r\n                            // all child refunds will be included to this refund to\r\n                            // correctly show items in\r\n                            $.each(childRefunds, function (idx, ref) {\r\n\r\n                                var childLines = ref.Lines.filter(function (r) { return r.Quantity < 0; });\r\n                                $.each(childLines, function (id, chL) {\r\n                                    chL.IsFromChild = true;\r\n                                });\r\n\r\n                                nonChildRefunds[0].Lines = nonChildRefunds[0].Lines.concat(childLines);\r\n                            });\r\n                        }\r\n\r\n                        // to allow order details form to work correctly, we should have only one\r\n                        // refund in Refunds array. So we reassign Refunds in selected item to only nonchild\r\n                        // refund\r\n                        $scope.selectedItem.Data.Refunds = [nonChildRefunds[0]];\r\n                    }\r\n\r\n                    var totalSalePaid = $scope.getSaleTotalPaid($scope.selectedItem.Data);\r\n                    var totalSaleGrid = $scope.getSaleGridTotal($scope.selectedItem.Data);\r\n\r\n                    if (typeof $scope.selectedItem.IsPartialPaid === 'undefined') {\r\n                        if ($scope.selectedItem.Status === 'ONACCOUNT_CLOSED'\r\n                            || $scope.selectedItem.Status === 'LAYBY_CLOSED'\r\n                            || $scope.selectedItem.Status === 'ONACCOUNT'\r\n                            || $scope.selectedItem.Status === 'LAYBY'\r\n                            || $scope.selectedItem.Status === 'CLOSED') {\r\n                            if (helperService.DEARRound(Math.abs(totalSaleGrid), 2) > helperService.DEARRound(Math.abs(totalSalePaid), 2)\r\n                                || helperService.DEARRound(Math.abs(totalSalePaid), 2) == 0) {\r\n                                $scope.selectedItem.IsPartialPaid = true;\r\n                            }\r\n                        }\r\n                        else if ($scope.selectedItem.Status == 'RETURN') {\r\n                            // if(helperService.DEARRound(totalSalePaid, 2) < helperService.DEARRound(totalSaleGrid, 2) &&\r\n                            //    helperService.DEARRound(totalSaleGrid, 2)>0)\r\n                            //     $scope.selectedItem.IsPartialPaid = true;\r\n                        }\r\n                    }\r\n\r\n                    $scope.selectedItem.PartiallyPaidDue = 0;\r\n                    var isNewSale0 = helperService.showNewCheckoutUI($scope.selectedItem.RawSaleObject);\r\n\r\n                    if (($scope.selectedItem.IsPartialPaid == true || $scope.selectedItem.IsFromDearSale) && $scope.selectedItem.Data.Refunds && $scope.selectedItem.Data.Refunds.length > 0) {\r\n\r\n                        if (!isNewSale0)\r\n                            $scope.selectedItem.PartiallyPaidDue = $scope.getPartialPaidDue($scope.selectedItem);\r\n                        else\r\n                            $scope.selectedItem.PartiallyPaidDue = Math.abs($scope.selectedItem.RawSaleObject.Balance);\r\n                    }\r\n\r\n                    var hasRefund = false;\r\n                    var isExchange = $scope.selectedItem.Status == 'RETURN' &&\r\n                        !!$scope.selectedItem.Data.Lines &&\r\n                        $scope.selectedItem.Data.Lines.length > 0;\r\n\r\n                    var payments = [];\r\n\r\n                    $.each($scope.selectedItem.Data.Payments, function (refIdx, ref) {\r\n                        if (ref.PaymentProcessorID === constants.backofficePayment) {\r\n                            var isFound = false;\r\n                            $.each($scope.selectedItem.RawSaleObject.Payments, function (pRefIdx, pRef) {\r\n                                if (pRef.ID == ref.ID) {\r\n                                    isFound = true;\r\n                                }\r\n                            });\r\n\r\n                            if (!isFound) {\r\n\r\n                                var posPayment = {};\r\n                                angular.copy(ref, posPayment);\r\n                                posPayment.PaymentTypeName = gettextCatalog.getString(\"Non-POS\");\r\n\r\n                                $scope.selectedItem.RawSaleObject.Payments.push(posPayment);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    var refundsCopy = angular.copy($scope.selectedItem.Data.Refunds);\r\n\r\n                    $.each($scope.selectedItem.Data.Lines, function (lineIdx, line) {\r\n                        line.refundQuantity = 0;\r\n                    });\r\n\r\n\r\n                    var discountCoeff = 1;\r\n                    $.each($scope.selectedItem.RawSaleObject.CheckoutItems, function (idx, el) {\r\n                        if (el.DiscountCoeff && el.DiscountCoeff !== 0) {\r\n                            discountCoeff = el.DiscountCoeff;\r\n                        }\r\n                    });\r\n\r\n                    $.each(refundsCopy, function (refIdx, ref) {\r\n\r\n                        hasRefund = true;\r\n\r\n                        $.each(ref.Lines, function (refLineIdx, refLine) {\r\n                            if (refLine.Quantity < 0 && (refLine.Name && refLine.Name.indexOf('(Surcharge)') == -1) &&\r\n                                (refLine.IsFromChild === true || $scope.selectedItem.Status !== 'RETURN')) {\r\n                                $.each($scope.selectedItem.Data.Lines, function (lineIdx, line) {\r\n                                    // price comparing\r\n                                    // take into account that on exclusive tax OverriddenPrice contains tax but line.Price - does not.\r\n                                    // Not only eclsudive, due to appling discountCoeff \r\n                                    var isPricesEqual = line.Price === refLine.OverriddenPrice;\r\n\r\n                                    if (helperService.DEARRound(discountCoeff,6) > 0 && \r\n                                        helperService.DEARRound(discountCoeff,6) != 1) {\r\n                                        isPricesEqual = helperService.DEARRound(line.Price, 2) ===\r\n                                            helperService.DEARRound(refLine.Price / discountCoeff, 2);\r\n                                    } \r\n                                    \r\n                                    if(!isPricesEqual) {\r\n                                        // try to calculate disount coefficient from refund price and sell price difference\r\n                                        var priceWithNoSaleDiscount =  Math.abs(refLine.TotalPerLine/ refLine.Quantity);\r\n                                        isPricesEqual = helperService.DEARRound(line.Price, 2) ===\r\n                                            helperService.DEARRound(priceWithNoSaleDiscount, 2);\r\n                                    }\r\n\r\n                                    //if ($scope.selectedItem.Data.TaxInclusive !== true) {\r\n                                    //    //isPricesEqual = helperService.DEARRound((line.TotalPerLine + line.Tax) * Math.abs(refLine.Quantity), 2) ===\r\n                                    //    //    helperService.DEARRound((refLine.TotalPerLine + refLine.Tax) * Math.abs(line.Quantity), 2);\r\n                                    //    //isPricesEqual = helperService.DEARRound(line.TotalPerLine + line.Tax, 2) ===\r\n                                    //    //    helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * line.Quantity, 2);\r\n                                    //} else {\r\n                                    //    //isPricesEqual = helperService.DEARRound(line.TotalPerLine * Math.abs(refLine.Quantity), 2) ===\r\n                                    //    //    helperService.DEARRound(refLine.TotalPerLine * Math.abs(line.Quantity), 2);\r\n                                    //    //isPricesEqual = helperService.DEARRound(line.TotalPerLine, 2) ===\r\n                                    //    //    helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * line.Quantity, 2);\r\n                                    //}\r\n\r\n                                    if ((line.Name && line.Name.indexOf('(Surcharge)') == -1) &&\r\n                                        ((refLine.ProductID != null && refLine.ProductID === line.ProductID && refLine.GiftCardCode === line.GiftCardCode &&\r\n                                            (!line.SerialNumber || line.SerialNumber === refLine.SerialNumber) && isPricesEqual) ||\r\n                                            (refLine.ProductID === line.ProductID && refLine.GiftCardCode === line.GiftCardCode && line.IsProduct == false && refLine.IsProduct == false &&\r\n                                                line.Name == refLine.Name && isPricesEqual))\r\n                                    ) {\r\n                                        if((line.Quantity < 0 && $scope.selectedItem.Status === 'RETURN') ||\r\n                                        isExchange ||\r\n                                        (line.Quantity > 0 && $scope.selectedItem.Status !== 'RETURN')) {\r\n                                            if (refLine.Quantity < 0) {\r\n                                                line.refundQuantity += Math.abs(refLine.Quantity);\r\n                                                refLine.Quantity = 0;\r\n                                            }\r\n                                            if (line.Quantity < line.refundQuantity)\r\n                                                line.refundQuantity = line.Quantity;\r\n                                        }\r\n                                    }\r\n                                });\r\n                            }\r\n                        });\r\n\r\n                        $.each(ref.Payments, function (refPayIdx, refPay) {\r\n                            var updatePay = false;\r\n                            $.each(payments, function (payIdx, pay) {\r\n                                // if (pay.ShortName === refPay.ShortName && (!pay.ServerTransactionID)) {\r\n                                if (pay.ID === refPay.ID && (!pay.ServerTransactionID)) {\r\n                                    pay.Amount += refPay.Amount;\r\n                                    updatePay = true;\r\n                                }\r\n                            });\r\n                            if (updatePay === false) {\r\n                                if (refPay.Amount >= 0)\r\n                                    payments.push(refPay);\r\n                            }\r\n                        });\r\n                        \r\n                    });\r\n\r\n                    if ($scope.selectedItem.Status === 'RETURN') {\r\n                        // remove from refund lines the same that is in\r\n                        // sale lines, because they were already calculated\r\n                        $.each($scope.selectedItem.Data.Lines, function (idx, el) {\r\n                            $.each($scope.selectedItem.Data.Refunds, function (refIdx, ref) {\r\n                                ref.Lines = ref.Lines.filter(function (l) {\r\n                                    return el.Quantity > 0 ||\r\n                                       !(l.ProductID == el.ProductID &&\r\n                                         l.OverriddenPrice == el.OverriddenPrice &&\r\n                                         (!el.SerialNumber || l.SerialNumber === el.SerialNumber));\r\n                                });\r\n                            });\r\n                        });\r\n                    }\r\n\r\n                    $scope.hideRefund = true;\r\n                    $.each($scope.selectedItem.Data.Lines, function (idx, el) {\r\n                        if (el.Name && (el.Name.indexOf('(Surcharge)') !== -1 || el.Name == 'Rounding' || el.Name == \"Discount\") &&\r\n                            el.IsProduct === false) {\r\n                        }\r\n                        else {\r\n                            if (el.Quantity !== el.refundQuantity) {\r\n                                $scope.hideRefund = false;\r\n                                return false;\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    getPaymentMethods();\r\n\r\n                    $.each(payments, function (idx, el) {\r\n                        el.Amount = helperService.DEARRound(el.Amount, 2);\r\n                        $scope.setPaymentName(el);\r\n                    });\r\n\r\n                    $scope.selectedItem.RefundPayments = payments;\r\n\r\n                    $scope.roundingReturned = 0;\r\n\r\n                    if ($scope.selectedItem.Data.Refunds) {\r\n                        $.each($scope.selectedItem.Data.Refunds, function (reIdx, ref) {\r\n                            if (ref.IsFromChild !== true) {\r\n                                $.each(ref.Lines, function (idx, el) {\r\n                                    if (el.Name === 'Rounding')\r\n                                        $scope.roundingReturned += el.Price;\r\n                                });\r\n\r\n                                // if we have sold lines in this sale, it means thst it is exchange\r\n                                if (!isExchange) {\r\n                                    var soldItems = ref.Lines.filter(function (el) {\r\n                                        return (el.IsProduct === true || el.IsGiftCard === true) && el.Quantity > 0;\r\n                                    });\r\n                                    isExchange = soldItems.length > 0;\r\n                                }\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    $scope.roundingReturned = helperService.DEARRound($scope.roundingReturned, 2);\r\n\r\n                    $scope.currentSale = angular.copy($scope.selectedItem.RawSaleObject);\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (isNewSale) {\r\n                        CalculatorHelperService.groupMainSaleRefunds($scope.selectedItem, $scope.customPaymentMethods);\r\n                    } else {\r\n                        $scope.selectedItem.RefundPayments = []; // because it shows invalid values\r\n                    }\r\n\r\n                    // remove coupon info\r\n                    delete $scope.currentSale.selectedCoupon;\r\n                    delete $scope.currentSale.selectedCouponID;\r\n                    delete $scope.currentSale.selectedCouponDealID;\r\n\r\n                    // save refunds for partial refund continuation\r\n                    if ($scope.selectedItem.Status == 'RETURN') {\r\n                        if (!!$scope.selectedItem.Data.Refunds)\r\n                            $scope.currentSale.Refunds = $scope.selectedItem.Data.Refunds;\r\n\r\n                        $scope.currentSale.PosOrderID = $scope.selectedItem.PosOrderID;\r\n                    }\r\n\r\n                    if (!isNewSale) {\r\n                        $scope.currentSale.FullReturnRounding = 0;\r\n                        $scope.currentSale.additionalEstimateTotal = 0;\r\n                        $.each($scope.currentSale.CheckoutItems, function (idx, item) {\r\n                            if (!!item.itemAppliedDiscount) {\r\n                                item.itemDiscount = item.itemAppliedDiscount;\r\n                                item.itemAppliedDiscount = 0;\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    /*Call recal Sums*/\r\n                    var returnDue = 0;\r\n                    var rawTotal = 0;\r\n\r\n                    if (!isNewSale) {\r\n                        $scope.selectedItem.RawSaleObject.Surcharge = helperService.DEARRound(saleService.surchargeSum($scope.currentSale), 2);\r\n                        $scope.selectedItem.RawSaleObject.SubTotal = $scope.abs($scope.subTotalSum($scope.currentSale.CheckoutItems));\r\n                        $scope.selectedItem.RawSaleObject.Total = $scope.abs($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive)) + ($scope.selectedItem.RawSaleObject.CashRounding ? $scope.selectedItem.RawSaleObject.CashRounding : 0);\r\n                        var stot = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive);\r\n                        var sgn = stot >= 0 ? 1 : -1;\r\n                        var paid = $scope.getSaleTotalPaid($scope.selectedItem.Data);\r\n                        rawTotal = stot + ($scope.selectedItem.RawSaleObject.CashRounding ?\r\n                            (sgn * $scope.selectedItem.RawSaleObject.CashRounding) : 0) - paid;\r\n                        rawTotal = helperService.DEARRound(rawTotal, 2);\r\n\r\n                        if ($scope.selectedItem.IsPartialPaid === true && $scope.selectedItem.Data.Refunds.length > 0) {\r\n                            returnDue = $scope.selectedItem.PartiallyPaidDue;\r\n                        }\r\n                        else {\r\n                            returnDue = rawTotal * -1;\r\n                        }\r\n                    } else {\r\n                        // in new sale mode things should be more simple\r\n                        rawTotal = CalculatorHelperService.getSaleTotalDue($scope.currentSale, $scope.selectedItem);\r\n\r\n                        if ($scope.selectedItem.IsPartialPaid === true && \r\n                            $scope.selectedItem.Data.Refunds.length > 0 && \r\n                            $scope.selectedItem.IsFirstChild\r\n                            ) {\r\n                            returnDue = $scope.selectedItem.PartiallyPaidDue;\r\n                        }\r\n                        else {\r\n                            returnDue = (isExchange === true ? 1 : -1) * rawTotal;\r\n                        }\r\n\r\n                        angular.forEach($scope.currentSale.Payments, function (p) {\r\n                            p.FromHistory = true;\r\n                        });\r\n                    }\r\n\r\n\r\n                    var saleTotalPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid($scope.selectedItem.Data)), 2);\r\n                    var saleTotalGrid = helperService.DEARRound(Math.abs($scope.getSaleGridTotal($scope.selectedItem.Data)), 2);\r\n\r\n                    $scope.selectedItem.canReturn = $scope.canReturn();\r\n                    if (!isNewSale) {\r\n                        $scope.selectedItem.canContinueReturn = !isExchange && $scope.selectedItem.Status === 'RETURN' && returnDue > 0;\r\n                        $scope.selectedItem.canContinueExchange = isExchange && $scope.selectedItem.Status === 'RETURN' && !!returnDue;// && returnDue < 0;\r\n                        $scope.selectedItem.shouldPayExtra = ($scope.selectedItem.IsPartialPaid === true && returnDue < 0) ||\r\n                            ($scope.selectedItem.canContinueExchange && returnDue < 0);\r\n                    } else {\r\n\r\n                        var isParentOnAcount = $scope.selectedItem.RawSaleObject && $scope.selectedItem.RawSaleObject.OrderType === 'ONACCOUNT' &&\r\n                            helperService.DEARRound($scope.selectedItem.RawSaleObject.Balance, 4) == 0;\r\n\r\n                        $scope.selectedItem.canContinueReturn = !isParentOnAcount && !isExchange && $scope.selectedItem.Status === 'RETURN' && !!returnDue;\r\n                        $scope.selectedItem.canContinueExchange = !isParentOnAcount && isExchange && $scope.selectedItem.Status === 'RETURN' && !!returnDue;\r\n                        $scope.selectedItem.shouldPayExtra =\r\n                            ($scope.selectedItem.IsPartialPaid === true && $scope.selectedItem.canContinueExchange!=true && returnDue < 0) ||\r\n                            ($scope.selectedItem.canContinueExchange && returnDue > 0);\r\n                        //$scope.selectedItem.shouldPayExtra = $scope.selectedItem.IsPartialPaid === true &&\r\n                        //    $scope.selectedItem.canContinueReturn !== true &&\r\n                        //    returnDue > 0;\r\n                    }\r\n\r\n                    // if we don't finish payment for this document, hide refund\r\n                    if (!$scope.hideRefund && ($scope.selectedItem.canContinueReturn || $scope.selectedItem.canContinueExchange))\r\n                        $scope.hideRefund = true;\r\n\r\n                    var canContinuePayment = false;\r\n                    if ($scope.selectedItem.Data.StandaloneRefund) {\r\n                        canContinuePayment = false;\r\n                    }\r\n                    else if ($scope.selectedItem.Status == 'ONACCOUNT' || $scope.selectedItem.Status == 'LAYBY') {\r\n                        canContinuePayment = true;\r\n                    }\r\n                    else if ($scope.selectedItem.Status == 'ONACCOUNT_CLOSED' || $scope.selectedItem.Status == 'LAYBY_CLOSED' || $scope.selectedItem.Status == 'CLOSED') {\r\n                        if(!isNewSale) canContinuePayment = saleTotalGrid > saleTotalPaid ? true : false;\r\n                         else canContinuePayment = $scope.selectedItem.shouldPayExtra;\r\n                    }\r\n                    else {\r\n                        canContinuePayment = false;\r\n                    }\r\n\r\n                    /*if($scope.selectedItem.IsFromDearSale){\r\n                        $scope.selectedItem.canContinue = canContinuePayment;\r\n                    }else{*/\r\n                        $scope.selectedItem.canContinue = canContinuePayment && hasRefund === false;\r\n                    //}                    \r\n\r\n                    $scope.selectedItem.cantExchange = undefined;\r\n                    if (($scope.selectedItem.Status == 'LAYBY'\r\n                        || $scope.selectedItem.Status == 'LAYBY_CLOSED'\r\n                        || $scope.selectedItem.Status == 'CLOSED'\r\n                    ) && canContinuePayment) {\r\n                        // layby sales, that are not paid in full, can not be exchanged in POS\r\n                        $scope.selectedItem.cantExchange = true;\r\n                    }\r\n\r\n                    $scope.selectedItem.allowOnAccountExchange = false;\r\n                    if (($scope.selectedItem.Status == 'ONACCOUNT' || $scope.selectedItem.Status == 'ONACCOUNT_CLOSED') && canContinuePayment) {\r\n                        // $scope.selectedItem.allowOnAccountExchange = true; // it seems doesn't work\r\n                        $scope.selectedItem.cantExchange = true;\r\n                    }\r\n\r\n                    if (isExchange && sgn > 0) { // exchange with additional payment. Do not show rounding\r\n                        $scope.roundingReturned = 0;\r\n                    }\r\n\r\n                    if (hasRefund && sgn < 0) { // pure refund, so no change can be\r\n                        $scope.currentSale.CashChangeAmount = 0;\r\n                    }\r\n\r\n                    if (!isNewSale)\r\n                        $scope.currentSale.LoyaltyPoints = saleService.totalPaymentsLoyaltyPoints($scope.currentSale);\r\n\r\n                } else {\r\n                    $scope.selectedItem = null;\r\n                }\r\n\r\n                if (skipDialog !== true) {\r\n                    $timeout(function () {\r\n                        showSalesHistyoryDetailsDialog();\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        $scope.raiseViewChanged();\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.isChainedRefundAllowed = function () {\r\n                return $scope.selectedItem.Status === 'RETURN';\r\n            };\r\n\r\n            $scope.getSoldOnlyItems = function (sale) {\r\n                var items = sale.CheckoutItems;\r\n                var soldItems = items.filter(function (itm) { return itm.return !== true && itm.Amount >= 0; });\r\n                return soldItems;\r\n            };\r\n\r\n            $scope.scrollTo = function (selector) {\r\n\r\n                var target = $(selector);\r\n                if (target.length) {\r\n                    //event.preventDefault();\r\n                    $('html, body').stop().animate({\r\n                        scrollTop: target.offset().top\r\n                    }, 1000);\r\n                }\r\n            };\r\n\r\n            $scope.calculateRefundDiscount = function () {\r\n                //    angular.forEach(item.ch)\r\n            };\r\n\r\n            $scope.hiddenSearch = true;\r\n            $scope.hideSearch = function (hide) {\r\n                if (hide === true) {\r\n                    $scope.searchInput = '';\r\n                    $scope.search();\r\n                }\r\n                $scope.hiddenSearch = hide;\r\n            }\r\n\r\n            $scope.sort = function (field, direction) {\r\n                $scope.selectedPage = 1;\r\n                $scope.currentDir = direction;\r\n                $scope.sortFiled = field;\r\n                $scope.sorting = { FieldName: field, Direction: direction };\r\n                $scope.search();\r\n\r\n                if ($scope.newDir === 'desc') {\r\n                    $scope.newDir = 'asc';\r\n                } else {\r\n                    $scope.newDir = 'desc';\r\n                }\r\n            }\r\n\r\n            function getServerFiledName(field) {\r\n                switch (field) {\r\n                    case 'Date':\r\n                        return 'OrderDate';\r\n                    case 'Receipt':\r\n                        return 'OrderNumberNumeric';\r\n                    case 'Status':\r\n                        return 'Data.FinancialStatus';\r\n\r\n                }\r\n            };\r\n\r\n\r\n            $scope.addCustomer = function () {\r\n                if ($scope.currentSale.canChangeCustomer === true)\r\n                    $rootScope.$broadcast('addCustomer.show', Object.assign({ showViewDetails: $scope.actionMode === 'refund' }, $scope.currentSale.customer));\r\n            };\r\n\r\n            $scope.$on('addCustomer.selected', function (event, data) {\r\n                $scope.currentSale.customer = data.customer;\r\n                $scope.currentSale.SelectedContact = null;\r\n                $scope.refundNeedCustomer = false;\r\n\r\n                let searchCustomerText = $('#searchCustomerText').val();\r\n\r\n                    if (data.customer && data.customer.Contacts && data.customer.Contacts.length > 0) {\r\n                        searchCustomerText = !!searchCustomerText ? searchCustomerText.toLowerCase().trim() : '';\r\n                        const email = !!data.email ? data.email : '';\r\n\r\n                        const foundContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.Email.toLowerCase() === email) ||\r\n                            (!!temp.Email && temp.Email.toLowerCase() === searchCustomerText) ||\r\n                            (!!temp.Phone && temp.Phone.toLowerCase() === searchCustomerText) ||\r\n                            (!!temp.MobilePhone && temp.MobilePhone.toLowerCase() === searchCustomerText));\r\n\r\n                        if (foundContact)\r\n                            $scope.currentSale.SelectedContact = foundContact;\r\n                        else {\r\n                            const defaultContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.IncludeInEmail));\r\n                            if (defaultContact)\r\n                                $scope.currentSale.SelectedContact = defaultContact;\r\n                            else\r\n                                $scope.currentSale.SelectedContact = data.customer.Contacts[0];\r\n                        }\r\n                    }\r\n\r\n                if (data.action != 'search')\r\n                    customerService.loadCustomersAll(true);\r\n            });\r\n\r\n            $scope.changeReturnItemCount = function (item) {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (!isNewSale) {\r\n                    var loyaltyEarning = parseFloat(item.LoyaltyEarning);\r\n                    item.LoyaltyPoints = loyaltyEarning ? item.PriceWithTax * item.Count * item.LoyaltyEarning : 0;\r\n                    var price = item.BasePriceWithDiscount;\r\n                    if (item.SaleType !== \"customsale\") {\r\n                        var taxObject = item.Taxes;\r\n                        var total = item.Count * price;\r\n                        item.Tax = calculateTax(taxObject, total, $scope.selectedItem.Data.TaxInclusive);\r\n                    }\r\n                }\r\n\r\n                $scope.submitSelectReturnItems();\r\n            };\r\n\r\n            var calculateTax = saleService.calculateTax;\r\n\r\n            $scope.oldReturnPayments = function () {\r\n                var sum = 0;\r\n                if ($scope.operationSubName == 'continue' && !!$scope.currentSale.Payments) {\r\n                    //sum += $scope.currentSale.Payments.sum(\"Amount\");\r\n                    // calc sum without any surcharges\r\n                    $.each($scope.currentSale.Payments, function (i, p) {\r\n                        sum += saleService.getAmountWithoutSurcharge(p);\r\n                    });\r\n                }\r\n\r\n                return sum;\r\n            };\r\n\r\n            $scope.submitSelectReturnItems = function (isContinueReturn) {\r\n                var addItem = false;\r\n                var fullReturn = true;\r\n                var lastItemReturn = true;\r\n                $scope.returnedLoaylty.value = 0;\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (!isContinueReturn) {\r\n\r\n                    var isOnlyGiftCards = true;\r\n\r\n                    $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                        if (el.return) {\r\n                            addItem = true;\r\n                        }\r\n                        if (el.ProductType != 'GiftCard' && el.maxCount !== 0)\r\n                            isOnlyGiftCards = false;\r\n\r\n                        if (el.ProductType == 'GiftCard' && !$scope.isGiftCardRefundable) {\r\n                            $scope.showRefundGiftCardError = true;\r\n                        }\r\n                        if ((!el.return && el.maxCount !== 0) || el.Count !== el.maxCount) {\r\n                            fullReturn = false;\r\n                            lastItemReturn = false;\r\n                        }\r\n\r\n                    });\r\n\r\n                    if (!$scope.isGiftCardRefundable && isOnlyGiftCards)\r\n                        addItem = true;\r\n\r\n                    if (addItem === false) {\r\n                        $scope.currentSale.CheckoutItems = [];\r\n                        $scope.showRefundAmountError = true;\r\n                    } else {\r\n                        $scope.showRefundAmountError = false;\r\n\r\n                        if (!isNewSale) {\r\n                            $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                                var returnItem = angular.copy(el);\r\n\r\n                                if (!el.DiscountCoeff)\r\n                                    el.DiscountCoeff = 1;\r\n\r\n                                ////We need to reduce itemDiscount by DiscountCoeff, or we will get incorrect prices\r\n                                returnItem.Amount = -1 * returnItem.PriceWithDiscount * returnItem.Count;\r\n                                returnItem.Price = -1 * Math.abs(returnItem.PriceWithDiscount + returnItem.itemDiscount * el.DiscountCoeff);\r\n                                returnItem.BasePrice = -1 * Math.abs(returnItem.BasePriceWithDiscount + returnItem.itemDiscount * el.DiscountCoeff);\r\n                                returnItem.Tax = -1 * el.Tax * Math.abs(returnItem.Count) / Math.abs(el.BaseCount);\r\n                                returnItem.Discount *= -1;\r\n                                returnItem.itemDiscount *= -1 * el.DiscountCoeff;\r\n                                returnItem.itemAppliedDiscount *= -1 * el.DiscountCoeff;\r\n                                returnItem.LoyaltyPoints *= -1;\r\n                                returnItem.LoyaltyPointsEarning *= -1;\r\n                                returnItem.PriceWithTax *= -1;\r\n                                returnItem.CanEdit = false;\r\n                                returnItem.sign = -1;\r\n\r\n                                var delIdx = null;\r\n                                $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                    if (el.ID === returnItem.ID) {\r\n                                        delIdx = idx;\r\n                                        return false;\r\n                                    }\r\n                                });\r\n                                if (delIdx != null) {\r\n                                    $scope.currentSale.CheckoutItems.splice(delIdx, 1);\r\n                                }\r\n\r\n                                if (el.return && el.Count !== 0) {\r\n                                    $scope.currentSale.CheckoutItems.push(returnItem);\r\n                                }\r\n                            });\r\n                        } else {\r\n                            CalculatorHelperService.calculateRefundCheckout($scope.currentSale, $scope.selectedItem, $scope.actionMode, StartCalcLevel.RefundSubmit);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.paymentValidation = {\r\n                    cashAmount: 0,\r\n                    creditCardAmount: 0,\r\n                    storeCreditAmount: 0,\r\n                    loyaltyPointsAmount: 0,\r\n                    cashSurchargeAmount: 0,\r\n                    storeCreditSurchargeAmount: 0\r\n                };\r\n\r\n                $scope.paymentValidation.cardPayments = {};\r\n                $scope.paymentValidation.customPayments = [];\r\n\r\n                $scope.payments = {\r\n                    cash: 0,\r\n                    creditCard: 0,\r\n                    storeCredit: 0,\r\n                    loyaltyPoints: 0,\r\n                    cashSurcharge: 0,\r\n                    storeCreditSurcharge: 0\r\n                };\r\n\r\n                if (!isNewSale) {\r\n                    // exclude surcharge\r\n                    var total = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive, true) * -1;\r\n\r\n                    // collect sums from previous refunds and reduce\r\n                    // available amounts in future\r\n                    const plist = helperService.mapToList($scope.currentSale.GroupedSale.PaymentsMap);\r\n\r\n                    $.each(plist, function (idx, el) {\r\n                        var ptp = el.ShortName;\r\n                        if (ptp.indexOf(\"BackofficePayment_\") === 0) {\r\n                            ptp = \"BackofficePayment_\";\r\n                        }\r\n\r\n                        switch (ptp) {\r\n                            case 'loyalty':\r\n                                $scope.paymentValidation.loyaltyPointsAmount += el.Amount;\r\n                                break;\r\n                            case 'gift card':\r\n                            case 'BackofficePayment_':\r\n                            case 'cash':\r\n                                $scope.paymentValidation.cashAmount += el.Amount;\r\n                                break;\r\n                            case 'store credits':\r\n                                $scope.paymentValidation.storeCreditAmount += el.Amount;\r\n                                break;\r\n                            case 'credit card':\r\n                                var ccAmount = saleService.getAmountWithoutSurcharge(el);\r\n                                $scope.paymentValidation.creditCardAmount += ccAmount;\r\n                                $scope.paymentValidation.creditCardAmount = helperService.DEARRound($scope.paymentValidation.creditCardAmount, 2);\r\n\r\n                                cardPayService.addSumToCardPayment($scope.paymentValidation.cardPayments, el.ServerTransactionID, el.ClientTransactionID, ccAmount, el.TransactionMetaData);\r\n\r\n                                if (el.Surcharge && el.Surcharge.RefundSurcharge === true) {\r\n                                    $scope.paymentValidation.cardPayments[cardPayService.combineKey(el.ServerTransactionID, el.ClientTransactionID)].Surcharge =\r\n                                        el.Surcharge;\r\n                                    el.Surcharge.AmountToRefund = 0;\r\n                                }\r\n\r\n                                break;\r\n\r\n                            default:\r\n                                if (!saleService.isStandardPaymentType(el.ShortName)) {\r\n\r\n                                    if (el.PaymentProcessorID === \"BackofficePayment\" && el.ShortName.indexOf(\"BackofficePayment_\") === 0) {\r\n                                        el.PaymentProcessorID = el.ShortName.substr(\"BackofficePayment_\".length);\r\n                                    }\r\n\r\n                                    // ignore loyaltylion payment processor\r\n                                    if(el.ShortName == 'loyaltylion'){\r\n                                        return;\r\n                                    }\r\n\r\n                                    // add payment type to return possible list\r\n                                    const pt = {\r\n                                        shortName: el.ShortName,\r\n                                        customPaymentName: el.PaymentTypeName,\r\n                                        validationAmount: 0,\r\n                                        amount: 0,\r\n                                        id: el.ID\r\n                                    };\r\n\r\n                                    if (el.Surcharge && el.Surcharge.RefundSurcharge === true) {\r\n                                        pt.Surcharge = el.Surcharge;\r\n                                        pt.Surcharge.AmountToRefund = 0;\r\n                                    }\r\n\r\n                                    $scope.paymentValidation.customPayments.push(pt);\r\n                                    var ccAmount = saleService.getAmountWithoutSurcharge(el);\r\n                                    pt.validationAmount = helperService.DEARRound(ccAmount, 2);\r\n                                }\r\n                                break;\r\n                        }\r\n                    });\r\n\r\n                    var hasExchange = false;\r\n                    $scope.currentSale.additionalEstimateTotal = 0;\r\n                    if (!isContinueReturn) {\r\n                        var refunds = !$scope.selectedItem.Data.InitialRefunds ? $scope.selectedItem.Data.Refunds : $scope.selectedItem.Data.InitialRefunds;\r\n\r\n                        if (refunds && refunds.length > 0) {\r\n                            if (fullReturn)\r\n                                lastItemReturn = true;\r\n                            else\r\n                                lastItemReturn = false;\r\n\r\n                            fullReturn = false;\r\n                            $.each(refunds, function (reIdx, ref) {\r\n                                const refundIdx = reIdx;\r\n\r\n                                var isExchange = false;\r\n                                $.each(ref.Lines, function (lId, l) {\r\n                                    if (l.Quantity > 0) {\r\n                                        isExchange = true;\r\n                                        hasExchange = true;\r\n                                    }\r\n                                });\r\n\r\n                                $.each(ref.Lines, function (lId, l) {\r\n                                    if (l.Name == 'Rounding') {\r\n                                        $scope.currentSale.additionalEstimateTotal += helperService.DEARRound(l.Quantity * l.TotalPerLine, 2);\r\n                                    }\r\n                                });\r\n                            });\r\n                        }\r\n                    }\r\n\r\n                    cardPayService.removeFullyUsedCards($scope.paymentValidation.cardPayments);\r\n\r\n                    if (fullReturn && $scope.selectedItem.RawSaleObject.CashRounding && $scope.selectedItem.RawSaleObject.CashRounding !== 0) {\r\n\r\n                        // first return and return whole sale\r\n                        total += helperService.DEARRound($scope.selectedItem.RawSaleObject.CashRounding, 2);\r\n                        $scope.currentSale.FullReturnRounding = helperService.DEARRound($scope.selectedItem.RawSaleObject.CashRounding, 2);\r\n                    } else {\r\n                        $scope.currentSale.FullReturnRounding = 0;\r\n                        $scope.currentSale.CashRounding = 0;\r\n                    }\r\n\r\n                    if (lastItemReturn && !fullReturn) {\r\n\r\n                        // when not all cash refunded\r\n\r\n                        if (hasExchange == false) {\r\n                            // available to refund by all payment types\r\n                            var totalRemaining = $scope.currentSale.GroupedSale.TotalSale;\r\n\r\n                            if (total != totalRemaining) {\r\n                                $scope.currentSale.FullReturnRounding = totalRemaining - total;\r\n                                total = totalRemaining;\r\n                            }\r\n                        }\r\n                        else {\r\n                            var estimatedRounding = helperService.DEARRound($scope.currentSale.additionalEstimateTotal, 2);\r\n                            if ($scope.selectedItem.RawSaleObject.CashRounding && $scope.selectedItem.RawSaleObject.CashRounding !== 0) {\r\n                                estimatedRounding += helperService.DEARRound($scope.selectedItem.RawSaleObject.CashRounding, 2);\r\n                                estimatedRounding = helperService.DEARRound(estimatedRounding, 2);\r\n                            }\r\n                            $scope.currentSale.FullReturnRounding = estimatedRounding;\r\n                            total += estimatedRounding;\r\n                        }\r\n                    }\r\n\r\n                    var orderTotal = helperService.DEARRound(Math.abs($scope.getSaleGridTotal($scope.selectedItem.Data)), 2);\r\n                    var orderPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid($scope.selectedItem.Data)), 2);\r\n                    if ($scope.canReturnPartiallyPaid() === true\r\n                        && (orderTotal > orderPaid || orderPaid == 0)) {\r\n                        $scope.paymentValidation.storeCreditAmount = $scope.getAllPartialPayment();\r\n                        $scope.paymentValidation.loyaltyPointsAmount = $scope.getAllPartialPayment();\r\n                    }\r\n                    else {\r\n                        $scope.paymentValidation.storeCreditAmount = total + $scope.oldReturnPayments();\r\n                        $scope.paymentValidation.loyaltyPointsAmount = total + $scope.oldReturnPayments();\r\n                    }\r\n                    // cash is allowed to refund entierly not depending on used payment methods\r\n                    $scope.paymentValidation.cashAmount = $scope.paymentValidation.storeCreditAmount;\r\n\r\n                    var totalWithOldReturnPayments = total + $scope.oldReturnPayments();\r\n\r\n                    if ($scope.paymentValidation.cashAmount > totalWithOldReturnPayments)\r\n                        $scope.paymentValidation.cashAmount = totalWithOldReturnPayments;\r\n                    if ($scope.paymentValidation.creditCardAmount > totalWithOldReturnPayments)\r\n                        $scope.paymentValidation.creditCardAmount = totalWithOldReturnPayments;\r\n\r\n                    $scope.currentSale.GroupedSale.TotalToRefund = totalWithOldReturnPayments;\r\n\r\n                    $scope.paymentValidation.cashAmount = helperService.DEARRound($scope.paymentValidation.cashAmount, 2);\r\n                    $scope.paymentValidation.creditCardAmount = helperService.DEARRound($scope.paymentValidation.creditCardAmount, 2);\r\n                    $scope.paymentValidation.storeCreditAmount = helperService.DEARRound($scope.paymentValidation.storeCreditAmount, 2);\r\n                    $scope.paymentValidation.loyaltyPointsAmount = helperService.DEARRound($scope.paymentValidation.loyaltyPointsAmount, 2);\r\n\r\n                    $scope.currentSale.EstimateTotal = $scope.estimateTotalSum();\r\n                    saleService.prepareSurchargeLimits($scope.currentSale.GroupedSale, $scope.paymentValidation);\r\n                    saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments);\r\n                } else {\r\n\r\n                    if(!$scope.currentSale.GroupedSale){\r\n                        $scope.currentSale.GroupedSale =\r\n                                {\r\n                                    TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n                                    GhostSurcharge: 0,\r\n                                    TotalSale: 0,\r\n                                    ExchangeAmount: 0,\r\n                                    PaymentsMap: {},\r\n                                    LoyaltyRefundCoeff: 0 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n                                };\r\n                    }\r\n\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                        selectedItem: $scope.selectedItem,\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        isContinueReturn: isContinueReturn,\r\n                        fullReturn: fullReturn,\r\n                        lastItemReturn: lastItemReturn,\r\n                        operationSubName: $scope.operationSubName,\r\n                        payments: $scope.payments,\r\n                        actionMode: $scope.actionMode\r\n                    }, StartCalcLevel.Payments);\r\n                }\r\n            };\r\n\r\n\r\n            $scope.subTotalSum = saleService.subTotalSum;\r\n\r\n            $scope.estimateTotalSum = function () {\r\n                var sum = 0;\r\n                if ($scope.currentSale.ReturnItems) {\r\n                    $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                        if (el.maxCount > 0) {\r\n                            sum += helperService.DEARRound(el.maxCount * (el.BasePriceWithDiscount), 2);\r\n                        }\r\n                    });\r\n                }\r\n\r\n                var tax = 0;\r\n                if ($scope.currentSale) {\r\n                    $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                        if (el.maxCount > 0) {\r\n                            tax += calculateTax(el.Taxes, el.BasePriceWithDiscount * el.maxCount, $scope.selectedItem.Data.TaxInclusive);\r\n                        }\r\n                    });\r\n                }\r\n                var calcTax = tax;\r\n                tax = ($scope.selectedItem.Data.TaxInclusive ? 0 : calcTax);\r\n\r\n                return sum + tax;\r\n            };\r\n\r\n            var calculateTotalTax = saleService.calculateTotalTax;\r\n\r\n            $scope.totalSum = function (item, taxInclusive, excludeCalculatedSurcharges) {\r\n                return saleService.totalSum(item, taxInclusive, excludeCalculatedSurcharges);\r\n            };\r\n\r\n            $scope.cancelRefund = function () {\r\n                $scope.actionMode = 'details';\r\n                $scope.currentSale = angular.copy($scope.selectedItem.RawSaleObject);\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                // remove coupon info\r\n                delete $scope.currentSale.selectedCoupon;\r\n                delete $scope.currentSale.selectedCouponID;\r\n                delete $scope.currentSale.selectedCouponDealID;\r\n\r\n                if (!isNewSale) {\r\n                    $scope.currentSale.FullReturnRounding = 0;\r\n                    $scope.currentSale.additionalEstimateTotal = 0;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, item) {\r\n                        item.BasePrice = item.BasePrice;\r\n                    });\r\n                }\r\n\r\n                $scope.hideDetails = false;\r\n                $scope.refundNeedCustomer = false;\r\n                $scope.showRefundAmountError = false;\r\n                $scope.showRefundGiftCardError = false;\r\n            };\r\n\r\n\r\n            $scope.editReturnPayments = function () {\r\n                showReturnPaymentsDialog();\r\n            };\r\n\r\n            function showReturnPaymentsDialog() {\r\n                var $windowElement = $('#returnPaymentsDialogPartial');\r\n                helperService.showDialog($windowElement, function () { });\r\n            }\r\n\r\n            function showSalesHistyoryDetailsDialog() {\r\n                $('.allign-to-bottom').removeClass('align');\r\n                var $windowElement = $('#saleHistoryDetailsDialogPartial');\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (!isNewSale && $scope.currentSale.PayloadVersion && Number($scope.currentSale.PayloadVersion) > 1) {\r\n                    errorService.showError(gettextCatalog.getString('The sale format is unknown. Please, update application from the store'));\r\n                    return;\r\n                }\r\n\r\n                helperService.showDialog($windowElement, function () {\r\n                    $scope.newGuidForRefund = uuid2.newguid(); // this should be used as new refund guid. Defining it here will prevent from regenerating it in connection error case\r\n                    $scope.newGuidForRefund2 = uuid2.newguid();\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('update.maxwidth');\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('history-row-total-parent', 'history-row-total', 13.5);\r\n                    }, 1);\r\n                });\r\n            }\r\n\r\n            $scope.closeSalesHistoryDetailsDialog = function () {\r\n                $scope.actionMode = null;\r\n\r\n                var $windowElement = $('#saleHistoryDetailsDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeReturnPaymentsDialog = function () {\r\n                $scope.actionMode = 'refund';\r\n\r\n                var $windowElement = $('#returnPaymentsDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            function showReturnCompliteDialog(msg) {\r\n                //printService.reconnect();\r\n                //printService.disconnect().then(function () { return printService.connect(); });\r\n\r\n                if (!msg) {\r\n                    var message = gettextCatalog.getString('Refund is successfully') + '<br/>' + gettextCatalog.getString('completed');\r\n                    $('#returnCompliteDialogPartialBody').html(message);\r\n                }\r\n                else {\r\n                    $('#returnCompliteDialogPartialBody').html(msg);\r\n                }\r\n\r\n                $scope.hideDetails = false;\r\n                $scope.currentSale = {};\r\n                $scope.currentSale.FullReturnRounding = 0;\r\n                $scope.currentSale.additionalEstimateTotal = 0;\r\n                $scope.closeSalesHistoryDetailsDialog();\r\n                var $windowElement = $('#returnCompliteDialogPartial');\r\n                helperService.showDialog($windowElement);\r\n            }\r\n\r\n            $scope.closeReturnCompliteDialog = function () {\r\n                var $windowElement = $('#returnCompliteDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n                $scope.selectedItem = null;\r\n                $scope.currentSale = null;\r\n                $scope.reloadCurrentPage();\r\n            };\r\n\r\n            $scope.openRegister = function () {\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.amountSums = function () {\r\n                var sum = 0;\r\n                if ($scope.payments) {\r\n                    if ($scope.payments.cash)\r\n                        sum += $scope.payments.cash;\r\n                    //                sum += cardPayService.sumAllCardPayments($scope.paymentValidation.cardPayments, true);\r\n                    sum += cardPayService.sumAllCardPayments($scope.paymentValidation.cardPayments, false);\r\n\r\n                    if ($scope.payments.storeCredit)\r\n                        sum += $scope.payments.storeCredit;\r\n\r\n                    if ($scope.payments.loyaltyPoints)\r\n                        sum += $scope.payments.loyaltyPoints;\r\n                }\r\n\r\n                if (!!$scope.paymentValidation && !!$scope.paymentValidation.customPayments &&\r\n                    $scope.paymentValidation.customPayments.length > 0) {\r\n                    angular.forEach($scope.paymentValidation.customPayments, function (p) {\r\n                        sum += p.amount;\r\n\r\n                        //if (!!p.Surcharge && p.Surcharge.RefundSurcharge === true && p.Surcharge.AmountToRefund)\r\n                        //    sum += p.Surcharge.AmountToRefund;\r\n\r\n                    });\r\n                }\r\n\r\n                return helperService.DEARRound(sum, 2);\r\n            };\r\n\r\n            $scope.changepPaymentAmount = function () {\r\n                $scope.showRefundPaymentsAmountError = false;\r\n                $scope.showRefundExactPaymentsAmountError = false;\r\n            };\r\n\r\n            function cashPay(enteredAmount, addPayment) {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                var amount = helperService.DEARRound(parseFloat(enteredAmount), 2);\r\n\r\n                var roundedAmount = helperService.roundCash(amount);\r\n\r\n                var cashRounding = helperService.DEARRound(roundedAmount - amount, 2);\r\n                // condition is replaced because it override correct rounding\r\n//                if (cashRounding || addPayment !== true) {\r\n                if (cashRounding && addPayment !== true) {\r\n                    $scope.currentSale.CashRounding = !isNewSale ? cashRounding : -1 * cashRounding;\r\n                }\r\n\r\n                if (addPayment === true) {\r\n                    addPaymentToRefund($scope.cashRegistryPaymentProcessorID, roundedAmount, 'Cash', true, 'cash');\r\n                }\r\n            }\r\n\r\n            $scope.customPay = function (pay) {\r\n                var payProcessor = $scope.getCustomPaymentMethod(pay.shortName);\r\n                var sum = pay.amount;\r\n                var sr = null;\r\n                if (!!pay.Surcharge) {\r\n                    if ($scope.operationName === 'Refund' && pay.Surcharge.AmountToRefund && pay.Surcharge.RefundSurcharge === true) {\r\n                        sum += pay.Surcharge.AmountToRefund;\r\n                    }\r\n\r\n                    sr = pay.Surcharge;\r\n                    addSurchargeToRefund(sr, sum, null, null, null, true);\r\n                    sr.isAddedToPayment = true;\r\n                }\r\n\r\n                var payment = addPaymentToRefund(payProcessor.paymentProcessorID, sum, pay.customPaymentName, true, pay.shortName, null, null, null, null, sr);\r\n            };\r\n\r\n\r\n            $scope.callbackModal2 = function (code) { };\r\n\r\n            function creditCardPay(refund) {\r\n\r\n                var SCOPE = $scope;\r\n                var refunds = {};\r\n                refunds[refund.id] = refund;\r\n\r\n                var promise = cardPayService.refund($scope.currentSale, refunds, $scope,\r\n                    {\r\n                        OrderNumber: $scope.currentSale.ClearOrderNumber,\r\n                        receiptCallback: function (code, text, p) {\r\n                            return printService.printAdditionalReceipts(SCOPE, code, text, p);\r\n                        },\r\n                        Currency: configService.currency,\r\n                    });\r\n\r\n                return promise.then(function (res) {\r\n                    var el = res[0];\r\n\r\n                    if (el.result) {\r\n\r\n                        if (!!el.Surcharge) {\r\n                            addSurchargeToRefund(el.Surcharge, el.amount, el.ServerTransactionID, el.ClientTransactionID, el.SaleServerTransactionID);\r\n\r\n                        }\r\n\r\n                        addPaymentToRefund(SCOPE.creditCardPaymentProcessorID, el.amount, 'Credit Card', true, 'credit card',\r\n                            el.ServerTransactionID, el.ClientTransactionID, el.SaleServerTransactionID, el.TransactionMetaData, el.Surcharge);\r\n\r\n                        return processPartialReturn();\r\n                    }\r\n                    else {\r\n                        var deferred2 = $q.defer();\r\n                        if (!el.message)\r\n                            el.message = gettextCatalog.getString('Error processing the card: ') + el.cardType + ' ' + el.cardPAN;\r\n                        $scope.errorMessage += '<br/>' + el.message;\r\n\r\n                        //// show dialog to force refund or continue or cancel processing\r\n                        //$scope.customModalDlg2Text2 = el.message +\r\n                        //                                \"<br/>\" + gettextCatalog.getString('What would you like to do next?') +\r\n                        //                                \"<br/>\" + gettextCatalog.getString('Continue with next refund, Force this refund as to be done, or Cancel processing now?');\r\n                        //$scope.customModalDlg2Caption = gettextCatalog.getString('Refund error');\r\n                        //$scope.customModalDlg2Text = \"\";\r\n                        //$scope.customModalDlg2Buttons =\r\n                        //[{\r\n                        //    name: gettextCatalog.getString('Continue'),\r\n                        //    value: 'continue'\r\n                        //},\r\n                        //{\r\n                        //    name: gettextCatalog.getString('Force refund'),\r\n                        //    value: 'refund'\r\n                        //},\r\n                        //{\r\n                        //    name: gettextCatalog.getString('Cancel'),\r\n                        //    value: 'cancel'\r\n                        //}];\r\n\r\n                        //$scope.callbackModal2 = function (code) {\r\n                        //    $scope.customModalDlg2Text2 = null;\r\n                        //    switch (code) {\r\n                        //        case 'cancel':\r\n                        //            deferred2.reject({ status: 'cancel' });\r\n                        //            break;\r\n                        //        case 'continue':\r\n                        //            deferred2.resolve({ status: 'continue' });\r\n                        //            $.blockUI();\r\n                        //            break;\r\n                        //        case 'refund':\r\n                        //            $scope.errorMessage += '<br/>' + gettextCatalog.getString('Refund was forced as to bo done.');\r\n                        //            deferred2.resolve({ status: 'refund', el: el });\r\n                        //            $.blockUI();\r\n                        //            break;\r\n                        //    }\r\n                        //};\r\n\r\n                        //$timeout(function () { helperService.showDialog('#customModalDlg2'); $.unblockUI(); });\r\n                        deferred2.resolve(false);\r\n                        return deferred2.promise;\r\n\r\n                        //return deferred2.promise\r\n                        //.then(function (res) {\r\n                        //    if (res.status == 'refund') {\r\n                        //        addPaymentToRefund(SCOPE.creditCardPaymentProcessorID, res.el.amount, 'Credit Card', true, 'credit card',\r\n                        //        res.el.ServerTransactionID, res.el.ClientTransactionID, res.el.SaleServerTransactionID);\r\n                        //        return processPartialReturn();\r\n                        //    }\r\n                        //    else {\r\n                        //        var deferred3 = $q.defer();\r\n                        //        deferred3.resolve(true);\r\n                        //        return deferred3.promise;\r\n                        //    }\r\n                        //});\r\n                    }\r\n                })\r\n            }\r\n\r\n            function storeCreditsPay(amount) {\r\n                addPaymentToRefund($scope.storeCreditsPaymentProcessorID, amount, 'Store Credits', true, 'store credits');\r\n            }\r\n\r\n            function loyaltyPointsPay(amount) {\r\n                addPaymentToRefund($scope.loyaltyPaymentProcessorID, amount, 'Loyalty Points', true, 'loyalty');\r\n            }\r\n\r\n            var totalSumWithTax = saleService.totalSumWithTax;\r\n\r\n            $scope.totalLoyaltyPoints = saleService.totalLoyaltyPoints;\r\n\r\n\r\n            //$scope.showOfflinePaymentsDialog = function() {\r\n            //    $scope.offlinePaymentsModalInstance = $uibModal.open({\r\n            //        animation: true,\r\n            //        ariaLabelledBy: 'modal-title',\r\n            //        ariaDescribedBy: 'modal-body',\r\n            //        templateUrl: 'offlinePaymentsDIalogPartial.html',\r\n            //        scope: $scope\r\n            //    });\r\n            //}\r\n\r\n            //$scope.closeOfflinePaymentsDialog = function () {\r\n            //    $scope.offlinePaymentsModalInstance.dismiss('cancel');\r\n            //};\r\n\r\n            function processPartialReturn() {\r\n                $scope.currentSale.cantProcessOffline = true;\r\n                if($scope.operationSubName!=='continue')\r\n                    $scope.currentSale.parentOrderID = $scope.selectedItem.OrderID;\r\n                \r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (isNewSale) {\r\n                    var prms = {\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments,\r\n                        selectedItem: $scope.selectedItem,\r\n                        operationSubName: $scope.operationSubName,\r\n                        actionMode: $scope.actionMode\r\n                    };\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Loyalty);\r\n                }\r\n\r\n                if($scope.selectedItem)\r\n                    $scope.currentSale.IsFromDearSale = $scope.selectedItem.IsFromDearSale;\r\n\r\n                var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'CLOSED', $scope.operationSubName === 'continue', $scope.selectedItem.Data.TaxInclusive, $scope.newGuidForRefund2);\r\n\r\n                return saleService.saveSale(currentSaleObject, $scope.currentSale);\r\n            }\r\n\r\n            function processReturn() {\r\n                // var loyaltyChange = saleService.calculateLoyaltyEx($scope.currentSale, $scope.selectedItem.RawSaleObject);\r\n                $scope.currentSale.cantProcessOffline = true;\r\n\r\n                if($scope.operationSubName!=='continue')\r\n                    $scope.currentSale.parentOrderID = $scope.selectedItem.OrderID;\r\n\r\n                $scope.lastCurrentSale = null;\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (isNewSale) {\r\n                    var prms = {\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments,\r\n                        selectedItem: $scope.selectedItem,\r\n                        operationSubName: $scope.operationSubName,\r\n                        actionMode: $scope.actionMode\r\n                    };\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Loyalty);\r\n\r\n                    $scope.lastCurrentSale = JSON.stringify($scope.currentSale);\r\n                }\r\n\r\n                    \r\n               // actually on this stage sale has already been imported to POS so it \r\n               // can be treared as naitve POS sale. So set IsFromDearSale == false to allow POS\r\n               // controller to pass it to SIM. This might lead to possible double refunds because\r\n               // someone can refund the same item from POS and from Cin7 Core and both actions will be \r\n               // done. So the commented line prevent from this but leaves Cin7 Core sale without corresponding \r\n               // credit note. And setting IsFromDearSale = false will lead to refund processing into initial\r\n               // sale but allows refund duplicates if they are done from POS and Cin7 Core separately.\r\n               // if($scope.selectedItem)\r\n               // $scope.currentSale.IsFromDearSale = $scope.selectedItem.IsFromDearSale;\r\n\r\n                $scope.currentSale.IsFromDearSale = false;\r\n               // **********************************************\r\n\r\n                var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'CLOSED', $scope.operationSubName === 'continue', $scope.selectedItem.Data.TaxInclusive, $scope.newGuidForRefund2);\r\n                var THIS = $scope;\r\n\r\n                return saleService.saveSale(currentSaleObject, $scope.currentSale)\r\n                    .then(function (resp) {\r\n                        if (resp && resp.Success === false) {\r\n                            return helperService.rejectPromise(resp.message || resp.Message);\r\n                        } else {\r\n                            return $scope.reloadCurrentPage();\r\n                        }\r\n                    })\r\n                    .then(function () {\r\n                        $.unblockUI();\r\n                        $('#salesHistoryGridContainer').unblock();\r\n\r\n                        var msg = null;\r\n                        if (!!THIS.errorMessage) {\r\n                            msg = gettextCatalog.getString('Some refunds were unsuccessful:<br/>') + THIS.errorMessage;\r\n                        }\r\n\r\n                        if (!isNewSale)\r\n                            $scope.lastCurrentSale = JSON.stringify($scope.currentSale);\r\n\r\n                        showReturnCompliteDialog(msg);\r\n                    });\r\n                //.catch(function (err) {\r\n                //    // process error\r\n                //    $.unblockUI();\r\n                //    $('#salesHistoryGridContainer').unblock();\r\n                //    $scope.processError(err, true, true);\r\n                //});\r\n            };\r\n\r\n            $scope.processError = function (err, forceConnectionError, setMessage) {\r\n                $.unblockUI();\r\n                var THIS = $scope;\r\n                if (configService.isOnline === false || (!!err && err.status == -1)) {\r\n                    if (setMessage === true)\r\n                        err = gettextCatalog.getString(\"Connection to the server has been interrupted while processing the refund. It could have been successfully processed. Please check sales history to confirm successful processing of this refund.\");\r\n                    errorService.showError(err, function () {\r\n                        if (forceConnectionError === true) {\r\n                            THIS.closeSalesHistoryDetailsDialog();\r\n                        }\r\n                    });\r\n                } else {\r\n                    // show error and login page once more\r\n                    // errorService.showError(err);\r\n                    errorService.showError(err, function () {\r\n                        if (forceConnectionError === true) {\r\n                            THIS.closeSalesHistoryDetailsDialog();\r\n                        }\r\n                    });\r\n                }\r\n            };\r\n\r\n    $scope.submitSelectReturnPayments = function () {\r\n        var d = $q.defer();\r\n        d.resolve(null);\r\n        var p = d.promise;\r\n\r\n        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n        if (!isNewSale) {\r\n            // this should be set once for refund and will be send for each refund payment operation. \r\n            //This will ensure that all refund will be attached to the same order\r\n            saleService.calculateRefundSurcharges($scope.currentSale);\r\n            //var sum = $scope.amountSums();\r\n            //var total = helperService.DEARRound($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive) * -1 + $scope.currentSale.FullReturnRounding, 2);\r\n        }\r\n\r\n        $scope.refundPaymentsError = [];\r\n        $scope.showRefundExactPaymentsAmountError = false;\r\n        if (($scope.payments.cash < 0 || $scope.payments.cash > $scope.paymentValidation.cashAmount) && $scope.payments.cash !== 0) {\r\n            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Cash payment amount should be between 0 and \") + helperService.DEARRound($scope.paymentValidation.cashAmount, 4));\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        }\r\n\r\n        if (!!$scope.paymentValidation.customPayments) {\r\n            angular.forEach($scope.paymentValidation.customPayments, function (pp) {\r\n                if ((pp.amount < 0 || pp.amount > helperService.DEARRound(pp.validationAmount, 4)) && pp.amount !== 0) {\r\n                    $scope.refundPaymentsError.push(gettextCatalog.getString(pp.customPaymentName + \" amount should be between 0 and \") + helperService.DEARRound(pp.validationAmount, 4));\r\n                    $scope.showRefundExactPaymentsAmountError = true;\r\n                }\r\n            });\r\n        }\r\n\r\n        var hasErrors = cardPayService.validateCardRefunds($scope.paymentValidation.cardPayments, $scope.refundPaymentsError);\r\n        if (hasErrors)\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        else if (($scope.payments.creditCard < 0 || $scope.payments.creditCard > $scope.paymentValidation.creditCardAmount) && $scope.payments.creditCard !== 0) {\r\n            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Credit card payment amount should be between 0 and \") + helperService.DEARRound($scope.paymentValidation.creditCardAmount, 4));\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        }\r\n\r\n        if (($scope.payments.storeCredit < 0 || $scope.payments.storeCredit > $scope.paymentValidation.storeCreditAmount) && $scope.payments.storeCredit !== 0) {\r\n            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Store credit payment amount should be between 0 and \") + helperService.DEARRound($scope.paymentValidation.storeCreditAmount, 4));\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        }\r\n\r\n        if (($scope.payments.loyaltyPoints < 0 || $scope.payments.loyaltyPoints > $scope.paymentValidation.loyaltyPointsAmount) && $scope.payments.loyaltyPoints !== 0) {\r\n            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Loyalty points amount should be between 0 and \") + helperService.DEARRound($scope.paymentValidation.loyaltyPointsAmount, 4));\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        }\r\n\r\n        if ($scope.showRefundExactPaymentsAmountError === false) {\r\n            var remainingToRefund = $scope.getRemainingToRefund(true);\r\n            var selectedToRefund = 0;\r\n\r\n            if (!isNewSale) {\r\n                selectedToRefund = $scope.amountSums();\r\n            }\r\n\r\n            if (selectedToRefund > remainingToRefund && selectedToRefund !== 0) {\r\n                $scope.refundPaymentsError.push(gettextCatalog.getString(\"Refund amount cannot be more than \") + $filter('currency')(helperService.DEARRound(remainingToRefund, 2)));\r\n                $scope.showRefundExactPaymentsAmountError = true;\r\n            }\r\n        }\r\n\r\n        if ($scope.showRefundExactPaymentsAmountError === false) {\r\n\r\n            $scope.currentSale.newRefundOrder = $scope.newGuidForRefund;//uuid2.newguid();\r\n\r\n            if ($scope.selectedItem.IsPartialPaid == true) {\r\n                $scope.currentSale.IsPartialPaid = $scope.selectedItem.IsPartialPaid;\r\n            }\r\n\r\n            const needOpenCashDrawer = !!($scope.payments.cash + $scope.payments.cashSurcharge);\r\n            if (needOpenCashDrawer) {\r\n                p = p.then(function () {\r\n                    return printService.openCashDrawer().catch(function (err) {\r\n                        console.log(err);\r\n                        helperService.showError(err);\r\n                    }).finally(function () {\r\n                        return $scope.processPayments();\r\n                    });\r\n                });\r\n            }\r\n            else {\r\n                p = p.then(function () { return $scope.processPayments(); });\r\n            }\r\n        }\r\n\r\n        return p.catch(function (err) {\r\n            $scope.processError(err, true, true);\r\n        });\r\n    };\r\n\r\n            $scope.processPayments = function () {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                $scope.currentSale.LoyaltyUpdate = 0;\r\n\r\n                var d = $q.defer();\r\n                d.resolve(null);\r\n                var p = d.promise;\r\n\r\n                getPaymentMethods();\r\n                if (!isNewSale) {\r\n                    if ($scope.operationSubName !== 'continue') {\r\n                        $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                        //$scope.currentSale.LoyaltyPointsTotal = $scope.totalLoyaltyPoints($scope.currentSale.CheckoutItems);\r\n                        $scope.currentSale.SubTotal = $scope.subTotalSum($scope.currentSale.CheckoutItems);\r\n                        $scope.currentSale.Total = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive);\r\n                        if ($scope.currentSale.Total < 0)\r\n                            $scope.currentSale.LoyaltyPointsTotal = -$scope.currentSale.LoyaltyPointsTotal;\r\n                        $scope.currentSale.Payments = [];\r\n                    }\r\n                }\r\n\r\n                $scope.closeReturnPaymentsDialog();\r\n                $scope.errorMessage = '';\r\n                $.blockUI();\r\n\r\n                // START Cash Rounding\r\n                // calculate cash rounding and send to the server with first payment\r\n                // avoid to lose rounding in SIM module\r\n                if ($scope.payments.cash + $scope.payments.cashSurcharge) {\r\n                    cashPay($scope.payments.cash + $scope.payments.cashSurcharge, false);\r\n                }\r\n\r\n                if ($scope.selectedItem.Data.StandaloneRefund !== true) {\r\n                    if ($scope.payments.cash > 0) {\r\n                        $scope.currentSale.FullReturnRounding = helperService.DEARRound($scope.currentSale.CashRounding, 2);\r\n                    }\r\n                    else {\r\n                        $scope.currentSale.CashRounding = $scope.currentSale.FullReturnRounding;\r\n                    }\r\n                }\r\n                // END Cash Rounding \r\n\r\n                let isError = false;\r\n                // always return card first \r\n                if ($scope.payments.creditCard) {\r\n                    angular.forEach($scope.paymentValidation.cardPayments, function (pay) {\r\n                        if (pay.amount != 0) {\r\n                            if (!!pay.Surcharge) {\r\n                                pay.amount += pay.Surcharge.AmountToRefund;\r\n                                pay.Surcharge.isAddedToPayment = true;\r\n                            }\r\n\r\n                            p = p.then(function () {\r\n                                return creditCardPay(pay);\r\n                            }).catch((err) => {\r\n                                $scope.processError(err, false, true);\r\n                                isError = true;\r\n                            });\r\n                        }\r\n                    });\r\n                }\r\n\r\n                p = p.then(function (res) {\r\n                    if (isError) {\r\n                        return helperService.resolvePromise(null);\r\n                    }\r\n                    if (!!$scope.paymentValidation.customPayments) {\r\n                        angular.forEach($scope.paymentValidation.customPayments, function (pay) {\r\n                            if (pay.amount != 0)\r\n                                $scope.customPay(pay);\r\n                        });\r\n                    }\r\n\r\n                    if (($scope.payments.cash + $scope.payments.cashSurcharge) >= 0) {\r\n                        cashPay($scope.payments.cash + $scope.payments.cashSurcharge, true);\r\n\r\n                        if ($scope.payments.cashSurcharge) {\r\n                            saleService.createGhostSurchargeToRefund($scope.currentSale, 'cash', $scope.payments.cashSurcharge,\r\n                                $scope.payments.cash + $scope.payments.cashSurcharge, null, null, null, true);\r\n                        }\r\n                    }\r\n\r\n                    if ($scope.payments.storeCredit + $scope.payments.storeCreditSurcharge) {\r\n                        storeCreditsPay($scope.payments.storeCredit + $scope.payments.storeCreditSurcharge);\r\n\r\n                        if ($scope.payments.storeCreditSurcharge) {\r\n                            saleService.createGhostSurchargeToRefund($scope.currentSale, 'store credits', $scope.payments.storeCreditSurcharge,\r\n                                $scope.payments.storeCredit + $scope.payments.storeCreditSurcharge, null, null, null, true);\r\n                        }\r\n                    }\r\n\r\n                    if ($scope.payments.loyaltyPoints) {\r\n                        loyaltyPointsPay($scope.payments.loyaltyPoints);\r\n                    }\r\n\r\n\r\n                    return processReturn();\r\n                });\r\n\r\n                p = p.then(function (rs) {\r\n                    $('#salesHistoryGridContainer').unblock();\r\n                    $.unblockUI();\r\n                    var d2 = $q.defer();\r\n                    d2.resolve(rs);\r\n                    return d2.promise;\r\n                });\r\n\r\n                return p;\r\n            };\r\n\r\n            $scope.doneRefund = function (noWait) {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                $scope.actionMode = 'refundsum';\r\n\r\n                if (isNewSale) {\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                        selectedItem: $scope.selectedItem,\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments,\r\n                        operationSubName: $scope.operationSubName,\r\n                        actionMode: $scope.actionMode\r\n                    }, StartCalcLevel.RefundLimits);\r\n                }\r\n\r\n                var rtr = $scope.getRemainingToRefund(false);\r\n                \r\n                if (noWait === true && rtr === 0) {\r\n                    $scope.currentSale.newRefundOrder = $scope.newGuidForRefund;\r\n\r\n                    if ($scope.selectedItem.IsPartialPaid === true) {\r\n                        $scope.currentSale.IsPartialPaid = $scope.selectedItem.IsPartialPaid;\r\n                    }\r\n\r\n                    $scope.processPayments()\r\n                        .catch(function (err) {\r\n                            $scope.processError(err, true, true);\r\n                        });\r\n\r\n                }\r\n                else {\r\n                    $scope.editReturnPayments();\r\n                }\r\n            };\r\n\r\n            $scope.doneExchange = function (keepDiscount) {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                $scope.actionMode = 'refundsum';\r\n\r\n                if (isNewSale) {\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                        selectedItem: $scope.selectedItem,\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments\r\n                    }, StartCalcLevel.RefundLimits);\r\n                    $scope.currentSale.FullReturnRounding = 0;\r\n                }\r\n\r\n                if($scope.operationSubName!=='continue')\r\n                    $scope.currentSale.parentOrderID = $scope.selectedItem.OrderID;\r\n\r\n                if ($scope.paymentValidation.cashAmount !== 0) {\r\n                    $scope.paymentValidation.cashAmount -= $scope.currentSale.FullReturnRounding;\r\n                    $scope.paymentValidation.cashAmount = helperService.DEARRound($scope.paymentValidation.cashAmount, 2);\r\n                }\r\n                //if ($scope.paymentValidation.creditCardAmount !== 0)\r\n                //    $scope.paymentValidation.creditCardAmount -= $scope.currentSale.FullReturnRounding;\r\n\r\n                $scope.paymentValidation.storeCreditAmount -= $scope.currentSale.FullReturnRounding;\r\n\r\n                cardPayService.setAllCardAmountToZero($scope.paymentValidation.cardPayments);\r\n\r\n                $scope.currentSale.paymentValidation = $scope.paymentValidation;\r\n                if (!isNewSale) {\r\n                    $scope.currentSale.RawSaleObject = $scope.selectedItem.RawSaleObject;\r\n                } else {\r\n                    $scope.currentSale.SelectedItem = $scope.selectedItem;\r\n                }\r\n\r\n                $scope.currentSale.TaxInclusive = $scope.selectedItem.Data.TaxInclusive;\r\n\r\n                if(!keepDiscount){\r\n                    $scope.currentSale.Discount = \"0\";\r\n\r\n                    $scope.currentSale.manuallyAppliedDiscount = false;\r\n                }\r\n\r\n                window.localStorage.setItem('ItemToExchange', JSON.stringify($scope.currentSale));\r\n                //            $location.path('/sell').search({ type: $scope.saleType });\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ type: $scope.saleType }));\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.copyToNewSale = function (currentSale) {\r\n                delete currentSale.ID;\r\n                delete currentSale.Date;\r\n                delete currentSale.DateNative;\r\n                delete currentSale.Payments;\r\n                delete currentSale.OrderType;\r\n                delete currentSale.Surcharges;\r\n                delete currentSale.alreadyCountedPayments;\r\n                delete currentSale.ClearOrderNumber;\r\n                delete currentSale.OrderNumber;\r\n                delete currentSale.Barcode;\r\n                delete currentSale.IsPartialPaid;\r\n                delete currentSale.OperationID;\r\n                delete currentSale.ReturnID;\r\n                delete currentSale.newRefundOrder;\r\n                delete currentSale.RefundNumber;\r\n\r\n                var checkoutItems = angular.copy(currentSale.CheckoutItems);\r\n                currentSale.CheckoutItems = [];\r\n                $.each(checkoutItems, function (idx, el) {\r\n                    if (el.Name && el.Name != 'Rounding' && el.Name.indexOf('(Surcharge)') == -1) {\r\n\r\n                        el.ID = uuid2.newguid();\r\n                        el.Count = Math.abs(el.Count);\r\n                        el.Price = Math.abs(el.BasePrice);\r\n                        el.Amount = Math.abs(helperService.DEARRound(el.BasePrice * el.Count, 2));\r\n                        el.Discount = 0;\r\n                        el.Tax = Math.abs(el.Tax);\r\n                        el.LoyaltyPoints = Math.abs(el.LoyaltyPoints);\r\n                        el.LoyaltyPointsEarning = Math.abs(el.LoyaltyPointsEarning);\r\n                        el.PriceWithTax = Math.abs(el.PriceWithTax);\r\n                        el.CanEdit = true;\r\n                        el.CanDelete = true;\r\n                        el.BasePrice = Math.abs(el.BasePrice);\r\n                        el.BasePriceWithDiscount = Math.abs(el.BasePriceWithDiscount);\r\n\r\n                        currentSale.CheckoutItems.push(el);\r\n                    }\r\n\r\n                });\r\n\r\n                $.each(currentSale.Payments, function (idx, p) {\r\n                    p.FromHistory = true;\r\n                });\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI(currentSale);\r\n                if (isNewSale) {\r\n                    $scope.currentSale.SelectedItem = $scope.selectedItem;\r\n                }\r\n\r\n                window.localStorage.setItem('ItemToExchange', JSON.stringify(currentSale));\r\n                //            $location.path('/sell').search({ type: $scope.saleType });\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ type: 'newSale' }));\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.onAccountExchangeConfirmation = function () {\r\n\r\n                var paid = $scope.getAllPartialPayment();\r\n                if (paid > 0) {\r\n                    var paidCurrency = $filter('currency')(paid);\r\n\r\n                    $scope.dialogMode = 'onaccountexchange';\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Confirmation'),\r\n                        gettextCatalog.getString('Partial payment will be automatically allocated to the store credit account. Please use store credit to complete the exchange transaction.'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n                }\r\n                else {\r\n                    $scope.doneOnAccountExchange()\r\n                        .catch(function (err) {\r\n                            $scope.processError(err, true);\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.callbackModal = function () {\r\n\r\n                if ($scope.dialogMode == 'onaccountexchange') {\r\n                    $scope.doneOnAccountExchange();\r\n                } else if ($scope.dialogMode == 'remoteprocessing') {\r\n                    $scope.robj.isRemotedlyProcessed = true;\r\n                } else if ($scope.dialogMode == 'standaloneorderexists') {\r\n                    $scope.submitStandaloneRefund2();\r\n                } else if ($scope.dialogMode == 'standaloneexchangeorderexists') {\r\n                    $scope.submitStandaloneExchangeInternal();\r\n                } else if ($scope.dialogMode == 'convertDEARSaleToPosSale') {\r\n                    $scope.convertDearSaleIntoPosSale();\r\n                } else if ($scope.dialogMode == 'removeAttachment'){\r\n                    removeAttachmentInternal();\r\n                } else if ($scope.dialogMode === 'voidSale') {\r\n                    $scope.voidSaleInternal();\r\n                }\r\n            };\r\n\r\n            $scope.doneOnAccountExchange = function () {\r\n                $scope.actionMode = 'refundsum';\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                if (isNewSale) {\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                        selectedItem: $scope.selectedItem,\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments\r\n                    }, StartCalcLevel.RefundLimits);\r\n                }\r\n\r\n                $scope.payments.cash = 0;\r\n                $scope.payments.creditCard = 0;\r\n                $scope.paymentValidation.cashAmount = 0;\r\n                $scope.paymentValidation.cardPayments = {};\r\n                $scope.paymentValidation.customPayments = [];\r\n\r\n                $scope.operationSubName = null;\r\n                $scope.currentSale.newRefundOrder = $scope.newGuidForRefund;//uuid2.newguid();\r\n\r\n                if ($scope.selectedItem.IsPartialPaid == true) {\r\n                    $scope.currentSale.IsPartialPaid = $scope.selectedItem.IsPartialPaid;\r\n                }\r\n\r\n                $scope.payments.storeCredit = $scope.paymentValidation.storeCreditAmount;\r\n                $scope.payments.loyaltyPoints = $scope.paymentValidation.loyaltyPointsAmount;\r\n\r\n                var curSale = angular.copy($scope.currentSale);\r\n\r\n                let p = $scope.processPayments();\r\n\r\n                p = p.then(function (res) {\r\n                    $scope.copyToNewSale(curSale);\r\n                });\r\n\r\n                return p;\r\n            };\r\n\r\n            $scope.standaloneSettings = {\r\n                receiptNumber: '',\r\n                allowStockAdjustment: true\r\n            };\r\n\r\n            $scope.getFieldClass = function (ctrl, isInput) {\r\n                if (ctrl.$dirty) {\r\n                    if (ctrl.$error.required)\r\n                        return isInput ? 'dp_form-control-danger form-control-danger' : 'has-danger dp_has-danger';\r\n                    else\r\n                        return isInput ? 'dp_form-control-success form-control-success' : 'has-success dp_has-success';\r\n                }\r\n            };\r\n\r\n            $scope.submitStandaloneRefund = function () {\r\n                // check that unique receipt order number is entered\r\n                saleService.loadSalesHistory(1, 1, {\r\n                    ReceiptNumber: $scope.standaloneSettings.receiptNumber\r\n                }).then(function (res) {\r\n                    if (res && res.Total > 0) {\r\n                        // order number exists already\r\n                        $scope.dialogMode = 'standaloneorderexists';\r\n                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                            gettextCatalog.getString('This receipt number has already been used. Are you sure you would like to proceed with new refund with this receipt number?'),\r\n                            gettextCatalog.getString('Yes'),\r\n                            gettextCatalog.getString('No'));\r\n                    } else {\r\n                        $scope.submitStandaloneRefund2();\r\n                    }\r\n                }).catch(function (err) {\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.submitStandaloneRefund2 = function () {\r\n                window.localStorage.setItem('ItemToExchange', JSON.stringify({\r\n                    OrderNumber: $scope.standaloneSettings.receiptNumber,\r\n                    ClearOrderNumber: $scope.standaloneSettings.receiptNumber,\r\n                    AdjustRefunds: $scope.standaloneSettings.allowStockAdjustment,\r\n                    DefaultCustomer: $scope.standaloneSettings.customer,\r\n                    IsFastRefund: $scope.standaloneSettings.fastRefund === true\r\n                }));\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ type: 'standaloneReturn' }));\r\n\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.submitStandaloneExchange = function () {\r\n                // check that unique receipt order number is entered\r\n                saleService.loadSalesHistory(1, 1, {\r\n                    ReceiptNumber: $scope.standaloneSettings.receiptNumber\r\n                }).then(function (res) {\r\n                    if (res && res.Total > 0) {\r\n                        // order number exists already\r\n                        $scope.dialogMode = 'standaloneexchangeorderexists';\r\n                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                            gettextCatalog.getString('This receipt number has already been used. Are you sure you would like to proceed with new exchange with this receipt number?'),\r\n                            gettextCatalog.getString('Yes'),\r\n                            gettextCatalog.getString('No'));\r\n                    } else {\r\n                        $scope.submitStandaloneExchangeInternal();\r\n                    }\r\n                }).catch(function (err) {\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.submitStandaloneExchangeInternal = function () {\r\n                window.localStorage.setItem('ItemToExchange', JSON.stringify({\r\n                    OrderNumber: $scope.standaloneSettings.receiptNumber,\r\n                    ClearOrderNumber: $scope.standaloneSettings.receiptNumber,\r\n                    AdjustRefunds: $scope.standaloneSettings.allowStockAdjustment,\r\n                    DefaultCustomer: $scope.standaloneSettings.customer,\r\n                    IsFastRefund: $scope.standaloneSettings.fastRefund === true\r\n                }));\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ type: 'standaloneExchange' }));\r\n\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.fastRefund = function () {\r\n                $scope.standaloneSettings.receiptNumber = null;\r\n                $.blockUI();\r\n\r\n                var pr = webOnlyProvider.posUtils(\"fastRefundNumber\",\"\") // get new unique order number for refund\r\n                .then(function(res){\r\n                    $scope.standaloneSettings.receiptNumber = res.data;\r\n                });\r\n\r\n                $scope.standaloneSettings.customer = null;\r\n                if(!!configService.consolidateToCustomerID) {\r\n                    pr = pr.then(function(){ // get default customer\r\n                        return customerService.getCustomer(configService.consolidateToCustomerID)\r\n                        .then(function (resp) {\r\n                            if (resp.Customers[0])\r\n                                $scope.standaloneSettings.customer = resp.Customers[0];\r\n                            else\r\n                                $scope.standaloneSettings.customer = null;\r\n                        });\r\n                    });\r\n                }\r\n\r\n                pr=pr.then(function(){ // go to sale page\r\n                    $.unblockUI();\r\n                    $scope.standaloneSettings.fastRefund = true;\r\n                    $scope.submitStandaloneRefund();\r\n                })\r\n                .catch(function(err){\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n\r\n                return pr;\r\n            };\r\n\r\n            $scope.showStandaloneDialog = function () {\r\n\r\n                $scope.standaloneSettings.receiptNumber = null;\r\n                var $windowElement = $('#standaloneRefundDialogPartial');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeStandaloneRefundDialog = function () {\r\n                var $windowElement = $('#standaloneRefundDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.showStandaloneExchangeDialog = function () {\r\n                $scope.standaloneSettings.receiptNumber = null;\r\n                var $windowElement = $('#standaloneExchangeDialogPartial');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeStandaloneExchangeDialog = function () {\r\n                var $windowElement = $('#standaloneExchangeDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            function addPaymentToRefund(PaymentProcessorID, Amount, PaymentTypeName, earnLoyalty, paymentShortName,\r\n                serverTransactionID, clientTransactionID, saleServerTransactionID, transactionData, surcharge) {\r\n                Amount = helperService.DEARRound(parseFloat(Amount), 2) * -1;\r\n\r\n                $scope.currentSale.Balance = 0;\r\n                var loyalty = 0;\r\n                var surchargeAmount = 0;\r\n                var surchargeTaxAmount = 0;\r\n                if (surcharge && surcharge.isAddedToPayment != true) {\r\n                    surchargeAmount = surcharge.CalculatedValue;\r\n                    surchargeTaxAmount = $scope.selectedItem.Data.TaxInclusive ? 0 : surcharge.Tax;\r\n                }\r\n\r\n                $scope.returnedLoaylty.value += $scope.abs(loyalty);\r\n\r\n                var payment = {\r\n                    ID: uuid2.newguid(),\r\n                    PaymentProcessorID: PaymentProcessorID,\r\n                    Amount: helperService.DEARRound(Amount + surchargeAmount + surchargeTaxAmount, 2),\r\n                    Date: moment.utc(),\r\n                    ShortName: paymentShortName,\r\n                    PaymentTypeName: PaymentTypeName,\r\n                    Loyalty: loyalty,\r\n                    ServerTransactionID: serverTransactionID,\r\n                    ClientTransactionID: clientTransactionID,\r\n                    SaleServerTransactionID: saleServerTransactionID,\r\n                    Surcharge: surcharge\r\n                };\r\n\r\n                if (!!transactionData) {\r\n                    payment.TransactionMetaData = transactionData;\r\n                }\r\n\r\n                if (payment.Surcharge)\r\n                    payment.Surcharge.PaymentID = payment.ID;\r\n\r\n                $scope.currentSale.Payments.push(payment);\r\n\r\n                // if refund a sum, check for 0 to prevent calculations like for exchange\r\n                if (Amount && $scope.currentSale.returnLoyaltyPoints) {\r\n                    var c = 1;\r\n                    if ($scope.currentSale.GroupedSale)\r\n                        c = $scope.currentSale.GroupedSale.LoyaltyRefundCoeff;\r\n                    loyalty = saleService.calculateLoyaltyEx($scope.currentSale, Amount * c);\r\n                }\r\n\r\n                payment.Loyalty = loyalty;\r\n\r\n                $scope.currentSale.LoyaltyUpdate += loyalty;\r\n\r\n                if (paymentShortName === \"loyalty\") {\r\n                    //                $scope.currentSale.CustomerLoyaltyPointsUsed = $scope.abs(loyalty);\r\n                    $scope.currentSale.CustomerLoyaltyPointsUsed = $scope.abs(Amount);\r\n                }\r\n\r\n                return payment;\r\n            }\r\n\r\n            function addSurchargeToRefund(surcharge, paymentAmount, serverTransactionID, clientTransactionID, saleServerTransactionID, ignoreTransactions) {\r\n\r\n                surcharge.CalculatedValue = -1 * helperService.DEARRound(surcharge.AmountToRefund - ($scope.selectedItem.Data.TaxInclusive ? 0 : surcharge.TaxToRefund), 2);\r\n                surcharge.Tax = -1 * surcharge.TaxToRefund;\r\n                surcharge.CalculatedValueWithTax = $scope.selectedItem.Data.TaxInclusive ? surcharge.CalculatedValue : (surcharge.CalculatedValue + surcharge.Tax);\r\n                surcharge.PaymentRealAmount = paymentAmount;\r\n                if (ignoreTransactions !== true) {\r\n                    surcharge.ServerTransactionID = serverTransactionID;\r\n                    surcharge.ClientTransactionID = clientTransactionID;\r\n                    surcharge.SaleServerTransactionID = saleServerTransactionID;\r\n                }\r\n\r\n                delete surcharge.AmountToRefund;\r\n                delete surcharge.TaxToRefund;\r\n\r\n                $scope.currentSale.Surcharges.push(surcharge);\r\n\r\n                $scope.currentSale.Total = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive);\r\n                $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n            }\r\n\r\n            $scope.clearReceiptModel = function () {\r\n                $scope.receiptSaleModel = {\r\n                    Customer: [],\r\n                    CheckoutProductCount: 0,\r\n                    Date: '',\r\n                    Time: '',\r\n                    OutletName: '',\r\n                    RegistryName: '',\r\n                    CheckoutProducts: [],\r\n                    SubTotal: 0,\r\n                    Discount: 0,\r\n                    CalculatedTax: 0,\r\n                    Total: 0,\r\n                    Payments: [],\r\n                    Balance: 0,\r\n                    MerchantReceipt: '',\r\n                    CustomerReceipt: ''\r\n                };\r\n            };\r\n\r\n            $scope.clearReceiptModel();\r\n\r\n            function updateReceipt(curSale, receiptDialog) {\r\n                $scope.clearReceiptModel();\r\n                curSale.calledFromHistory = true; // influence of customer loyalty points receipt calculation\r\n                var isNewSale = helperService.showNewCheckoutUI(curSale);\r\n\r\n                if(parseInt(curSale.ClearOrderNumber) === 0){\r\n                    curSale.OrderNumber = $scope.selectedItem.OrderNumber;       \r\n               }\r\n\r\n                if (!isNewSale)\r\n                {\r\n                    saleService.updateReceipt(curSale, $scope.receiptSaleModel, getBalance(curSale), $scope.currency, $scope.selectedItem.Data.TaxInclusive);\r\n                    receiptDialog();\r\n                }\r\n                else\r\n                    CalculatorHelperService.updateReceipt(curSale, $scope.receiptSaleModel, $scope.currency, receiptDialog);\r\n            }\r\n\r\n            function getBalance(curSale) {\r\n                var saleTotalPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid($scope.selectedItem.Data)), 2);\r\n                var saleTotalGrid = helperService.DEARRound(Math.abs($scope.getSaleGridTotal($scope.selectedItem.Data)), 2);\r\n                return saleTotalGrid - saleTotalPaid;\r\n            }\r\n\r\n\r\n            $scope.showReceiptDialog = function (forceRestore) {\r\n\r\n                var curSale = forceRestore === true ? JSON.parse($scope.lastCurrentSale) : angular.copy($scope.currentSale);\r\n                curSale.Date = helperService.getFormatedDateAlreadyLocal($scope.selectedItem.OrderDate);\r\n\r\n                // fix before forced print from history\r\n                if (forceRestore) {\r\n                    if ((curSale.LoyaltyPointsTotal < 0 && curSale.LoyaltyPoints > 0) ||\r\n                        (curSale.LoyaltyPointsTotal > 0 && curSale.LoyaltyPoints < 0))\r\n                        curSale.LoyaltyPoints *= -1;\r\n                }\r\n\r\n                updateReceipt(curSale, function() {\r\n                    $scope.email.receiptEmail = null;\r\n\r\n                    if ($scope.selectedItem.Data.CustomerEmail) {\r\n                        $scope.email.receiptEmail = $scope.selectedItem.Data.CustomerEmail;\r\n                    }\r\n\r\n                    var $windowElement = $('#receiptDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n                });             \r\n            }\r\n\r\n            $scope.closeReceiptDialog = function () {\r\n                //printService.reconnect();\r\n                //printService.disconnect().then(function () { return printService.connect(); });\r\n\r\n                var $windowElement = $('#receiptDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.hasTerminalReceipts = function () {\r\n                return printService.hasTerminalReceipts();\r\n            };\r\n\r\n            $scope.printReceipt = function () {\r\n                var vl = $scope.receiptHolder.receiptForm.printAllReceipts.$viewValue;\r\n                return printService.printReceipt(null, null, null, !vl).catch((err) => {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            };\r\n\r\n            $scope.receiptHolder = {\r\n            };\r\n\r\n            $scope.email = {\r\n                receiptEmail: null\r\n            };\r\n\r\n            $scope.sendEmailReceipt = function () {\r\n                $.blockUI();\r\n//                var emailBody = $('div[show-data] > .ng-scope').html();\r\n                var emailBody = emailService.setEmailToken('div[email-template] > .ng-scope').html();\r\n                var documentBody = $('div[receipt-template] > .ng-scope').html();\r\n                if (!documentBody) {\r\n                    documentBody = $('div.receipt-template div[receipt-template] > .ng-scope').html();\r\n                }\r\n                var emailSubject = $scope.receiptEmailSubject;\r\n                //            var email = $scope.receiptHolder.receiptForm.receiptEmail.$viewValue;\r\n                var email = $scope.email.receiptEmail;\r\n                if((!$scope.currentSale || !$scope.currentSale.OrderNumber) && $scope.lastCurrentSale)\r\n                    $scope.currentSale = JSON.parse($scope.lastCurrentSale);\r\n\r\n                var orders = emailService.extractOrderIDs($scope.currentSale);\r\n\r\n                emailService.sendEmailReceipt(orders.orderID, orders.baseOrderID, email, emailSubject, emailBody, false, $scope.receiptTemplateID, documentBody)\r\n                    .then(function (result) {\r\n                        $.unblockUI();\r\n                        // show message box about sending result\r\n                        if (result.Result == true) {\r\n                            $scope.closeReceiptDialog();\r\n\r\n                            $scope.sentToEmail = email;\r\n\r\n                            var extFlags = {};\r\n                            if($scope.selectedItem.ExtendedFlags) {\r\n                               extFlags = JSON.parse($scope.selectedItem.ExtendedFlags);\r\n                            }\r\n\r\n                            extFlags.SEE = 'true';\r\n                            $scope.selectedItem.ExtendedFlags = JSON.stringify(extFlags);\r\n                            $scope.selectedItem.ReceiptWasEmailed = true;\r\n\r\n                            var ordr = $scope.data.filter(\r\n                                function(r) {return r.PosOrderID === $scope.selectedItem.PosOrderID;});\r\n                            if(ordr.length>0) {\r\n                                ordr[0].ExtendedFlags = $scope.selectedItem.ExtendedFlags;\r\n                                ordr[0].ReceiptWasEmailed = true;\r\n                            }\r\n\r\n                            var $windowElement = $('#receiptSentToEmail');\r\n                            helperService.showDialog($windowElement);\r\n\r\n                            $scope.closeReceiptEmailDialog = function () {\r\n                                var $windowElement = $('#receiptSentToEmail');\r\n                                helperService.closeDialog($windowElement);\r\n                            };\r\n                        }\r\n                        else {\r\n                            var $windowElement = $('#receiptSentToEmailError');\r\n                            helperService.showDialog($windowElement);\r\n\r\n                            $scope.closeReceiptEmailDialog = function () {\r\n                                var $windowElement = $('#receiptSentToEmailError');\r\n                                helperService.closeDialog($windowElement);\r\n                            };\r\n                        }\r\n                    }, function (err) {\r\n                        $.unblockUI();\r\n                        var txt = gettextCatalog.getString(\"Error sending email.\");\r\n                        if (!!err.data && err.data.length > 0 && !!err.data[0].Exception)\r\n                            txt = err.data[0].Exception;\r\n\r\n                        errorService.showError(!!err.data ? err.data : txt);\r\n                    });\r\n            };\r\n\r\n\r\n            $scope.refundPaymentAmountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n            $scope.refundDialogItem = { Amount: 0, Type: '', elementId: null };\r\n\r\n            $scope.robj = null;\r\n\r\n            $scope.handleRemotedlyProcessed = function (obj) {\r\n                if (!obj.isRemotedlyProcessed) {\r\n                    $scope.dialogMode = 'remoteprocessing';\r\n                    $scope.robj = obj;\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        gettextCatalog.getString('Are you sure you want to skip card machine processing?'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n                } else\r\n                    obj.isRemotedlyProcessed = false;\r\n            };\r\n\r\n    $scope.showRefundPaymentAmountDlg = function (paymentType, elementId, sumLimit) {\r\n        sumLimit = helperService.DEARRound(sumLimit, 6);\r\n        $scope.refundDialogItem.Type = paymentType;\r\n        $scope.refundDialogItem.elementId = elementId.substr(1);\r\n        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n        var sumRest = 0;\r\n\r\n        if (!isNewSale)\r\n            sumRest = ($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive, true) * -1) - $scope.amountSums() + $scope.oldReturnPayments() + $scope.currentSale.FullReturnRounding;\r\n        else\r\n            sumRest = Math.abs($scope.currentSale.RemainingToRefund + $scope.currentSale.FullReturnRounding);\r\n\r\n        sumRest = helperService.DEARRound(sumRest, 6);\r\n\r\n        if (!!sumLimit) {\r\n            if (Number(sumLimit) < sumRest)\r\n                sumRest = sumLimit;\r\n        }\r\n\r\n        saleService.setPaymentLimits($scope, paymentType, sumRest);\r\n\r\n        $timeout(function () {\r\n            $scope.refundPaymentAmountDlg.show(elementId);\r\n        });\r\n    };\r\n\r\n            $scope.setRefundAmount = function (prm) {\r\n                saleService.setRefundAmount($scope, prm, $scope.selectedItem.Data.TaxInclusive);\r\n            };\r\n\r\n            $scope.refundItemCountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n            $scope.refundDialogItemCount = { Count: 0, ProductID: null };\r\n\r\n            $scope.showRefundItemCountDlg = function (item, elementId) {\r\n                if ($scope.selectedItem.canContinue === false) {\r\n                    $scope.refundDialogItemCount.ProductID = item.ProductID;\r\n                    $scope.refundDialogItemCount.Count = item.Count;\r\n                    $scope.refundDialogItemCount.ID = item.ID;\r\n                    $timeout(function () {\r\n                        $scope.refundItemCountDlg.show(elementId);\r\n                    });\r\n                }\r\n            };\r\n\r\n            // callback\r\n            $scope.setItemCount = function (prm) {\r\n                $timeout(function () { $scope.refundItemCountDlg.hide(true); });\r\n                $timeout(function () {\r\n                    if (prm === true) {\r\n                        $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                            if (el.ProductID === $scope.refundDialogItemCount.ProductID && el.ID === $scope.refundDialogItemCount.ID &&\r\n                                (el.GiftCardCode === $scope.refundDialogItemCount.GiftCardCode || (!el.GiftCardCode && !$scope.refundDialogItemCount.GiftCardCode))) {\r\n                                el.Count = helperService.DEARRound($scope.refundDialogItemCount.Count, configService.decimalPlaces);\r\n                                $scope.changeReturnItemCount(el);\r\n                                return false;\r\n                            }\r\n                        });\r\n                    }\r\n                });\r\n            };\r\n\r\n\r\n            $scope.getEmailClasss = function (form) {\r\n                if ((!form.receiptEmail.$invalid && form.receiptEmail.$dirty) || (!form.receiptEmail.$invalid && form.receiptEmail.length > 0))\r\n                    return 'dp_has-success has-success';\r\n                else if (((form.receiptEmail.$invalid || form.receiptEmail.$error.required || form.receiptEmail.$error.email) && (form.receiptEmail.$dirty || form.receiptEmail.length > 0)))\r\n                    return 'has-danger dp_has-danger';\r\n            }\r\n\r\n\r\n            $scope.cantProcessReturn = function () {\r\n                if ($scope.currentSale && $scope.currentSale.ReturnItems) {\r\n                    var cant = $scope.refundNeedCustomer === true; // /* We can process chained exchanges multiple times so total sum does not matter */ || !(($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive) * -1) >= 0);\r\n\r\n                    var hasErrorInItemCount = false;\r\n                    var itemsToReturnCount = 0;\r\n                    $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                        if (el.return) {\r\n                            itemsToReturnCount += el.Count;\r\n                        }\r\n                        if (el.Count > el.maxCount && el.return === true) {\r\n                            hasErrorInItemCount = true;\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    return cant || hasErrorInItemCount || itemsToReturnCount === 0;\r\n                }\r\n                return false;\r\n            }\r\n\r\n            $scope.lockSearch = false;\r\n\r\n            $scope.$on('scan.barcode', function (event, barcode) {\r\n                if ($(\"#clickAndCollectModel:visible\").length > 0)\r\n                    return;\r\n                $scope.checkSearchAndWait(barcode);\r\n            });\r\n\r\n            $scope.checkSearchAndWait = function (barcode) {\r\n                if ($scope.lockSearch) {\r\n                    $timeout(function () {\r\n                        $scope.checkSearchAndWait(barcode);\r\n                    }, 100);\r\n                }\r\n                else {\r\n                    $scope.processBarcodeSearch(barcode);\r\n                }\r\n            };\r\n\r\n            $scope.inputSearch = function (barcode) {\r\n                $scope.selectedPage = 1;\r\n\r\n                if ($scope.gridType !== 'pos') {\r\n                    $scope.dearSalesFilters.searchText = $scope.searchInput;\r\n                    $scope.dearSalesSearch();\r\n                }\r\n                else\r\n                    $scope.search();\r\n            }\r\n\r\n            $scope.processBarcodeSearch = function (barcode) {\r\n                $.blockUI();\r\n                $scope.lockSearch = true;\r\n                console.log('lock search');\r\n                $scope.hideSearch(false);\r\n                $scope.searchInput = barcode;\r\n                console.log('got scan.barcode: ' + barcode);\r\n\r\n                $scope.selectedPage = 1;\r\n\r\n                $scope.search();\r\n                $scope.lockSearch = false;\r\n                console.log('unlock search');\r\n                console.log('ready to next search');\r\n            };\r\n\r\n            $scope.canReturn = function () {\r\n                if ($scope.selectedItem) {\r\n\r\n                    var res =\r\n                        (\r\n                            $scope.selectedItem.Status === 'LAYBY_CLOSED'\r\n                            || $scope.selectedItem.Status === 'ONACCOUNT_CLOSED'\r\n                            || $scope.selectedItem.Status === 'ONACCOUNT'\r\n                            || $scope.selectedItem.Status === 'LAYBY'\r\n                            || $scope.selectedItem.Status === 'CLOSED'\r\n                            || $scope.selectedItem.Status === 'RETURN'\r\n                        );\r\n\r\n                    return res;\r\n                }\r\n                else {\r\n                    return false;\r\n                }\r\n            };\r\n\r\n            $scope.canReturnPartiallyPaid = function () {\r\n                if ($scope.selectedItem) {\r\n\r\n                    var isPartialPaid = false;\r\n                    if (typeof $scope.selectedItem.RawSaleObject.IsPartialPaid !== 'undefined') {\r\n                        isPartialPaid = $scope.selectedItem.RawSaleObject.IsPartialPaid;\r\n                    }\r\n\r\n                    var result = isPartialPaid || ($scope.selectedItem.Status === 'LAYBY_CLOSED' || $scope.selectedItem.Status === 'ONACCOUNT_CLOSED' || $scope.selectedItem.Status === 'ONACCOUNT' || $scope.selectedItem.Status === 'LAYBY' || $scope.selectedItem.Status === 'CLOSED');\r\n\r\n                    return result;\r\n                }\r\n                else {\r\n                    return false;\r\n                }\r\n            };\r\n\r\n            $scope.getRemainingToRefund = function (excludeSelectedAmount) {\r\n                if (!$scope.currentSale) return 0;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (!isNewSale) {\r\n                    var sTotal = $scope.getSaleTotalPaid($scope.selectedItem.Data);\r\n                    var sGrid = $scope.getSaleGridTotal($scope.selectedItem.Data);\r\n                    var amountSums = 0;\r\n\r\n                    if ($scope.canReturnPartiallyPaid() === true &&\r\n                        (helperService.DEARRound(Math.abs(sGrid), 2) > helperService.DEARRound(Math.abs(sTotal), 2)\r\n                            || helperService.DEARRound(Math.abs(sTotal), 2) === 0)) {\r\n                        if (!(excludeSelectedAmount === true)) {\r\n                            amountSums = $scope.amountSums();\r\n                        }\r\n\r\n                        return $scope.getAllPartialPayment() - amountSums;\r\n                    }\r\n                    else {\r\n                        var fullReturnRounding = 0;\r\n                        var totalSum = 0;\r\n                        if ($scope.currentSale) {\r\n                            totalSum = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive, true) * -1;\r\n\r\n                            fullReturnRounding = $scope.currentSale.FullReturnRounding;\r\n                        }\r\n\r\n                        if (!(excludeSelectedAmount === true)) {\r\n                            amountSums = $scope.amountSums();\r\n                        }\r\n\r\n\r\n                        return helperService.DEARRound(totalSum - amountSums + $scope.oldReturnPayments() + fullReturnRounding, 2);\r\n                    }\r\n                } else {\r\n                    return Math.abs($scope.currentSale.RemainingToRefund);\r\n                }\r\n            };\r\n\r\n            $scope.getAllPartialPayment = function () {\r\n                var amount = 0;\r\n\r\n                if ($scope.selectedItem.IsPartialPaid == true && $scope.selectedItem.Data.Refunds && $scope.selectedItem.Data.Refunds.length > 0) {\r\n                    amount = $scope.selectedItem.PartiallyPaidDue;\r\n                }\r\n                else {\r\n                    $.each($scope.selectedItem.RawSaleObject.Payments, function (pRefIdx, ref) {\r\n                        amount += ref.Amount;\r\n                        if (!!ref.Surcharge/* && ref.Surcharge.RefundSurcharge === false*/) { // we need in sum without surcharges in any case\r\n                            //                        amount -= ref.Surcharge.CalculatedValue - ($scope.selectedItem.Data.TaxInclusive ? 0 : ref.Surcharge.Tax);\r\n                            amount -= ref.Surcharge.CalculatedValueWithTax;\r\n                        }\r\n                    });\r\n                }\r\n\r\n                return helperService.DEARRound(amount, 2);\r\n            };\r\n\r\n            $scope.toggleItemSelection = function (item) {\r\n                if (item.maxCount == 0) {\r\n                    return false;\r\n                }\r\n                if (item.ProductType == 'GiftCard' && (!$scope.isGiftCardRefundable)) {\r\n                    return false;\r\n                }\r\n\r\n                if (!(item.maxCount === item.minCount && ($scope.selectedItem.canContinue === true || $scope.selectedItem.IsPartialPaid === true))) {\r\n                    item.return = item.return == true ? false : true;\r\n                    $scope.submitSelectReturnItems();\r\n                }\r\n            };\r\n\r\n\r\n            //#region fulfillment\r\n\r\n            $scope.callFullfilmentDialog = function () {\r\n                $rootScope.$broadcast('clickAndCollectDialog.show', { taskID: $scope.selectedItem.MasterTaskID, fromOrderLines: true });\r\n            };\r\n\r\n            //#endregion\r\n\r\n            /*\r\n             * \r\n            */\r\n            $scope.applyCustomSurchargeRefundCoefficient = function (paymentValidation, totalLimit) {\r\n                $.each(paymentValidation.customPayments, function (i, el) {\r\n                    $scope.reduceMaxAmounts(el, totalLimit);\r\n                });\r\n            };\r\n\r\n            $scope.applyCardSurchargeRefundCoefficient = function (paymentValidation, totalLimit) {\r\n                $.each(helperService.mapToList(paymentValidation.cardPayments), function (i, el) {\r\n                    $scope.reduceMaxAmounts(el, totalLimit);\r\n                });\r\n            };\r\n\r\n            $scope.reduceMaxAmounts = function (el, totalLimit) {\r\n                if (el.validationAmount > totalLimit && totalLimit > 0.0001) {\r\n                    if (el.Surcharge) {\r\n                        var coeff = totalLimit / el.validationAmount;\r\n                        el.Surcharge = $scope.correctSurcharge(el.Surcharge, coeff);\r\n                    }\r\n                    el.validationAmount = totalLimit;\r\n                }\r\n            };\r\n\r\n            $scope.prepareSurcharge = function (el, taxInclusive) {\r\n                if (el.Surcharge)\r\n                    $scope.restoreSurcharge(el.Surcharge, taxInclusive);\r\n\r\n                if (!!el.Surcharge && el.Surcharge.CalculatedValue != 0 && !(el.Surcharge.RefundSurcharge === false)) {\r\n                    var surchargeCopy = angular.copy(el.Surcharge);\r\n                    surchargeCopy.CalculatedValueWithTax = surchargeCopy.CalculatedValue + (taxInclusive ? 0 : surchargeCopy.Tax);\r\n                    surchargeCopy.AmountToRefund = 0;\r\n                    surchargeCopy.TaxToRefund = 0;\r\n                    return surchargeCopy;\r\n                } else\r\n                    return null;\r\n            };\r\n\r\n            $scope.correctSurcharge = function (el, coeff) {\r\n                var surchargeCopy = angular.copy(el);\r\n                surchargeCopy.CalculatedValue = helperService.DEARRound(surchargeCopy.CalculatedValue * coeff, 2);\r\n                surchargeCopy.CalculatedValueWithTax = helperService.DEARRound(surchargeCopy.CalculatedValueWithTax * coeff, 2);\r\n                if (surchargeCopy.AmountToRefund)\r\n                    surchargeCopy.AmountToRefund = helperService.DEARRound(surchargeCopy.AmountToRefund * coeff, 2);\r\n                if (surchargeCopy.TaxToRefund)\r\n                    surchargeCopy.TaxToRefund = helperService.DEARRound(surchargeCopy.TaxToRefund * coeff, 2);\r\n                surchargeCopy.Tax = helperService.DEARRound(surchargeCopy.Tax * coeff, 2);\r\n                if (surchargeCopy.Total)\r\n                    surchargeCopy.Total = helperService.DEARRound(surchargeCopy.Total * coeff, 2);\r\n                return surchargeCopy;\r\n            };\r\n\r\n            $scope.negateSurcharge = function (el) {\r\n                el.CalculatedValue *= -1;\r\n                el.CalculatedValueWithTax *= -1;\r\n                el.Tax *= -1;\r\n                if (el.AmountToRefund)\r\n                    el.AmountToRefund *= -1;\r\n                if (el.TaxToRefund)\r\n                    el.TaxToRefund *= -1;\r\n                if (el.Total)\r\n                    el.Total *= -1;\r\n            };\r\n\r\n            $scope.restoreSurcharge = function (sd, taxInclusive) {\r\n                if (!sd || !sd.Total) return sd;\r\n\r\n                sd.CalculatedValue = sd.Total;\r\n                sd.CalculatedValueWithTax = taxInclusive === true ? sd.Total : (sd.Total + sd.Tax);\r\n            };\r\n\r\n            // s2 surcharge will be added into s1\r\n            $scope.sumSurcharges = function (s1, s2, isNegative) {\r\n                if (!s1 || !s2) return;\r\n                var sign = isNegative === true ? -1 : 1;\r\n                s1.CalculatedValue = helperService.addValues(s1.CalculatedValue, sign * s2.CalculatedValue);\r\n                s1.CalculatedValueWithTax = helperService.addValues(s1.CalculatedValueWithTax, sign * s2.CalculatedValueWithTax);\r\n                s1.Tax = helperService.addValues(s1.Tax, sign * s2.Tax);\r\n                s1.AmountToRefund = helperService.addValues(s1.AmountToRefund, sign * s2.AmountToRefund);\r\n                s1.TaxToRefund = helperService.addValues(s1.TaxToRefund, sign * s2.TaxToRefund);\r\n                if (s1.Total && s2.Total)\r\n                    s1.Total = helperService.addValues(s1.Total, sign * s2.Total);\r\n            };\r\n\r\n            $scope.allCustomPaymentValidations = function (paymentValidation) {\r\n                var sum = 0;\r\n                $.each(paymentValidation.customPayments, function (i, el) {\r\n                    sum += el.validationAmount;\r\n                });\r\n                return sum;\r\n            };\r\n\r\n            $scope.setPaymentMethodName = function (el) {\r\n                switch (el.ShortName) {\r\n                    case 'cash':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Cash\");\r\n                        break;\r\n                    case 'credit card':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Credit card\");\r\n                        break;\r\n                    case 'store credits':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Store credit\");\r\n                        break;\r\n                    case 'loyalty points':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Loyalty points\");\r\n                        break;\r\n                    case 'loyalty':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Loyalty points\");\r\n                        break;\r\n                    default:\r\n                        el.PaymentTypeName = $scope.getCustomPaymentMethodName(el.ShortName);\r\n                        break;\r\n                }\r\n            };\r\n\r\n            $scope.calcSelectedSurcharges = function () {\r\n                return saleService.calcSelectedSurcharges($scope.payments, $scope.paymentValidation);\r\n            };\r\n\r\n            $scope.calcTotalPay = function () {\r\n                return saleService.calcSelectedSurcharges($scope.payments, $scope.paymentValidation) +\r\n                    saleService.calcTotalPay($scope.payments, $scope.paymentValidation);\r\n            };\r\n\r\n            $scope.remainingInOrder = function () {\r\n                if (!$scope.currentSale) return;\r\n\r\n                var res =  helperService.DEARRound($scope.currentSale.EstimateTotal, 2) + $scope.currentSale.BaseTotal - $scope.currentSale.discountValue;\r\n                return res;\r\n            };\r\n\r\n            $scope.totalInOrder = function () {\r\n                if (!$scope.currentSale) return;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                if (!isNewSale)\r\n                    return $scope.abs($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive, true)) + $scope.currentSale.FullReturnRounding;\r\n                else {\r\n                    return $scope.abs($scope.currentSale.Total) + $scope.currentSale.FullReturnRounding;\r\n                }\r\n            };\r\n\r\n            $scope.subTotalInOrder = function () {\r\n                if (!$scope.currentSale) return;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                if (!isNewSale)\r\n                    return $scope.abs($scope.subTotalSum($scope.currentSale.CheckoutItems, $scope.currentSale));\r\n                else\r\n                    return $scope.abs($scope.currentSale.SubTotal);\r\n            };\r\n\r\n            $scope.setPaymentName = function(el) {\r\n                switch (el.ShortName) {\r\n                    case 'cash':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Cash\");\r\n                        break;\r\n                    case 'credit card':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Credit card\");\r\n                        break;\r\n                    case 'store credits':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Store credit\");\r\n                        break;\r\n                    case 'loyalty points':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Loyalty points\");\r\n                        break;\r\n                    case 'loyalty':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Loyalty points\");\r\n                        break;\r\n                    default:\r\n                        el.PaymentTypeName = $scope.getCustomPaymentMethodName(el.ShortName);\r\n                        break;\r\n                }\r\n\r\n            };\r\n\r\n\r\n            /*Attachments */\r\n            $scope.files = null;\r\n            $scope.openAttachmentDialog = function(row) {\r\n                $(\"#AttachmentIpint_\" + row.OrderID).trigger('click');\r\n                return false;\r\n            }\r\n\r\n            $scope.onFileSelect = function(e){\r\n                $.blockUI();\r\n\r\n                var orderID = $(e.target).attr(\"orderID\");\r\n                var files = e.target.files;\r\n                \r\n                var hasError = false;\r\n                var error  = \"\";\r\n\r\n                //var fd = new FormData();\r\n\r\n                var prm = helperService.resolvePromise(true);\r\n\r\n                var filesToSend = [];\r\n\r\n\r\n                $.each(files, function(idx, file){\r\n                    var fExtension = (file.name.slice((file.name.lastIndexOf(\".\") - 1 >>> 0) + 2)).toLowerCase();\r\n                    if(fExtension === \"exe\" || fExtension === \"msi\"){\r\n                        hasError = true;\r\n                        error += gettextCatalog.getString(\"File\") +\" \"+ file.name + \" \" +   gettextCatalog.getString(\"has unsupported extension\") + \"<br/>\";\r\n                    } else { \r\n                        //fd.append('orderFiles', file, file.name);\r\n                        \r\n                        prm = prm.then(function(){\r\n                            return fileToBase64(filesToSend, file.name, file);\r\n                        });\r\n                    }\r\n                });\r\n                \r\n\r\n                if(hasError){\r\n                    $.unblockUI();\r\n                    errorService.showError(error);\r\n                } else{\r\n                    e.target.value = '';\r\n\r\n                    prm.then(function(resps){\r\n                        saleService.attachFilesToOrder(orderID,filesToSend).then(function(success){\r\n                            $.unblockUI();\r\n\r\n                        }, function(err){\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        });\r\n                    }, function(err){\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    }); \r\n                }\r\n            }\r\n\r\n            const fileToBase64 = function(filesToSend, fileName, file){\r\n                return new Promise(function(resolve, reject){\r\n                    var reader = new FileReader();\r\n                    reader.readAsDataURL(file);\r\n                    reader.onload = function(){\r\n                        filesToSend.push({fileName: fileName, fileContent: reader.result});\r\n                        resolve(reader.result);\r\n                    };\r\n                    reader.onerror = function(error){\r\n                        reject(error);\r\n                    };\r\n                });\r\n            }\r\n\r\n\r\n            $scope.removeAttachment = function(attachment){\r\n                $scope.selectedAttachment = attachment;\r\n\r\n                $scope.dialogMode = 'removeAttachment';\r\n                helperService.showCustomDialog(gettextCatalog.getString('Confirmation'),\r\n                    gettextCatalog.getString('Are you sure that you want to delete this attachment?'),\r\n                    gettextCatalog.getString('Yes'),\r\n                    gettextCatalog.getString('No'));\r\n\r\n            }\r\n\r\n            function removeAttachmentInternal(){\r\n                if($scope.selectedAttachment != null){\r\n                    $.blockUI();\r\n\r\n                    saleService.removeAttachment($scope.selectedAttachment.AttachementID)\r\n                    .then(function(){\r\n\r\n                        var attachmentIndex = $scope.selectedItem.Attachments.indexOf($scope.selectedAttachment);\r\n                        \r\n                        $scope.selectedItem.Attachments.splice(attachmentIndex, 1);\r\n\r\n                        $scope.selectedAttachment = null;\r\n                        $.unblockUI();\r\n                    },function(err){\r\n                        $.unblockUI();\r\n                        var message = gettextCatalog.getString('Failed to remove attachment: ') + err;\r\n                        errorService.showError(message);\r\n                    });\r\n                    \r\n                }\r\n            }\r\n\r\n            $scope.showInMobileDesign = function() {\r\n                return configService.isMobileDesign ? '' : 'desktop-hide';\r\n            };\r\n\r\n            $scope.showInDesktopDesign = function() {\r\n                return configService.isMobileDesign ? 'mobile-hide' : '';\r\n            };\r\n\r\n            $scope.addDelivery = function(){\r\n                $rootScope.$broadcast('deliveryDialog.show', \r\n                { \r\n                    sale: $scope.currentSale\r\n                });\r\n            };\r\n\r\n            $scope.selectDelivery = function(row) {\r\n                $rootScope.$broadcast('deliveryDialog.show', \r\n                { \r\n                    sale: {\r\n                        ID: row.OrderID\r\n                    }, \r\n                    addNew: false\r\n                });\r\n            };\r\n\r\n            $scope.canDelivery = function() {\r\n                return configService.canSeeAllScheduledDeliveries === true && configService.isOnline === true;\r\n            }\r\n\r\n            $scope.setDropdownPosition = function() {\r\n                try {\r\n                    var isLeftAligned = $('#refundExchangeMenuBtn').offset().left < $window.innerWidth / 2;\r\n                    $('#refundExchangeMenu').toggleClass('dropdown-menu-right', !isLeftAligned);\r\n                } catch (e) {\r\n                    console.error(e);\r\n                }\r\n            };\r\n\r\n            $scope.voidSale = function() {\r\n                $scope.dialogMode = 'voidSale';\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                    gettextCatalog.getString('Sale order will be deleted together with its data from all internal reports. Are you sure that you want to proceed?'),\r\n                    gettextCatalog.getString('Yes'),\r\n                    gettextCatalog.getString('No'));\r\n            }\r\n        \r\n            $scope.voidSaleInternal = function() {\r\n                $.blockUI();\r\n                webOnlyProvider.voidSale($scope.selectedItem.PosOrderID).then(function() {\r\n                    // add order state change log\r\n                    return orderStatusService.trackOrder(\r\n                        $scope.selectedItem.RawSaleObject.ID || $scope.selectedItem.PosOrderID,\r\n                        configService.registrySalesID,\r\n                        'voided'\r\n                    ).catch(function(err) {\r\n                        console.error('Failed to track void status:', err);\r\n                    });\r\n                }).then(function() {\r\n                    return $scope.reloadItem($scope.selectedItem.PosOrderID);\r\n                }).then(function() {\r\n                    $.unblockUI();\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: gettextCatalog.getString('Sale order {{orderNumber}} has been voided.', { orderNumber: $scope.selectedItem.OrderNumber })\r\n                    });\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            }\r\n\r\n            angular.element($window).bind('resize', function () {\r\n                $scope.setDropdownPosition();\r\n            });\r\n\r\n            initMeasure();\r\n        }]);\r\n\r\nangular.module('mainApp').filter('getSaleHistoryStatusColor', function() {\r\n    return function(status) {\r\n        switch (status) {\r\n            case 'RETURN':\r\n                return {'background-color':'#FEE8E8'};\r\n            case 'CLOSED':\r\n            case 'ONACCOUNT_CLOSED':\r\n            case 'LAYBY_CLOSED': \r\n                return {'background-color':'#D6F3F0'};\r\n            case 'ONACCOUNT':\r\n            case 'LAYBY':\r\n                return {'background-color':'#D6E3F3'};\r\n            case 'LAYBY_CLOSED_VOIDED':\r\n            case 'LAYBY_VOIDED':\r\n                return {'background-color':'#FEE8E8'};\r\n\r\n        }\r\n    };\r\n});","angular.module(\"mainApp\").controller('salesParkedController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'saleService', \r\n    '$location', 'configService', 'helperService', 'orderByFilter','$interval', '$locale',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, saleService, \r\n        $location, configService, helperService, orderBy, $interval, $locale) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constSalesParkedViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n        $scope.isSite = configService.isSite;\r\n\r\n        $scope.fullFilters = false;\r\n\r\n        $scope.selectedPage = 1;\r\n        $scope.totalPages = 1;\r\n        $scope.itemsByPage = 25;\r\n        $scope.totalRecords = null;\r\n        $scope.isLoading = false;\r\n\r\n        // array for sales\r\n        $scope.offlineParkedSales = [];\r\n        $scope.onlineParkedSales = [];\r\n        $scope.statuses = constants.parkStatuses;\r\n        $scope.sorting = {};\r\n\r\n        $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            if ($scope.isOnline === true) {\r\n                $scope.loadOnlineParkedSales(true);\r\n            } else {\r\n                $scope.loadOfflineParkedSales();\r\n            }\r\n\r\n            $scope.restartRefresher();\r\n        };\r\n\r\n        $scope.refresher = null;\r\n        \r\n        $scope.restartRefresher = function() {\r\n            if(!!$scope.refresher)\r\n             $interval.cancel($scope.refresher);\r\n\r\n             $scope.refresher = $interval($scope.refreshData, 60000);    \r\n        }\r\n\r\n        $scope.refreshData = function() {\r\n            if($scope.loadInProcess) {\r\n                $scope.restartRefresher();\r\n            } else {\r\n                if ($scope.isOnline === true && $scope.active === 0) {\r\n                    $scope.loadOnlineParkedSales(true);\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.loadOfflineParkedSales = function () {\r\n            $scope.active = 1;\r\n            saleService.loadOfflineSales(null, 'parked').then(function (res) {\r\n                $scope.selectedPage = 1;\r\n                getPages(res.length);\r\n\r\n                var orderedRes = orderBy(res, 'lastModified', true);\r\n                $scope.offlineParkedSales = orderedRes.slice(($scope.selectedPage - 1) * $scope.itemsByPage, $scope.itemsByPage * ($scope.selectedPage));\r\n\r\n                $scope.raiseViewChanged();\r\n            });\r\n        }\r\n\r\n        // makes deformatting and removes all nonnumeric symbols except last found\r\n        function deformatCurrency(val) {\r\n            if (typeof (val) != 'string' || !val || val.length == 0)\r\n                return val;\r\n\r\n            var replace = true;\r\n            var res = '';\r\n            for (j = val.length - 1; j >= 0; j--) {\r\n                if (val[j] >= '0' && val[j] <= '9')\r\n                    res = val[j] + res;\r\n                else if (replace) {\r\n                    res = val[j] + res;\r\n                    replace = false;\r\n                }\r\n            }\r\n\r\n            return parseFloat(res);\r\n        }\r\n\r\n        const scrollOfflineReachBottomCallback = function () {\r\n            if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages && !$scope.isOnline /* only trigger for offline tab */) {\r\n                $scope.selectedPage++;\r\n\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                saleService.loadOfflineSales(null, 'parked').then(function (res) {\r\n\r\n                    getPages(res.length);\r\n\r\n                    var orderedRes = orderBy(res, 'lastModified', true);\r\n\r\n                    var offlineParkedSales = orderedRes.slice(($scope.selectedPage - 1) * $scope.itemsByPage, $scope.itemsByPage * ($scope.selectedPage));\r\n\r\n                    $.each(offlineParkedSales, function (idx, el) {\r\n                        if (!$scope.offlineParkedSales.filter(function (fEl) {\r\n                            return fEl.SaleID === el.SaleID;\r\n                        }).length > 0) {\r\n                            $scope.offlineParkedSales.push(el)\r\n                        }\r\n                    });\r\n                    $.unblockUI();\r\n                    $scope.isLoading = false;\r\n                },\r\n                function (err) {\r\n                    $.unblockUI();\r\n                    $scope.isLoading = false;\r\n                    errorService.showError(err);\r\n                });\r\n            }\r\n        }\r\n\r\n        initPagerOnScroll(scrollOfflineReachBottomCallback);\r\n\r\n        $scope.$on(\"$destroy\", function () {\r\n            // deleting order is important!!! Should be inversed else next time scrollers will not work\r\n            $interval.cancel($scope.refresher);\r\n            $scope.refresher = null;\r\n        });\r\n\r\n\r\n        $scope.loadInProcess = false;\r\n        $scope.loadOnlineParkedSales = function (lockFast) {\r\n            $scope.active = 0;\r\n            $scope.loadInProcess = true;\r\n            if(lockFast) {\r\n                $.blockUI();\r\n            }\r\n\r\n            //$scope.onlineParkedSales = [];\r\n            //$scope.selectedPage = 1;\r\n\r\n            return saleService.loadOnlineParkedSales(1, $scope.itemsByPage, configService.lastOutletID)\r\n            .then(function (resp) {\r\n                $scope.onlineParkedSales = [];\r\n                $scope.selectedPage = 1;\r\n\r\n                var data = [];\r\n                if ($scope.sortFiled === '') {\r\n                    data = orderBy(resp.data.Orders, 'OrderDate', true);\r\n                } else {\r\n                    var reverse = $scope.currentDir === 'desc';\r\n                    var filed = getServerFiledName($scope.sortFiled);\r\n                    data = orderBy(resp.data.Orders, filed, reverse);\r\n                }\r\n\r\n                getPages(resp.data.Total);\r\n                $.each(data, function (idx, el) {\r\n                    var v = {\r\n                        SaleID: el.OrderID,\r\n                        lastModified: el.OrderDate,\r\n                        OrderNumber: el.OrderNumber,\r\n                        Notes: el.Notes,\r\n                        info: { userName: el.SalesRepresentative || el.UserName },\r\n                        TotalSum: el.TotalSum,\r\n                        //sale: angular.extend(JSON.parse(el.Data.RawSaleObject), { OrderNumber: el.Data.OrderNumber }),\r\n                        Customer: el.CustomerName\r\n                    };\r\n                    \r\n                    v.TotalSum = deformatCurrency(v.TotalSum);\r\n                    $scope.onlineParkedSales.push(v);\r\n                });\r\n\r\n                $scope.raiseViewChanged();\r\n            })\r\n            .finally(function() {\r\n                if(lockFast) {\r\n                    $.unblockUI();\r\n                }\r\n                $scope.loadInProcess = false;\r\n            });\r\n        }\r\n\r\n        const scrollOnlineReachBottomCallback = function () {\r\n            if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages && $scope.isOnline /* only trigger for online tab */) {\r\n                $scope.selectedPage++;\r\n\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                saleService.loadOnlineParkedSales($scope.selectedPage, $scope.itemsByPage, configService.lastOutletID).then(function (resp) {\r\n                    var data = [];\r\n                    if ($scope.sortFiled === '') {\r\n                        data = orderBy(resp.data.Orders, 'OrderDate', true);\r\n                    } else {\r\n                        var reverse = $scope.currentDir === 'desc';\r\n                        var filed = getServerFiledName($scope.sortFiled);\r\n                        data = orderBy(resp.data.Orders, filed, reverse);\r\n                    }\r\n\r\n                    getPages(resp.data.Total);\r\n\r\n                    $.each(data, function (idx, el) {\r\n                        if (!$scope.onlineParkedSales.filter(function (fEl) {\r\n                            return fEl.SaleID === el.OrderID;\r\n                        }).length > 0) {\r\n\r\n                            var v = {\r\n                                SaleID: el.OrderID,\r\n                                lastModified: el.OrderDate,\r\n                                OrderNumber: el.OrderNumber,\r\n                                Notes: el.Notes,\r\n                                info: { userName: el.SalesRepresentative || el.UserName },\r\n                                TotalSum: el.TotalSum,\r\n                                //sale: angular.extend(JSON.parse(el.Data.RawSaleObject), { OrderNumber: el.Data.OrderNumber }),\r\n                                Customer: el.CustomerName\r\n                            };\r\n\r\n                            v.TotalSum = deformatCurrency(v.TotalSum);\r\n                            $scope.onlineParkedSales.push(v);\r\n                        }\r\n                    });\r\n                    $.unblockUI();\r\n                    $scope.isLoading = false;\r\n\r\n                    $scope.restartRefresher();\r\n                },\r\n                    function (err) {\r\n                        $.unblockUI();\r\n                        $scope.isLoading = false;\r\n                        errorService.showError(err);\r\n                    });\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollOnlineReachBottomCallback);\r\n\r\n        $scope.continueSale = function (saleID) {\r\n            window.localStorage.setItem('continueSale', JSON.stringify({ saleID: saleID, isParked: true }));\r\n            $location.path('/sell');\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectPage = function (pageNumber) {\r\n            if (pageNumber > 0 && pageNumber <= $scope.totalPages) {\r\n                $scope.selectedPage = pageNumber;\r\n                if ($scope.active === 0) {\r\n                    $scope.loadOnlineParkedSales(true);\r\n                } else {\r\n                    $scope.loadOfflineParkedSales();\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n        $scope.currentDir = 'desc';\r\n        $scope.newDir = 'asc';\r\n        $scope.sortFiled = '';\r\n\r\n        $scope.currentOfflineDir = 'desc';\r\n        $scope.newOfflineDir = 'asc';\r\n        $scope.sortOfflineFiled = '';\r\n\r\n        $scope.sort = function (field, direction) {\r\n            $scope.selectedPage = 1;\r\n            $scope.currentDir = direction;\r\n            $scope.sortFiled = field;\r\n            $scope.sorting = { FieldName: field, Direction: direction };\r\n            $scope.loadOnlineParkedSales(true);\r\n\r\n            if ($scope.newDir === 'desc') {\r\n                $scope.newDir = 'asc';\r\n            } else {\r\n                $scope.newDir = 'desc';\r\n            }\r\n            \r\n            $scope.restartRefresher();\r\n        }\r\n\r\n        $scope.sortOffline = function (field, direction) {\r\n            $scope.currentOfflineDir = direction;\r\n            $scope.sortOfflineFiled = field;\r\n            var reverse = $scope.currentOfflineDir === 'desc';\r\n            $scope.offlineParkedSales = orderBy($scope.offlineParkedSales, field, reverse);\r\n\r\n            if ($scope.newOfflineDir === 'desc') {\r\n                $scope.newOfflineDir = 'asc';\r\n            } else {\r\n                $scope.newOfflineDir = 'desc';\r\n            }\r\n        }\r\n\r\n        function getServerFiledName(field) {\r\n            switch (field) {\r\n                case 'Date':\r\n                    return 'OrderDate';\r\n                case 'Receipt':\r\n                    return 'OrderNumberNumeric';\r\n                case 'Status':\r\n                    return 'Data.FinancialStatus';\r\n\r\n            }\r\n        };\r\n\r\n\r\n        $scope.parseFloat = function (val) {\r\n            return parseFloat(val).toFixed(2);\r\n        }\r\n\r\n        $scope.isOnline = configService.isOnline;\r\n        if ($scope.isOnline === false) {\r\n            $scope.active = 1;\r\n        } else\r\n            $scope.active = 0;\r\n\r\n        $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n            $scope.isOnline = object;\r\n            if ($scope.isOnline === false) {\r\n                $(\"#selectOfflineTabButton\").trigger('click');\r\n            }\r\n        });\r\n    }]);","\r\nangular.module(\"mainApp\").controller('selectOutletRegistryController',\r\n    ['$rootScope', '$scope', 'configService', '$element', 'helperService', 'loginService',\r\n        'outletService', '$location', 'errorService', '$timeout', 'gettextCatalog',\r\n        '$q', 'dataChangeNotificationService', 'googleHelperService', \r\n        function ($rootScope, $scope, configService, $element, helperService, loginService,\r\n            outletService, $location, errorService, $timeout, gettextCatalog,\r\n            $q, dataChangeNotificationService, googleHelperService) {\r\n            $scope.config = configService;\r\n\r\n            $scope.reset = function () {\r\n                $scope.outlets = null;\r\n                $scope.outletID = null;\r\n                $scope.registryID = null;\r\n                $scope.activeMode = 0; // 0 - select outlet, 1 - select registry\r\n                $scope.selectedOutletItem = null;\r\n                $scope.selectedOutlet = null;\r\n                $scope.selectedRegister = null;\r\n            };\r\n\r\n            $scope.reset();\r\n\r\n            $scope.$on('selectOR.show', function (event, data) {\r\n                $scope.reset();\r\n\r\n                if (configService.isMobile) {\r\n                    console.log('hide keyboard');\r\n                    Keyboard.hide();\r\n                }\r\n                else {\r\n                    helperService.hideKeyboard();\r\n                }\r\n\r\n                $.blockUI();\r\n                outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n\r\n                    $scope.outlets = resp.Outlets ? resp.Outlets : resp.data.Outlets;\r\n                    $scope.outletID = configService.lastOutletID;\r\n                    $scope.registryID = configService.lastRegistryID;\r\n\r\n                    // should test here if last outlet/registry were saved before and they are exists now.\r\n                    // if so bypass outlet/registry selection\r\n                    var reg = configService.bypassOutletRegistry ? $scope.canBypassDialog() : null;\r\n                    configService.bypassOutletRegistry = true;\r\n                    if (!!reg && !!reg.outlet) {\r\n                        if (!$scope.checkRegistersForOutlet(reg.outlet, true))\r\n                            reg = null;\r\n                    }\r\n                    $.unblockUI();\r\n\r\n                    $timeout(function () {\r\n                        initSelects();\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n                    });\r\n\r\n                    if (!reg) {\r\n                        helperService.showDialog($element);\r\n                    }\r\n                    else {\r\n                        $scope.setChoice(reg.registry, reg.outlet);\r\n                    }\r\n                },\r\n                    function (err) {\r\n                        errorService.showError(err);\r\n                        $.unblockUI();\r\n                    });\r\n            });\r\n\r\n            $scope.canBypassDialog = function () {\r\n                try {\r\n                    var foundOutlet = $scope.outlets.filter(function (el) { return el.PosOutletID == $scope.outletID; });\r\n                    if (foundOutlet.length != 1) return null;\r\n\r\n                    var foundRegistry = foundOutlet[0].Registries.filter(function (el) { return el.PosRegistryID == $scope.registryID; });\r\n                    if (foundRegistry.length != 1) return null;\r\n\r\n                    return {\r\n                        outlet: foundOutlet[0],\r\n                        registry: foundRegistry[0]\r\n                    };\r\n                }\r\n                catch (ex) {\r\n                    return null;\r\n                }\r\n\r\n            };\r\n\r\n            $scope.setChoice = function (registry, outlet) {\r\n                var pos = !outlet ? this.$parent.item : outlet;\r\n                outletService.updateConfigPaymentProcessors(outlet);\r\n\r\n                configService.setLastOutlet(pos);\r\n                configService.setLastRegistry(registry.Code, registry.PosRegistryID, registry.paymentProcessorID, registry.ReceiptID,\r\n                    registry.RegistryPrefix, registry.RegistrySuffix, registry.QuickKeyID,\r\n                    registry.QuickKeyData, registry.TyroTerminalID, registry.TriPOSLaneID,\r\n                    registry.CatalogTilesSize, registry.CatalogTilesVisibility, registry.ShowProductAvailability);\r\n                configService.updateCardPaymentIDsFromOutlet(registry);\r\n\r\n                if (!outlet) {\r\n                    helperService.closeDialog($element);\r\n                }\r\n\r\n                cleanSale();\r\n                $.blockUI();\r\n                return loginService.loadAll(dataChangeNotificationService, true)\r\n                    .then(function (res) {\r\n                        return $scope.loadAllFinal(res);\r\n                    })\r\n                    .then(function () {\r\n                        $rootScope.$broadcast('header.setOutletInfo', {\r\n                            outletName: pos.OutletName,\r\n                            registryName: registry.Code\r\n                        });\r\n\r\n                        // this is dublicate  saleService.updateNextSequenceNumber();\r\n                    })\r\n                    .catch(function (err) {\r\n                        console.timeEnd('Load all');\r\n                        helperService.closeDialog('#requestCancelModalDlg');\r\n                            $rootScope.isCancelDialogVisible = false;\r\n                            $.unblockUI();\r\n                            \r\n                            googleHelperService.logout();\r\n                            \r\n                            errorService.showError(err, logoff);\r\n                        })\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n\r\n            };\r\n\r\n            $scope.setOutlet = function () {\r\n                $scope.registrySelected($scope.selectedOutlet);\r\n            };\r\n\r\n            $scope.setRegister = function () {\r\n                $scope.setChoice2($scope.selectedRegister);\r\n                console.log($scope.activeMode);\r\n            };\r\n\r\n            $scope.checkRegistersForOutlet = function (outletObj, skipDialog) {\r\n                var noRegister = !outletObj || !outletObj.Registries || outletObj.Registries.length == 0;\r\n\r\n                if (noRegister && skipDialog !== true) {\r\n                    errorService.showError(gettextCatalog.getString(\"The outlet does not have active registers. Please create registers on the POS integration page of the Cin7 Core site or select another outlet.\"),\r\n                        function () {\r\n                            $scope.activeMode = 0;\r\n                        });\r\n                }\r\n\r\n                return !noRegister;\r\n            };\r\n\r\n            $scope.registrySelected = function (item) {\r\n                if (!$scope.checkRegistersForOutlet(item)) return false;\r\n\r\n                $scope.selectedOutletItem = item;\r\n                $scope.activeMode = 1;\r\n                $scope.outletID = item.PosOutletID;\r\n\r\n                $timeout(function () {\r\n                    initSelects();\r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n                });\r\n                return false;\r\n            };\r\n\r\n            var logoff = function () {\r\n                $timeout(function () {\r\n                    $.unblockUI();\r\n                    $rootScope.$broadcast('header.logoff');\r\n                    \r\n                    googleHelperService.logout();\r\n                    \r\n                });\r\n            };\r\n\r\n            $scope.setChoice2 = function (item) {\r\n\r\n                outletService.updateConfigPaymentProcessors($scope.selectedOutlet);\r\n\r\n                configService.setLastOutlet($scope.selectedOutletItem);\r\n                configService.setLastRegistry(item.Code, item.PosRegistryID, item.paymentProcessorID, item.ReceiptID,\r\n                    item.RegistryPrefix, item.RegistrySuffix, item.QuickKeyID,\r\n                    item.QuickKeyData, item.TyroTerminalID, item.TriPOSLaneID,\r\n                    item.CatalogTilesSize, item.CatalogTilesVisibility, item.ShowProductAvailability);\r\n                configService.updateCardPaymentIDsFromOutlet(item);\r\n\r\n                // saleService.updateNextSequenceNumber();\r\n\r\n                // $rootScope.$broadcast('sideBar.reloadProducts'); dublicate of loadAll\r\n                var SCOPE = $scope;\r\n\r\n                helperService.closeDialog($element, function () {\r\n                    $timeout(function () {\r\n                        cleanSale();\r\n                        $.blockUI();\r\n\r\n                        loginService.loadAll(dataChangeNotificationService, true)\r\n                            .then(function (res) {\r\n                                return $scope.loadAllFinal(res);\r\n                            })\r\n                            .then(function () {\r\n                                $rootScope.$broadcast('header.setOutletInfo', {\r\n                                    outletName: $scope.selectedOutletItem.OutletName,\r\n                                    registryName: item.Code\r\n                                });\r\n                            })\r\n                            .catch(function (err) {\r\n                                console.timeEnd('Load all');\r\n                                helperService.closeDialog('#requestCancelModalDlg');\r\n                                $rootScope.isCancelDialogVisible = false;\r\n                                $.unblockUI();\r\n                                \r\n                                googleHelperService.logout();\r\n                                \r\n                                errorService.showError(err, logoff);\r\n                            })\r\n                            .finally(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                    }, 0);\r\n                });\r\n\r\n                return false;\r\n            };\r\n\r\n            $scope.loadAllFinal = function (res) {\r\n\r\n                var resp = (res && res.length > 0) ? res[res.length - 1] : [null];\r\n\r\n                console.timeEnd('Load all');\r\n\r\n                $rootScope.$broadcast('header.show', {\r\n                    showHeader: true\r\n                });\r\n\r\n                helperService.closeDialog('#requestCancelModalDlg');\r\n                $rootScope.isCancelDialogVisible = false;\r\n\r\n\r\n                if (!!configService.MatchedLoginsCount && configService.MatchedLoginsCount > 1) {\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: gettextCatalog.getString('Your PIN code is not unique. Please, change your PIN code as soon as possible to prevent wrong logins.')\r\n                    });\r\n                }\r\n\r\n// mark first login as successfull and starting from now all next \r\n//logins will be secondary and can omit some data loading               \r\n                loginService.isFirstLogin = false; \r\n\r\n                localStorage.setItem('isAfterLogin', true);\r\n                if (resp[0]) {\r\n//                    $.unblockUI();\r\n                    $location.path('/sell');\r\n                } else {\r\n//                    $.unblockUI();\r\n                    $location.path('/opencloseregistry');\r\n                }\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res);\r\n                var p = deferred.promise;\r\n                    //.catch(function (err) {\r\n                    //    console.timeEnd('Load all');\r\n                    //    helperService.closeDialog('#requestCancelModalDlg');\r\n                    //    $rootScope.isCancelDialogVisible = false;\r\n                    //    $.unblockUI();\r\n                    //    errorService.showError(err, logoff);\r\n                    //});\r\n\r\n                return p;\r\n            };\r\n\r\n            $scope.setChoice3 = function (register, outlet) {\r\n                outletService.updateConfigPaymentProcessors(outlet);\r\n\r\n                configService.setLastOutlet(outlet);\r\n                configService.setLastRegistry(register.Code, register.PosRegistryID, register.paymentProcessorID, register.ReceiptID,\r\n                    register.RegistryPrefix, register.RegistrySuffix, register.QuickKeyID,\r\n                    register.QuickKeyData, register.TyroTerminalID, register.TriPOSLaneID,\r\n                    register.CatalogTilesSize, register.CatalogTilesVisibility, register.ShowProductAvailability);\r\n                configService.updateCardPaymentIDsFromOutlet(register);\r\n\r\n                $rootScope.$broadcast('sideBar.reloadProducts');\r\n\r\n                $rootScope.$broadcast('header.setOutletInfo', {\r\n                    outletName: outlet.OutletName,\r\n                    registryName: register.Code\r\n                });\r\n\r\n            };\r\n\r\n            $scope.backToLogin = function () {\r\n                helperService.closeDialog($element, function () {\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('login.show');\r\n                    }, 0);\r\n                });\r\n            };\r\n\r\n            function cleanSale() {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('sell.clean');\r\n                });\r\n            }\r\n\r\n            $scope.$on('header.updateSettingsSecondStep', function (event, data) {\r\n\r\n                outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n\r\n                    var outlets = resp.Outlets ? resp.Outlets : resp.data.Outlets;\r\n                    var outletID = configService.lastOutletID;\r\n                    var registryID = configService.lastRegistryID;\r\n                    var foundRegistry = false;\r\n\r\n                    $.each(outlets, function (oIdx, oEl) {\r\n                        if (oEl.PosOutletID === outletID) {\r\n                            $.each(oEl.Registries, function (rIdx, rEl) {\r\n                                if (rEl.PosRegistryID === registryID) {\r\n                                    $scope.setChoice3(rEl, oEl);\r\n                                    foundRegistry = true;\r\n                                    $rootScope.$broadcast('header.updateSettingsThirdStep');\r\n                                }\r\n                            });\r\n                        }\r\n                    });\r\n\r\n                    if (foundRegistry === false) {\r\n                        $.unblockUI();\r\n\r\n                        var title = gettextCatalog.getString('Error');\r\n                        var err = gettextCatalog.getString(\"It seems like this outlet/register combination is not available any more. Please select the outlet/register again.\");\r\n                        errorService.showError(err, function () {\r\n                            $timeout(function () {\r\n                                $rootScope.$broadcast('selectOR.show');\r\n                            });\r\n                        }, title);\r\n\r\n                    }\r\n\r\n                },\r\n                    function (err) {\r\n                        errorService.showError(err);\r\n                        $.unblockUI();\r\n                    });\r\n\r\n            });\r\n\r\n\r\n        }]);\r\n","import {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport Enumerable from 'linq';\r\n\r\n\r\nangular.module(\"mainApp\")\r\n    .config(['$uibModalProvider', function ($uibModalProvider) {\r\n    $uibModalProvider.options.animation = false;\r\n    }]).controller('selectTaxController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'helperService', 'productsService',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'keyPressDelayService', '$filter','$compile',\r\n        function ($scope, $rootScope, configService, errorService, helperService, productsService,\r\n            $element, constants, $timeout, gettextCatalog, keyPressDelayService, $filter, $compile) {\r\n\r\n            $scope.currentTab = 0;\r\n            $scope.taxWatches = null;\r\n            $scope.taxRulesMap = {};\r\n            $scope.checkoutItems = [];\r\n            $scope.groupedItems = [];\r\n            $scope.taxGroupedWatches = null;\r\n            $scope.zeroTaxID = configService.zeroTaxID;\r\n\r\n            $scope.$on('selectTax.show', function (event, data) {\r\n                var isNewSale = helperService.showNewCheckoutUI(data);\r\n\r\n                // prepare data\r\n                // make a copy to not change initial checkout\r\n                $scope.checkoutItems = angular.copy(data.CheckoutItems.filter(function (el) { return el.CanEdit; }));\r\n\r\n                $scope.createTaxRules(data);\r\n\r\n                $scope.createProductTaxes(isNewSale);\r\n\r\n                // get grouped array\r\n                $scope.createGroupedTaxes();\r\n\r\n                initSelects();\r\n\r\n                helperService.showDialog('#taxModelDlg', function () {\r\n                    initSelects(function () {\r\n                        var prn = $(this).parent().parent();\r\n                        var inp = prn.find('div.jq-selectbox__dropdown');\r\n                        inp[0].scrollIntoView(true);\r\n                    },function (el) {\r\n                            var prn = $(el).parent().parent();\r\n                            var inp = prn.find('div.jq-selectbox__select-text');\r\n                            if (inp.length > 0) {\r\n                                var txt = '<div class=\"rightInputSum\"><div>{{item.Tax | currency}}</div></div>';\r\n                                var SCOPE = angular.element(inp[0]).scope();\r\n                                var s2 = $compile(txt)(SCOPE);\r\n                                inp.after(s2);\r\n                            }\r\n                           // $rootScope.$broadcast('popup.shown');\r\n                        }, function(el) {\r\n                            // when close dropdown - set grid tile fully visible\r\n                            var e =$(this).parent().parent().parent().parent().parent();\r\n                            if(e.length)\r\n                                e[0].scrollIntoView(true);\r\n                        }\r\n                    );\r\n\r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n            });\r\n\r\n            $scope.createProductTaxes = function (isNewSale) {\r\n\r\n                if ($scope.taxWatches)\r\n                    $scope.taxWatches();\r\n                $scope.taxWatches = null;\r\n\r\n                // show only editalbe products\r\n                var watchList = [];\r\n\r\n                $.each($scope.checkoutItems, function (i, el) {\r\n                    if (isNewSale) {\r\n                        el.ShowPrice = el.FinalPrice;\r\n                        el.Tax = CalculatorHelperService.calculateTax2(el, configService.taxInclucive === \"True\");\r\n                    } else {\r\n                        if (!el.Tax)\r\n                            el.Tax = 0;\r\n\r\n                        el.ShowPrice = helperService.DEARRound(el.itemDiscount !== 0 ? el.BasePrice - el.itemDiscount : el.Price, 2);\r\n                        el.Tax = $scope.calcTax(el);\r\n                    }\r\n\r\n                    watchList.push('checkoutItems[' + i + '].TaxRuleID');\r\n                });\r\n\r\n                // watchers is required to synchronize changed tax rule value with currently shown in combo input control\r\n                $scope.taxWatches = $scope.$watchGroup(watchList, function (newVal, oldVal) {\r\n\r\n                    for (var i = 0; i < newVal.length; i++) {\r\n                        if (newVal[i] !== oldVal[i]) {\r\n                            // replace Tax\r\n                            var taxObject = $scope.taxRulesMap[newVal[i]];\r\n                            var el = $scope.checkoutItems[i];\r\n                            el.Taxes = taxObject;\r\n                            el.Tax = $scope.calcTax(el);\r\n                        }\r\n                    }\r\n                });\r\n            };\r\n\r\n            $scope.calcTax = function (el) {\r\n                if (!el || !el.Taxes) return 0;\r\n                var isInclusiveTax = configService.taxInclucive === \"True\";\r\n                return helperService.DEARRound(el.ShowPrice *\r\n                    (isInclusiveTax ? el.Taxes.effectivePercentInclusive : el.Taxes.effectivePercentExclusive) / 100, 2);\r\n            };\r\n\r\n            $scope.createTaxRules = function (cursale) {\r\n                var isNewSale = helperService.showNewCheckoutUI(cursale);\r\n                $scope.taxRulesMap = {};\r\n                $scope.taxRules = [];\r\n                var tx = angular.copy(productsService.taxRules);\r\n                var customer = cursale.customer;\r\n\r\n                // add default tax rule\r\n                // var t = JSON.parse(configService.tenantTaxRule);\r\n\r\n                // tx.push({\r\n                //     Description: gettextCatalog.getString('Default Tax'),\r\n                //     EffectivePercentExclusive: t.effectivePercentExclusive,\r\n                //     EffectivePercentInclusive: t.effectivePercentInclusive,\r\n                //     RuleID: t.ruleID\r\n                // });\r\n\r\n                if (customer && customer.TaxRuleID) {\r\n                    tx.push({\r\n                        Description: customer.TaxRule,\r\n                        EffectivePercentExclusive: customer.EffectivePercentExclusive,\r\n                        EffectivePercentInclusive: customer.EffectivePercentInclusive,\r\n                        RuleID: customer.TaxRuleID\r\n                    });\r\n                }\r\n\r\n                $.each(tx, function (i, el) {\r\n                    var ec = {\r\n                        ruleID: el.RuleID,\r\n                        description: el.Description,\r\n                        description2: el.Description + \" (\" +\r\n                            helperService.DEARRound(el.EffectivePercentExclusive, 2) +\r\n                            \"%)\",\r\n                        effectivePercentExclusive: el.EffectivePercentExclusive,\r\n                        effectivePercentInclusive: el.EffectivePercentInclusive\r\n                    };\r\n\r\n                    $scope.taxRules.push(ec);\r\n                    $scope.taxRulesMap[el.RuleID] = ec;\r\n                });\r\n            };\r\n\r\n            $scope.createGroupedTaxes = function () {\r\n                if ($scope.taxGroupedWatches)\r\n                    $scope.taxGroupedWatches();\r\n                $scope.taxGroupedWatches = null;\r\n\r\n                // get grouped array\r\n                $scope.groupedItems =\r\n                    Enumerable.from($scope.checkoutItems)\r\n                        .select(function (x) {\r\n                            var o = $scope.taxRulesMap[x.TaxRuleID];\r\n                            if(!o) {\r\n                                // unknown tax id. set default\r\n                                var t = JSON.parse(configService.tenantTaxRule);\r\n                                if(t) {\r\n                                    o = $scope.taxRulesMap[t.ruleID];\r\n                                }\r\n                            }\r\n                            return {\r\n                                InitialTaxRuleID: o.ruleID,\r\n                                TaxRuleID: o.ruleID,\r\n                                Description2: o.description2\r\n                            };\r\n                        })\r\n                        .distinct(function (x) { return x.TaxRuleID; })\r\n                        .orderBy(function (x) { return x.Description2; })\r\n                        .toArray();\r\n            };\r\n\r\n            // before switching to product list, pass changes in grouped taxes to checkout\r\n            $scope.synchronizeGroupToProducts = function () {\r\n                $scope.currentTab = 0;\r\n                var changedTaxesMap = {};\r\n\r\n                $.each($scope.groupedItems, function (i, t) {\r\n                    if (t.InitialTaxRuleID !== t.TaxRuleID) {\r\n                        changedTaxesMap[t.InitialTaxRuleID] = t;\r\n                        t.InitialTaxRuleID = t.TaxRuleID;\r\n                    }\r\n                });\r\n\r\n                $.each($scope.checkoutItems, function (i, c) {\r\n                    var newTax = changedTaxesMap[c.TaxRuleID];\r\n                    if (newTax) {\r\n                        c.TaxRuleID = newTax.TaxRuleID;\r\n                        c.Taxes = newTax;\r\n                    }\r\n                });\r\n\r\n                $timeout(function () {\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n\r\n                $scope.refreshSize('.taxScrollWrapper2');\r\n            };\r\n\r\n            $scope.synchronizeProductsToGroup = function () {\r\n                $scope.currentTab = 1;\r\n                $scope.createGroupedTaxes();\r\n                var SCOPE = $scope;\r\n                $timeout(function () {\r\n                    initSelects();\r\n\r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n\r\n                    SCOPE.refreshSize('.taxScrollWrapper2');\r\n                });\r\n            };\r\n\r\n            $scope.applyChanges = function () {\r\n                if ($scope.currentTab === 1){\r\n                    $scope.synchronizeGroupToProducts();\r\n                }\r\n\r\n                var checkMap = {};\r\n                $.each($scope.checkoutItems, function (i, c) {\r\n                    var t = $scope.taxRulesMap[c.TaxRuleID];\r\n                    checkMap[c.ID] = {\r\n                        effectivePercentExclusive: t.effectivePercentExclusive,\r\n                        effectivePercentInclusive: t.effectivePercentInclusive,\r\n                        ruleID: t.ruleID\r\n                    };\r\n                });\r\n\r\n                $rootScope.$broadcast('selectTax.changed', checkMap);\r\n                helperService.closeDialog('#taxModelDlg');\r\n            };\r\n\r\n            $scope.refreshSize = function (sel) {\r\n                $(sel).trigger('on.resize');\r\n            };\r\n\r\n            $scope.resetTax = function (item, zeroTaxID) {\r\n                item.TaxRuleID = zeroTaxID;\r\n                $timeout(function () {\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            };\r\n        }\r\n    ]);","import {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport { OptionsTreeItem } from './OptionsTreeItem';\r\nimport { ProductType } from '../../TypePosScripts/Interfaces';\r\nimport { SaleStatusType, StartCalcLevel } from '../../TypePosScripts/Enums';\r\nimport { convertFromOld, convertToAPI } from '../../TypePosScripts/ConverterService';\r\n\r\nangular.module(\"mainApp\")\r\n    .controller('sellController',\r\n        ['$rootScope', '$scope', '$window', 'constants', 'productsService', 'errorService', 'loginService',\r\n            '$filter', 'configService', 'helperService', '$timeout', 'uuid2', 'saleService', 'receiptService',\r\n            '$uibModal', '$location', 'customerService', 'emailService', 'registryService', 'printService',\r\n            'gettextCatalog', '$locale', '$compile', '$q', 'cardPayService',\r\n            'liveSearchService', 'secondTerminalService', 'reportService', 'webOnlyProvider', 'fontMeasureService',\r\n            'barcodeService', 'filterService', 'loyaltyService', 'soundService', 'loyaltyLionProvider', 'linklyPaymentReaderProvider', 'secondTerminalServiceWeb', \r\n            'googleHelperService', 'surchargeService', 'deviceInfo', 'orderStatusService',\r\n            function ($rootScope, $scope, $window, constants, productsService, errorService, loginService,\r\n                $filter, configService, helperService, $timeout, uuid2, saleService, receiptService,\r\n                $uibModal, $location, customerService, emailService, registryService, printService,\r\n                gettextCatalog, $locale, $compile, $q, cardPayService,\r\n                liveSearchService, secondTerminalService, reportService, webOnlyProvider, fontMeasureService,\r\n                barcodeService, filterService, loyaltyService, soundService, loyaltyLionProvider, linklyPaymentReaderProvider, secondTerminalServiceWeb, \r\n                googleHelperService, surchargeService, deviceInfo, orderStatusService) {\r\n\r\n                const watchers = [];\r\n                console.time('enter sell controller');\r\n\r\n                ////Apply special currency rules\r\n                helperService.setSpecialCurrencySymbols();\r\n                $scope.canDelivery = function() {\r\n                    return configService.canSeeAllScheduledDeliveries === true && configService.isOnline === true;\r\n                }\r\n\r\n                setTimeout(function () {\r\n                    /** hack for total info block */\r\n                    $rootScope.$broadcast('sideBar.toggle');\r\n                    $rootScope.$broadcast('sideBar.hideDetails');\r\n                }, 1000);\r\n\r\n                $scope.paymentDisplayOrder = configService.paymentDisplayOrder;\r\n\r\n                $scope.creditCardError = {\r\n                    addFailedCreditCardPayment: null,\r\n                    errorText: null\r\n                };\r\n\r\n                $scope.showSearchResult = false;\r\n                $scope.$watch('showSearchResult',\r\n                    function (newValue, oldValue) {\r\n                        $timeout(function () {\r\n                            fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                            $rootScope.$broadcast('image.src.update');\r\n                        });\r\n                    }\r\n                );\r\n\r\n                if (!loginService.isLoggedIn()) {\r\n                    helperService.goToHomePage();\r\n                    return;\r\n                    //$rootScope.$broadcast('login.show'); // show login page on application start\r\n                } else {\r\n                    $timeout(function () {\r\n                        $scope.searchType = 'quickKeySearch';\r\n                        $scope.search();\r\n                    });\r\n                }\r\n\r\n                watchers.push($rootScope.$on('$locationChangeStart', function (event, next, prev) {\r\n                    secondTerminalService.update($scope, 'off');\r\n                }));\r\n\r\n                $scope.formatBalance = helperService.formatBalance;\r\n                $scope.isLoyaltyEnabled = configService.enableLoyalty === true;\r\n\r\n                $scope.catalogTileRows = configService.getCatalogPageRows();\r\n                $scope.catalogTileCols = configService.getCatalogPageCols();\r\n\r\n                $scope.customizedUI = configService.customizedSecondScreenUI;\r\n                $scope.logoUrl = configService.secondScreenLogoUrl;\r\n                $scope.backgroundColor = configService.secondScreenBackground;\r\n\r\n                // $scope.$on(\"popover.dialog.hide\", function () {\r\n                //     $scope.currentProductFamily = null;\r\n                // });\r\n\r\n                watchers.push($scope.$on(\"modal.dialog.hide\", function () {\r\n                    $scope.currentProductFamily = null;\r\n                }));\r\n\r\n                \r\n                $scope.switchNoReceiptExchangeMode = function(mode) {\r\n                    $scope.noReceiptExchangeMode = mode;\r\n                }\r\n\r\n                $scope.fixStocktakeFlags = function () {\r\n                    var promises = [];\r\n\r\n                    if ($scope.searchItems) {\r\n                        $.each($scope.searchItems, function (_, el) {\r\n                            promises.push(productsService.getProductByID(el.ProductID));\r\n                        });\r\n                    }\r\n\r\n                    if (promises.length > 0) {\r\n                        Promise.all(promises).then(function (res) {\r\n                            var map = {};\r\n                            var map2 = {};\r\n                            $.each(res, function (_, p) {\r\n                                if (p && p.data && p.data.length > 0) {\r\n                                    map[p.data[0].ProductID] = p.data[0].StocktakeLocked;\r\n                                    map2[p.data[0].ProductID] = p.data[0];\r\n                                }\r\n                            });\r\n\r\n                            if ($scope.searchItems) {\r\n                                $.each($scope.searchItems, function (_, el) {\r\n                                    if (map[el.ProductID] !== undefined)\r\n                                        el.StocktakeLocked = map[el.ProductID];\r\n\r\n                                    if (map2[el.ProductID] !== undefined) {\r\n                                        var sp = map2[el.ProductID];\r\n                                        el.BarCode = sp.BarCode;\r\n                                        el.Discounts = sp.Discounts;\r\n                                        el.Taxes = sp.Taxes;\r\n                                        el.Name = sp.Name;\r\n                                        el.Sku = sp.Sku;\r\n                                        el.CostingMethod = sp.CostingMethod;\r\n                                        el.Option1 = sp.Option1;\r\n                                        el.Option1Name = sp.Option1Name;\r\n                                        el.Option2 = sp.Option2;\r\n                                        el.Option2Name = sp.Option2Name;\r\n                                        el.Option3 = sp.Option3;\r\n                                        el.Option3Name = sp.Option3Name;\r\n                                        el.Price = sp.Price;\r\n                                        el.ImageID = sp.ImageID;\r\n                                        el.isFamily = sp.isFamily;\r\n                                        el.LoyaltyEarning = sp.LoyaltyEarning;\r\n                                    }\r\n                                });\r\n                            }\r\n                        });\r\n                    }\r\n                };\r\n\r\n                // update StocktakeLocked flag\r\n                watchers.push($scope.$on('products.reloaded', function () {\r\n                    if (!configService.isSite || window.isSupported)\r\n                        $scope.fixStocktakeFlags();\r\n                }));\r\n\r\n                $scope.hasQuickKey = !!configService.quickKeyTemplateID;\r\n\r\n                watchers.push($scope.$on('header.setOutletInfo', function (event, data) {\r\n                    $scope.hasQuickKey = !!configService.quickKeyTemplateID;\r\n\r\n                    $timeout(function () {\r\n                        $scope.pageSize = configService.getCatalogPageSize();\r\n                        $scope.pageRows = configService.getCatalogPageRows();\r\n                        $scope.catalogTileRows = $scope.pageRows;\r\n                        $scope.pageCols = configService.getCatalogPageCols();\r\n                        $scope.catalogTileCols = $scope.pageCols;\r\n                        $scope.tilesVisibility = configService.getCatalogTilesVisibility();\r\n                        $scope.showProductAvailability = configService.getShowProductAvailability();\r\n                        $scope.calculateActualCatalogRows();\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        $scope.searchType = 'quickKeySearch';\r\n                        $scope.search();\r\n                    });\r\n\r\n                    $scope.setRegistrySales();\r\n                }));\r\n\r\n\r\n                //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSellSectionName }); // to hide sidebar details\r\n                $rootScope.$broadcast('header.setCurrentView', {\r\n                    viewName: constants.constSellViewName\r\n                }); // to hide sidebar details\r\n\r\n                watchers.push($scope.$on('addCustomer.selected', function (event, data) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    $scope.currentSale.customer = data.customer;\r\n                    $scope.currentSale.SelectedContact = null;\r\n\r\n                    let searchCustomerText = $('#searchCustomerText').val();\r\n\r\n                    if (data.customer && data.customer.Contacts && data.customer.Contacts.length > 0) {\r\n                        searchCustomerText = !!searchCustomerText ? searchCustomerText.toLowerCase().trim() : '';\r\n                        const email = !!data.email ? data.email : '';\r\n\r\n                        const foundContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.Email.toLowerCase() === email) ||\r\n                            (!!temp.Email && temp.Email.toLowerCase() === searchCustomerText) ||\r\n                            (!!temp.Phone && temp.Phone.toLowerCase() === searchCustomerText) ||\r\n                            (!!temp.MobilePhone && temp.MobilePhone.toLowerCase() === searchCustomerText));\r\n\r\n                        if (foundContact)\r\n                            $scope.currentSale.SelectedContact = foundContact;\r\n                        else {\r\n                            const defaultContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.IncludeInEmail));\r\n                            if (defaultContact)\r\n                                $scope.currentSale.SelectedContact = defaultContact;\r\n                            else\r\n                                $scope.currentSale.SelectedContact = data.customer.Contacts[0];\r\n                        }\r\n                    }\r\n\r\n                    $scope.addCustomerHandler(data.customer)\r\n                        .then(function () {\r\n                            if (data.action != 'search')\r\n                                customerService.loadCustomersAll(true);\r\n\r\n                            return helperService.resolvePromise(true);\r\n                        })\r\n                        .catch(function (err) {\r\n                            errorService.showError(err);\r\n                        });\r\n                }));\r\n\r\n                function clearLLDiscount() {\r\n                    $scope.LLCopiedCode = null;\r\n                    $scope.LLCurrentValue = null;\r\n                    $scope.LLDiscountType = null;\r\n                    $scope.LLDiscountTitle = null;\r\n                }\r\n\r\n                function clearSaleLLDiscount() {\r\n                    if ($scope.currentSale.customer) {\r\n                        $scope.currentSale.customer.LLDiscountCode = null;\r\n                    }\r\n                    clearLLDiscount();\r\n                }\r\n\r\n                function needClearLLDiscount(prm) {\r\n                    if (prm === 'clean') {\r\n                        return true;\r\n                    }\r\n                    var discount = $scope.currentSale.Discount;\r\n                    if (typeof discount === 'string') {\r\n                        discount = helperService.DEARRound(Number(discount), 2);\r\n                    }\r\n                    return discount === 0;\r\n                }\r\n\r\n                function initLoyaltyCustomer(customer) {\r\n                    return loyaltyService.initCustomer(customer).then(function (res) {\r\n                        // Buffered auth is not confirmed yet — don't clear the unavailable latch\r\n                        if (res && !res.buffered) {\r\n                            $scope.loyaltyUnavailable = false;\r\n                        }\r\n                        $scope.setDisableLoyaltyFlag();\r\n                    }).catch(function (err) {\r\n                        if (err && err.silent) {\r\n                            return; // not an LL customer / not enrolled — nothing to report\r\n                        }\r\n                        var fallback = gettextCatalog.getString('Unable to load loyalty information for this customer.');\r\n                        var msg = (err && (err.msg || err.message)) || err || fallback;\r\n                        if (typeof msg !== 'string') {\r\n                            msg = fallback;\r\n                        }\r\n                        // Soft: SDK/auth/pre-flight — snackbar + hide loyalty UI\r\n                        // customer.Warning keeps the warning dialog (warning: true, handled in loyaltyService)\r\n                        if (err && err.soft) {\r\n                            $rootScope.$broadcast('snackbar.show', { message: msg, type: 'error' });\r\n                            $scope.loyaltyUnavailable = true;\r\n                            $scope.setDisableLoyaltyFlag();\r\n                            if (loyaltyService.provider && typeof loyaltyService.provider.hideWidget === 'function') {\r\n                                loyaltyService.provider.hideWidget();\r\n                            }\r\n                        } else {\r\n                            errorService.showError(msg);\r\n                        }\r\n                    });\r\n                }\r\n\r\n                $scope.addCustomerHandler = function (customer) {\r\n                    // var pr = helperService.resolvePromise(true);\r\n                    var pr = loyaltyService.clearCustomer();\r\n\r\n                    return pr.then(function () {\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        clearLLDiscount();\r\n                        $scope.setDisableLoyaltyFlag();\r\n\r\n                        $scope.refundNeedCustomer = false;\r\n                        $scope.raiseViewChanged();\r\n                        var sale = $scope.currentSale;\r\n\r\n                        var pr = helperService.resolvePromise(true);\r\n\r\n                        if (!isNewSale) {\r\n                            pr = pr.then(function () {\r\n                                $scope.currentSale.CustomerLoyaltyPoints = configService.enableLoyalty && $scope.currentSale.customer.LoyaltyPoints ?\r\n                                    $scope.currentSale.customer.LoyaltyPoints : 0;\r\n\r\n                                saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                                return helperService.resolvePromise(true);\r\n                            });\r\n                        }\r\n\r\n                        if (!customer.LLEmail && configService.isOnline && loyaltyService.loyaltyEnabled) {\r\n\r\n                            pr = pr.then(function () {\r\n                                return customerService.loadCustomers(\"\", 1, 1, {\r\n                                    CustomerID: customer.ID\r\n                                });\r\n                            }).then(function (resp) {\r\n                                if (resp.Customers[0]) {\r\n                                    customer = resp.Customers[0];\r\n                                    sale.customer.LLCustomerID = customer.LLCustomerID;\r\n                                    sale.customer.LLEmail = customer.LLEmail;\r\n                                    sale.customer.LLExternalType = customer.LLExternalType;\r\n                                    sale.customer.LLMerchantID = customer.LLMerchantID;\r\n                                    sale.customer.LLServerToken = customer.LLServerToken;\r\n                                    sale.customer.LLTokenDate = customer.LLTokenDate;\r\n                                }\r\n                            });\r\n                        }\r\n\r\n                        pr = pr.then(function () {\r\n                            if (configService.loyaltyLionToken && configService.isOnline && (customer.Warning || !customer.LLEmail)) {\r\n                                customer.Warning = !!customer.Warning ? customer.Warning : gettextCatalog.getString('Customer email is empty. Can not get customer information from LoyaltyLion.');\r\n                                return $scope.showCustomerEmailWarningDialog(customer);\r\n                            }\r\n                            else\r\n                                return initLoyaltyCustomer(customer);\r\n                        }).then(function () {\r\n                            if ($scope.mode == 'summary') {\r\n                                $scope.initSummaryValues();\r\n                            }\r\n\r\n                            if ($scope.mode !== 'summary' || $scope.canChangeCustomer) {\r\n                                if (!isNewSale)\r\n                                    $scope.updateCheckoutProductPrice($scope.currentSale);\r\n                                else\r\n                                    CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Setup, true);\r\n                            }\r\n\r\n                            updateReceipt();\r\n                            $scope.updateSizesInCheckout();\r\n\r\n                            return helperService.resolvePromise(true);\r\n                        });\r\n\r\n                        return pr;\r\n                    });\r\n                };\r\n\r\n                watchers.push($scope.$on('addSalesRepresentative.selected', function (event, data) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!isNewSale)\r\n                        $scope.currentSale.salesRepresentative = data.salesRepresentative;\r\n                    else\r\n                        $scope.currentSale.SalesRepresentative = data.salesRepresentative;\r\n\r\n                    $scope.raiseViewChanged();\r\n\r\n                    updateReceipt();\r\n                    helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                }));\r\n\r\n                watchers.push($scope.$on('addSalesShippingAddress.selected', function(event, data) {\r\n                    $scope.currentSale.CustomerShippingAddressLine1 = data.selectedSalesShippingAddress.Line1;\r\n                    $scope.currentSale.CustomerShippingAddressLine2 = data.selectedSalesShippingAddress.Line2;\r\n                    $scope.currentSale.CustomerShippingCity = data.selectedSalesShippingAddress.City;\r\n                    $scope.currentSale.CustomerShippingCountry = data.selectedSalesShippingAddress.Country;\r\n                    $scope.currentSale.CustomerShippingProvince = data.selectedSalesShippingAddress.State;\r\n                    $scope.currentSale.CustomerShippingZip = data.selectedSalesShippingAddress.Postcode;\r\n                }));\r\n\r\n                watchers.push($scope.$on('addSurcharge.selected', function (event, data) {\r\n\r\n                    if (!$scope.currentSale.Surcharges) {\r\n                        $scope.currentSale.Surcharges = [];\r\n                    }\r\n                    if (data.action === 'selected') {\r\n                        var surcharge = null;\r\n                        var paymentProcessorID = null;\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                        if (!!data) {\r\n                            if (!!data.surcharge) {\r\n                                surcharge = angular.copy(data.surcharge);\r\n                                if (!isNewSale)\r\n                                    $scope.currentSale.Surcharges.push(surcharge);\r\n                            }\r\n                            if (data.isCustom === true)\r\n                                paymentProcessorID = data.paymentProcessorID;\r\n                        }\r\n\r\n                        if (!isNewSale) {\r\n                            $scope.currentSale.Total = $scope.totalSum($scope.currentSale);\r\n                            $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                        }\r\n\r\n                        // check for custom payment with surcharge\r\n                        if (paymentProcessorID)\r\n                            $scope.customPayWithSurcharge(paymentProcessorID, surcharge);\r\n                        else\r\n                            $scope.creditCardPayWithSurcharge(surcharge);\r\n                    }\r\n\r\n                    // helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                }));\r\n\r\n                $scope.setFocus = helperService.setFocus;\r\n\r\n                //$scope.$watchCollection('currentSale.Payments', function (newCol, oldCol, scope) {\r\n                //    if (newCol.length != oldCol.length) {\r\n                //        if (newCol.length > 0 && oldCol.length == 0)\r\n                //            $rootScope.$broadcast('header.enableMenu', false);\r\n                //        else if (oldCol.length > 0 && newCol.length == 0)\r\n                //            $rootScope.$broadcast('header.enableMenu', true);\r\n                //    }\r\n                //});\r\n\r\n                var onLoyaltyLionWidgetClick = function () {\r\n                    helperService.showDialog($('#loyaltyLionModal'));\r\n                };\r\n                \r\n                $(document).on('click.loyaltyLionWidget', '#dear-loyalty-lion-widget .lion-loyalty-widget .lion-loyalty-widget__body', onLoyaltyLionWidgetClick);\r\n\r\n                $scope.saleNotesShowMoreClick = function () {\r\n                    let el = $('.sale-notes .full-sale-note-text');\r\n\r\n                    el.slideToggle(500, function(){\r\n                        $('.sale-notes .more span').text(el.is(':hidden') ? 'more' : 'less');\r\n                    });\r\n                }\r\n\r\n                $(\"#saleOptionsMenu\").on('show.bs.collapse', function () {\r\n                    $('#saleOptionsMenuSubLayer').show();\r\n                });\r\n\r\n                $(\"#saleOptionsMenu\").on('hidden.bs.collapse', function () {\r\n                    $('#saleOptionsMenuSubLayer').hide();\r\n                });\r\n\r\n                $scope.cashMode = false;\r\n                $scope.creditCardMode = false;\r\n                $scope.subType = null;\r\n                $scope.floatPrecision = configService.fractionalLimit;\r\n                $scope.isSearchVisible = true;\r\n                $scope.searchType = 'quickKeySearch';\r\n                $scope.searchText = null;\r\n                $scope.searchTextLive = '';\r\n                $scope.searchItems = null;\r\n                $scope.searchTotal = null;\r\n                $scope.totalPages = 1;\r\n                $scope.currentPage = 0;\r\n                $scope.pageSize = configService.getCatalogPageSize();\r\n                $scope.pageRows = configService.getCatalogPageRows();\r\n                $scope.pageCols = configService.getCatalogPageCols();\r\n                $scope.tilesVisibility = configService.getCatalogTilesVisibility();\r\n                $scope.showProductAvailability = configService.getShowProductAvailability();\r\n                $scope.page = 1;\r\n                $scope.isInFamily = false;\r\n                $scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n                $scope.cashRegistryPaymentProcessorID = null;\r\n                $scope.storeCreditsPaymentProcessorID = null;\r\n                $scope.creditCardPaymentProcessorID = null;\r\n                $scope.laybyPaymentProcessorID = null;\r\n                $scope.giftCardPaymentProcessorID = null;\r\n                $scope.loyaltyPaymentProcessorID = null;\r\n                $scope.receiptTemplate = '';\r\n                $scope.quoteTemplateHolder = {\r\n                    QuoteTemplate: '',\r\n                    QuoteEmailTemplate: '',\r\n                    QuoteEmail: ''\r\n                };\r\n\r\n                $scope.showLoyalty = configService.enableLoyalty;\r\n                $scope.disableLoyalty = true;\r\n                $scope.loyaltyUnavailable = false;\r\n                $scope.canChangeCustomer = true;\r\n                $scope.isFastRefund = false;\r\n                $scope.canChangeSalesRepresentative = true;\r\n                $scope.canParkSale = true;\r\n                $scope.canDiscardSale = true;\r\n                $scope.canAddDiscount = configService.canGiveDiscount;\r\n                $scope.canChangePrice = configService.canChangePrice;\r\n                $scope.canInsertCheckoutItems = true;\r\n                $scope.operationName = 'Pay';\r\n                $scope.refundNeedCustomer = false;\r\n                $scope.noReceiptExchangeMode = 'Return';\r\n                $scope.paymentValidation = {\r\n                    cashAmount: 0,\r\n                    creditCardAmount: 0,\r\n                    giftCardAmount: 0,\r\n                    loyaltyPointsAmount: 0,\r\n                    storeCreditAmount: 0\r\n                };\r\n                $scope.scanedSerialNumber = {\r\n                    value: \"\"\r\n                };\r\n                $scope.paymentValidation.cardPayments = {};\r\n                $scope.isValidAmount = true;\r\n                $scope.checkOutItem = {\r\n                    Count: 0\r\n                };\r\n                $scope.minSymbolsToStartSearch = configService.minSymbolsToStartSearch;\r\n                $scope.minSymbolsMessage = gettextCatalog.getString(\"Only the first {{cnt}} products are shown.\", {\r\n                    cnt: 7\r\n                });\r\n                $scope.minSymbolsToStartSearchMessage = gettextCatalog.getString(\"Enter no less than {{cnt}} symbols to start searching.\", {\r\n                    cnt: $scope.minSymbolsToStartSearch\r\n                });\r\n                $scope.couponCode = null;\r\n\r\n                // $scope.surchargeCache = [];\r\n                // $scope.surchargeCacheLastLoad = null;\r\n\r\n                $scope.oldAvailableCouponsValue = false;\r\n                $scope.outletName = configService.lastOutlet;\r\n                $scope.paymentActionInProgress = false;\r\n                $scope.pendingPaymentRegistry = {};\r\n\r\n                $scope.abs = function (x) {\r\n                    if (x)\r\n                        return helperService.DEARRound(Math.abs(x), 2);\r\n                    return 0;\r\n                };\r\n\r\n                //$scope.$watch('searchText',\r\n                //  function (newValue, oldValue) {\r\n                //      if (newValue !== oldValue && !!newValue &&\r\n                //          newValue.length >= configService.minSymbolsToStartSearch) {\r\n                //            keyPressDelayService.forceDelayOperation(newValue, $scope.search);\r\n                //      }\r\n                //  }\r\n                // );\r\n                $scope.liveSearchIsOpen = false;\r\n\r\n                //$scope.$watchCollection('searchItems', function (newValue, oldValue) {\r\n                //    if (!!newValue && newValue.length > 0) {\r\n                //        $rootScope.$broadcast('image.src.update');\r\n                //    }\r\n                //})\r\n\r\n                $scope.$watch('liveSearchIsOpen',\r\n                    function (newValue, oldValue) {\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n                        if (newValue) {\r\n                            $timeout(function () {\r\n                                helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), false);\r\n                            }, 400);\r\n                        }\r\n                    }\r\n                );\r\n\r\n\r\n                $scope.placeMaxVisibleLiveSearchCountMsg = function () {\r\n                    // if ($scope.showMaxVisibleLiveSearchCountMsg && $scope.liveSearchIsOpen) {\r\n                    //     $timeout(function () {\r\n                    //         var lst = $('.autoCompleteBox ul')[0].getBoundingClientRect();\r\n                    //         if (lst.width > 0 && lst.height > 0) {\r\n                    //             console.log('lst: ' + lst.width + ' ' + lst.height);\r\n                    //             $('#minProdMessage').css('left', lst.left);\r\n                    //             $('#minProdMessage').css('top', lst.bottom - 10);\r\n                    //             $('#minProdMessage').show();\r\n                    //         }\r\n                    //         else\r\n                    //             $('#minProdMessage').hide();\r\n                    //     });\r\n                    // }\r\n                    // else\r\n                    //     $('#minProdMessage').hide();\r\n                };\r\n\r\n                $scope.showMaxVisibleLiveSearchCountMsg = false;\r\n\r\n\r\n                $scope.liveSearch = function (val) {\r\n                    $scope.searchType = 'live';\r\n                    $scope.searchText = val;\r\n                    var res = liveSearchService.filterData(val);\r\n                    filterService.checkEquality(res);\r\n\r\n                    $scope.showMaxVisibleLiveSearchCountMsg = !!res && res.length > 0;\r\n                    $scope.placeMaxVisibleLiveSearchCountMsg();\r\n\r\n                    return res;\r\n                };\r\n\r\n                $scope.liveSearchFinished = function (val) {\r\n                    return !!val ? val.name : null;\r\n                };\r\n\r\n                $scope.handleEmptyResult = function (query, isSilent = false) {\r\n                    if (!isSilent) {\r\n                        soundService.playBad();\r\n                    }\r\n                    \r\n                    if (query) {\r\n                        $rootScope.$broadcast('snackbar.show', {\r\n                            message: `No product(s) are found.`,\r\n                            type: 'error'\r\n                        });\r\n                    }\r\n                };                \r\n\r\n                $scope.liveSearchSelected = function (item, model, label, event) {\r\n                    // make search by product id and add product to order\r\n                    $scope.searchProductID = model.id;\r\n                    $scope.searchText = item.name;\r\n                    $scope.search();\r\n                };\r\n\r\n                // this is sale object. Can be saved (Hold on, parked) restored\r\n                $scope.currentSale = {\r\n                    CashChangeAmount: 0,\r\n                    itemDiscount: 0\r\n                };\r\n\r\n                $scope.receiptSaleModel = {\r\n                    Customer: [],\r\n                    CheckoutProductCount: 0,\r\n                    Date: '',\r\n                    Time: '',\r\n                    OutletName: '',\r\n                    RegistryName: '',\r\n                    CheckoutProducts: [],\r\n                    SubTotal: 0,\r\n                    Discount: 0,\r\n                    CalculatedTax: 0,\r\n                    Total: 0,\r\n                    Payments: [],\r\n                    Balance: 0,\r\n                    MerchantReceipt: '',\r\n                    CustomerReceipt: ''\r\n                };\r\n\r\n                $scope.email = {\r\n                    receiptEmail: null\r\n                };\r\n\r\n                $scope.receiptHolder = {};\r\n\r\n                $scope.quoteHolder = {};\r\n\r\n                var logoff = function () {\r\n                    $timeout(function () {\r\n                        $.unblockUI();\r\n                        $rootScope.$broadcast('header.logoff');\r\n                        \r\n                        googleHelperService.logout();\r\n                        \r\n                    });\r\n                };\r\n\r\n                // payment section\r\n                $scope.showPaymentSection = 0; // 0 - product select, 1 - payment method select, 2 - payment done\r\n\r\n                $scope.isPaymentFinished = function () {\r\n                    if (!!$scope.currentSale.LoyaltyPoints) {\r\n                        $scope.currentSale.LoyaltyPoints = helperService.DEARRound($scope.currentSale.LoyaltyPoints, 2);\r\n                    }\r\n                    return $scope.showPaymentSection === 2;\r\n                };\r\n\r\n                $scope.setPaymentFinished = function () {\r\n                    // for customer display\r\n                    $scope.lastSaleType = $scope.saleType ? $scope.saleType : 'sale';\r\n                    $scope.showPaymentSection = 2;\r\n                    secondTerminalService.update($scope, 'finish');\r\n\r\n                    return true;\r\n                };\r\n\r\n                $scope.isPaymentStage = function () {\r\n                    return $scope.showPaymentSection === 1;\r\n                };\r\n\r\n                $scope.$watch('showPaymentSection',\r\n                    function (newValue, oldValue) {\r\n                        if (newValue !== oldValue) {\r\n\r\n                            if (newValue == 0) {\r\n                                printService.reconnect();\r\n                                printService.resetPrintCollectMode();\r\n                            } else if (newValue == 1) {\r\n                                printService.reconnect(true);\r\n                                $timeout(function () {\r\n                                    $(\"#saleSummaryPaymentMethods\").trigger(\"on.resize\");\r\n                                });\r\n                            } else if (newValue == 2) {\r\n                                helperService.storeCurrentSale(null);\r\n                                $timeout(function () {\r\n                                    $(\"#saleSummaryCompleteID\").trigger(\"on.resize\");\r\n                                }, 1);\r\n                            }\r\n                        }\r\n                    }\r\n                );\r\n\r\n                $scope.disablePrintReceipt = function () {\r\n                    return printService.deviceIsStarted == false;\r\n                };\r\n\r\n                $scope.formHolder = {\r\n                    realSum: 0,\r\n                    sumToPayLeft: 0,\r\n                    realCashSum: 0\r\n                };\r\n                $scope.saleType = null;\r\n\r\n                // enable event when view is shown\r\n                $scope.onLoad = function () {\r\n                    console.timeEnd('enter sell controller');\r\n                    filterService.clearCanvas();\r\n\r\n                    console.time('sell controller: load');\r\n                    //printService.startScanner();\r\n                    //printService.disconnect().then(function () { return printService.connect(); });\r\n                    try {\r\n                        printService.reconnect();\r\n                    } catch (e) {\r\n                        errorService.showError(typeof e === 'string' ? e : e.message);\r\n                    }\r\n\r\n                    $scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n\r\n                    if (!configService.isMobile)\r\n                        $timeout(function () {\r\n                            $('#searchProductInput').focus();\r\n                        }, 100);\r\n\r\n                    $.blockUI();\r\n                    var p = $scope.setRegistrySales()\r\n                        .then(function () {\r\n                                return receiptService.getReceiptTemplate(true)\r\n                                    .then(function (resp) {\r\n                                            //$.blockUI();\r\n\r\n                                            var injectedString = '; white-space: pre-wrap;';\r\n                                            var position = resp.Template.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                            var result = [resp.Template.slice(0, position), injectedString, resp.Template.slice(position)].join('');\r\n\r\n                                            var replacedString = '<canvas class=\"barcode\" id=\"code93\" type=\"code93\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code93}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code93}}</canvas><div class=\"barcode_img img_code93\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"barcode\" id=\"code128\" type=\"code128\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code128}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code128}}</canvas><div class=\"barcode_img img_code128\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean8\" type=\"ean8\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean8}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean13\" type=\"ean13\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean13}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-industrial2of5\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  type=\"industrial2of5\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_industrial2of5}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upca\" type=\"upca\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upca}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upce\" type=\"upce\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upce}}\", replacedString);\r\n\r\n                                            $scope.receiptTemplate = result;\r\n\r\n                                            if (resp.EmailTemplate) {\r\n                                                position = resp.EmailTemplate.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                                result = [resp.EmailTemplate.slice(0, position), injectedString, resp.EmailTemplate.slice(position)].join('');\r\n\r\n                                                replacedString = '<div class=\"barcode_img img_code93\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_code128\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean8}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean13}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_industrial2of5}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upca}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upce}}\", replacedString);\r\n\r\n                                                $scope.receiptEmailTemplate = result;\r\n                                            } else {\r\n                                                $scope.receiptEmailTemplate = result;\r\n                                            }\r\n\r\n                                            $scope.receiptEmailSubject = resp.EmailSubject;\r\n                                            $scope.receiptTemplateID = resp.TemplateID;\r\n\r\n                                            //var saleID = $location.search().saleID;\r\n                                            var cSearch = helperService.getSearchParams();\r\n\r\n                                            var saleID = cSearch.saleID;\r\n                                            $scope.subType = cSearch.subType;\r\n\r\n                                            if (saleID) {\r\n                                                saleService.loadOfflineSales(saleID).then(function (res) {\r\n                                                    var discardParkedSale = function () {\r\n                                                        return saleService.discardParkedSale(saleID).then(res => {\r\n                                                            // we loaded parked sale to memory (CurrentSale) and removed from backend,\r\n                                                            // continueSale obj is not needed anymore\r\n                                                            localStorage.setItem('continueSale', null);\r\n\r\n                                                            return res;\r\n                                                        });\r\n                                                    }\r\n\r\n                                                    if (!!cSearch.type) {\r\n                                                        $scope.saleType = cSearch.type;\r\n                                                    }\r\n                                                    if (res[0]) {\r\n                                                        $scope.currentSale = res[0].sale;\r\n                                                        $scope.currentSale = convertFromOld($scope.currentSale, $scope.currentSale.TaxInclusive);\r\n                                                        // var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                                                        calculateSums();\r\n                                                        $scope.currentSale.isParked = cSearch.isParked === true;\r\n                                                        // remove sale from store. We will conditionally return it back from sale page\r\n                                                        if ($scope.currentSale.isParked) {\r\n                                                            helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                                                            return discardParkedSale();\r\n                                                            \r\n                                                        } else\r\n                                                            return helperService.resolvePromise(true);\r\n                                                    } else {\r\n                                                        return saleService.loadSalesHistory(null, null, {\r\n                                                                SaleID: saleID\r\n                                                            })\r\n                                                            .then(function (resp) {\r\n                                                                if (resp.Orders.length === 0) {\r\n                                                                    errorService.showError(gettextCatalog.getString(\"The sale was not found. If it was a parked sale, someone may already be processing it right now.\"));\r\n                                                                    $scope.restoreSale();\r\n                                                                    return helperService.resolvePromise(true);\r\n                                                                }\r\n                                                                var order = resp.Orders[0].Data;\r\n                                                                // var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                                                                $scope.currentSale = JSON.parse(order.RawSaleObject);\r\n                                                                $scope.currentSale = convertFromOld($scope.currentSale, order.TaxInclusive);\r\n                                                                helperService.storeCurrentSale($scope.currentSale, $scope);\r\n\r\n                                                                $.each(order.Payments, function (idx, el) {\r\n                                                                    if (el.PaymentProcessorID === \"BackofficePayment\") {\r\n\r\n                                                                        var existingPayment = $scope.currentSale.Payments.filter(function (p) {\r\n                                                                            return p.ID === el.ID;\r\n                                                                        });\r\n\r\n                                                                        if (existingPayment.length === 0) {\r\n                                                                            var payment = {\r\n                                                                                ID: el.ID,\r\n                                                                                PaymentProcessorID: el.PaymentProcessorID,\r\n                                                                                Amount: el.Amount,\r\n                                                                                Date: el.Date,\r\n                                                                                ShortName: el.ShortName,\r\n                                                                                PaymentTypeName: \"Non-POS\",\r\n                                                                                Loyalty: 0,\r\n                                                                                Reference: null,\r\n                                                                                Surcharge: null\r\n                                                                            };\r\n                                                                            $scope.currentSale.Payments.push(payment);\r\n                                                                        }\r\n                                                                    }\r\n                                                                });\r\n\r\n                                                                $scope.currentSale.isParked = cSearch.isParked === true;\r\n\r\n                                                                if (cSearch.isParked) {\r\n                                                                    $scope.currentSale.OrderNumber = resp.Orders[0].OrderNumber;\r\n                                                                    $scope.currentSale.ClearOrderNumber = resp.Orders[0].Data.ClearOrderNumber;\r\n                                                                    $scope.currentSale.RegistryID = resp.Orders[0].Data.RegistryID;\r\n                                                                } else {\r\n                                                                    $scope.currentSale.OrderNumber = resp.Orders[0].OrderNumber;\r\n                                                                    $scope.currentSale.ClearOrderNumber = resp.Orders[0].Data.ClearOrderNumber;\r\n                                                                    $scope.currentSale.RegistryID = resp.Orders[0].Data.RegistryID;\r\n                                                                }\r\n\r\n                                                                if (cSearch.type === 'continue') {\r\n                                                                    $scope.posTaxInclucive = resp.Orders[0].Data.TaxInclusive;\r\n                                                                }\r\n\r\n                                                                if (isContinueExchange())\r\n                                                                    $scope.currentSale.newRefundOrder = saleID;\r\n                                                                else if ($scope.saleType !== \"continue\") {\r\n                                                                    // this should be set once for refund and will be send for each refund payment operation.\r\n                                                                    //This will ensure that all refund will be attached to the same order\r\n                                                                    $scope.currentSale.newRefundOrder = uuid2.newguid();\r\n                                                                }\r\n\r\n                                                                if ($scope.currentSale.OrderType === 'LAYBY' || $scope.currentSale.OrderType === 'ONACCOUNT' ||\r\n                                                                    $scope.subType === true) {\r\n                                                                    $scope.markSaleAsPayOnly();\r\n                                                                    calculateSums();\r\n                                                                }\r\n\r\n                                                                $timeout(function () {\r\n                                                                    if (cSearch.toPaymentPage === true) {\r\n                                                                        $scope.goPayment();\r\n\r\n                                                                        if (cSearch.isFullyPaid) {\r\n                                                                            compliteSale(false);\r\n                                                                        }\r\n                                                                    }\r\n                                                                });\r\n\r\n                                                                if ($scope.currentSale.isParked) {\r\n                                                                    return discardParkedSale();\r\n                                                                }\r\n                                                                else\r\n                                                                    return helperService.resolvePromise(true);\r\n                                                            });\r\n                                                    }\r\n                                                }).then(function () {\r\n                                                    var customer = angular.copy($scope.currentSale.customer);\r\n\r\n                                                    if (configService.isOnline === true && customer.ID) {\r\n                                                        customerService.loadCustomers(\"\", 1, 10, {\r\n                                                            CustomerID: customer.ID\r\n                                                        }, true).then(function (resp) {\r\n                                                            if (resp.Customers[0]) {\r\n                                                                $scope.currentSale.customer = resp.Customers[0];\r\n\r\n                                                                if (customer.DontReloadContacts) {\r\n                                                                    $scope.currentSale.customer.Contacts = customer.Contacts;\r\n                                                                    $scope.currentSale.customer.DontReloadContacts = customer.DontReloadContacts;\r\n                                                                }\r\n                                                                if (customer.DontReloadAddresses) {\r\n                                                                    $scope.currentSale.customer.Addresses = customer.Addresses;\r\n                                                                    $scope.currentSale.customer.DontReloadAddresses = customer.DontReloadAddresses;\r\n                                                                }\r\n\r\n                                                                return initLoyaltyCustomer($scope.currentSale.customer);\r\n                                                            }\r\n\r\n                                                            $scope.setDisableLoyaltyFlag();\r\n                                                        });\r\n                                                    } else {\r\n                                                        $scope.currentSale.customer.LoadedFromLocalDb = true;\r\n                                                    }\r\n                                                }).finally(function () {\r\n                                                    //                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n\r\n                                                    $rootScope.$broadcast('sell.reload', {\r\n                                                        dontReloadReceipt: true\r\n                                                    });\r\n                                                    //$.unblockUI();\r\n                                                    $scope.raiseViewChanged();\r\n                                                });\r\n                                            } else if (window.localStorage.getItem('ItemToExchange') !== null) {\r\n                                                //if ($location.search().type) {\r\n                                                //    $scope.saleType = $location.search().type;\r\n                                                //}\r\n\r\n                                                $scope.canChangeSalesRepresentative = false;\r\n\r\n                                                if (cSearch.type) {\r\n                                                    $scope.saleType = cSearch.type;\r\n                                                }\r\n\r\n                                                $scope.currentSale = JSON.parse(window.localStorage.getItem('ItemToExchange'));\r\n                                                var defaultCustomer = $scope.currentSale.DefaultCustomer;\r\n                                                var isFastRefund = $scope.currentSale.IsFastRefund;\r\n                                                var adjustRefunds = $scope.currentSale.AdjustRefunds;\r\n\r\n                                                $scope.currentSale = convertFromOld($scope.currentSale, $scope.currentSale.TaxInclusive);\r\n                                                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                                                if ($scope.saleType === 'return') {\r\n\r\n                                                    ///This needs to show earned loyalry for exchange(in case of additional payment)\r\n                                                    $scope.setDisableLoyaltyFlag();\r\n                                                    if (!isNewSale) {\r\n                                                        $scope.posTaxInclucive = $scope.currentSale.TaxInclusive;\r\n                                                        delete $scope.currentSale.TaxInclusive;\r\n                                                    } else {\r\n                                                        $scope.posTaxInclucive = $scope.currentSale.IsTaxInclusive;\r\n                                                    }\r\n\r\n                                                    $scope.operationName = 'Refund';\r\n                                                    initLoyaltyCustomer($scope.currentSale.customer);\r\n\r\n                                                    if (isContinueExchange()) {\r\n                                                        // Don't need to change anything\r\n                                                        //$scope.currentSale.newRefundOrder = saleID; // has been commented by Sergey Piskov\r\n\r\n                                                        // to resolve issue with new ID in sale service for existed exchange\r\n                                                        $scope.operationSubName = 'continue';\r\n                                                        $scope.operationName = 'Exchange';\r\n                                                        $scope.markSaleAsPayOnly();\r\n                                                    } else {\r\n                                                        // this should be set once for refund and will be send for each refund payment operation.\r\n                                                        //This will ensure that all refund will be attached to the same order\r\n                                                        if (!isNewSale)\r\n                                                            $scope.currentSale.newRefundOrder = uuid2.newguid();\r\n                                                        else\r\n                                                            $scope.currentSale.NewRefundOrder = uuid2.newguid();\r\n                                                    }\r\n                                                } else if ($scope.saleType === 'standaloneReturn' || $scope.saleType === 'standaloneExchange') {\r\n                                                    let isRefund = $scope.saleType === 'standaloneReturn';\r\n                                                    \r\n                                                    var obj = angular.copy($scope.currentSale);\r\n                                                    $scope.cleanSale();\r\n                                                    $scope.currentSale = $.extend($scope.currentSale, obj);\r\n\r\n                                                    if (defaultCustomer)\r\n                                                        $scope.currentSale.customer = defaultCustomer;\r\n\r\n                                                    $scope.currentSale.IsFastRefund = isFastRefund;\r\n                                                    $scope.currentSale.AdjustRefunds = adjustRefunds;\r\n                                                    if (isFastRefund) {\r\n                                                        $scope.canChangeCustomer = false;\r\n                                                        $scope.isFastRefund = true;\r\n                                                    }\r\n\r\n                                                    $scope.operationName = isRefund ? 'Refund' : 'Exchange';\r\n                                                    if (!isNewSale) {\r\n                                                        $scope.currentSale.newRefundOrder = uuid2.newguid();\r\n\r\n                                                        if(isRefund)\r\n                                                            $scope.currentSale.standAloneReturn = true;\r\n                                                        else\r\n                                                            $scope.currentSale.standAloneExchange = true;\r\n                                                    } else {\r\n                                                        $scope.currentSale.NewRefundOrder = uuid2.newguid();\r\n                                                        \r\n                                                        if(isRefund)\r\n                                                            $scope.currentSale.StandAloneReturn = true;\r\n                                                        else\r\n                                                            $scope.currentSale.StandAloneExchange = true\r\n                                                    }\r\n\r\n                                                    $scope.canChangeSalesRepresentative = true;\r\n                                                    $scope.saleType = isRefund ? 'standaloneReturn' : 'standaloneExchange';\r\n                                                    $scope.canParkSale = false;\r\n                                                    $scope.canAddDiscount = false;\r\n                                                }\r\n                                                else if ($scope.saleType === 'newSale') {\r\n                                                    var cSale = angular.copy($scope.currentSale);\r\n                                                    $scope.cleanSale();\r\n                                                    $scope.saleType = 'newSale';\r\n                                                    $.extend($scope.currentSale, cSale);\r\n                                                }\r\n\r\n                                                if(!!$scope.saleType) {\r\n                                                    helperService.storeCurrentSale(null);\r\n                                                }\r\n\r\n                                                localStorage.removeItem('ItemToExchange');\r\n                                                $scope.currentSale.FullReturnRounding = 0;\r\n                                                $scope.currentSale.cantProcessOffline = true;\r\n                                                $scope.currentSale.CashRounding = 0;\r\n                                                $scope.currentSale.CashChangeAmount = 0;\r\n\r\n                                                if ($scope.saleType !== 'standaloneReturn' && $scope.saleType !== 'standaloneExchange' && $scope.saleType !== 'newSale') {\r\n                                                    $scope.saleType = 'return';\r\n                                                } else {\r\n                                                    $scope.currentSale.cantProcessOffline = false;\r\n                                                }\r\n\r\n                                                if ($scope.currentSale.selectedCoupon) {\r\n\r\n                                                    $scope.currentSale.returnSelectedCoupon = $scope.currentSale.selectedCoupon;\r\n                                                    $scope.currentSale.returnSelectedCouponID = $scope.currentSale.selectedCouponID;\r\n                                                    $scope.currentSale.returnSelectedCouponDealID = $scope.currentSale.selectedCouponDealID;\r\n                                                }\r\n\r\n                                                $scope.currentSale.selectedCoupon = null;\r\n                                                $scope.currentSale.selectedCouponID = null;\r\n                                                $scope.currentSale.selectedCouponDealID = null;\r\n\r\n                                                if (!isNewSale) {\r\n                                                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                                        el.itemAppliedDiscount = 0;\r\n                                                    });\r\n                                                }\r\n\r\n                                                var customer = $scope.currentSale.customer;\r\n\r\n                                                if (configService.isOnline && !!customer.ID) {\r\n                                                    return customerService.getCustomer(customer.ID)\r\n                                                        .then(function (resp) {\r\n                                                            if (resp.Customers[0]) {\r\n                                                                $scope.currentSale.customer = resp.Customers[0];\r\n                                                            }\r\n\r\n                                                            var pr = helperService.resolvePromise(true);\r\n\r\n                                                            if ($scope.saleType === 'newSale') {\r\n                                                                pr = pr.then(function () {\r\n                                                                    return $scope.addCustomerHandler($scope.currentSale.customer);\r\n                                                                });\r\n                                                            }\r\n\r\n                                                            $.unblockUI();\r\n                                                            return pr;\r\n\r\n                                                        }, function (error) {\r\n                                                            $.unblockUI();\r\n                                                        })\r\n                                                        .then(function () {\r\n                                                            return initLoyaltyCustomer($scope.currentSale.customer);\r\n                                                        });\r\n                                                } else {\r\n                                                    $.unblockUI();\r\n                                                }\r\n\r\n                                                $scope.$broadcast('sale.update');\r\n                                            } else {\r\n                                                $.unblockUI();\r\n                                            }\r\n                                        },\r\n                                        function (err) {\r\n                                            // in case of template error or something like this we will allow to select outlet/registry manually\r\n                                            configService.bypassOutletRegistry = false;\r\n                                            \r\n                                            googleHelperService.logout();\r\n                                            \r\n                                            errorService.showError(err, logoff);\r\n                                        });\r\n                            },\r\n                            function (err) {\r\n                                errorService.showError('Server can not be accessed. Please, relogin.', logoff);\r\n                                //            errorService.showError(err);\r\n                            });\r\n\r\n                    saleService.updateNextSequenceNumber(); // specially unlinked from promise queue to speed up loading\r\n\r\n                    p.then(function(){\r\n                        return $scope.checkRestoredSaleAsync();\r\n                    })\r\n                    .finally(function () {\r\n                        $scope.raiseViewChanged();\r\n                        console.timeEnd('sell controller: load');\r\n                        $.unblockUI();\r\n\r\n                        if(!$scope.saleCheckResult) {\r\n                            // check if we restore sale that was broken during card payment\r\n                            // in this case we need to ask client if the sale was really paid and\r\n                            // in this case complete it with special comment\r\n                            var saleObj = $scope.restoreSale();\r\n                            if ($scope.currentSale && saleObj && saleObj.payment) {\r\n                                $scope.restoredSaleObj = saleObj;\r\n                                $scope.dialogMode = 'restore-cardpay-sale';\r\n                                setTimeout(\r\n                                    function() {\r\n                                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                        gettextCatalog.getString('We have identified incorrectly completed payment transaction. Please confirm if the payment succeeded?'),\r\n                                        gettextCatalog.getString('Yes'),\r\n                                        gettextCatalog.getString('No'))\r\n                                    }\r\n                                , 1000);\r\n                            } else delete $scope.restoredSaleObj;\r\n\r\n                            try {\r\n                                if (saleObj) {\r\n                                    secondTerminalService.update($scope, 'sale');\r\n                                }\r\n                            } catch (e) {\r\n                                console.log(e);\r\n                            }\r\n                        }\r\n\r\n                        $scope.saleCheckResult = false;\r\n                    });\r\n                };\r\n\r\n                $scope.saleCheckResult = false;\r\n\r\n                // returns false if sale can be restored from local storage\r\n                $scope.checkRestoredSaleAsync = function () {\r\n                    $scope.saleCheckResult = false;\r\n\r\n                    var saleObj = helperService.restoreCurrentSale();\r\n                    // check only if sale is in the local storage and there is no payments, i.e. it's new one\r\n                    if (!!saleObj && !!saleObj.sale && !saleObj.payment) {\r\n                        return saleService.checkPosSaleOrderExists(saleObj.sale.ID)\r\n                        .then(function(res){\r\n                            $scope.saleCheckResult = res === true;\r\n                            return helperService.resolvePromise(res === true);\r\n                        });\r\n                    } else {\r\n                        $scope.saleCheckResult = false;\r\n                        return helperService.resolvePromise(false);\r\n                    }\r\n                };\r\n\r\n                $scope.restoreSale = function () {\r\n                    var saleObj = helperService.restoreCurrentSale();\r\n                    if (!!saleObj && !!saleObj.sale) {\r\n                        clearLLDiscount();\r\n                        $scope.currentSale = saleObj.sale;\r\n                        //  var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                        if (!!saleObj.saleType)\r\n                            $scope.saleType = saleObj.saleType;\r\n\r\n                        if (!!saleObj.operationName)\r\n                            $scope.operationName = saleObj.operationName;\r\n\r\n                        if ($scope.saleType === 'return' &&\r\n                            !$scope.currentSale.customer.ID) {\r\n                            $scope.refundNeedCustomer = true;\r\n                        }\r\n\r\n                        if ($scope.currentSale.customer &&\r\n                            $scope.currentSale.customer.ID)\r\n                            initLoyaltyCustomer($scope.currentSale.customer);\r\n\r\n                        if (saleObj.payment) {\r\n                            $scope.creditCardPaymentProcessorID = saleObj.creditCardPaymentProcessorID;\r\n                            $scope.formHolder.realSum = !saleObj.realSum ? 0 : saleObj.realSum;\r\n                        }\r\n                    }\r\n\r\n                    $scope.setDisableLoyaltyFlag();\r\n\r\n                    return saleObj;\r\n                };\r\n\r\n                $scope.markSaleAsPayOnly = function () {\r\n                    $scope.canChangeCustomer = false;\r\n                    $scope.canParkSale = false;\r\n                    $scope.canAddDiscount = false;\r\n                    $scope.canInsertCheckoutItems = false;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        el.CanEdit = false;\r\n                        el.CanDelete = false;\r\n                        if ($scope.useNewCalculation()) {} else {\r\n                            el.itemDiscount = el.itemAppliedDiscount;\r\n                            el.itemAppliedDiscount = 0;\r\n                            el.Price += el.itemDiscount;\r\n                        }\r\n                    });\r\n                };\r\n\r\n                $scope.raiseViewChanged = function () {\r\n                    //$('#mainPart').css('height', $(window).innerHeight() + 'px');\r\n\r\n                    $rootScope.$broadcast('view.ready');\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('view.loaded');\r\n                    });\r\n                    $timeout(function () {\r\n                        $scope.viewLoaded = true;\r\n                    });\r\n                };\r\n\r\n                $scope.firstTimeLoad = true;\r\n                $scope.firstTimeSummaryLoad = true;\r\n\r\n                $scope.openCustomerDisplay = function () {\r\n                    secondTerminalServiceWeb.openSecondScreenPage();\r\n                };\r\n\r\n                watchers.push($scope.$on('view.loaded', function (evt, prm) {\r\n                    //       if(!!prm && prm=='summary')\r\n                    //           $scope.initSummaryValues();\r\n                    configService.pingFunction();\r\n\r\n                    if ($scope.firstTimeLoad) {\r\n                        $scope.firstTimeLoad = false;\r\n\r\n                        helperService.setDatepicker($scope.dateFormat, '#expirationDate');\r\n\r\n                        if (!!configService.useLinkly) {\r\n                            var paymentSettings = configService.getCardPaymentSettings();\r\n                            var providerKey = paymentSettings && paymentSettings.providerKey ? paymentSettings.providerKey : null;\r\n\r\n                            if (providerKey === 'linklyPaymentReaderProvider') {\r\n                                var secretKey = window.localStorage.getItem('secret');\r\n\r\n                                if (!!secretKey) {\r\n                                    linklyPaymentReaderProvider.startPolling();\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        var isAfterLogin = localStorage.getItem('isAfterLogin');\r\n                        localStorage.removeItem('isAfterLogin');\r\n                        if (configService.isSite && isAfterLogin && localStorage.getItem('secondScreenEnableAuto') === 'true') {\r\n                            // hack because browser can deny opening pop ups without user interaction\r\n                            $('#btnOpenCustomerDisplay').click();\r\n                        }\r\n                    }\r\n\r\n                    if ($scope.firstTimeSummaryLoad && $scope.showPaymentSection == 1) {\r\n                        $scope.firstTimeSummaryLoad = false;\r\n\r\n                        helperService.setDatepicker2($scope.dateFormat, '#layByDate',\r\n                            function () {\r\n                                $('#layByDate').prop('disabled', true);\r\n                            },\r\n                            function () {\r\n                                $('#layByDate').prop('disabled', false);\r\n                            }\r\n                        );\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('image.src.update');\r\n                        $rootScope.$broadcast('scroll.wrapper.resize');\r\n                        var f = $('.innerOffsets.paymentFooter');\r\n                        var off = f.offset();\r\n                        console.log('after loaded:');\r\n                        console.log(off.left + ' ' + off.top);\r\n                        console.log(f.width() + ' ' + f.height());\r\n                        console.log($(window).height());\r\n                        \r\n                        $scope.$broadcast('sale.update');\r\n                    });                 \r\n\r\n                    //         if( prm === 'summary') {\r\n                    // // summary is displayed, so call loyalty service to update loyalty if required\r\n                    //             loyaltyService.initCustomer($scope.currentSale.customer); // async\r\n                    //         }\r\n                }));\r\n\r\n                watchers.push($rootScope.$on(\"$includeContentLoaded\", function (event, templateName) {\r\n                    if (templateName === 'PosViews/sellToPayPartial.html') {\r\n                        console.log('include is loaded: ' + templateName);\r\n                        $rootScope.$broadcast('recalculate');\r\n                    }\r\n                }));\r\n\r\n                $scope.quickKey = null;\r\n                $scope.searchProductID = null;\r\n\r\n                $scope.liveKeyPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        $scope.searchProductID = null;\r\n                        $scope.search(true);\r\n                    }\r\n                };\r\n\r\n                $scope.toggleProductTiles = function () {\r\n                    $timeout(function () {\r\n                        $scope.showSearchResult = !$scope.showSearchResult;\r\n                    });\r\n                };\r\n\r\n                $scope.scrollToAddedPaymentItem = function () {\r\n                    $timeout(function () {\r\n                        $('#checkoutSection .checkout-item:first-child')[0].scrollIntoView({behavior: \"smooth\", block: \"end\", inline: \"nearest\"});\r\n                    });\r\n                };\r\n                //$scope.liveKeyDown = function (event) {\r\n                //    if (event.which === 38 || event.which === 40)\r\n                //    {\r\n\r\n\r\n                //    }\r\n                //};\r\n\r\n                // search for products\r\n                $scope.search = function (isUserAction) {\r\n\r\n                    $rootScope.$broadcast('popover.dialog.hide');\r\n                    var isUserPerformedSearch = isUserAction == true;\r\n                    if ($scope.searchType == 'quickKeySearch' || $scope.searchType == 'quickKey') {\r\n\r\n                        $scope.quickKey = $scope.searchType == 'quickKeySearch' ? null : $scope.quickKey;\r\n\r\n                        var byQuickKey = true;\r\n\r\n                        $scope.searchType = $scope.quickKey != null ? 'quickKey' : 'quickKeySearch';\r\n\r\n                        if (!!configService.quickKeyTemplateID)\r\n                            $scope.searchText = \"\";\r\n                        else return false;\r\n                    }\r\n\r\n                    // check minimal number of entered symbols\r\n                    if (byQuickKey !== true) {\r\n                        $scope.searchType = 'inputSearch';\r\n                        $scope.quickKey = null;\r\n                        if (!$scope.searchProductID &&\r\n                            (!$scope.searchText || $scope.searchText.length < configService.minSymbolsToStartSearch)) {\r\n                            errorService.showError($scope.minSymbolsToStartSearchMessage);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    if (configService.isMobile) {\r\n                        Keyboard.hide();\r\n                    } else {\r\n                        helperService.hideKeyboard();\r\n                    }\r\n\r\n                    $.blockUI();\r\n                    productsService.search($scope.searchText, byQuickKey, $scope.quickKey, $scope.searchProductID)\r\n                        .then(function (res) {\r\n                            // build page\r\n                            $scope.searchTotal = res;\r\n                            $scope.totalPages = Math.ceil(res / $scope.pageSize);\r\n                            $scope.isInFamily = false;\r\n                            return productsService.getSearchPage(0, $scope.pageSize, byQuickKey, $scope.quickKey, $scope.searchProductID);\r\n                        })\r\n                        .then(function (res) {\r\n                            $scope.searchItems = res.data;\r\n                            $scope.currentPage = res.page;\r\n\r\n                            if(!res.data || res.data.length == 0){\r\n                                $scope.handleEmptyResult($scope.searchText, $scope.searchType === 'quickKey');\r\n                            }\r\n                        })\r\n                        .catch(function (err) {\r\n                            errorService.showError(err);\r\n                        })\r\n                        .finally(function () {\r\n                            var searchProductID = $scope.searchProductID;\r\n                            var weightBasedBarcode = productsService.weightBasedBarcode;\r\n                            $scope.searchProductID = null;\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve(true);\r\n                            var promise = deferred.promise;\r\n\r\n                            if (!!$scope.searchItems && !$scope.quickKey) {\r\n                                var item = $scope.searchItems[0];\r\n                                if ($scope.searchItems && $scope.searchItems.length === 1 && $scope.searchItems[0].isFamily === 0 &&\r\n                                    (helperService.compareStrings(item.ProductCode, $scope.searchText) ||\r\n                                        helperService.compareStrings(item.Barcode, $scope.searchText) ||\r\n                                        helperService.compareStrings(item.ProductID, searchProductID) ||\r\n                                        weightBasedBarcode)) {\r\n                                    promise = promise.then(function () {\r\n                                        var Value = weightBasedBarcode ? weightBasedBarcode.Value : null;\r\n                                        $scope.addPaymentItem(item.ProductID, null, null, null, Value);\r\n                                        $scope.scrollToAddedPaymentItem();\r\n                                        var deferred2 = $q.defer();\r\n                                        deferred2.resolve(true);\r\n                                        return deferred2.promise;\r\n                                    });\r\n                                } else if ($scope.searchItems && $scope.searchItems.length === 1 && $scope.searchItems[0].isFamily === 1) {\r\n                                    promise = promise.then(function () {\r\n                                        return productsService.getFamilySearchFull(item.ProductID).then(function (resp) {\r\n                                            $.each(resp, function (i, el) {\r\n                                                if ($scope.isSearchVisible && !$scope.showSearchResult) {\r\n                                                    $scope.showSearchResult = true;\r\n                                                }\r\n\r\n                                                if (helperService.compareStrings(el.ProductCode, $scope.searchText) ||\r\n                                                    helperService.compareStrings(el.Barcode, $scope.searchText)) {\r\n                                                    promise = promise.then(function () {\r\n                                                        $scope.addPaymentItem(el, true);\r\n                                                        $scope.scrollToAddedPaymentItem();\r\n                                                        var deferred2 = $q.defer();\r\n                                                        deferred2.resolve(true);\r\n                                                        return deferred2.promise;\r\n                                                    });\r\n\r\n                                                    return false;\r\n                                                }\r\n                                            });\r\n                                        });\r\n                                    });\r\n                                } else {\r\n                                    if (isUserPerformedSearch == true && configService.isMobileDesign) {\r\n                                        $timeout(function () {\r\n                                            $scope.showSearchResult = true;\r\n                                        });\r\n                                    }\r\n                                }\r\n                            }\r\n\r\n                            $timeout(function () {\r\n                                fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                            }, 100);\r\n\r\n                            $timeout(function () {\r\n                                $('#tileDiv').trigger('on.resize');\r\n                                $rootScope.$broadcast('image.src.update');\r\n                            }, 50);\r\n\r\n                            return promise.then(function () {\r\n                                    if (!$scope.insideStocktakeCheck) {\r\n                                        productsService.weightBasedBarcode = null;\r\n                                    }\r\n\r\n                                    // $scope.setFocus('searchProductInput');\r\n                                    if ($scope.searchType != 'quickKey')\r\n                                        $scope.quickKey = null;\r\n                                    var deferred2 = $q.defer();\r\n                                    deferred2.resolve(true);\r\n                                    $.unblockUI();\r\n                                    return deferred2.promise;\r\n                                })\r\n                                .catch(function (err) {\r\n                                    productsService.weightBasedBarcode = null;\r\n                                    $.unblockUI();\r\n                                    errorService.showError(err);\r\n                                });\r\n                        });\r\n\r\n                    $scope.page = 1;\r\n                };\r\n\r\n                function sortProducts(a, b) {\r\n                    if (a.Name < b.Name) return -1;\r\n                    if (a.Name > b.Name) return 1;\r\n                    return 0;\r\n                }\r\n\r\n                $scope.showAvailability = function (e, productID, isFamily) {\r\n                    var slel = $scope.searchItems.filter(function (el) {\r\n                        return el.ProductID == productID;\r\n                    })[0];\r\n                    $scope.availabilityObject = {\r\n                        productID: productID,\r\n                        isFamily: isFamily === 1,\r\n                        option1: null,\r\n                        option2: null,\r\n                        option3: null,\r\n                        name: null,\r\n                        sku: null\r\n                    };\r\n                    $scope.availabilityObject.name = slel.Name;\r\n                    $scope.availabilityObject.sku = slel.Sku;\r\n                    $scope.availabilityObject.option1Name = slel.Option1Name;\r\n                    $scope.availabilityObject.option2Name = slel.Option2Name;\r\n                    $scope.availabilityObject.option3Name = slel.Option3Name;\r\n                    var opts = {};\r\n                    if (isFamily !== 1)\r\n                        opts = {\r\n                            option1: slel.Option1,\r\n                            option2: slel.Option2,\r\n                            option3: slel.Option3\r\n                        };\r\n\r\n                    if (!!slel.Option3)\r\n                        $scope.availabilityObject.maxLevel = 3;\r\n                    else if (!!slel.Option2)\r\n                        $scope.availabilityObject.maxLevel = 2;\r\n                    else if (!!slel.Option1)\r\n                        $scope.availabilityObject.maxLevel = 1;\r\n                    else\r\n                        $scope.availabilityObject.maxLevel = 0;\r\n\r\n                    $rootScope.$broadcast('showAvailabilityCheckDlg', opts);\r\n                };\r\n\r\n                $scope.processItem = function (e, elID, productID, isFamily, isQuickKey) {\r\n\r\n                    if (isFamily) {\r\n                        if ((!$scope.currentProductFamily || $scope.currentProductFamily.elementID != elID)) {\r\n                            //$rootScope.$broadcast('popover.dialog.hide');\r\n                            $rootScope.$broadcast('modal.dialog.hide');\r\n                        } else\r\n                            return;\r\n\r\n                        if (isQuickKey === true) {\r\n                            $scope.quickKey = productID;\r\n                            $scope.searchType = 'quickKey';\r\n                            $scope.search();\r\n                            return;\r\n                        }\r\n\r\n                        $.blockUI();\r\n\r\n                        // go down to products in family\r\n                        productsService.getFamilySearchFull(productID)\r\n                            .then(function (res) {\r\n                                var slel = $scope.searchItems.filter(function (el) {\r\n                                    return el.ProductID == productID;\r\n                                })[0];\r\n\r\n                                slel.OutletName = 'Main Store';\r\n                                $scope.availabilityObject = {\r\n                                    productID: productID,\r\n                                    isFamily: true,\r\n                                    option1: null,\r\n                                    option2: null,\r\n                                    option3: null,\r\n                                    option1Name: slel.Option1Name,\r\n                                    option2Name: slel.Option2Name,\r\n                                    option3Name: slel.Option3Name,\r\n                                    name: slel.Name,\r\n                                    sku: slel.Sku,\r\n                                    checkData: [slel]\r\n                                };\r\n\r\n                                // build tree from data by options\r\n                                var tree = {};\r\n                                var optionLevels = [];\r\n\r\n                                res.sort(sortProducts);\r\n\r\n                                var maxLevel = 0;\r\n\r\n                                $.each(res, function (idx, el) {\r\n                                    if (idx == 0) {\r\n                                        optionLevels = [];\r\n\r\n                                        if (!!el.Option1Name) optionLevels.push(el.Option1Name);\r\n                                        if (!!el.Option2Name) optionLevels.push(el.Option2Name);\r\n                                        if (!!el.Option3Name) optionLevels.push(el.Option3Name);\r\n                                    }\r\n\r\n                                    if (!!el.Option1) {\r\n                                        if (maxLevel < 1)\r\n                                            maxLevel = 1;\r\n\r\n                                        if (!!el.Option2) {\r\n                                            if (maxLevel < 2)\r\n                                                maxLevel = 2;\r\n\r\n                                            if (!tree[el.Option1]) tree[el.Option1] = {};\r\n                                            var o1 = tree[el.Option1];\r\n\r\n                                            if (!!el.Option3) {\r\n                                                if (maxLevel < 3)\r\n                                                    maxLevel = 3;\r\n\r\n                                                if (!o1[el.Option2]) o1[el.Option2] = {};\r\n                                                var o2 = o1[el.Option2];\r\n\r\n                                                o2[el.Option3] = new OptionsTreeItem(el);\r\n                                            } else {\r\n                                                o1[el.Option2] = new OptionsTreeItem(el);\r\n                                            }\r\n                                        } else {\r\n                                            tree[el.Option1] = new OptionsTreeItem(el);\r\n                                        }\r\n                                    }\r\n                                });\r\n\r\n                                $scope.availabilityObject.maxLevel = maxLevel;\r\n\r\n                                $scope.currentProductFamily = {\r\n                                    elementID: elID,\r\n                                    data: tree,\r\n                                    levels: optionLevels\r\n                                };\r\n\r\n                                $.unblockUI();\r\n                                $scope.showProductOptionsDlg(elID);\r\n                            })\r\n                            .finally(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                        //            $scope.page = 1;\r\n                    } else {\r\n                        $rootScope.$broadcast('popover.dialog.hide');\r\n                        $scope.currentProductFamily = null;\r\n\r\n                        // add product into payment\r\n                        $scope.addPaymentItem(productID);                        \r\n                        $scope.scrollToAddedPaymentItem();\r\n                    }\r\n\r\n                    console.log('$scope.processItem finished: ' + Date.now());\r\n\r\n                };\r\n\r\n                $scope.addImages = function (data) {\r\n                    var arr = [];\r\n                    var arr2 = [];\r\n                    $.each(data, function (idx, el) {\r\n                        if (el.isFamily) {\r\n                            arr2.push(el.ProductID);\r\n                        } else {\r\n                            arr.push(el.ProductID);\r\n                        }\r\n                    });\r\n\r\n                    productsService.getProductImages(true, arr,\r\n                        function (productID, img) {\r\n                            $.each($scope.searchItems, function (idx, el) {\r\n                                if (el.ProductID == productID) {\r\n                                    $.extend(el, {\r\n                                        image: img\r\n                                    });\r\n                                    return false;\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                    productsService.getProductImages(false, arr2,\r\n                        function (productID, img) {\r\n                            $.each($scope.searchItems, function (idx, el) {\r\n                                if (el.ProductID == productID) {\r\n                                    $.extend(el, {\r\n                                        image: img\r\n                                    });\r\n                                    return false;\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                };\r\n\r\n                $scope.productFilter = function (arr, productID) {\r\n                    var item = null;\r\n                    $.each(arr, function (idx, el) {\r\n                        if (el.ProductID == productID) {\r\n                            item = {};\r\n                            angular.copy(el, item);\r\n                            item.DefaultPrice = el.Price;\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    return item;\r\n                };\r\n\r\n                $scope.checkOutItemsFilter = function (arr, productID, serialNumber, giftCardCode, isReturn) {\r\n                    var item = null;\r\n                    $.each(arr, function (idx, el) {\r\n                        if (el.ProductID == productID && el.CanEdit !== false &&\r\n                            (el.ProductType !== ProductType.GiftCard || el.GiftCardCode == giftCardCode) &&\r\n                            (!serialNumber || !serialNumber.value || serialNumber.value === el.SerialNumber) &&\r\n                            (isReturn === undefined || isReturn === el.Return)\r\n                            ) {\r\n                            item = el;\r\n                            return false;\r\n                        }\r\n                    });\r\n                    return item;\r\n                };\r\n\r\n                $scope.changePage = function (page) {\r\n                    $.blockUI();\r\n\r\n                    if (!$scope.isInFamily) {\r\n                        var QuickKeySearch = $scope.searchType == 'quickKeySearch' ? true : false;\r\n                        productsService.getSearchPage(page - 1, $scope.pageSize, QuickKeySearch).then(function (res) {\r\n                                $scope.searchItems = res.data;\r\n                                $scope.currentPage = res.page;\r\n                                // $scope.addImages(res.data);\r\n                                $timeout(function () {\r\n                                    fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                                }, 100);\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('image.src.update');\r\n                                });\r\n                            })\r\n                            .finally(function () {\r\n                                $scope.hideNoProdMessage = false;\r\n                                $.unblockUI();\r\n                            });\r\n                    } else {\r\n                        productsService.getFamilySearchPage(page - 1, $scope.pageSize).then(function (res) {\r\n                                $scope.searchItems = res.data;\r\n                                $scope.currentPage = res.page;\r\n                                // $scope.addImages(res.data);\r\n                                $timeout(function () {\r\n                                    fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                                }, 100);\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('image.src.update');\r\n                                });\r\n                            })\r\n                            .finally(function () {\r\n                                $scope.hideNoProdMessage = false;\r\n                                $.unblockUI();\r\n                            });\r\n                    }\r\n                };\r\n\r\n                // checkout section\r\n                $scope.cleanSale = function (noClean) {\r\n\r\n                    $scope.subType = null;\r\n                    $scope.operationName = 'Pay';\r\n                    $scope.canChangeCustomer = true;\r\n                    $scope.isFastRefund = false;\r\n                    $scope.canChangeSalesRepresentative = true;\r\n                    $scope.canParkSale = true;\r\n                    $scope.canAddDiscount = configService.canGiveDiscount;\r\n                    $scope.canChangePrice = configService.canChangePrice;\r\n                    $scope.canInsertCheckoutItems = true;\r\n                    $scope.saleType = null;\r\n                    $scope.refundNeedCustomer = false;\r\n                    $scope.canDiscardSale = true;\r\n                    $scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n                    $scope.showLoyalty = configService.enableLoyalty;\r\n                    $scope.paymentValidation = {\r\n                        cashAmount: 0,\r\n                        creditCardAmount: 0,\r\n                        giftCardAmount: 0,\r\n                        loyaltyPointsAmount: 0,\r\n                        storeCreditAmount: 0,\r\n                        cashSurchargeAmount: 0,\r\n                        storeCreditSurchargeAmount: 0\r\n                    };\r\n                    $scope.paymentValidation.cardPayments = {};\r\n                    $scope.isValidAmount = true;\r\n                    if (CalculatorHelperService.useNewCalculation(null)) {\r\n                        $scope.currentSale = CalculatorHelperService.CreateNewSale();\r\n                    } else {\r\n                        $scope.currentSale = {\r\n                            ID: uuid2.newguid(),\r\n                            Date: new Date(),\r\n                            ReturnID: null,\r\n                            CheckoutItems: [],\r\n                            Payments: [], // all payments for this sale with payment method guid references\r\n                            isDiscountPercent: false,\r\n                            Discount: 0,\r\n                            DiscountTax: 0,\r\n                            comment: '',\r\n                            RealPaySum: 0,\r\n                            CalculatedTax: 0,\r\n                            customer: {\r\n                                ID: null\r\n                            },\r\n                            CheckoutItemCount: 0,\r\n                            Balance: 0,\r\n                            LoyaltyPoints: 0,\r\n                            LoyaltyPointsTotal: 0,\r\n                            OrderNumber: '000000',\r\n                            ClearOrderNumber: '000000',\r\n                            OrderType: '',\r\n                            CashChangeAmount: 0,\r\n                            itemDiscount: 0,\r\n                            selectedCoupon: null,\r\n                            manuallyAppliedDiscount: false\r\n                        };\r\n                    }\r\n\r\n                    if (noClean !== true)\r\n                        helperService.storeCurrentSale(null);\r\n\r\n                    clearLLDiscount();\r\n\r\n                    //$timeout(function () {\r\n                        secondTerminalService.update($scope, 'sale');\r\n                    //});\r\n                };\r\n\r\n                $scope.cleanSearch = function () {\r\n                    $scope.searchItems = null;\r\n                    $scope.searchType = '';\r\n                };\r\n\r\n                $scope.cleanSale(true);\r\n\r\n                $scope.dialogMode = 'stocktakeLock';\r\n                $scope.stocktakeProductToCheck = null;\r\n                $scope.callbackModalCancel = function () {\r\n                    $scope.insideStocktakeCheck = false;\r\n\r\n                    if ($scope.dialogMode == 'restore-cardpay-sale') {\r\n                        delete $scope.restoredSaleObj;\r\n                        helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                    }\r\n                };\r\n\r\n                $scope.callbackModal = function () {\r\n\r\n                    if ($scope.dialogMode == 'stocktakeLock' && !!$scope.stocktakeProductToCheck) {\r\n                        // $scope.stocktakeProductToCheck.el.StocktakeLocked = false;\r\n                        $scope.addPaymentItem($scope.stocktakeProductToCheck.obj,\r\n                            $scope.stocktakeProductToCheck.isElement,\r\n                            $scope.stocktakeProductToCheck.returnElemen, null, $scope.stocktakeProductToCheck.amount);\r\n                    } else if ($scope.dialogMode == 'partialPayment') {\r\n                        $scope.cancelPayment();\r\n                    } else if ($scope.dialogMode == 'vantivDeclinePayment') {\r\n                        // print decline vantiv receipt\r\n                        reportService.printVantivDeclineReceipt($scope, $scope.declineTransactionData, $scope.currency_symbol);\r\n                    } else if ($scope.dialogMode == 'giftCardRemoveItem') {\r\n                        $scope.removePaymentItem($scope.checkOutItem.ID);\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                    } else if ($scope.dialogMode == 'serialNumberProductRemove') {\r\n                        $scope.removePaymentItem($scope.checkOutItem.ID);\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                    } else if ($scope.dialogMode == 'ProductRemove') {\r\n                        $scope.removePaymentItem($scope.checkOutItem.ID);\r\n                    } else if ($scope.dialogMode == 'remove-customer') {\r\n                        $scope.removeCustomerCallback();\r\n                    } else if ($scope.dialogMode == 'remove-salesrep') {\r\n                        $scope.removeSalesRepCallback();\r\n                    } else if ($scope.dialogMode == 'loyaltypartialpayment') {\r\n                        $scope.loyaltyPay(true);\r\n                    } else if ($scope.dialogMode == 'storecreditpartialpayment') {\r\n                        $scope.storeCreditsPay(true);\r\n                    } else if ($scope.dialogMode == 'removeOnlinePaymentMethods') {\r\n                        $scope.removeOnlinePaymentMethods();\r\n                    } else if ($scope.dialogMode == 'discard-sale') {\r\n                        $scope.cleanSale();\r\n                    } else if ($scope.dialogMode == 'remoteprocessing') {\r\n                        $scope.robj.isRemotedlyProcessed = true;\r\n                    } else if ($scope.dialogMode == 'restore-cardpay-sale') {\r\n                        // process sale as it was completed\r\n                        //            var saleObj = $scope.restoredSaleObj;\r\n                        $scope.creditCardPay();\r\n                    }\r\n\r\n                    $scope.insideStocktakeCheck = false;\r\n                };\r\n\r\n                $scope.customModalDlg2Caption = null;\r\n                $scope.customModalDlg2Text = null;\r\n                $scope.customModalDlg2Buttons = [];\r\n\r\n                $scope.insideStocktakeCheck = false;\r\n\r\n                // support old/new sale style\r\n                $scope.addPaymentItem = function (obj, isElement, returnElement, skipGiftCardDlg, amount) {\r\n\r\n                    console.log('addPaymentItem entering');\r\n\r\n                    let isReturn  = $scope.saleType === 'standaloneExchange' && $scope.noReceiptExchangeMode === 'Return';\r\n\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!$scope.canInsertCheckoutItems) {\r\n                        errorService.showError(gettextCatalog.getString(\"Sale cannot be modified.\"));\r\n                        return;\r\n                    }\r\n\r\n                    if ($scope.saleType === 'return') {\r\n                        $scope.operationName = 'Exchange';\r\n                    }\r\n                    $scope.stocktakeProductToCheck = null;\r\n\r\n                    var productID = null;\r\n                    var el = null;\r\n\r\n                    if (!!obj && (obj instanceof OptionsTreeItem)) {\r\n                        productID = obj.el.ProductID;\r\n                        //el = obj.el;\r\n                        el = $scope.productFilter([obj.el], productID);\r\n                    } else if (isElement === true) {\r\n                        productID = obj.ProductID;\r\n                        el = obj;\r\n                    } else {\r\n                        productID = obj;\r\n                        el = $scope.productFilter($scope.searchItems, productID);\r\n                    }\r\n\r\n                    // check for stocktake lock\r\n                    if (!$scope.insideStocktakeCheck && !!el && !!el.StocktakeLocked && el.StocktakeLocked.toString() == \"true\" && !returnElement) {\r\n                        // check if we have this item in checkout\r\n                        var canCheck = true;\r\n\r\n                        if (!!$scope.currentSale.CheckoutItems) {\r\n                            var flt = $scope.currentSale.CheckoutItems.filter(function (p) {\r\n                                return p.ProductID === el.ProductID;\r\n                            });\r\n\r\n                            canCheck = flt.length == 0;\r\n                        }\r\n\r\n                        if (canCheck) {\r\n                            $scope.stocktakeProductToCheck = {\r\n                                el: el,\r\n                                obj: obj,\r\n                                isElement: isElement,\r\n                                returnElement: returnElement,\r\n                                amount: amount\r\n                            };\r\n\r\n                            $scope.insideStocktakeCheck = true;\r\n                            $scope.dialogMode = 'stocktakeLock';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('The selected item appears on the list of the current stocktake. To avoid incorrect counts you may need to cancel the sale of the item.'),\r\n                                gettextCatalog.getString('Continue'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    if (!!el && el.ProductType === 'GiftCard' && skipGiftCardDlg !== true) {\r\n                        // show dialog\r\n                        $scope.showGiftCardDialog(obj, isElement, returnElement, el);\r\n                        return;\r\n                    }\r\n\r\n                    if (!!el) {\r\n\r\n                        if (el.CostingMethod === \"FESN\" || el.CostingMethod === \"SN\" || el.CostingMethod === \"FISN\") {\r\n                            if (!$scope.scanSerialNumberWithCallback || !$scope.scanSerialNumberWithCallback.skipScanDialog) {\r\n                                $scope.showScanSerialNumberDialog({\r\n                                    itemID: el.ProductID,\r\n                                    skipScanDialog: true,\r\n                                    callback: function () {\r\n                                        $scope.addPaymentItem(obj, isElement, returnElement, skipGiftCardDlg, amount);\r\n                                        $scope.scrollToAddedPaymentItem();\r\n                                    }\r\n                                });\r\n                                return;\r\n                            }\r\n                        }\r\n\r\n\r\n                        var elAdded = $scope.checkOutItemsFilter($scope.currentSale.CheckoutItems, productID, $scope.scanedSerialNumber,\r\n                            !!el && el.ProductType == ProductType.GiftCard ? $scope.currentGiftCardProduct.giftCardCode : null, isReturn);\r\n\r\n                        if (el.ProductType === 'GiftCard') {\r\n                            if (!!elAdded && elAdded.GiftCardCode === $scope.currentGiftCardProduct.giftCardCode) {\r\n                                errorService.showError(gettextCatalog.getString(\"The same gift card has been already added to the checkout.\"));\r\n                                return;\r\n                            } else\r\n                                elAdded = null;\r\n                        }\r\n\r\n                        if (elAdded && elAdded.SerialNumber && $scope.scanedSerialNumber && elAdded.SerialNumber === $scope.scanedSerialNumber.value) {\r\n                            $scope.closeScanSerialNumberDialog(true);\r\n                            errorService.showError(gettextCatalog.getString(\"A product with this serial number has been already added to the checkout.\"));\r\n                            return;\r\n                        } else if (elAdded && elAdded.SerialNumber && !returnElement) {\r\n                            elAdded = null;\r\n                        }\r\n\r\n                        var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n                        var taxObject = saleService.getTaxObject($scope.currentSale, el);\r\n\r\n                        if (el.Price < 0) {\r\n                            errorService.showError(gettextCatalog.getString(\"A product with a negative price cannot be added to the checkout.\"));\r\n                            return;\r\n                        }\r\n\r\n                        var barcode = productsService.weightBasedBarcode;\r\n                        var cnt = barcodeService.getWeightAmount(el, amount, barcode);\r\n                        var isPriceBased = !amount ? false :\r\n                            configService.advancedBarcodeMode === 2 ? true :\r\n                            false;\r\n\r\n                        if (configService.advancedBarcodeMode === 3 && barcode) { // DS1\r\n                            if (barcode.IsDS1) {\r\n                                isPriceBased = barcode.IsDS1PriceBased === true;\r\n                            }\r\n                        }\r\n\r\n                        var revertPrice = $scope.saleType === 'standaloneReturn' ||\r\n                            $scope.saleType === 'standaloneExchange' && $scope.noReceiptExchangeMode === 'Return';\r\n\r\n                        if (!!elAdded &&\r\n                            elAdded.CanEdit !== false &&\r\n                            returnElement !== true) {\r\n\r\n\r\n                            if (isPriceBased) {\r\n                                barcodeService.setPriceBasedItemValue(elAdded, amount);\r\n                            } else {\r\n                                 // has payment line already. Simply increment count\r\n                                elAdded.PriceBasedValue = null;\r\n                                elAdded.Count += cnt * (revertPrice ? -1 : 1);\r\n                                elAdded.Count = helperService.DEARRound(elAdded.Count, 4);\r\n                            }\r\n\r\n                            if (!isNewSale) {\r\n                                var priceWithTax = $scope.posTaxInclucive ? el.Price : el.Price + calculateTax(taxObject, el.Price);\r\n                                elAdded.Tax = calculateTax(taxObject, el.Price * elAdded.Count);\r\n                                elAdded.Amount = elAdded.Price * elAdded.Count;\r\n                                elAdded.LoyaltyPoints = loyaltyEarning ? elAdded.PriceWithTax * elAdded.Count * loyaltyEarning : 0;\r\n                            } else\r\n                                CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n                        } else {\r\n                            var pp = $scope.chooseProductTierPrice(el);\r\n\r\n                            // add new payment line\r\n\r\n                            var price = revertPrice ? -pp : pp;\r\n                            var priceWithTax = $scope.posTaxInclucive ? pp : pp + calculateTax(taxObject, pp);\r\n                            var priceWithT = revertPrice ? -priceWithTax : priceWithTax;\r\n                            var pl = {\r\n                                ID: uuid2.newguid(),\r\n                                ProductID: el.ProductID,\r\n                                Tags: el.Tags,\r\n                                BrandID: el.BrandID,\r\n                                CategoryID: el.CategoryID,\r\n                                FamilyID: el.FamilyID,\r\n                                Name: el.Name,\r\n                                Count: cnt,\r\n                                Price: price, //price,\r\n                                Amount: price * cnt,\r\n                                Discount: 0, //discount,\r\n                                Note: '',\r\n                                Tax: calculateTax(taxObject, price * cnt),\r\n                                TaxRuleID: taxObject.ruleID,\r\n                                LoyaltyPoints: loyaltyEarning ? (priceWithT * loyaltyEarning * cnt) : 0,\r\n                                LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                                PriceWithTax: priceWithT,\r\n                                CanEdit: true,\r\n                                CanDelete: true,\r\n                                SaleType: 'sale',\r\n                                ProductTaxString: (el.Taxes !== 'null' && el.Taxes && typeof el.Taxes === \"string\") ? el.Taxes : null,\r\n                                Taxes: taxObject,\r\n                                LoyaltyEarning: el.LoyaltyEarning,\r\n                                BasePrice: price,\r\n                                BasePriceWithDiscount: price,\r\n                                Sku: el.Sku ? el.Sku : el.ProductCode,\r\n                                BarCode: el.BarCode ? el.BarCode : el.Barcode,\r\n                                ImageID: el.ImageID,\r\n                                Discounts: typeof el.Discounts === \"string\" ? JSON.parse(el.Discounts) : el.Discounts,\r\n                                Option1: el.Option1,\r\n                                Option2: el.Option2,\r\n                                Option3: el.Option3,\r\n                                ProductShortDescription: el.ProductShortDescription,\r\n                                ProductType: el.ProductType,\r\n                                SerialNumber: $scope.scanedSerialNumber && $scope.scanedSerialNumber.value ? $scope.scanedSerialNumber.value : null,\r\n                                CF1: el.CF1,\r\n                                CF2: el.CF2,\r\n                                CF3: el.CF3,\r\n                                CF4: el.CF4,\r\n                                CF5: el.CF5,\r\n                                CF6: el.CF6,\r\n                                CF7: el.CF7,\r\n                                CF8: el.CF8,\r\n                                CF9: el.CF9,\r\n                                CF10: el.CF10,\r\n                                DefaultPrice: el.DefaultPrice\r\n                            };\r\n\r\n                            if (!!el.ExtraInfo) { // ExtraInfo exists only in mobile version\r\n                                var extra = JSON.parse(el.ExtraInfo);\r\n                                angular.extend(pl, extra);\r\n                            } else {\r\n                                pl.Price1 = el.Price1;\r\n                                pl.Price2 = el.Price2;\r\n                                pl.Price3 = el.Price3;\r\n                                pl.Price4 = el.Price4;\r\n                                pl.Price5 = el.Price5;\r\n                                pl.Price6 = el.Price6;\r\n                                pl.Price7 = el.Price7;\r\n                                pl.Price8 = el.Price8;\r\n                                pl.Price9 = el.Price9;\r\n                                pl.Price10 = el.Price10;\r\n                            }\r\n\r\n                            if (isPriceBased) {\r\n                                pl.Amount = 0;\r\n                                barcodeService.setPriceBasedItemValue(pl, amount);\r\n                            }\r\n\r\n                            if (revertPrice) {\r\n                                pl.PriceWithDiscount = el.Price;\r\n\r\n                                if(isReturn)\r\n                                {\r\n                                    pl.return = true;\r\n                                }\r\n                            }\r\n\r\n                            $scope.scanedSerialNumber = {\r\n                                value: \"\"\r\n                            };\r\n                            $scope.scanSerialNumberWithCallback = {};\r\n\r\n                            if (el.ProductType === 'GiftCard') {\r\n                                pl.GiftCardCode = $scope.currentGiftCardProduct.giftCardCode;\r\n                                pl.GiftCardExpirationDate = $scope.currentGiftCardProduct.expirationDate;\r\n                                pl.Price = Number($scope.currentGiftCardProduct.amount);\r\n                                pl.Amount = pl.Price;\r\n                                pl.BasePrice = pl.Price;\r\n                                pl.BasePriceWithDiscount = pl.Price;\r\n\r\n                                priceWithTax = $scope.posTaxInclucive ? pl.Price : pl.Price + calculateTax(taxObject, pl.Price);\r\n\r\n                                pl.PriceWithTax = revertPrice ? -priceWithTax : priceWithTax;\r\n                                pl.LoyaltyPoints = loyaltyEarning ? (pl.PriceWithTax * loyaltyEarning) : 0;\r\n                                if (isNewSale)\r\n                                    pl.LoyaltyPointsEarning = !loyaltyEarning ? 0 : loyaltyEarning;\r\n                            }\r\n\r\n                            if (returnElement === true) {\r\n                                return elAdded;\r\n                            }\r\n\r\n                            if (helperService.showNewCheckoutUI()) {\r\n                                if (revertPrice)\r\n                                    pl.Count *= -1;\r\n                                CalculatorHelperService.addCheckoutItemsToSale($scope.currentSale, pl, saleService.getProductDeals(), $scope);\r\n                            } else\r\n                                $scope.currentSale.CheckoutItems.push(pl);\r\n                        }\r\n\r\n                        $timeout(function () {\r\n                            $scope.showSearchResult = false;\r\n                        });\r\n                    }\r\n\r\n                    if (!helperService.showNewCheckoutUI())\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n\r\n                    if ($scope.saleType === 'standaloneReturn' || $scope.saleType === 'standaloneExchange') {\r\n                        $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                            if (!isNewSale) {\r\n                                el.LoyaltyEarning = \"\";\r\n                                el.LoyaltyPoints = 0;\r\n                            }\r\n\r\n                            el.LoyaltyPointsEarning = 0;\r\n                        });\r\n                    }\r\n\r\n                    $scope.updateSizesInCheckout();\r\n                };\r\n\r\n                $scope.changeItemCount = function (item, leaveTaxAsIs) {\r\n                    item.Count = helperService.DEARRound(item.Count, configService.decimalPlaces);\r\n\r\n                    if (!helperService.showNewCheckoutUI()) {\r\n\r\n                        var loyaltyEarning = parseFloat(item.LoyaltyEarning);\r\n                        item.LoyaltyPoints = loyaltyEarning ? item.PriceWithTax * item.Count * item.LoyaltyEarning : 0;\r\n                        var price = item.BasePrice;\r\n\r\n                        if (item.SaleType !== \"customsale\") {\r\n                            var taxObject = item.Taxes;\r\n\r\n                            item.Tax = calculateTax(taxObject, item.Count * (price - item.itemDiscount));\r\n                        }\r\n\r\n                        item.Amount = item.Price * item.Count;\r\n                        $scope.currentSale.CheckoutItemCount = $scope.currentSale.CheckoutItems.length;\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope, leaveTaxAsIs);\r\n                    } else {\r\n                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n                        \r\n                        if ($scope.currentSale.Discount) {\r\n                            $scope.currentSale.Discount = helperService.DEARRound($scope.currentSale.Discount, 2);\r\n                        }\r\n                    }\r\n                    $scope.$broadcast('sale.update');\r\n                    $scope.updateSizesInCheckout();\r\n                };\r\n\r\n\r\n                function calculatePriceWithDiscount(discountRules, count, price) {\r\n                    var discount = filterDiscount(discountRules, count);\r\n                    if (discount !== null) {\r\n                        var value = discount.amount;\r\n                        var discountType = discount.type;\r\n                        switch (discountType) {\r\n                            case 'Discount Amount':\r\n                                return price - value;\r\n                            case '% Discount':\r\n                                return price * (100 - value) / 100;\r\n                            case 'Markup Amount':\r\n                                return price + value;\r\n                            case '% Markup':\r\n                                return price + price * value / 100;\r\n                            case 'Price Override':\r\n                                return value;\r\n                            case 'Flat Amount':\r\n                                if (count === 0) {\r\n                                    return value;\r\n                                } else {\r\n                                    return value / count;\r\n                                }\r\n                                break;\r\n                            default:\r\n                                return price;\r\n                        }\r\n                    } else {\r\n                        return price;\r\n                    }\r\n                }\r\n\r\n                function filterDiscount(arr, value) {\r\n                    var discount = null;\r\n                    $.each(arr, function (idx, el) {\r\n                        if ((el.minValue <= value && el.maxValue >= value) || (el.minValue <= value && el.maxValue === 0)) {\r\n                            discount = el;\r\n                            return false;\r\n                        }\r\n                    });\r\n                    return discount;\r\n                }\r\n\r\n\r\n                var calculateTax = saleService.calculateTax;\r\n\r\n                $scope.removePaymentItem = function (ID) {\r\n                    var isNewFormat = helperService.showNewCheckoutUI();\r\n             \r\n                    $scope.currentSale.CheckoutItems = $scope.currentSale.CheckoutItems.filter(function (el) {return el.ID !== ID;});\r\n\r\n                    var hasReturnItems = false;\r\n                    var hasBuyItems = false;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        if (!isNewFormat) {\r\n                            if (el.Price > 0) {\r\n                                hasBuyItems = true;\r\n                            } else if (el.Price < 0) {\r\n                                hasReturnItems = true;\r\n                            }\r\n                        } else {\r\n                            if (el.FinalAmount > 0) {\r\n                                hasBuyItems = true;\r\n                            } else if (el.FinalAmount < 0) {\r\n                                hasReturnItems = true;\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    if ($scope.saleType === 'standaloneReturn')\r\n                        $scope.operationName = 'Refund';\r\n                    else if ($scope.saleType === 'standaloneExchange')\r\n                        $scope.operationName = 'Exchange';\r\n                    else {\r\n                        if (hasBuyItems && hasReturnItems)\r\n                            $scope.operationName = 'Exchange';\r\n                        if (!hasBuyItems && hasReturnItems)\r\n                            $scope.operationName = 'Refund';\r\n                        if (!hasReturnItems)\r\n                            $scope.operationName = 'Pay';\r\n                    }\r\n\r\n                    if (isNewFormat)\r\n                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n                    else\r\n                        helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                };\r\n\r\n                $scope.showCollapse = function (event, elID) {\r\n                    var el = $(event.currentTarget);\r\n                    var prnID = el.data('parent');\r\n                    var prn = $(prnID);\r\n\r\n                    var lst = prn.find('[aria-expanded=\"true\"]');\r\n                    lst.closest('.paymentRow').removeClass('borderedExpanded');\r\n                    lst.collapse('hide');\r\n\r\n                    $(elID).collapse('toggle');\r\n                    var ex = $(elID).attr('aria-expanded');\r\n                    prn = $(elID).closest('.paymentRow');\r\n\r\n                    if (ex == 'true')\r\n                        prn.addClass('borderedExpanded');\r\n                    else\r\n                        prn.removeClass('borderedExpanded');\r\n\r\n                    return false;\r\n                };\r\n\r\n                $scope.subTotalSum = saleService.subTotalSum;\r\n\r\n\r\n                var calculateTotalTax = saleService.calculateTotalTax;\r\n\r\n                $scope.totalDiscount = function () {\r\n                    var discount = 0;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        if (el.Count > 0) {\r\n                            discount += el.Discount * el.Count;\r\n                        }\r\n                    });\r\n\r\n                    return discount;\r\n                };\r\n\r\n\r\n                $scope.totalLoyaltyPoints = saleService.totalLoyaltyPoints;\r\n\r\n                var totalSumWithTax = saleService.totalSumWithTax;\r\n\r\n                $scope.totalSum = function (item, excludeCalculatedSurcharges) {\r\n                    return saleService.totalSum(item, $scope.posTaxInclucive, excludeCalculatedSurcharges);\r\n                };\r\n\r\n                $scope.discardSale = function () {\r\n\r\n                    if (!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length == 0 || $scope.canDiscardSale === false) {\r\n                        return;\r\n                    }\r\n\r\n\r\n                    // check here if it's parked order and remove it from local and remote db\r\n                    var cSearch = helperService.getSearchParams();\r\n                    $scope.currentSale.isParked = cSearch.isParked == true;\r\n\r\n                    if ($scope.currentSale.isParked === true) {\r\n                        $scope.showDiscardDialog();\r\n                    } else {\r\n                        $scope.dialogMode = 'discard-sale';\r\n                        helperService.showCustomDialog(gettextCatalog.getString(''),\r\n                            gettextCatalog.getString('Would you like to clear the current sale?'),\r\n                            gettextCatalog.getString('Clear sale'));\r\n                    }\r\n                };\r\n\r\n\r\n                $scope.totalCheckoutItems = function () {\r\n                    var count = 0;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        idx = (el.Count + '').indexOf('.');\r\n                        count += idx < 0 ? +el.Count : 1; // treat fractional quantities as 1 unit\r\n                    });\r\n\r\n                    return count;\r\n                };\r\n\r\n                $scope.customPaymentMethods = [];\r\n\r\n                $scope.getCustomPaymentMethod = function (id) {\r\n                    var lst = $scope.customPaymentMethods.filter(function (el) {\r\n                        return el.paymentProcessorID == id;\r\n                    });\r\n\r\n                    return lst.length > 0 ? lst[0] : null;\r\n                };\r\n\r\n                $scope.getCustomPaymentMethodByShortName = function (shortName) {\r\n                    var lst = $scope.customPaymentMethods.filter(function (el) {\r\n                        return el.loweredPaymentMethodName == shortName;\r\n                    });\r\n\r\n                    return lst.length > 0 ? lst[0] : null;\r\n                };\r\n\r\n                function getPaymentMethods() {\r\n                    configService.getPaymentMethods($scope);\r\n                }\r\n\r\n                $scope.isDiscountInvalid = function () {\r\n                    return saleService.isDiscountInvalid === true;\r\n                };\r\n\r\n                $scope.initSummaryValues = function () {\r\n                    // will be set to true if rounded cash == 0 and we should continue\r\n                    $scope.currentSale.processZero = false;\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if ($scope.saleType === 'standaloneExchange')\r\n                    {\r\n                        $scope.currentSale.GroupedSale =\r\n                        {\r\n                            TotalSurcharge: 0, /// ? // including refunded surcharges via cash/store credits\r\n                            GhostSurcharge: 0,\r\n                            TotalSale: 0, /// ?\r\n                            ExchangeAmount: 0,\r\n                            PaymentsMap: {},\r\n                            LoyaltyRefundCoeff: 1 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n                        };\r\n                    }\r\n\r\n                    if ($scope.operationName === 'Exchange')\r\n                        saleService.addExchangeAmountToGroupedSale($scope.currentSale, $scope.posTaxInclucive);\r\n\r\n                    if (!isNewSale) {\r\n                        $scope.updateCheckoutProductPrice($scope.currentSale, true);\r\n                        $scope.currentSale.TotalForBackSide = $scope.totalSum($scope.currentSale);\r\n                        $scope.currentSale.Total = $scope.totalSum($scope.currentSale, true);\r\n                        saleService.updateBasePriceWithDiscount($scope.currentSale);\r\n                        saleService.updatePriceWithTax($scope.currentSale);\r\n                    }\r\n\r\n                    getPaymentMethods();\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.fitFontSize('btnPayParent', 'btnPay', 13.5);\r\n                    }, 500);\r\n\r\n                    if (!isNewSale) {\r\n                        $scope.currentSale.SubTotal = $scope.subTotalSum($scope.currentSale.CheckoutItems, $scope.currentSale);\r\n                        $scope.currentSale.Balance = $scope.totalSum($scope.currentSale, true);\r\n                        $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                    }\r\n\r\n                    // if we already have customer.LoyaltyPoints - it means we continue so do not update values\r\n                    if (!isNewSale) {\r\n                        if (!$scope.currentSale.LoyaltyPoints || $scope.saleType === 'return') {\r\n                            $scope.currentSale.LoyaltyPointsTotal = saleService.calculateLoyaltyEx($scope.currentSale, $scope.currentSale.Total); // $scope.totalLoyaltyPoints($scope.currentSale.CheckoutItems);\r\n                            $scope.currentSale.LoyaltyPoints = 0;\r\n\r\n                            $scope.currentSale.CustomerLoyaltyPoints = $scope.currentSale.customer.LoyaltyPoints ? $scope.currentSale.customer.LoyaltyPoints : 0;\r\n                            $scope.currentSale.CustomerLoyaltyPointsUsed = 0;\r\n                        }\r\n                    } else {\r\n                        CalculatorHelperService.calculatePayments($scope.currentSale);\r\n                    }\r\n\r\n                    calculateSums();\r\n\r\n                    $scope.currentSale.DateNative = new Date();\r\n                    $scope.currentSale.Date = $scope.currentSale.DateNative.toDateString();\r\n\r\n                    var lastRegistryPiece = configService.lastRegistryID.split('-');\r\n\r\n                    if (!$scope.currentSale.ClearOrderNumber ||\r\n                        parseInt($scope.currentSale.ClearOrderNumber) < 1 ||\r\n                        $scope.saleType === 'standaloneReturn') {\r\n                        if ($scope.saleType !== 'standaloneReturn') {\r\n                            saleService.getNextSequence(configService.lastOutletID, configService.lastRegistryID).then(function (data) {\r\n\r\n                                $scope.currentSale.OrderNumber = (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                                    data + (configService.registrySuffix ? configService.registrySuffix : \"\");\r\n                                $scope.currentSale.ClearOrderNumber = data;\r\n                                $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" + Math.floor(Date.now() / 1000).toString(36) + \"-\" + parseInt(data, 10).toString(36);\r\n\r\n                                updateReceipt();\r\n                            });\r\n                        } else {\r\n\r\n                            $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" +\r\n                                Math.floor(Date.now() / 1000).toString(36) + \"-\" +\r\n                                $scope.currentSale.OrderNumber.substring(Math.max(0, $scope.currentSale.OrderNumber.length - 5));\r\n                            updateReceipt();\r\n                        }\r\n                    } else {\r\n                        $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" + Math.floor(Date.now() / 1000).toString(36) + \"-\" + parseInt($scope.currentSale.ClearOrderNumber, 10).toString(36);\r\n                        updateReceipt();\r\n                    }\r\n\r\n                    var total = Math.abs(helperService.DEARRound($scope.currentSale.Total, 2));\r\n                    if ($scope.currentSale.Total < 0) {\r\n                        if (!isNewSale) {\r\n                            if (Math.abs($scope.currentSale.paymentValidation.cashAmount) > total) {\r\n                                $scope.currentSale.paymentValidation.cashAmount = total;\r\n                            }\r\n                            if (Math.abs($scope.currentSale.paymentValidation.creditCardAmount) > total) {\r\n                                $scope.currentSale.paymentValidation.creditCardAmount = total;\r\n                            }\r\n                            if (Math.abs($scope.currentSale.paymentValidation.storeCreditAmount) > total) {\r\n                                $scope.currentSale.paymentValidation.storeCreditAmount = total;\r\n                            }\r\n                            if (Math.abs($scope.currentSale.paymentValidation.loyaltyPointsAmount) > total) {\r\n                                $scope.currentSale.paymentValidation.loyaltyPointsAmount = total;\r\n                            }\r\n\r\n                            $scope.paymentValidation.cashAmount = $scope.currentSale.paymentValidation.cashAmount;\r\n                            $scope.paymentValidation.storeCreditAmount = $scope.currentSale.paymentValidation.storeCreditAmount;\r\n                            $scope.paymentValidation.creditCardAmount = $scope.currentSale.paymentValidation.creditCardAmount;\r\n                            $scope.paymentValidation.cardPayments = $scope.currentSale.paymentValidation.cardPayments;\r\n                            $scope.paymentValidation.customPayments = $scope.currentSale.paymentValidation.customPayments;\r\n                            $scope.paymentValidation.loyaltyPointsAmount = $scope.currentSale.paymentValidation.loyaltyPointsAmount;\r\n\r\n                            $scope.payments = {\r\n                                cash: 0,\r\n                                creditCard: 0,\r\n                                storeCredit: 0,\r\n                                loyaltyPoints: 0\r\n                            };\r\n                        }\r\n\r\n                        $scope.changepPaymentAmount();\r\n\r\n                        if (!isNewSale) {\r\n                            saleService.prepareSurchargeLimits($scope.currentSale.GroupedSale, $scope.paymentValidation);\r\n                            saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments);\r\n                        } else {\r\n                            $scope.paymentValidation = {\r\n                                cashAmount: 0,\r\n                                creditCardAmount: 0,\r\n                                storeCreditAmount: 0,\r\n                                loyaltyPointsAmount: 0,\r\n                                cashSurchargeAmount: 0,\r\n                                storeCreditSurchargeAmount: 0\r\n                            };\r\n\r\n                            $scope.paymentValidation.cashAmount = $scope.currentSale.paymentValidation.cashAmount;\r\n                            $scope.paymentValidation.storeCreditAmount = $scope.currentSale.paymentValidation.storeCreditAmount;\r\n                            $scope.paymentValidation.creditCardAmount = Math.abs($scope.formHolder.sumToPayLeft);// $scope.currentSale.paymentValidation.creditCardAmount;\r\n                            $scope.paymentValidation.cardPayments = $scope.currentSale.paymentValidation.cardPayments;\r\n                            $scope.paymentValidation.customPayments = $scope.currentSale.paymentValidation.customPayments;\r\n                            $scope.paymentValidation.loyaltyPointsAmount = $scope.currentSale.paymentValidation.loyaltyPointsAmount;\r\n\r\n                            if(!Array.isArray($scope.paymentValidation.customPayments)) {\r\n                                $scope.paymentValidation.customPayments = [];\r\n                            }\r\n\r\n                            if(!$scope.paymentValidation.cardPayments) {\r\n                                $scope.paymentValidation.cardPayments = {};\r\n                            }\r\n\r\n//                            $scope.paymentValidation.cardPayments = {};\r\n//                            $scope.paymentValidation.customPayments = [];\r\n\r\n                            $scope.payments = {\r\n                                cash: 0,\r\n                                creditCard: 0,\r\n                                storeCredit: 0,\r\n                                loyaltyPoints: 0,\r\n                                cashSurcharge: 0,\r\n                                storeCreditSurcharge: 0\r\n                            };\r\n                            var selectedItem = $scope.currentSale.SelectedItem;\r\n\r\n                            CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                                selectedItem: selectedItem,\r\n                                paymentValidation: $scope.paymentValidation,\r\n                                operationSubName: $scope.operationSubName,\r\n                                payments: $scope.payments\r\n                            }, StartCalcLevel.RefundLimits);\r\n                        }\r\n\r\n                        showReturnPaymentsDialog();\r\n                    } else {\r\n                        if (loyaltyService.loyaltyEnabled)\r\n                            $scope.canChangeCustomer = false; // disable customer changes if LL is active. This is beause we can add LL discount only manually from checkout page\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payAmountParent', 'payAmount', 18);\r\n                        $timeout(function () {\r\n                            $rootScope.$broadcast('recalculate');\r\n                        }, 100);\r\n\r\n                    }, 100);\r\n                };\r\n\r\n                $scope.goPayment = function (checkAvailability) {\r\n\r\n                    if (!!configService.CanSaleRep) {\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        var salesRepresentative = isNewSale ? $scope.currentSale.SalesRepresentative : $scope.currentSale.salesRepresentative;\r\n                        var isSalesRepresentativeExist = salesRepresentative && salesRepresentative.ID ? true : false;\r\n\r\n                        if ($scope.currentSale && !$scope.currentSale.ReturnID && !isSalesRepresentativeExist) {\r\n                            helperService.showErrorDialog({ title: gettextCatalog.getString('Error'), body: gettextCatalog.getString('Add the sale representative to the sale order') });\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    if(!checkAvailability)\r\n                        checkAvailability = false;\r\n\r\n                    var pr = helperService.resolvePromise(true);\r\n\r\n                    if (loyaltyService.loyaltyEnabled)\r\n                        pr = pr.then(function () {\r\n                            return loyaltyService.getCustomerBalance($scope.currentSale.customer).then(function(r) {\r\n                                try {\r\n                                    updateReceipt();\r\n                                } catch (e) {\r\n                                    console.log(e);\r\n                                }\r\n\r\n                                return r;\r\n                            });\r\n                        });\r\n\r\n                    if (!configService.checkAvailabilityOnCheckout)\r\n                        checkAvailability = false;\r\n\r\n                    if (checkAvailability === true && $scope.operationName === 'Pay' && configService.isOnline === true) {\r\n\r\n                        pr = pr.then(function () {\r\n                            $.blockUI();\r\n                            return productsService.checkCheckoutProductsAvailability($scope.currentSale.CheckoutItems, configService.lastOutletID);\r\n                        }).then(function (resp) {\r\n                            $.unblockUI();\r\n                            if (resp.insufficient === true) {\r\n\r\n                                $scope.insufficientProducts = resp.insufficientProducts;\r\n                                $scope.insufficientQuantitySKUs = resp.insufficientQuantitySKUs;\r\n\r\n                                $scope.showCheckoutProductsAvailabilityInsufficientDialog();\r\n                            } else {\r\n                                $scope.goPayment();\r\n                            }\r\n                        }).catch(function (err) {\r\n                            $.unblockUI();\r\n                            $scope.goPayment();\r\n                        });\r\n                    } else {\r\n\r\n                        pr = pr.then(function (res) {\r\n                            $scope.cashMode = false;\r\n                            $scope.creditCardMode = false;\r\n                            $scope.formHolder.realCashSum = 0;\r\n\r\n                            helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                            window.localStorage.setItem('continueSale', null);\r\n\r\n                            if ($scope.saleType === 'standaloneReturn') {\r\n\r\n                                if (!$scope.currentSale.customer || !$scope.currentSale.customer.ID) {\r\n                                    errorService.showError(gettextCatalog.getString(\"Please add a customer for this refund.\"));\r\n                                    return;\r\n                                }\r\n                            }\r\n\r\n                            if ($scope.saleType === 'standaloneExchange') {\r\n\r\n                                if (!$scope.currentSale.customer || !$scope.currentSale.customer.ID) {\r\n                                    errorService.showError(gettextCatalog.getString(\"Please add a customer for this exchange.\"));\r\n                                    return;\r\n                                }\r\n                            }\r\n\r\n                            $scope.currentSale.keepTotalDiscount = true;\r\n                            $scope.initSummaryValues();\r\n                            $scope.currentSale.keepTotalDiscount = false;\r\n                            $scope.mode = 'summary';\r\n                            $scope.showPaymentSection = 1;\r\n                            return helperService.resolvePromise(true);\r\n                        });\r\n\r\n                        return pr;\r\n                    }\r\n                };\r\n\r\n                $scope.noReceiptExchangeButtonDisabled = function(){\r\n                    return $scope.saleType === 'standaloneExchange' && !($scope.currentSale.CheckoutItems.some(x => x.Return) && $scope.currentSale.CheckoutItems.some(x => !x.Return));\r\n                }\r\n\r\n                $scope.showCheckoutProductsAvailabilityInsufficientDialog = function () {\r\n\r\n                    var $windowElement = $('#checkoutProductsAvailabilityInsufficientDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n                };\r\n\r\n                $scope.closeCheckoutProductsAvailabilityInsufficientDialog = function () {\r\n\r\n                    var $windowElement = $('#checkoutProductsAvailabilityInsufficientDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n\r\n                function showReturnPaymentsDialog() {\r\n                    var $windowElement = $('#returnPaymentsDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n\r\n                    if ($scope.currentSale.IsFastRefund) {\r\n                        // set default refund sum to cash\r\n                        $timeout(function () {\r\n                            $scope.showRefundPaymentAmountDlg('cash', '#refundCashPaymentAmount', $scope.paymentValidation.cashAmount, true);\r\n                        });\r\n                    }\r\n\r\n                }\r\n\r\n                $scope.closeReturnPaymentsDialog = function () {\r\n                    var $windowElement = $('#returnPaymentsDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                $scope.amountRefundSums = function () {\r\n                    var sum = 0;\r\n                    if ($scope.payments) {\r\n                        if ($scope.payments.cash)\r\n                            sum += $scope.payments.cash;\r\n\r\n                        sum += cardPayService.sumAllCardPayments($scope.paymentValidation.cardPayments);\r\n\r\n                        if ($scope.payments.storeCredit)\r\n                            sum += $scope.payments.storeCredit;\r\n\r\n                        if ($scope.payments.loyaltyPoints)\r\n                            sum += $scope.payments.loyaltyPoints;\r\n                    }\r\n\r\n                    if (!!$scope.paymentValidation && !!$scope.paymentValidation.customPayments &&\r\n                        $scope.paymentValidation.customPayments.length > 0) {\r\n                        angular.forEach($scope.paymentValidation.customPayments, function (p) {\r\n                            sum += p.amount;\r\n                        });\r\n                    }\r\n\r\n                    return helperService.DEARRound(sum, 2);\r\n                };\r\n\r\n                $scope.refundPaymentAmountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.refundDialogItem = {\r\n                    Amount: 0,\r\n                    Type: '',\r\n                    elementId: null\r\n                };\r\n\r\n                $scope.showRefundPaymentAmountDlg = function (paymentType, elementId, sumLimit, skipDialog) {\r\n                    $scope.refundDialogItem.Type = paymentType;\r\n                    $scope.refundDialogItem.elementId = elementId.substr(1);\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    var sumRest = 0;\r\n\r\n                    if (!isNewSale)\r\n                        sumRest = ($scope.totalSum($scope.currentSale, true) * -1) - $scope.amountRefundSums() + $scope.currentSale.FullReturnRounding;\r\n                    else\r\n                        sumRest = $scope.currentSale.RemainingToRefund + $scope.currentSale.FullReturnRounding;\r\n\r\n                    if (!!sumLimit) {\r\n                        if (Number(sumLimit) < sumRest)\r\n                            sumRest = sumLimit;\r\n                    }\r\n\r\n                    saleService.setPaymentLimits($scope, paymentType, sumRest);\r\n\r\n                    if (!skipDialog) {\r\n                        $timeout(function () {\r\n                            $scope.refundPaymentAmountDlg.show(elementId);\r\n                        });\r\n                    } else {\r\n                        $scope.setRefundAmount(true, true);\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.changepPaymentAmount = function () {\r\n                    $scope.showRefundPaymentsAmountError = false;\r\n                    $scope.showRefundExactPaymentsAmountError = false;\r\n                };\r\n\r\n                // callback\r\n                $scope.setRefundAmount = function (prm, skipDialog) {\r\n                    saleService.setRefundAmount($scope, prm, $scope.posTaxInclucive, skipDialog);\r\n                };\r\n\r\n\r\n                $scope.amountSums = function () {\r\n                    var sum = 0;\r\n                    if ($scope.payments) {\r\n                        if ($scope.payments.cash)\r\n                            sum += $scope.payments.cash;\r\n                        if ($scope.payments.creditCard)\r\n                            sum += $scope.payments.creditCard;\r\n\r\n                        if ($scope.payments.storeCredit)\r\n                            sum += $scope.payments.storeCredit;\r\n\r\n                        if ($scope.payments.loyaltyPoints)\r\n                            sum += $scope.payments.loyaltyPoints;\r\n                    }\r\n\r\n                    if (!!$scope.paymentValidation && !!$scope.paymentValidation.customPayments &&\r\n                        $scope.paymentValidation.customPayments.length > 0) {\r\n                        angular.forEach($scope.paymentValidation.customPayments, function (p) {\r\n                            sum += p.amount;\r\n                        });\r\n                    }\r\n\r\n                    return helperService.DEARRound(sum, 2);\r\n                };\r\n\r\n                $scope.submitSelectReturnPayments = function () {\r\n                    var d = $q.defer();\r\n                    d.resolve(null);\r\n                    var p = d.promise;\r\n\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!isNewSale) {\r\n                        saleService.calculateRefundSurcharges($scope.currentSale);\r\n                        //        var sum = $scope.amountSums();\r\n                        //        var total = helperService.DEARRound($scope.totalSum($scope.currentSale, true) * -1, 2);\r\n                    }\r\n\r\n                    $scope.refundPaymentsError = [];\r\n                    $scope.showRefundExactPaymentsAmountError = false;\r\n                    if ($scope.payments.cash < 0 || $scope.payments.cash > $scope.paymentValidation.cashAmount) {\r\n                        $scope.refundPaymentsError.push(gettextCatalog.getString(\"Cash payment amount should be between 0 and \") + $scope.paymentValidation.cashAmount);\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    }\r\n\r\n                    if (!!$scope.paymentValidation.customPayments) {\r\n                        angular.forEach($scope.paymentValidation.customPayments, function (p) {\r\n                            if (p.amount < 0 || p.amount > p.validationAmount) {\r\n                                $scope.refundPaymentsError.push(gettextCatalog.getString(p.customPaymentName + \" amount should be between 0 and \") + p.validationAmount);\r\n                                $scope.showRefundExactPaymentsAmountError = true;\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    var hasErrors = cardPayService.validateCardRefunds($scope.paymentValidation.cardPayments, $scope.refundPaymentsError);\r\n                    if (hasErrors)\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    else if ($scope.payments.creditCard < 0 || $scope.payments.creditCard > $scope.paymentValidation.creditCardAmount) {\r\n                        $scope.refundPaymentsError.push(gettextCatalog.getString(\"Credit card payment amount should be between 0 and \") + $scope.paymentValidation.creditCardAmount);\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    }\r\n\r\n                    if ($scope.payments.storeCredit < 0 || $scope.payments.storeCredit > $scope.paymentValidation.storeCreditAmount) {\r\n                        $scope.refundPaymentsError.push(gettextCatalog.getString(\"Store credit payment amount should be between 0 and \") + $scope.paymentValidation.storeCreditAmount);\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    }\r\n\r\n                    if ($scope.payments.loyaltyPoints < 0 || $scope.payments.loyaltyPoints > $scope.paymentValidation.loyaltyPointsAmount) {\r\n                        $scope.refundPaymentsError.push(gettextCatalog.getString(\"Loyalty point amount should be between 0 and \") + $scope.paymentValidation.loyaltyPointsAmount);\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    }\r\n\r\n                    if ($scope.showRefundExactPaymentsAmountError === false) {\r\n                        var remainingToRefund = $scope.getRemainingToRefund(true);\r\n                        var selectedToRefund = 0;\r\n\r\n                        if (!isNewSale) {\r\n                            selectedToRefund = $scope.amountSums();\r\n                        }\r\n\r\n                        if (selectedToRefund > remainingToRefund) {\r\n                            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Refund amount cannot be more than \") + $filter('currency')(helperService.DEARRound(remainingToRefund, 2)));\r\n                            $scope.showRefundExactPaymentsAmountError = true;\r\n                        } else if (remainingToRefund != selectedToRefund && $scope.saleType === 'standaloneReturn') {\r\n                            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Remaining to refund amount must be equal to zero. Please fill in the cash or store credit refund amount.\"));\r\n                            $scope.showRefundExactPaymentsAmountError = true;\r\n                        }\r\n                    }\r\n\r\n                    if ($scope.showRefundExactPaymentsAmountError === false) {\r\n                        getPaymentMethods();\r\n                        if (!isNewSale) {\r\n\r\n                            if ($scope.operationSubName !== 'continue') {\r\n                                $scope.currentSale.Total = $scope.totalSum($scope.currentSale, true);\r\n                                $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                                $scope.currentSale.LoyaltyPoints = saleService.calculateLoyaltyEx($scope.currentSale, $scope.currentSale.Total);\r\n                                $scope.currentSale.LoyaltyPointsTotal = saleService.calculateLoyaltyEx($scope.currentSale, $scope.currentSale.Total);\r\n                                $scope.currentSale.SubTotal = $scope.subTotalSum($scope.currentSale.CheckoutItems, $scope.currentSale);\r\n\r\n                                $scope.currentSale.Payments = [];\r\n\r\n                            }\r\n                        }\r\n\r\n                        $scope.closeReturnPaymentsDialog();\r\n                        $scope.errorMessage = null;\r\n                        $.blockUI();\r\n\r\n\r\n                        // START Cash Rounding\r\n                        // calculate cash rounding and send to the server with first payment\r\n                        // avoid to lose rounding in SIM module\r\n\r\n                        $scope.currentSale.LoyaltyUpdate = 0;\r\n\r\n                        if ($scope.payments.cash + $scope.payments.cashSurcharge) {\r\n                            cashRefundPay($scope.payments.cash + $scope.payments.cashSurcharge, false);\r\n                        }\r\n\r\n                        if (!isNewSale) {\r\n                            if ($scope.saleType !== 'standaloneReturn') {\r\n                                if ($scope.currentSale.CashRounding === 0) {\r\n                                    $scope.currentSale.CashRounding = $scope.currentSale.FullReturnRounding;\r\n                                }\r\n                            } else {\r\n                                $scope.currentSale.FullReturnRounding = $scope.currentSale.CashRounding;\r\n                            }\r\n                        } else {\r\n                            $scope.currentSale.FullReturnRounding = 0;\r\n                        }\r\n\r\n                        // END Cash Rounding\r\n\r\n                        // always return card first\r\n                        if ($scope.payments.creditCard) {\r\n                            angular.forEach($scope.paymentValidation.cardPayments, function (pay) {\r\n                                if (pay.amount != 0) {\r\n\r\n                                    if (!!pay.Surcharge) {\r\n                                        pay.amount += pay.Surcharge.AmountToRefund;\r\n                                        pay.Surcharge.isAddedToPayment = true;\r\n                                    }\r\n\r\n                                    p = p.then(function () {\r\n                                        return creditCardRefundPay(pay);\r\n                                    });\r\n                                }\r\n                            });\r\n                        }\r\n\r\n                        p = p.then(function (res) {\r\n                            if ($scope.paymentValidation.customPayments) {\r\n                                angular.forEach($scope.paymentValidation.customPayments, function (pay) {\r\n                                    if (pay.amount != 0)\r\n                                        $scope.customPayRet(pay);\r\n                                });\r\n                            }\r\n\r\n                            let needOpenCashDrawer = false;\r\n\r\n                            if ($scope.payments.cash + $scope.payments.cashSurcharge) {\r\n                                needOpenCashDrawer = true;\r\n                                cashRefundPay($scope.payments.cash + $scope.payments.cashSurcharge, true);\r\n                                if (isNewSale) {\r\n                                    if ($scope.currentSale.CashRounding)\r\n                                        $scope.currentSale.CashRounding *= -1; // this is the effect of always positive sums in exchange with refund in this code\r\n                                }\r\n\r\n                                if ($scope.payments.cashSurcharge) {\r\n                                    saleService.createGhostSurchargeToRefund($scope.currentSale, 'cash', $scope.payments.cashSurcharge,\r\n                                        $scope.payments.cash + $scope.payments.cashSurcharge, null, null, null, true);\r\n                                }\r\n                            }\r\n\r\n                            if ($scope.payments.storeCredit + $scope.payments.storeCreditSurcharge) {\r\n                                storeCreditsRefundPay($scope.payments.storeCredit + $scope.payments.storeCreditSurcharge);\r\n\r\n                                if ($scope.payments.storeCreditSurcharge) {\r\n                                    saleService.createGhostSurchargeToRefund($scope.currentSale, 'store credits', $scope.payments.storeCreditSurcharge,\r\n                                        $scope.payments.storeCredit + $scope.payments.storeCreditSurcharge, null, null, null, true);\r\n                                }\r\n                            }\r\n\r\n                            if ($scope.payments.loyaltyPoints) {\r\n                                loyaltyPointsRefundPay($scope.payments.loyaltyPoints);\r\n                            }\r\n\r\n                            updateReceipt();\r\n\r\n                            if (needOpenCashDrawer) {\r\n                                return printService.openCashDrawer().catch(function(err) {\r\n                                    console.log(err);\r\n                                    helperService.showError(err);\r\n                                }).finally(function() {\r\n                                    return compliteSale();\r\n                                });\r\n                            }\r\n\r\n                            return compliteSale();\r\n                        });\r\n                    }\r\n\r\n                    p = p.catch(function (err) {\r\n                        $.unblockUI();\r\n                        if (typeof (err.message) == 'string')\r\n                            errorService.showError(err.message);\r\n                        else\r\n                            errorService.showError(err.response.errorDescription);\r\n                    }).finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n\r\n                    return p;\r\n                };\r\n\r\n                function cashRefundPay(enteredAmount, addPayment) {\r\n                    var amount = helperService.DEARRound(parseFloat(enteredAmount), 2);\r\n\r\n                    var roundedAmount = helperService.roundCash(amount);\r\n\r\n                    var cashRounding = helperService.DEARRound(roundedAmount - amount, 2);\r\n                    $scope.currentSale.CashRounding = cashRounding;\r\n\r\n                    if (addPayment == true) {\r\n                        addPaymentToRefund($scope.cashRegistryPaymentProcessorID, roundedAmount, 'Cash', true, 'cash');\r\n                    }\r\n                }\r\n\r\n                function creditCardRefundPay(refund) {\r\n                    // addPaymentToRefund($scope.creditCardPaymentProcessorID, amount, 'Credit Card', true, 'credit card');\r\n                    var SCOPE = $scope;\r\n                    var refunds = {};\r\n                    refunds[refund.id] = refund;\r\n\r\n                    return cardPayService.refund($scope.currentSale, refunds, $scope, {\r\n                            OrderNumber: $scope.currentSale.ClearOrderNumber,\r\n                            receiptCallback: function (code, text, p) {\r\n                                return printService.printAdditionalReceipts(SCOPE, code, text, p);\r\n                            },\r\n                            Currency: configService.currency\r\n                        })\r\n                        .then(function (res) {\r\n                            var el = res[0];\r\n\r\n                            if (el.result) {\r\n\r\n                                if (!!el.Surcharge) {\r\n                                    addSurchargeToRefund(el.Surcharge, el.amount, el.ServerTransactionID, el.ClientTransactionID, el.SaleServerTransactionID);\r\n                                }\r\n\r\n                                addPaymentToRefund($scope.creditCardPaymentProcessorID, el.amount, 'Credit Card', true, 'credit card',\r\n                                    el.ServerTransactionID, el.ClientTransactionID, el.SaleServerTransactionID, el.TransactionMetaData, el.Surcharge);\r\n                                return compliteSale(true);\r\n                            } else {\r\n                                var deferred2 = $q.defer();\r\n                                if (!el.message)\r\n                                    el.message = gettextCatalog.getString('Error processing the card: ') + el.cardType + ' ' + el.cardPAN;\r\n                                $scope.errorMessage += '<br/>' + el.message;\r\n\r\n                                deferred2.resolve(true);\r\n                                return deferred2.promise;\r\n                            }\r\n                        });\r\n\r\n                    // res - array of processed refunds. for each add payment\r\n                    //var deferred2 = $q.defer();\r\n                    //deferred2.resolve({ refundedSum: refundedSum, errorMessage: errorMessage });\r\n                    //return deferred2.promise;\r\n                    // });\r\n                }\r\n\r\n                function storeCreditsRefundPay(amount) {\r\n                    addPaymentToRefund($scope.storeCreditsPaymentProcessorID, amount, 'Store Credits', false, 'store credits');\r\n\r\n                }\r\n\r\n                function loyaltyPointsRefundPay(amount) {\r\n                    addPaymentToRefund($scope.loyaltyPaymentProcessorID, amount, 'Loyalty Points', true, 'loyalty');\r\n                }\r\n\r\n                function addPaymentToRefund(PaymentProcessorID, Amount, PaymentTypeName, earnLoyalty, paymentShortName, serverTransactionID,\r\n                    clientTransactionID, saleServerTransactionID, transactionData, surcharge) {\r\n                    Amount = helperService.DEARRound(parseFloat(Amount), 2) * -1;\r\n\r\n                    $scope.currentSale.Balance = 0;\r\n\r\n                    var loyalty = 0;\r\n                    var surchargeAmount = 0;\r\n                    var surchargeTaxAmount = 0;\r\n                    if (surcharge && surcharge.isAddedToPayment != true) {\r\n                        surchargeAmount = surcharge.CalculatedValue;\r\n                        surchargeTaxAmount = $scope.posTaxInclucive ? 0 : surcharge.Tax;\r\n                    }\r\n\r\n                    //$scope.currentSale.customer.LoyaltyPoints += loyalty;\r\n                    var payment = {\r\n                        ID: uuid2.newguid(),\r\n                        PaymentProcessorID: PaymentProcessorID,\r\n                        Amount: Amount + surchargeAmount + surchargeTaxAmount,\r\n                        Date: moment.utc(),\r\n                        ShortName: paymentShortName,\r\n                        PaymentTypeName: PaymentTypeName,\r\n                        Loyalty: loyalty,\r\n                        ServerTransactionID: serverTransactionID,\r\n                        ClientTransactionID: clientTransactionID,\r\n                        SaleServerTransactionID: saleServerTransactionID,\r\n                        Surcharge: surcharge\r\n                    };\r\n\r\n                    if (!!transactionData) {\r\n                        payment.TransactionMetaData = transactionData;\r\n                    }\r\n\r\n                    if (payment.Surcharge)\r\n                        payment.Surcharge.PaymentID = payment.ID;\r\n\r\n                    $scope.currentSale.Payments.push(payment);\r\n                    $scope.lastPaymentID = payment.ID; // to remove it when payment was not happen (excluding card payment)\r\n\r\n                    if ($scope.currentSale.returnLoyaltyPoints) {\r\n                        var c = 1;\r\n                        if ($scope.currentSale.GroupedSale)\r\n                            c = $scope.currentSale.GroupedSale.LoyaltyRefundCoeff;\r\n\r\n                        loyalty = saleService.calculateLoyaltyEx($scope.currentSale, Amount * c);\r\n                    }\r\n\r\n                    payment.Loyalty = loyalty;\r\n                    $scope.currentSale.LoyaltyUpdate += loyalty;\r\n\r\n                    if (paymentShortName === \"loyalty\") {\r\n                        //            $scope.currentSale.CustomerLoyaltyPointsUsed = loyalty;\r\n                        $scope.currentSale.CustomerLoyaltyPointsUsed = Amount;\r\n                    }\r\n\r\n                    return payment;\r\n                }\r\n\r\n                function addSurchargeToRefund(surcharge, paymentAmount, serverTransactionID, clientTransactionID, saleServerTransactionID, ignoreTransactions) {\r\n\r\n                    surcharge.CalculatedValue = -1 * helperService.DEARRound(surcharge.AmountToRefund - ($scope.posTaxInclucive ? 0 : surcharge.TaxToRefund), 2);\r\n                    surcharge.Tax = -1 * surcharge.TaxToRefund;\r\n                    surcharge.PaymentRealAmount = paymentAmount;\r\n                    surcharge.CalculatedValueWithTax = $scope.posTaxInclucive ? surcharge.CalculatedValue : (surcharge.CalculatedValue + surcharge.Tax);\r\n                    if (ignoreTransactions !== true) {\r\n                        surcharge.ServerTransactionID = serverTransactionID;\r\n                        surcharge.ClientTransactionID = clientTransactionID;\r\n                        surcharge.SaleServerTransactionID = saleServerTransactionID;\r\n                    }\r\n\r\n                    delete surcharge.AmountToRefund;\r\n                    delete surcharge.TaxToRefund;\r\n\r\n                    $scope.currentSale.Surcharges.push(surcharge);\r\n\r\n                    $scope.currentSale.Total = $scope.totalSum($scope.currentSale, true);\r\n                    $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                }\r\n\r\n                function calculateSums() {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!isNewSale)\r\n                        $scope.formHolder.sumToPayLeft = helperService.DEARRound(parseFloat($scope.totalSum($scope.currentSale, true)), 2);\r\n                    else\r\n                        $scope.formHolder.sumToPayLeft = $scope.currentSale.Total;\r\n\r\n                    $scope.formHolder.sumToPayLeft = helperService.DEARRound(saleService.calcRemainingDue($scope.currentSale), 2);\r\n                    if ($scope.saleType !== 'return' && $scope.saleType !== 'standaloneReturn') {\r\n                        // standard non exchange operation.\r\n                        // make sum >=0\r\n                        if ($scope.formHolder.sumToPayLeft < 0)\r\n                            $scope.formHolder.sumToPayLeft = 0;\r\n                    }\r\n\r\n                    $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft.toFixed(2);\r\n\r\n                    var amount = Math.abs($scope.formHolder.sumToPayLeft);\r\n\r\n                    $scope.paymentValidation.cashAmount = helperService.roundCash(amount);\r\n                    $scope.paymentValidation.creditCardAmount = amount;\r\n                    $scope.paymentValidation.giftCardAmount = amount;\r\n                    $scope.paymentValidation.loyaltyPointsAmount = amount;\r\n                    $scope.paymentValidation.storeCreditAmount = amount;\r\n                    $scope.paymentValidation.customPayAmount = amount;\r\n\r\n                    if ($scope.saleType === 'standaloneReturn' || $scope.saleType === 'standaloneExchange') {\r\n\r\n                        let operationCode = $scope.saleType === 'standaloneReturn' ? 'standalone_refund' : 'standalone_exchange';\r\n\r\n                        $scope.currentSale.paymentValidation = {\r\n                            cashAmount: $scope.paymentValidation.cashAmount,\r\n                            creditCardAmount: $scope.paymentValidation.cashAmount,\r\n                            giftCardAmount: 0,\r\n                            loyaltyPointsAmount: 0,\r\n                            storeCreditAmount: amount,\r\n                            cardPayments: {},\r\n                            customPayments: {}\r\n                        };\r\n\r\n                        if (!$scope.currentSale.ReturnPayments)\r\n                            $scope.currentSale.ReturnPayments = [];\r\n\r\n                        var fakePayments = $scope.currentSale.ReturnPayments.filter(function (rp) {\r\n                            return rp.ShortName === \"credit card\";\r\n                        });\r\n                        var fakePayment = {};\r\n                        if (fakePayments.length > 0)\r\n                            fakePayment = fakePayments[0];\r\n                        else {\r\n                            var id = uuid2.newguid();\r\n                            var prc = configService.getCardPaymentProcessor();\r\n                            fakePayment.ID = id;\r\n                            fakePayment.PaymentProcessorID = !prc ? null : prc.paymentProcessorID;\r\n                            fakePayment.PaymentTypeName = \"Credit Card\";\r\n                            fakePayment.Reference = null;\r\n                            fakePayment.ServerTransactionID = id;\r\n                            fakePayment.ClientTransactionID = operationCode;\r\n                            fakePayment.ShortName = \"credit card\";\r\n                            fakePayment.TransactionMetaData = \"non integrated card payment\";\r\n                            $scope.currentSale.ReturnPayments.push(fakePayment);\r\n                        }\r\n\r\n                        $scope.paymentValidation.creditCardAmount = $scope.paymentValidation.cashAmount;\r\n                        cardPayService.addSumToCardPayment($scope.currentSale.paymentValidation.cardPayments, fakePayment.ID,\r\n                            operationCode, $scope.paymentValidation.cashAmount, null);\r\n                        fakePayment.Amount = $scope.paymentValidation.cashAmount;\r\n                    }\r\n                }\r\n\r\n                $('#sellPartialView').on('shown.bs.collapse', function () {\r\n                    $rootScope.$broadcast('scroll.wrapper.resize');\r\n                });\r\n\r\n                $scope.forceHeightRecalc = function () {\r\n                    $rootScope.$broadcast('scroll.wrapper.resize');\r\n                };\r\n\r\n                $scope.goBack = function (hasPayments) {\r\n                    //if (!!$scope.initialCurrentSale) {\r\n                    //    $scope.currentSale = angular.copy($scope.initialCurrentSale);\r\n                    //    $scope.initialCurrentSale = null;\r\n                    //}\r\n\r\n                    $scope.showPaymentSection = 0;\r\n                    $scope.mode = 'sell';\r\n                    $scope.canDiscardSale = true;\r\n\r\n                    if (hasPayments === true) {\r\n                        $scope.markSaleAsPayOnly();\r\n                        $scope.subType = true;\r\n                    } else if (loyaltyService.isLoyaltyEnabled()) {\r\n                        $scope.canChangeCustomer = true;\r\n                    }\r\n\r\n                    //$timeout(function () {\r\n                        secondTerminalService.update($scope, 'sale');\r\n                    //});\r\n                };\r\n\r\n\r\n\r\n                $scope.sendEmailReceipt = function () {\r\n                    $.blockUI();\r\n\r\n//                    var emailBody = $('div[show-data] > .ng-scope').html();\r\n                    var emailBody = emailService.setEmailToken('div[email-template] > .ng-scope').html();\r\n                    var documentBody = $('div[receipt-template] > .ng-scope').html();\r\n                    if (!documentBody) {\r\n                        documentBody = $('div.receipt-template div[receipt-template] > .ng-scope').html();\r\n                    }\r\n                    var emailSubject = $scope.receiptEmailSubject;\r\n                    //        var email = $scope.receiptHolder.receiptForm.receiptEmail.$viewValue;\r\n                    var email = $scope.email.receiptEmail;\r\n\r\n                    var orders = emailService.extractOrderIDs($scope.currentSale);\r\n                    emailService.sendEmailReceipt(orders.orderID, orders.baseOrderID, email, emailSubject, emailBody, false, $scope.receiptTemplateID, documentBody)\r\n                        .then(function (result) {\r\n                            // show message box about sending result\r\n                            $.unblockUI();\r\n                            if (result.Result == true) {\r\n                                $scope.sentToEmail = email;\r\n\r\n                                var $windowElement = $('#receiptSentToEmail');\r\n                                helperService.showDialog($windowElement);\r\n\r\n                                $scope.closeReceiptEmailDialog = function () {\r\n                                    var $windowElement = $('#receiptSentToEmail');\r\n                                    helperService.closeDialog($windowElement);\r\n                                };\r\n                                $scope.emailSent = true;\r\n                            } else {\r\n                                var $windowElement = $('#receiptSentToEmailError');\r\n                                helperService.showDialog($windowElement);\r\n\r\n                                $scope.closeReceiptEmailDialog = function () {\r\n                                    var $windowElement = $('#receiptSentToEmailError');\r\n                                    helperService.closeDialog($windowElement);\r\n                                };\r\n                            }\r\n                        }, function (err) {\r\n                            $.unblockUI();\r\n                            var txt = gettextCatalog.getString(\"Error sending email.\");\r\n                            if (!!err.data && err.data.length > 0 && !!err.data[0].Exception)\r\n                                txt = err.data[0].Exception;\r\n\r\n                            errorService.showError(!!err.data ? err.data : txt);\r\n                        });\r\n                };\r\n\r\n\r\n                $scope.payAmountChanged = function () {\r\n                    $scope.isValidAmount = true;\r\n                };\r\n\r\n                $scope.hasPaidLines = function () {\r\n                    return !!$scope.currentSale.Payments && $scope.currentSale.Payments.length > 0;\r\n                };\r\n\r\n                function buildPendingPaymentKey(paymentProcessorID, paymentShortName, amount, reference) {\r\n                    var normalizedAmount = helperService.DEARRound(parseFloat(amount || 0), 2).toFixed(2);\r\n                    var saleKey = ($scope.currentSale && ($scope.currentSale.OperationID || $scope.currentSale.ID)) || '';\r\n                    return [saleKey, paymentShortName || '', paymentProcessorID || '', normalizedAmount, reference || ''].join('|');\r\n                }\r\n\r\n                function getOrCreatePendingPaymentId(paymentKey) {\r\n                    if (!$scope.pendingPaymentRegistry) {\r\n                        $scope.pendingPaymentRegistry = {};\r\n                    }\r\n\r\n                    if (!$scope.pendingPaymentRegistry[paymentKey]) {\r\n                        $scope.pendingPaymentRegistry[paymentKey] = uuid2.newguid();\r\n                    }\r\n\r\n                    return $scope.pendingPaymentRegistry[paymentKey];\r\n                }\r\n\r\n                function clearPendingPaymentId(paymentKey) {\r\n                    if ($scope.pendingPaymentRegistry && paymentKey) {\r\n                        delete $scope.pendingPaymentRegistry[paymentKey];\r\n                    }\r\n                }\r\n\r\n                function clearAllPendingPaymentIds() {\r\n                    $scope.pendingPaymentRegistry = {};\r\n                }\r\n\r\n                function addPaymentToSaleObject(PaymentProcessorID, Amount, PaymentTypeName, earnLoyalty, paymentShortName, reference, surcharge) {\r\n                    if ($scope.paymentActionInProgress === true) {\r\n                        var blockedDeferred = $q.defer();\r\n                        blockedDeferred.resolve(null);\r\n                        return blockedDeferred.promise;\r\n                    }\r\n\r\n                    $scope.paymentActionInProgress = true;\r\n\r\n                    try {\r\n                        helperService.storeCurrentSale(null);\r\n\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                        if (Amount == 0) {\r\n                            if ($scope.formHolder.realSum == 0 &&\r\n                                $scope.formHolder.sumToPayLeft.toFixed(2) == 0) {\r\n\r\n                                //Additional validation for sale payment\r\n                                var paidAmount = 0;\r\n                                $.each($scope.currentSale.Payments, function (idx, el) {\r\n                                    paidAmount += el.Amount;\r\n                                });\r\n\r\n                                if (helperService.DEARRound($scope.currentSale.Balance, 2) != helperService.DEARRound($scope.currentSale.Total - paidAmount, 2)) {\r\n                                    console.log($scope.currentSale.Balance);\r\n                                    console.log($scope.currentSale.Total);\r\n                                    console.log(paidAmount);\r\n                                    var error = gettextCatalog.getString(\"Something went wrong, please try again.\");\r\n                                    errorService.showError(error);\r\n\r\n                                    var surcharges = [];\r\n                                    if ($scope.currentSale.Surcharges) {\r\n                                        $.each($scope.currentSale.Payments, function (idp, p) {\r\n                                            if (p.Surcharge) {\r\n                                                surcharges.push(p.Surcharge);\r\n                                            }\r\n                                        });\r\n\r\n                                        $scope.currentSale.Surcharges = surcharges;\r\n                                    }\r\n\r\n                                    calculateSums();\r\n                                    updateReceipt();\r\n                                    $scope.paymentActionInProgress = false;\r\n                                    return null;\r\n                                }\r\n\r\n                                // synchronize sums\r\n                                calculateSums();\r\n                                $scope.canDiscardSale = false;\r\n                                updateReceipt();\r\n                                $scope.paymentActionInProgress = false;\r\n                                return compliteSale(false);\r\n                            }\r\n\r\n                            $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft.toFixed(2);\r\n                            $scope.paymentActionInProgress = false;\r\n                            return;\r\n                        }\r\n\r\n                        Amount = helperService.DEARRound(parseFloat(Amount), 2);\r\n\r\n                        if (!$scope.currentSale.Payments || $scope.currentSale.Payments.length == 0)\r\n                            $scope.currentSale.CashRounding = 0;\r\n\r\n                        $scope.isValidAmount = true;\r\n                        $scope.invalidPaymentAmount = '';\r\n                        var allSummPaid = false;\r\n                        var pt = paymentShortName;\r\n                        //if (!!paymentShortName && paymentShortName.indexOf('giftcard_' + PaymentProcessorID) == 0) {\r\n                        //    pt = 'gift card';\r\n                        //}\r\n                        $scope.lastCashRounding = $scope.currentSale.CashRounding; // this will be restored if payments was no happen\r\n\r\n                        switch (pt) {\r\n                            case 'cash':\r\n                                var amountToCheck = helperService.roundCash(Amount);\r\n\r\n                                if (amountToCheck >= $scope.paymentValidation.cashAmount) {\r\n                                    allSummPaid = true;\r\n                                    var cashRounding = helperService.DEARRound($scope.paymentValidation.cashAmount - $scope.formHolder.sumToPayLeft, 6);\r\n                                    $scope.currentSale.CashRounding = helperService.DEARRound($scope.currentSale.CashRounding + cashRounding, 6);\r\n                                    if (amountToCheck > $scope.paymentValidation.cashAmount) {\r\n                                        $scope.currentSale.CashChangeAmount = helperService.DEARRound(Amount - $scope.paymentValidation.cashAmount, 4);\r\n                                    }\r\n                                    // if (Amount > $scope.formHolder.sumToPayLeft) {\r\n                                    //     $scope.currentSale.CashChangeAmount = Amount - $scope.formHolder.sumToPayLeft; // to include current rounding\r\n                                    // }\r\n\r\n                                    Amount = $scope.paymentValidation.cashAmount;\r\n                                }\r\n                                break;\r\n                            case 'credit card':\r\n                                if (!($scope.restoredSaleObj && $scope.restoredSaleObj.payment)) {\r\n                                    if (Amount > $scope.paymentValidation.creditCardAmount) {\r\n                                        $scope.isValidAmount = false;\r\n                                        $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                    }\r\n                                }\r\n                                break;\r\n                            case 'gift card':\r\n                                if (Amount > $scope.paymentValidation.giftCardAmount) {\r\n                                    $scope.isValidAmount = false;\r\n                                    $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                }\r\n                                break;\r\n                            case 'loyalty':\r\n                                if (Amount > $scope.paymentValidation.loyaltyPointsAmount) {\r\n                                    $scope.isValidAmount = false;\r\n                                    $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                } else {\r\n                                    $scope.currentSale.CustomerLoyaltyPointsUsed += Amount;\r\n                                }\r\n                                break;\r\n                            case 'store credits':\r\n                                if (Amount > $scope.paymentValidation.storeCreditAmount) {\r\n                                    $scope.isValidAmount = false;\r\n                                    $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                }\r\n                                break;\r\n                            default:\r\n                                if (Amount > $scope.paymentValidation.customPayAmount) {\r\n                                    $scope.isValidAmount = false;\r\n                                    $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                }\r\n                                break;\r\n                        }\r\n\r\n                        if ($scope.isValidAmount === false) {\r\n                            $scope.paymentActionInProgress = false;\r\n                            return;\r\n                        }\r\n\r\n                        if ($scope.operationName === 'Exchange' && Amount >= 0 && !!$scope.currentSale.ReturnPayments)\r\n                            $scope.currentSale.ReturnPayments = [];\r\n\r\n                        if (!isNewSale)\r\n                            $scope.formHolder.sumToPayLeft = helperService.DEARRound(parseFloat($scope.formHolder.sumToPayLeft - Amount), 2);\r\n                        else\r\n                            $scope.formHolder.sumToPayLeft = CalculatorHelperService.sumToPayLeft($scope.currentSale, Amount);\r\n\r\n                        $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft.toFixed(2);\r\n\r\n                        $scope.paymentValidation.cashAmount = helperService.roundCash($scope.formHolder.sumToPayLeft);\r\n                        $scope.paymentValidation.creditCardAmount = $scope.formHolder.sumToPayLeft;\r\n                        $scope.paymentValidation.giftCardAmount = $scope.formHolder.sumToPayLeft;\r\n                        $scope.paymentValidation.loyaltyPointsAmount = $scope.formHolder.sumToPayLeft;\r\n                        $scope.paymentValidation.storeCreditAmount = $scope.formHolder.sumToPayLeft;\r\n\r\n                        $scope.currentSale.Balance = $scope.formHolder.sumToPayLeft;\r\n\r\n                        if (paymentShortName === 'loyalty' || paymentShortName === 'store credits') {\r\n                            $scope.currentSale.cantProcessOffline = true;\r\n                        }\r\n\r\n                        var loyalty = 0; //saleService.calculateLoaylty(earnLoyalty, $scope.currentSale, Amount);\r\n\r\n                        var delayDone = false;\r\n\r\n                        let surchargeAmount = 0;\r\n                        let surchargeTaxAmount = 0;\r\n                        if (surcharge) {\r\n                            surchargeAmount = surcharge.CalculatedValue;\r\n                            surchargeTaxAmount = $scope.posTaxInclucive ? 0 : surcharge.Tax;\r\n                        }\r\n\r\n                        var finalPaymentAmount = Amount + surchargeAmount + surchargeTaxAmount;\r\n                        var paymentKey = buildPendingPaymentKey(PaymentProcessorID, paymentShortName, finalPaymentAmount, reference);\r\n\r\n                        //$scope.currentSale.customer.LoyaltyPoints += loyalty;\r\n                        var payment = {\r\n                            ID: getOrCreatePendingPaymentId(paymentKey),\r\n                            PaymentProcessorID: PaymentProcessorID,\r\n                            Amount: finalPaymentAmount,\r\n                            Date: new Date(),\r\n                            ShortName: paymentShortName,\r\n                            PaymentTypeName: PaymentTypeName,\r\n                            Loyalty: loyalty,\r\n                            Reference: reference,\r\n                            Surcharge: surcharge\r\n                        };\r\n\r\n                        if ($scope.restoredSaleObj && $scope.restoredSaleObj.payment) {\r\n                            payment = $scope.restoredSaleObj.payment;\r\n                        }\r\n\r\n                        if (pt == 'gift card') {\r\n                            payment.GiftCardID = PaymentProcessorID;\r\n                        }\r\n\r\n                        if (payment.Surcharge)\r\n                            payment.Surcharge.PaymentID = payment.ID;\r\n\r\n                        if (paymentShortName === 'credit card' && payment.Surcharge && !payment.InitialSurcharge) {\r\n                            payment.InitialSurcharge = angular.copy(payment.Surcharge);\r\n                        }\r\n\r\n                        var promise;\r\n                        $scope.lastPaymentID = null;\r\n\r\n                        if (paymentShortName === 'credit card') {\r\n                            $.blockUI();\r\n                            // call real card operation\r\n                            var SCOPE = $scope;\r\n\r\n                            if ($scope.restoredSaleObj && $scope.restoredSaleObj.payment) {\r\n                                promise = helperService.resolvePromise({\r\n                                    response: {\r\n                                        TransactionMetaData: 'restored after crash',\r\n                                        ServerTransactionID: '',\r\n                                        result: true,\r\n                                        amount: payment.Amount\r\n                                    }\r\n                                });\r\n                            } else {\r\n                                helperService.storeCurrentSale($scope.currentSale, SCOPE, payment, 'preCardPayment', payment.Amount); // this is to prevent sale lose due to any card payment app crush\r\n\r\n                                promise = cardPayService.makePayment({\r\n                                    ID: payment.ID,\r\n                                    Amount: payment.Amount,\r\n                                    Currency: configService.currency,\r\n                                    OrderNumber: $scope.currentSale.ClearOrderNumber,\r\n                                    Sale: $scope.currentSale,\r\n                                    receiptCallback: function (code, text, p) {\r\n                                        return printService.printAdditionalReceipts(SCOPE, code, text, p);\r\n                                    }\r\n\r\n                                }, $scope);\r\n                            }\r\n\r\n                            promise = promise\r\n                                .then(function (res) {\r\n\r\n                                    if (!!res && !!res.response && !!res.response.TransactionMetaData &&\r\n                                        res.response.TransactionMetaData.partialApproved === true) { // partial payment approval\r\n                                        payment.Amount = res.response.TransactionMetaData.approvedAmount;\r\n                                        if (payment.Surcharge) {\r\n                                            const realSurchargeApplied = surchargeService.reCalculateSurchargeForPartiallyApproved(payment.Surcharge, payment.Amount, $scope.posTaxInclucive, configService.lastSurchargeTax);\r\n                                            payment.Surcharge.CalculatedValue = realSurchargeApplied.CalculatedValue;\r\n                                            payment.Surcharge.Tax = realSurchargeApplied.Tax;\r\n                                            payment.Surcharge.CalculatedValueWithTax = realSurchargeApplied.CalculatedValueWithTax;\r\n                                        }\r\n\r\n                                        if (earnLoyalty === true) {\r\n                                            if (!isNewSale) {\r\n                                                payment.Loyalty = saleService.calculateLoyaltyEx($scope.currentSale, res.response.TransactionMetaData.approvedAmount);\r\n                                                $scope.currentSale.LoyaltyUpdate = payment.Loyalty;\r\n                                            } else {\r\n                                                CalculatorHelperService.calculatePayments($scope.currentSale);\r\n                                            }\r\n                                        }\r\n                                        calculateSums();\r\n                                    }\r\n                                    var deferred = $q.defer();\r\n                                    deferred.resolve(res);\r\n                                    return deferred.promise;\r\n                                }, function (err) {\r\n                                    var deferred = $q.defer();\r\n                                    var showDialog = true;\r\n\r\n                                    if (err && err.messageHide !== true) {\r\n                                        if (!!err && err.showCustomDialog === true) {\r\n                                            showDialog = false;\r\n                                            deferred.reject(err);\r\n                                        } else\r\n                                        if (typeof (err.message) == 'string')\r\n                                            $scope.creditCardError.errorText = err.message;\r\n                                        else if (!!err.response && !!err.response.errorDescription)\r\n                                            $scope.creditCardError.errorText = err.response.errorDescription;\r\n                                        else\r\n                                            $scope.creditCardError.errorText = err;\r\n\r\n                                    }\r\n\r\n                                    if (showDialog) {\r\n                                        $.unblockUI();\r\n                                        var errorCallback = function () {\r\n                                            if ($scope.creditCardError.addFailedCreditCardPayment === true) {\r\n                                                $scope.creditCardError.addFailedCreditCardPayment = null;\r\n                                                $scope.creditCardError.errorText = null;\r\n                                                deferred.resolve(null);\r\n                                            } else {\r\n                                                $scope.creditCardError.addFailedCreditCardPayment = null;\r\n                                                $scope.creditCardError.errorText = null;\r\n                                                if (err === null || typeof (err) === \"undefined\") {\r\n                                                    err = {\r\n                                                        messageHide: true\r\n                                                    }\r\n                                                } else\r\n                                                    err.messageHide = true;\r\n                                                deferred.reject(err);\r\n                                            }\r\n                                        };\r\n\r\n                                        if (err && err.disableAddPayment) {\r\n                                            helperService.showDialog($(\"#creditCardProcessingErrorModal2\"),\r\n                                            null, null, errorCallback);\r\n                                        }\r\n                                        else {\r\n                                            helperService.showDialog($(\"#creditCardProcessingErrorModal\"),\r\n                                            null, null, errorCallback);\r\n                                        }\r\n                                    }\r\n\r\n                                    return deferred.promise;\r\n                                });\r\n                        } else {\r\n                            $scope.lastPaymentID = payment.ID; // to remove it when payment was not happen (excluding card payment)\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve(null);\r\n                            promise = deferred.promise;\r\n                        }\r\n\r\n                        return $scope.finishPaymentPhase(allSummPaid, payment, promise, earnLoyalty, paymentKey);\r\n\r\n                    } catch (err) {\r\n                        $scope.paymentActionInProgress = false;\r\n                        $.unblockUI();\r\n                        throw err;\r\n                    }\r\n                }\r\n\r\n                $scope.finishPaymentPhase = function (allSummPaid, payment, promise, earnLoyalty, paymentKey) {\r\n                    return promise.then(function (payRes) {\r\n                            var forceSaleCompleted = false;\r\n                            if ($scope.restoredSaleObj && $scope.restoredSaleObj.payment) {\r\n                                $scope.mode = 'summary';\r\n                                forceSaleCompleted = true;\r\n                            }\r\n\r\n                            delete $scope.restoredSaleObj;\r\n                            helperService.storeCurrentSale(null);\r\n\r\n                            var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                            console.log('payment: ' + JSON.stringify(payRes));\r\n\r\n                            if (payRes != null && !!payRes.response) {\r\n                                payment = angular.extend(payment, payRes.response);\r\n                            }\r\n\r\n                            // even if amount == 0 due to rounding, we need to send zero payment for\r\n                            // correct sim processing\r\n\r\n                            ///Validation to prevent inserting of duplicate payments.\r\n                            var canAddPayment = true;\r\n                            var total = $scope.currentSale.Total;\r\n\r\n                            $.each($scope.currentSale.Payments, function (idx, el) {\r\n                                if (el.ID === payment.ID) {\r\n                                    canAddPayment = false;\r\n\r\n                                    if ($scope.currentSale.Surcharges) {\r\n                                        var existingSurchargeIndex = $scope.currentSale.Surcharges.indexOf(payment.Surcharge);\r\n                                        if (existingSurchargeIndex > -1) {\r\n                                            $scope.currentSale.Surcharges.splice(existingSurchargeIndex, 1);\r\n                                        }\r\n                                    }\r\n\r\n                                    return false;\r\n                                }\r\n                            });\r\n\r\n                            $.each($scope.currentSale.Payments, function (idx, el) {\r\n                                total -= helperService.DEARRound(el.Amount, 2);\r\n                            });\r\n\r\n                            if (isNewSale && payment && payment.Surcharge) {\r\n                                total += payment.Surcharge.CalculatedValueWithTax; // payment is not yet in the sale so add surcharge manually\r\n                            }\r\n\r\n                            if (total - payment.Amount < 0) {\r\n                                $.each($scope.currentSale.Payments, function (idx, el) {\r\n                                    if (el.ShortName === payment.ShortName &&\r\n                                        el.Amount === payment.Amount &&\r\n                                        new Date(el.Date).toDateString() === new Date(payment.Date).toDateString()) {\r\n                                        canAddPayment = false;\r\n\r\n                                        if ($scope.currentSale.Surcharges) {\r\n                                            var index = $scope.currentSale.Surcharges.indexOf(payment.Surcharge);\r\n                                            if (index > -1) {\r\n                                                $scope.currentSale.Surcharges.splice(index, 1);\r\n                                            }\r\n                                        }\r\n\r\n                                        return;\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                            var loyalty = 0;\r\n                            if (canAddPayment) {\r\n                                $scope.currentSale.Payments.push(payment);\r\n                                clearPendingPaymentId(paymentKey);\r\n\r\n                                if (earnLoyalty === true) {\r\n                                    if (!isNewSale)\r\n                                        loyalty = saleService.calculateLoyaltyEx($scope.currentSale, payment.Amount);\r\n                                }\r\n\r\n                                if (isNewSale)\r\n                                    CalculatorHelperService.calculatePayments($scope.currentSale);\r\n                            } else {\r\n                                clearPendingPaymentId(paymentKey);\r\n                            }\r\n\r\n                            if (!isNewSale) {\r\n                                payment.Loyalty = loyalty;\r\n                                $scope.currentSale.LoyaltyUpdate = loyalty;\r\n                                $scope.currentSale.LoyaltyPoints = saleService.totalPaymentsLoyaltyPoints($scope.currentSale);\r\n                            }\r\n\r\n                            // synchronize sums\r\n                            calculateSums();\r\n\r\n                            if ($scope.currentSale.CashRounding !== 0) {\r\n                                $scope.formHolder.sumToPayLeft = 0;\r\n                                $scope.currentSale.Balance = 0;\r\n                            }\r\n\r\n                            $scope.canDiscardSale = false;\r\n                            updateReceipt();\r\n\r\n                            // code below means that we complite sale only after all payments are done.\r\n                            //if ($scope.formHolder.sumToPayLeft === 0 || allSummPaid === true) {\r\n                            //    return compliteSale();\r\n                            //}\r\n                            return compliteSale(!forceSaleCompleted && !($scope.formHolder.sumToPayLeft === 0 || allSummPaid === true));\r\n                        })\r\n                        .catch(function (err) {\r\n                            console.log('catch payment: ' + err);\r\n\r\n                            // remove surcharges that corresponds to invalid card payment\r\n                            if (!!$scope.currentSale.Surcharges) {\r\n                                var cardPayment = payment;\r\n                                if (!!cardPayment && !!cardPayment.Surcharge) {\r\n                                    $scope.currentSale.Surcharges = $scope.currentSale.Surcharges.filter(function (s) {\r\n                                        return s.$$hashKey != cardPayment.Surcharge.$$hashKey;\r\n                                    })\r\n                                }\r\n                            }\r\n\r\n                            if (!!$scope.currentSale.lastLoyaltyUpdateAmount) {\r\n                                $scope.currentSale.LoyaltyPoints -= $scope.currentSale.lastLoyaltyUpdateAmount;\r\n                                delete $scope.currentSale.lastLoyaltyUpdateAmount;\r\n                            }\r\n\r\n                            var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                            if (isNewSale) {\r\n                                CalculatorHelperService.calculatePayments($scope.currentSale);\r\n                            }\r\n\r\n                            // restore rest of sum to pay\r\n                            calculateSums();\r\n\r\n                            $.unblockUI();\r\n                            if (err.messageHide !== true) {\r\n                                if (!!err && err.showCustomDialog === true) {\r\n                                    $scope.dialogMode = 'vantivDeclinePayment';\r\n                                    $scope.declineTransactionData = err.transactionData;\r\n                                    helperService.showCustomDialog(gettextCatalog.getString('Error'),\r\n                                        err.response.errorDescription + '<br/>' + gettextCatalog.getString('Would you like to print a receipt?'),\r\n                                        gettextCatalog.getString('Yes'),\r\n                                        gettextCatalog.getString('No'));\r\n                                } else\r\n                                if (typeof (err.message) === 'string')\r\n                                    errorService.showError(err.message, function () {\r\n                                        $scope.showDialog();\r\n                                    });\r\n                                else if (!!err.response && !!err.response.errorDescription)\r\n                                    errorService.showError(err.response.errorDescription, function () {\r\n                                        $scope.showDialog();\r\n                                    });\r\n                                else\r\n                                    errorService.showError(err, function () {\r\n                                        $scope.showDialog();\r\n                                    });\r\n\r\n                            }\r\n                        })\r\n                        .finally(function () {\r\n                            $scope.paymentActionInProgress = false;\r\n                            $.unblockUI();\r\n                        });\r\n                };\r\n\r\n                function cancelLastPayment() {\r\n                    // remove last payment payment from payload\r\n                    $scope.currentSale.Payments = $scope.currentSale.Payments.filter(function (p) {\r\n                        return p.ID !== $scope.lastPaymentID;\r\n                    });\r\n                    // restore previous cach rounding value\r\n                    $scope.currentSale.CashRounding = $scope.lastCashRounding;\r\n                    $scope.lastPaymentID = null;\r\n                    \r\n                    var orderID = $scope.currentSale.ID;\r\n                    var registryID = $scope.registrySalesID;\r\n                    orderStatusService.trackOrder(orderID, registryID, 'payment_rollback', null);\r\n                    \r\n                    secondTerminalService.update($scope, 'sale');\r\n                }\r\n\r\n                // if payment is partial, set isPartial flag\r\n                function compliteSale(isPartial) {\r\n\r\n                    $.blockUI();\r\n                    $scope.email.receiptEmail = null;\r\n\r\n                    if (isPartial) {\r\n                        secondTerminalService.update($scope, 'sale');\r\n                    }\r\n\r\n                    if (!!$scope.currentSale.SelectedContact &&\r\n                        $scope.currentSale.SelectedContact.Email) {\r\n                        $scope.email.receiptEmail = $scope.currentSale.SelectedContact.Email;\r\n                    }\r\n\r\n                    clearAllPendingPaymentIds();\r\n\r\n                    // now reset operation id. OperationID - is unique id that identifies current operation.\r\n                    // This allow to skip duplicates that might be result of any network errors/timeouts.\r\n                    $scope.currentSale.OperationID = null;\r\n                    var isContinue = ($scope.operationSubName === 'continue' && $scope.operationName === 'Exchange') || $scope.saleType === \"continue\" ||\r\n                        ($scope.currentSale.Payments && $scope.currentSale.Payments.length > 1);\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (isNewSale && $scope.operationName === 'Exchange') {\r\n                        var prms = {\r\n                            paymentValidation: $scope.paymentValidation,\r\n                            payments: $scope.payments,\r\n                            selectedItem: $scope.selectedItem,\r\n                            isContinue: isContinue\r\n                        };\r\n\r\n                        CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Loyalty);\r\n                        if (isNewSale)\r\n                            updateReceipt();\r\n                    }\r\n\r\n                    var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'CLOSED', isContinue, $scope.posTaxInclucive, null, isPartial, $scope.operationName === 'Exchange');\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n                    var promise = deferred.promise;\r\n\r\n                    return promise.then(function () {\r\n\r\n                            // console.log('rawSale: ' + JSON.stringify($scope.currentSale));\r\n                            delete $scope.currentSale.RawSaleObject; // remove native sale string went from history form\r\n                            delete $scope.currentSale.SelectedItem; // remove native sale string went from history form\r\n\r\n                            return saleService.saveSale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n                                $.unblockUI();\r\n                                if (isPartial !== true) {\r\n                                    //$scope.showPaymentSection = 2;\r\n                                    $scope.setPaymentFinished();\r\n\r\n                                    if (resp.Success && !!$scope.errorMessage) {\r\n                                        errorService.showError(gettextCatalog.getString('Some refunds were unsuccessful, so the amount was transferred to store credit instead.') + '<br/>' + $sсope.errorMessage);\r\n                                    }\r\n\r\n                                    if (!resp.Success && resp.status === -2 && resp.message) {\r\n                                        errorService.showError(resp.message);\r\n                                    }\r\n\r\n                                    if (!!currentSaleObject.UpdateReceiptView) {\r\n                                        var lastRegistryPiece = configService.lastRegistryID.split('-');\r\n                                        $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" + Math.floor(Date.now() / 1000).toString(36) + \"-\" + parseInt($scope.currentSale.ClearOrderNumber, 10).toString(36);\r\n                                        updateReceipt();\r\n                                    }\r\n\r\n                                    $timeout(function () {\r\n                                        $scope.triggerSendEmailReceipt(resp);\r\n                                    }, 500);       \r\n\r\n                                    if (resp.Success && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                                        return saleService.removeParkedSale(currentSaleObject.OrderID, \"parked\");\r\n                                    }\r\n                                } else {\r\n                                    if (resp.Success === false && resp.message) {\r\n                                        // track payment processing error\r\n                                        orderStatusService.trackOrder($scope.currentSale.ID, configService.registrySalesID, 'payment_processing_error', $scope.registrySalesID);\r\n                                        \r\n                                        if (!!$scope.lastPaymentID) {\r\n                                            cancelLastPayment();\r\n                                        }\r\n    \r\n                                        console.log('Error:' + resp.message);\r\n                                        var deferred3 = $q.defer();\r\n                                        deferred3.reject(resp.message);\r\n                                        return deferred3.promise;\r\n                                    }\r\n\r\n                                    $scope.lastPaymentID = null;\r\n                                    var deferred2 = $q.defer();\r\n                                    deferred2.resolve(null);\r\n                                    return deferred2.promise;\r\n                                }\r\n                            }, function (err) {\r\n                                $.unblockUI();\r\n\r\n                                // process error\r\n                                if (isPartial !== true) {\r\n                                    //$scope.showPaymentSection = 2;\r\n                                    $scope.setPaymentFinished();\r\n                                    if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                        showOfflinePaymentsDialog();\r\n                                    } else {\r\n                                        if (!!$scope.lastPaymentID) {\r\n                                            cancelLastPayment();\r\n                                        }\r\n\r\n                                        // show error and login page once more\r\n                                        console.log('Error:' + err);\r\n                                        var deferred3 = $q.defer();\r\n                                        deferred3.reject(err);\r\n                                        return deferred3.promise;\r\n                                    }\r\n                                } else {\r\n                                    if (!!$scope.lastPaymentID) {\r\n                                        // remove last payment payment from payload\r\n                                        $scope.currentSale.Payments = $scope.currentSale.Payments.filter(function (p) {\r\n                                            return p.ID !== $scope.lastPaymentID;\r\n                                        });\r\n                                        // restore previous cach rounding value\r\n                                        $scope.currentSale.CashRounding = $scope.lastCashRounding;\r\n                                        $scope.lastPaymentID = null;\r\n                                    }\r\n\r\n                                    console.log('Error:' + err);\r\n                                    var deferred3 = $q.defer();\r\n                                    deferred3.reject(err);\r\n                                    return deferred3.promise;\r\n                                }\r\n                            });\r\n                        })\r\n                        .catch(function (err) {\r\n                            $scope.showPaymentSection = 1;\r\n                            // remove credit card payment from payments as it's failed\r\n                            //   $scope.currentSale.Payments = $scope.currentSale.Payments.filter(function (el) { return el.ShortName != 'credit card'; });\r\n                            // remove last payment payment from payload\r\n                            if (!!$scope.lastPaymentID)\r\n                                $scope.currentSale.Payments = $scope.currentSale.Payments.filter(function (p) {\r\n                                    return p.ID !== $scope.lastPaymentID;\r\n                                });\r\n\r\n                            $scope.lastPaymentID = null;\r\n\r\n                            // restore rest of sum to pay\r\n                            calculateSums();\r\n\r\n                            updateReceipt();\r\n\r\n                            // enable checkout deletion\r\n                            $scope.canDiscardSale = true;\r\n                            $.unblockUI();\r\n\r\n                            if (typeof (err) === 'string')\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                }, null, null, true);\r\n                            else if (typeof (err.message) === 'string')\r\n                                errorService.showError(err.message, function () {\r\n                                    $scope.showDialog();\r\n                                }, null, null, true);\r\n                            else if (!!err && !!err.response && typeof (err.response.errorDescription) === 'string')\r\n                                errorService.showError(err.response.errorDescription, function () {\r\n                                    $scope.showDialog();\r\n                                }, null, null, true);\r\n                            else\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                }, null, null, true);\r\n                        })\r\n                        .finally(function (res) {\r\n                            $.unblockUI();\r\n\r\n                        });\r\n                }\r\n\r\n                $scope.cancelCashRoundingDialog = function () {\r\n                    var $windowElement = $('#cashRoundingModal');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                $scope.closeCreditCardProcessingErrorDialog = function () {\r\n                    var $windowElement = $('#creditCardProcessingErrorModal');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                $scope.closeCreditCardProcessingErrorDialog2 = function () {\r\n                    var $windowElement = $('#creditCardProcessingErrorModal2');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                function cashRoundingDialog() {\r\n                    var $windowElement = $('#cashRoundingModal');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.cashPay = function (roundedAmount) {\r\n                    var amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n\r\n                    if (!$scope.cashMode) {\r\n                        // check if we can show extened cash pay form\r\n                        if ((!($scope.saleType === 'standaloneReturn' || $scope.saleType === 'return') ||\r\n                                $scope.operationName === 'Exchange') && amount > 0) {\r\n\r\n                            if (amount != helperService.DEARRound(parseFloat($scope.formHolder.sumToPayLeft), 2)) {\r\n                                $scope.formHolder.realCashSum = amount;\r\n                                $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft;\r\n                                amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n                            }\r\n\r\n                            $scope.cashMode = true;\r\n                            $scope.banknotePredictions = saleService.predictCashPayments(amount);\r\n                            $scope.updateSizesInCashPayment();\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    var isLoyalty = false;\r\n                    if ($scope.currentSale.customer.ID != null && $scope.currentSale.customer.EnableLoyaltyPoints == true) {\r\n                        isLoyalty = true;\r\n                    }\r\n                    if (!roundedAmount) {\r\n                        $scope.roundedAmount = helperService.roundCash(amount);\r\n\r\n                        if (amount !== $scope.roundedAmount) {\r\n                            if (!($scope.currentSale.processZero === true && $scope.roundedAmount == 0)) {\r\n                                cashRoundingDialog();\r\n                                return;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    $scope.currentSale.processZero = false;\r\n                    $.blockUI();\r\n                    $scope.cashMode = false;\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n\r\n                    if ($scope.roundedAmount > 0) {\r\n                        deferred.promise = deferred.promise.then(function () {\r\n                            return printService.openCashDrawer();\r\n                        });\r\n                    }\r\n\r\n                    deferred.promise = deferred.promise.then(function () {\r\n                            $.unblockUI();\r\n                            return addPaymentToSaleObject($scope.cashRegistryPaymentProcessorID, amount, 'Cash', isLoyalty, 'cash');\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        });\r\n\r\n                    return deferred.promise;\r\n                };\r\n\r\n                $scope.checkPayment = function (payment) {\r\n                    const amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n\r\n                    if (!$scope.creditCardMode) {\r\n                        // check if we can show extened credit card pay form\r\n                        if ((!($scope.saleType === 'standaloneReturn' || $scope.saleType === 'return') ||\r\n                                $scope.operationName === 'Exchange') && amount > 0) {\r\n\r\n                            if (amount != helperService.DEARRound(parseFloat($scope.formHolder.sumToPayLeft), 2)) {\r\n                                $scope.formHolder.realCashSum = amount;\r\n                                $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft;\r\n                                amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n                            }\r\n\r\n                            $scope.creditCardMode = true;\r\n                            \r\n                            return;\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.creditCardPay = function () {\r\n                    try {\r\n\r\n                        if($scope.paymentDisplayOrder === 2)\r\n                        {\r\n                            var amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n\r\n                            if (!$scope.creditCardMode) {\r\n                                // check if we can show extened credit card pay form\r\n                                if ((!($scope.saleType === 'standaloneReturn' || $scope.saleType === 'return') ||\r\n                                        $scope.operationName === 'Exchange') && amount > 0) {\r\n        \r\n                                    if (amount != helperService.DEARRound(parseFloat($scope.formHolder.sumToPayLeft), 2)) {\r\n                                        $scope.formHolder.realCashSum = amount;\r\n                                        $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft;\r\n                                        amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n                                    }\r\n        \r\n                                    $scope.creditCardMode = true;\r\n                                    \r\n                                    return;\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        $scope.creditCardMode = false;\r\n\r\n                        if (configService.lastSurchargeTax != 'null') {\r\n\r\n                            if ($scope.restoredSaleObj && $scope.restoredSaleObj.payment) {\r\n                                $scope.creditCardPayWithSurcharge($scope.restoredSaleObj.payment.Surcharge);\r\n                            } else {\r\n                                $.blockUI();\r\n                                saleService.getSurcharge()\r\n                                    .then(function (surcharges) {\r\n                                        //console.log(surcharges);\r\n                                        $.unblockUI();\r\n\r\n                                        var srchs = $scope.getPaymentMethodSurcharges('credit card', surcharges);\r\n\r\n                                        if (srchs && srchs.length > 0) {\r\n                                            $rootScope.$broadcast('addSurcharge.show', {\r\n                                                surcharges: srchs,\r\n                                                realSum: $scope.formHolder.realSum,\r\n                                                tax: configService.lastSurchargeTax,\r\n                                                taxInclucive: $scope.posTaxInclucive\r\n                                            });\r\n                                        }\r\n                                        //if (!!surcharges && surcharges.length > 0) {\r\n                                        //    $rootScope.$broadcast('addSurcharge.show', { surcharges: surcharges, realSum: $scope.formHolder.realSum, tax: configService.lastSurchargeTax, taxInclucive: $scope.posTaxInclucive });\r\n                                        //}\r\n                                        else {\r\n                                            $scope.creditCardPayWithSurcharge();\r\n                                        }\r\n                                    })\r\n                                    .catch(function (err) {\r\n                                        calculateSums();\r\n\r\n                                        $.unblockUI();\r\n                                        errorService.showError(err);\r\n                                    });\r\n                            }\r\n                        } else {\r\n                            $scope.creditCardPayWithSurcharge();\r\n                        }\r\n                    } catch (ex) {\r\n                        calculateSums();\r\n\r\n                        $.unblockUI();\r\n                        errorService.showError(ex.message);\r\n                    }\r\n                };\r\n\r\n                $scope.creditCardPayWithSurcharge = function (surcharge) {\r\n                    var isLoyalty = false;\r\n                    if ($scope.currentSale.customer.ID != null && $scope.currentSale.customer.EnableLoyaltyPoints == true) {\r\n                        isLoyalty = true;\r\n                    }\r\n                    addPaymentToSaleObject($scope.creditCardPaymentProcessorID, $scope.formHolder.realSum, 'Credit Card', isLoyalty, 'credit card', null, surcharge);\r\n                };\r\n\r\n                $scope.customPay = function (paymentProcessorID, surcharge) {\r\n                    var obj = $scope.getCustomPaymentMethod(paymentProcessorID);\r\n                    if (obj) {\r\n\r\n                        if ($scope.currentSale.OrderType !== \"ONACCOUNT\" &&\r\n                            $scope.currentSale.OrderType !== \"LAYBY\" &&\r\n                            configService.lastSurchargeTax != 'null') {\r\n                            $.blockUI();\r\n                            saleService.getSurcharge()\r\n                                .then(function (surcharges) {\r\n                                    $.unblockUI();\r\n                                    var srchs = $scope.getPaymentMethodSurcharges(obj.loweredPaymentMethodName, surcharges);\r\n\r\n                                    if (srchs && srchs.length > 0) {\r\n                                        $rootScope.$broadcast('addSurcharge.show', {\r\n                                            paymentProcessorID: paymentProcessorID,\r\n                                            isCustom: true,\r\n                                            surcharges: srchs,\r\n                                            realSum: $scope.formHolder.realSum,\r\n                                            tax: configService.lastSurchargeTax,\r\n                                            taxInclucive: $scope.posTaxInclucive\r\n                                        });\r\n                                    } else\r\n                                        $scope.customPayWithSurcharge(paymentProcessorID);\r\n                                })\r\n                                .catch(function (err) {\r\n                                    calculateSums();\r\n\r\n                                    $.unblockUI();\r\n                                    errorService.showError(err);\r\n                                });\r\n                        } else\r\n                            $scope.customPayWithSurcharge(paymentProcessorID);\r\n                    }\r\n                };\r\n\r\n\r\n                $scope.customPayWithSurcharge = function (paymentProcessorID, surcharge) {\r\n                    var obj = $scope.getCustomPaymentMethod(paymentProcessorID);\r\n                    if (obj != null) {\r\n\r\n                        var isLoyalty = false;\r\n                        if ($scope.currentSale.customer.ID != null && $scope.currentSale.customer.EnableLoyaltyPoints == true) {\r\n                            isLoyalty = true;\r\n                        }\r\n\r\n                        addPaymentToSaleObject(obj.paymentProcessorID, $scope.formHolder.realSum, obj.paymentMethodName, isLoyalty, obj.loweredPaymentMethodName, null, surcharge);\r\n                    }\r\n                };\r\n\r\n                $scope.customPayRet = function (pay) {\r\n                    var obj = $scope.getCustomPaymentMethodByShortName(pay.shortName);\r\n                    if (obj) {\r\n                        var sum = pay.amount;\r\n                        var sr = null;\r\n                        if (!!pay.Surcharge) {\r\n                            if (pay.Surcharge.AmountToRefund > 0 && pay.Surcharge.RefundSurcharge === true) {\r\n                                sum += pay.Surcharge.AmountToRefund;\r\n                            }\r\n\r\n                            sr = pay.Surcharge;\r\n                            addSurchargeToRefund(sr, sum, null, null, null, true);\r\n                            sr.isAddedToPayment = true;\r\n                        }\r\n\r\n                        addPaymentToRefund(obj.paymentProcessorID, sum, obj.paymentMethodName, true, obj.loweredPaymentMethodName, null, null, null, null, sr);\r\n                    }\r\n                };\r\n\r\n                $scope.giftCardPay = function (giftCardID, giftCardCode, amount) {\r\n                    if (amount < 0) {\r\n                        throw new Error(gettextCatalog.getString(\"Something went wrong: cannot pay negative amount with a gift card.\"));\r\n                    }\r\n                    var isLoyalty = false;\r\n                    if ($scope.currentSale.customer.ID != null && $scope.currentSale.customer.EnableLoyaltyPoints == true) {\r\n                        isLoyalty = true;\r\n                    }\r\n                    addPaymentToSaleObject(giftCardID, amount, gettextCatalog.getString('Gift card:') + giftCardCode, isLoyalty, 'gift card', giftCardCode);\r\n                };\r\n\r\n                $scope.allowLayby = function () {\r\n                    var allow =\r\n                        ((!$scope.currentSale.OrderType &&\r\n                                (!$scope.currentSale.Payments || $scope.currentSale.Payments.length === 0)) && configService.CanDoLayby ||\r\n                            $scope.currentSale.OrderType === 'LAYBY') &&\r\n                        $scope.currentSale.customer.ID !== null &&\r\n                        $scope.laybyPaymentProcessorID !== null &&\r\n                        $scope.saleType !== 'return' && $scope.formHolder.sumToPayLeft >= 0 &&\r\n                        !$scope.hasGiftCardCodes()                        \r\n                        ;\r\n\r\n                    return allow;\r\n                };\r\n\r\n                $scope.closeDiscardDialog = function (cancel) {};\r\n\r\n                $scope.showAskPaymentDialog = function () {\r\n                    $scope.messageBoxText = gettextCatalog.getString(\"Would you like to add payment?\");\r\n                    $scope.messageBoxYes = gettextCatalog.getString(\"Yes\");\r\n                    $scope.messageBoxNo = gettextCatalog.getString(\"No\");\r\n                    $scope.closeDiscardDialog = $scope.closeAskPaymentDialog;\r\n\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.closeAskPaymentDialog = function (cancel) {\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    if (cancel) {\r\n                        $.blockUI();\r\n                        helperService.closeDialog($windowElement, function () {\r\n                            //$scope.showPaymentSection = 2;\r\n                            $scope.setPaymentFinished();\r\n                            $timeout(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                        });\r\n                    } else {\r\n                        helperService.closeDialog($windowElement);\r\n                    }\r\n                };\r\n\r\n                $scope.closeAskSureLayByDialog = function (cancel) {\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    if (!cancel) {\r\n                        helperService.closeDialog($windowElement, function () {\r\n                            $scope.laybyPayDialog();\r\n                        });\r\n\r\n                    } else {\r\n                        helperService.closeDialog($windowElement);\r\n                    }\r\n                };\r\n\r\n                $scope.closeAskSureOnAccountDialog = function (cancel) {\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    if (!cancel) {\r\n                        helperService.closeDialog($windowElement, function () {\r\n                            $scope.onAccountPay();\r\n                        });\r\n                    } else {\r\n                        helperService.closeDialog($windowElement);\r\n                    }\r\n                };\r\n\r\n                $scope.askSureLayBy = function () {\r\n                    $scope.messageBoxText = gettextCatalog.getString(\"You won't be able to change the sale after clicking \"\r\n                                                                + \"\\\"Yes, this is a layby sale\\\", would you like to continue?\");\r\n                    $scope.messageBoxYes = gettextCatalog.getString(\"Yes, this is a layby sale\");\r\n                    $scope.messageBoxNo = gettextCatalog.getString(\"No\");\r\n                    $scope.closeDiscardDialog = $scope.closeAskSureLayByDialog;\r\n\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.askSureOnAccount = function () {\r\n                    $scope.messageBoxText = gettextCatalog.getString(\"You won't be able to change the sale after clicking \"\r\n                                                                + \"\\\"Yes, this is an on account sale\\\", would you like to continue?\");\r\n                    $scope.messageBoxYes = gettextCatalog.getString(\"Yes, this is an on account sale\");\r\n                    $scope.messageBoxNo = gettextCatalog.getString(\"No\");\r\n                    $scope.closeDiscardDialog = $scope.closeAskSureOnAccountDialog;\r\n\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.laybyPay = function (dt) {\r\n                    $.blockUI();\r\n                    $scope.currentSale.OperationID = null;\r\n\r\n                    if (!!dt) {\r\n                        $scope.currentSale.LaybyDate = helperService.toDateFromDatepickerParameter(dt);\r\n                    }\r\n\r\n                    var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'LAYBY');\r\n\r\n                    if ($scope.currentSale.OrderType === 'LAYBY') {\r\n                        //$scope.showPaymentSection = 2;\r\n                        $scope.setPaymentFinished();\r\n\r\n                        saleService.laybySale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n\r\n                            $.unblockUI();\r\n                        }, function (err) {\r\n                            // process error\r\n                            $.unblockUI();\r\n                            if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                showOfflinePaymentsDialog();\r\n                            } else {\r\n                                // show error and login page once more\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                });\r\n                            }\r\n                        });\r\n                    } else {\r\n                        saleService.laybySale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n\r\n                            $.unblockUI();\r\n                            $scope.showAskPaymentDialog();\r\n\r\n                        }, function (err) {\r\n                            // process error\r\n                            $.unblockUI();\r\n                            if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                showOfflinePaymentsDialog();\r\n                            } else {\r\n                                // show error and login page once more\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                });\r\n                            }\r\n                        });\r\n\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.allowOnAccount = function () {\r\n                    var allow =\r\n                        configService.canSellOnAccount !== false &&\r\n                        ((!$scope.currentSale.OrderType &&\r\n                                (!$scope.currentSale.Payments || $scope.currentSale.Payments.length == 0)) ||\r\n                            $scope.currentSale.OrderType === 'ONACCOUNT') &&\r\n                        $scope.currentSale.customer.ID !== null &&\r\n                        $scope.saleType !== 'return' &&\r\n                        $scope.formHolder.sumToPayLeft >= 0 &&\r\n                        !$scope.hasGiftCardCodes();\r\n\r\n                    return allow;\r\n                };\r\n\r\n                $scope.isDisableOffline = function () {\r\n                    return configService.isOnline === false;\r\n                };\r\n\r\n                $scope.disableLoyaltyPayment = function () {\r\n                    var disable = !$scope.currentSale.customer.ID ||\r\n                        !$scope.loyaltyPaymentProcessorID ||\r\n                        $scope.disableLoyalty === true ||\r\n                        $scope.currentSale.CustomerLoyaltyPointsRemaining <= 0 ||\r\n                        $scope.currentSale.customer.LoadedFromLocalDb === true ||\r\n                        $scope.saleType === 'return' ||\r\n                        $scope.formHolder.sumToPayLeft < 0;\r\n                    return disable;\r\n                };\r\n\r\n                $scope.disableStoreCreditsPayment = function () {\r\n                    var disable = !$scope.currentSale.customer.ID ||\r\n                        !$scope.storeCreditsPaymentProcessorID ||\r\n                        $scope.currentSale.customer.LoadedFromLocalDb === true ||\r\n                        ($scope.currentSale.customer.StoreCredits === 0 && $scope.saleType !== 'return') ||\r\n                        $scope.formHolder.sumToPayLeft < 0;\r\n\r\n                    return disable;\r\n                };\r\n\r\n                $scope.onAccountPay = function () {\r\n                    $.blockUI();\r\n                    $scope.currentSale.OperationID = null;\r\n                    $scope.email.receiptEmail = null;\r\n\r\n                    if (!!$scope.currentSale.SelectedContact &&\r\n                        $scope.currentSale.SelectedContact.Email) {\r\n                        $scope.email.receiptEmail = $scope.currentSale.SelectedContact.Email;\r\n                    }\r\n\r\n                    var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'ONACCOUNT');\r\n\r\n                    if ($scope.currentSale.OrderType === 'ONACCOUNT') {\r\n\r\n\r\n                        saleService.onaccountSale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n                            helperService.storeCurrentSale(null);\r\n                            //$scope.showPaymentSection = 2;\r\n                            $scope.setPaymentFinished();\r\n                            $.unblockUI();\r\n                        }, function (err) {\r\n                            // process error\r\n                            $.unblockUI();\r\n                            if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                showOfflinePaymentsDialog();\r\n                            } else {\r\n                                // show error and login page once more\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                });\r\n                            }\r\n                        });\r\n                    } else {\r\n                        saleService.onaccountSale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n                            helperService.storeCurrentSale(null);\r\n                            $.unblockUI();\r\n\r\n                            $scope.showAskPaymentDialog();\r\n                        }, function (err) {\r\n                            // process error\r\n                            $.unblockUI();\r\n                            if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                showOfflinePaymentsDialog();\r\n                            } else {\r\n                                // show error and login page once more\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                });\r\n                            }\r\n                        });\r\n                    }\r\n                };\r\n\r\n                $scope.loyaltyPay = function (fromDialog) {\r\n\r\n                    $scope.isValidAmount = true;\r\n                    $scope.invalidPaymentAmount = '';\r\n\r\n                    if (parseFloat($scope.formHolder.realSum) > $scope.paymentValidation.loyaltyPointsAmount) {\r\n                        $scope.isValidAmount = false;\r\n                        $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                    }\r\n\r\n                    if ($scope.isValidAmount === false) {\r\n                        return;\r\n                    }\r\n\r\n                    if ($scope.currentSale.CustomerLoyaltyPointsRemaining < parseFloat($scope.formHolder.realSum)) {\r\n                        if (fromDialog === true) {\r\n                            addPaymentToSaleObject($scope.loyaltyPaymentProcessorID, $scope.currentSale.CustomerLoyaltyPointsRemaining, 'Loyalty', false, 'loyalty');\r\n                        } else {\r\n                            loyaltyPaymentDialog();\r\n                        }\r\n                    } else {\r\n                        // do not subtract preventively. This will break initial customer loylaty balance\r\n                        // $scope.currentSale.customer.LoyaltyPoints -= parseFloat($scope.formHolder.realSum);\r\n                        addPaymentToSaleObject($scope.loyaltyPaymentProcessorID, $scope.formHolder.realSum, 'Loyalty', false, 'loyalty');\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.storeCreditsPay = function (fromDialog) {\r\n                    $scope.isValidAmount = true;\r\n                    $scope.invalidPaymentAmount = '';\r\n\r\n                    if (parseFloat($scope.formHolder.realSum) > $scope.paymentValidation.storeCreditAmount) {\r\n                        $scope.isValidAmount = false;\r\n                        $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                    }\r\n\r\n                    if ($scope.isValidAmount === false) {\r\n                        return;\r\n                    }\r\n\r\n\r\n                    if ($scope.currentSale.customer.StoreCredits < parseFloat($scope.formHolder.realSum) && parseFloat($scope.formHolder.realSum) > 0) {\r\n                        if (fromDialog === true) {\r\n                            addPaymentToSaleObject($scope.storeCreditsPaymentProcessorID, $scope.currentSale.customer.StoreCredits, 'Store Credits', true, 'store credits');\r\n                            $scope.currentSale.customer.StoreCredits = 0;\r\n                        } else {\r\n                            storeCreditPaymentDialog();\r\n                        }\r\n                    } else {\r\n                        $scope.currentSale.customer.StoreCredits -= parseFloat($scope.formHolder.realSum);\r\n                        addPaymentToSaleObject($scope.storeCreditsPaymentProcessorID, $scope.formHolder.realSum, 'Store Credits', true, 'store credits');\r\n                    }\r\n                };\r\n\r\n                function loyaltyPaymentDialog() {\r\n\r\n                    $scope.dialogMode = 'loyaltypartialpayment';\r\n\r\n                    var title = '<span>' + gettextCatalog.getString('Pay %0 with loyalty').replace('%0', '{{currentSale.CustomerLoyaltyPointsRemaining |currency}}') + '</span>';\r\n                    title = $compile(title)($scope);\r\n\r\n                    helperService.showCustomDialog(\r\n                        title,\r\n                        gettextCatalog.getString('You can only redeem up to the value of your current loyalty balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.'),\r\n                        gettextCatalog.getString('Continue'),\r\n                        gettextCatalog.getString('Close'));\r\n                }\r\n\r\n                function storeCreditPaymentDialog() {\r\n\r\n                    $scope.dialogMode = 'storecreditpartialpayment';\r\n\r\n                    var title = '<span>' + gettextCatalog.getString('Pay %0 with store credits').replace('%0', '{{currentSale.customer.StoreCredits |currency}}') + '</span>';\r\n                    title = $compile(title)($scope);\r\n\r\n                    helperService.showCustomDialog(\r\n                        title,\r\n                        gettextCatalog.getString('You can only redeem up to the value of your current store credits balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.'),\r\n                        gettextCatalog.getString('Continue'),\r\n                        gettextCatalog.getString('Close'));\r\n                }\r\n\r\n                $scope.endPayment = function () {\r\n                    window.localStorage.setItem('continueSale', null);\r\n                    $scope.goBack();\r\n                    $scope.cleanSale();\r\n                    $scope.searchText = null;\r\n                    $scope.searchType = 'quickKeySearch';\r\n                    $scope.search(); // quick key search\r\n                };\r\n\r\n                $scope.showDialog = function () {\r\n                    helperService.showDialog();\r\n                };\r\n\r\n                /*$scope.endPayment = function () {\r\n                    var eml = $scope.receiptHolder.receiptForm.receiptEmail;\r\n                };*/\r\n\r\n                $scope.addCustomer = function () {\r\n                    $scope.hideMenuDropdown();\r\n                    if ($scope.canChangeCustomer === true) {\r\n                        // var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        var customer = $scope.currentSale.customer;\r\n\r\n                        $scope.searchTextLive = '';\r\n                        $('#searchCustomerText').val(\"\");\r\n                        $rootScope.$broadcast('addCustomer.show', Object.assign({ showViewDetails: true }, customer));\r\n                    }\r\n                };\r\n\r\n                $scope.addShippingAddress = function () {\r\n                    $scope.hideMenuDropdown();\r\n                    if ($scope.canChangeCustomer === true) {\r\n                        const customer = $scope.currentSale.customer;\r\n                        \r\n                        let selectedAddressData = null;\r\n                        if ($scope.currentSale.CustomerShippingAddressLine1) {\r\n                            selectedAddressData = {\r\n                                Line1: $scope.currentSale.CustomerShippingAddressLine1,\r\n                                Line2: $scope.currentSale.CustomerShippingAddressLine2,\r\n                                City: $scope.currentSale.CustomerShippingCity,\r\n                                State: $scope.currentSale.CustomerShippingProvince,\r\n                                Postcode: $scope.currentSale.CustomerShippingZip,\r\n                                Country: $scope.currentSale.CustomerShippingCountry\r\n                            }\r\n                        }\r\n                        $scope.searchTextLive = '';\r\n                        $('#searchShippingAddrText').val(\"\");\r\n                        $rootScope.$broadcast('addShippingAddress.show',{customerAddressData: customer.Addresses, selectedAddressData});\r\n                    }\r\n                };\r\n\r\n                $scope.addSalesRepresentative = function () {\r\n                    $scope.hideMenuDropdown();\r\n\r\n                    if ($scope.canChangeSalesRepresentative === true) {\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        var sr = isNewSale ? $scope.currentSale.SalesRepresentative : $scope.currentSale.salesRepresentative;\r\n\r\n                        $scope.searchTextLive = '';\r\n                        $('#searchSalesRepresentativeText').val(\"\");\r\n                        $rootScope.$broadcast('addSalesRepresentative.show', sr);\r\n                    }\r\n                };\r\n\r\n                $scope.unsetWarning = false;\r\n                $scope.unsetTimer = null;\r\n                $scope.unsetCustomer = function () {\r\n                    // var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    var customer = $scope.currentSale.customer;\r\n\r\n                    $scope.dialogMode = 'remove-customer';\r\n                    helperService.showCustomDialog(gettextCatalog.getString(''),\r\n                        gettextCatalog.getString('Would you like to remove this customer: ') + customer.Name + ' from the sale?',\r\n                        gettextCatalog.getString('Delete'),\r\n                        gettextCatalog.getString('Cancel'));\r\n                };\r\n\r\n                $scope.removeCustomerCallback = function () {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    $scope.currentSale.customer = {\r\n                        ID: null\r\n                    };\r\n                    \r\n                    $scope.removeSaleShippingAddress();\r\n\r\n                    $scope.currentSale.SelectedContact = null;\r\n                    clearLLDiscount();\r\n                    $scope.setDisableLoyaltyFlag();\r\n                    $scope.unsetWarning = false;\r\n\r\n                    $scope.raiseViewChanged();\r\n                    if ($scope.saleType === 'return') {\r\n                        $scope.refundNeedCustomer = true;\r\n                    }\r\n\r\n                    if (!isNewSale) {\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                        $scope.updateCheckoutProductPrice($scope.currentSale);\r\n                    } else {\r\n                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Setup, true);\r\n                    }\r\n\r\n                    updateReceipt();\r\n                    helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                    $scope.updateSizesInCheckout();\r\n\r\n                    return loyaltyService.clearCustomer();\r\n                };\r\n\r\n                $scope.removeSaleShippingAddress = function() {\r\n                    delete $scope.currentSale.CustomerShippingAddressLine1;\r\n                    delete $scope.currentSale.CustomerShippingAddressLine2;\r\n                    delete $scope.currentSale.CustomerShippingCity;\r\n                    delete $scope.currentSale.CustomerShippingCountry;\r\n                    delete $scope.currentSale.CustomerShippingProvince;\r\n                    delete $scope.currentSale.CustomerShippingZip;\r\n                }\r\n\r\n                $scope.unsetSalesRepresentativeWarning = false;\r\n                $scope.unsetSalesRepresentativeTimer = null;\r\n                $scope.unsetSalesRepresentative = function () {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    var sr = isNewSale ? $scope.currentSale.SalesRepresentative : $scope.currentSale.salesRepresentative;\r\n\r\n                    $scope.dialogMode = 'remove-salesrep';\r\n                    helperService.showCustomDialog(gettextCatalog.getString(''),\r\n                        gettextCatalog.getString('Would you like to delete sales representative:') + '<br/>' + sr.Name + '?',\r\n                        gettextCatalog.getString('Delete'));\r\n                };\r\n\r\n                $scope.removeSalesRepCallback = function () {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    if (!isNewSale)\r\n                        $scope.currentSale.salesRepresentative = {\r\n                            ID: null\r\n                        };\r\n                    else\r\n                        $scope.currentSale.SalesRepresentative = {\r\n                            ID: null\r\n                        };\r\n\r\n                    $scope.unsetSalesRepresentativeWarning = false;\r\n\r\n                    $scope.raiseViewChanged();\r\n                    updateReceipt();\r\n                    helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                };\r\n\r\n\r\n                $scope.parkSale = function () {\r\n                    $.blockUI();\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    $scope.currentSale.RealPaySum = isNewSale ? $scope.currentSale.Total : $scope.totalSum($scope.currentSale, true);\r\n                    $scope.currentSale.OperationID = null;\r\n                    var currentSaleObject = !isNewSale ? saleService.convertCurrentSaleForAPI($scope.currentSale, 'PARKED') :\r\n                        convertToAPI($scope.currentSale, SaleStatusType.Parked, false);\r\n\r\n                    return saleService.parkSale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n                        $scope.cleanSale();\r\n                        $.unblockUI();\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(true);\r\n                        return deferred.promise;\r\n                    }, function (err) {\r\n                        // process error\r\n                        $.unblockUI();\r\n                        // show error and login page once more\r\n                        errorService.showError(err, function () {\r\n                            $scope.showDialog();\r\n                        });\r\n                    });\r\n                };\r\n\r\n                $scope.printReceipt = function () {\r\n                    return printService.printReceipt();\r\n                };\r\n\r\n                $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n                function updateReceipt() {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    calculateSums(); // to correctly recalculate sums when customer is added/removed from sale\r\n\r\n                    var curSale = angular.copy($scope.currentSale);\r\n                    curSale.Date = helperService.getFormatedDateAlreadyLocal($scope.currentSale.DateNative);\r\n\r\n                    if (!isNewSale)\r\n                        saleService.updateReceipt(curSale, $scope.receiptSaleModel, $scope.formHolder.sumToPayLeft, $scope.currency, $scope.posTaxInclucive);\r\n                    else\r\n                        CalculatorHelperService.updateReceipt(curSale, $scope.receiptSaleModel, $scope.currency);\r\n                }\r\n\r\n                watchers.push($scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n                    checkOfflinePaymentMethods();\r\n                }));\r\n\r\n                function checkOfflinePaymentMethods() {\r\n                    if ($scope.currentSale.cantProcessOffline === true && configService.isOnline === false) {\r\n                        showOfflinePaymentsDialog();\r\n                    }\r\n                }\r\n\r\n                function showOfflinePaymentsDialog() {\r\n                    // $scope.offlinePaymentsModalInstance = $uibModal.open({\r\n                    //     animation: true,\r\n                    //     ariaLabelledBy: 'modal-title',\r\n                    //     ariaDescribedBy: 'modal-body',\r\n                    //     templateUrl: 'offlinePaymentsDIalogPartial.html',\r\n                    //     scope: $scope\r\n                    // });\r\n                    //removeOnlinePaymentMethods();\r\n\r\n                    $scope.dialogMode = 'removeOnlinePaymentMethods';\r\n\r\n                    helperService.showCustomDialog(\r\n                        gettextCatalog.getString('Offline mode'),\r\n                        gettextCatalog.getString('Sales with loyalty or store credit payments or returns cannot be processed without connection to the server.') + '<br />' +\r\n                        gettextCatalog.getString('Do you want to remove invalid payment methods?'),\r\n                        gettextCatalog.getString('Remove'),\r\n                        '',\r\n                        false);\r\n                }\r\n\r\n                // $scope.closeOfflinePaymentsDialog = function () {\r\n                //     $scope.offlinePaymentsModalInstance.dismiss('cancel');\r\n                // };\r\n\r\n                $scope.removeOnlinePaymentMethods = function () {\r\n                    var paymentToRemove = [];\r\n                    $.each($scope.currentSale.Payments, function (idx, el) {\r\n                        if (el.ShortName === 'loyalty' || el.ShortName === 'store credits') {\r\n                            removePayment(el, paymentToRemove);\r\n                        }\r\n                    });\r\n\r\n                    $.each(paymentToRemove, function (idx, el) {\r\n                        var index = $scope.currentSale.Payments.indexOf(el);\r\n                        $scope.currentSale.Payments.splice(index, 1);\r\n                    });\r\n                    $scope.currentSale.cantProcessOffline = false;\r\n                    $scope.showPaymentSection = 1;\r\n                    updateReceipt();\r\n                }\r\n\r\n                function removePayment(payment, paymentToRemove) {\r\n                    var amount = helperService.DEARRound(parseFloat(payment.Amount), 2);\r\n                    $scope.formHolder.sumToPayLeft += amount;\r\n                    $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft;\r\n\r\n                    $scope.currentSale.Balance = $scope.formHolder.sumToPayLeft;\r\n\r\n                    paymentToRemove.push(payment);\r\n                }\r\n\r\n                $scope.lockSearch = false;\r\n\r\n                watchers.push($scope.$on('scan.barcode', function (event, barcode) {\r\n                    var isCouponDialogVisible = $('#couponlDialogPartial:visible').length > 0;\r\n                    var isGiftCardDialogVisible = $('#giftCardSaleDlg:visible').length > 0;\r\n                    var isGiftCardPayDialogVisible = $('#giftCardPayDlg:visible').length > 0;\r\n                    var isScanSerialNumberDialogVisible = $('#scanSerialNumberDialogPartial:visible').length > 0;\r\n\r\n                    if (isGiftCardDialogVisible) {\r\n                        $scope.currentGiftCardProduct.giftCardCode = barcode;\r\n                    } else if (isGiftCardPayDialogVisible) {\r\n                        $scope.currentGiftCardPay.giftCardCode = barcode;\r\n                    } else if (isCouponDialogVisible) {\r\n                        $scope.couponCode = barcode;\r\n                        helperService.closeDialog('#couponlDialogPartial');\r\n                        $scope.couponDialogCallback('ok');\r\n                    } else if (isScanSerialNumberDialogVisible) {\r\n                        $scope.scanedSerialNumber = {\r\n                            value: barcode\r\n                        };\r\n                        $scope.submitScanSerialNumber();\r\n                    } else\r\n                        $scope.checkSearchAndWait(barcode);\r\n                }));\r\n\r\n                $scope.checkSearchAndWait = function (barcode) {\r\n                    if ($scope.lockSearch) {\r\n                        $timeout(function () {\r\n                            $scope.checkSearchAndWait(barcode);\r\n                        }, 100);\r\n                    } else {\r\n                        $scope.processBarcodeSearch(barcode);\r\n                    }\r\n                };\r\n\r\n                $scope.processBarcodeSearch = function (barcode) {\r\n                    $scope.searchType = 'barcode';\r\n                    $scope.lockSearch = true;\r\n                    console.log('lock search');\r\n                    $scope.searchText = barcode;\r\n                    $('#searchProductInput').val(barcode);\r\n                    var el = $('#searchProductInput')[0];\r\n                    el.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n                    el.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n            \r\n                    console.log('got scan.barcode: ' + barcode);\r\n\r\n                    $.blockUI();\r\n                    productsService.search(barcode)\r\n                        .then(function (res) {\r\n                            console.log('barcode search done: ' + res);\r\n                            // build page\r\n                            $scope.searchTotal = res;\r\n                            $scope.totalPages = Math.ceil(res / $scope.pageSize);\r\n                            $scope.isInFamily = false;\r\n                            return productsService.getSearchPage(0, $scope.pageSize);\r\n                        })\r\n                        .then(function (res) {\r\n                            var deferred = $q.defer();\r\n\r\n                            console.log('barcode search items done');\r\n                            $scope.searchItems = res.data;\r\n                            $scope.currentPage = res.page;\r\n                            // $scope.addImages(res.data);\r\n\r\n                            if(!res.data || res.data.length == 0 ){\r\n                                $scope.handleEmptyResult($scope.searchText);\r\n                            }\r\n\r\n                            deferred.resolve(res);\r\n                            return deferred.promise;\r\n                        })\r\n                        .finally(function () {\r\n                            var weightBasedBarcode = productsService.weightBasedBarcode;\r\n                            console.log('barcode search items add');\r\n                            var item = $scope.searchItems[0];\r\n                            if ($scope.searchItems && $scope.searchItems.length === 1 && $scope.searchItems[0].isFamily === 0) {\r\n                                var Value = weightBasedBarcode ? weightBasedBarcode.Value : null;\r\n                                $scope.addPaymentItem(item.ProductID, null, null, null, Value);\r\n                                $scope.scrollToAddedPaymentItem();\r\n                            } else if ($scope.searchItems && $scope.searchItems.length === 1 && $scope.searchItems[0].isFamily === 1) {\r\n                                productsService.getFamilySearchFull(item.ProductID).then(function (resp) {\r\n                                    $.each(resp, function (i, el) {\r\n                                        if (el.ProductCode === barcode || el.BarCode === barcode) {\r\n                                            $scope.addPaymentItem(el, true);\r\n                                            $scope.scrollToAddedPaymentItem();\r\n                                            return false;\r\n                                        }\r\n                                    });\r\n                                });\r\n                            }\r\n                            $.unblockUI();\r\n                            $scope.lockSearch = false;\r\n                            console.log('unlock search');\r\n\r\n                            $timeout(function () {\r\n                                fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n\r\n                            }, 100);\r\n                        });\r\n\r\n                    console.log('ready to next search');\r\n                };\r\n\r\n                $scope.showScanSerialNumberDialog = function (itemWithcallback) {\r\n                    $scope.scanedSerialNumber = {\r\n                        value: \"\"\r\n                    };\r\n                    $scope.scanSerialNumberWithCallback = itemWithcallback;\r\n                    var $windowElement = $('#scanSerialNumberDialogPartial');\r\n                    helperService.showDialog($windowElement, null, null, function () {\r\n                        $scope.scanSerialNumberWithCallback.skipScanDialog = false;\r\n                        $scope.scanedSerialNumber = {\r\n                            value: \"\"\r\n                        };\r\n                    });\r\n                }\r\n\r\n                $scope.closeScanSerialNumberDialog = function (cancelPressed) {\r\n                    var $windowElement = $('#scanSerialNumberDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n\r\n                    if (cancelPressed) {\r\n                        $scope.scanSerialNumberWithCallback.skipScanDialog = false;\r\n                        $scope.scanedSerialNumber = {\r\n                            value: \"\"\r\n                        };\r\n                    }\r\n                }\r\n\r\n                $scope.showNotNoundSerialNumberDialog = function (itemWithcallback) {\r\n\r\n                    var $windowElement = $('#notFoundSerialNumberDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.closeNotFoundSerialNumberDialog = function () {\r\n\r\n                    var $windowElement = $('#notFoundSerialNumberDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                }\r\n\r\n                $scope.submitScanSerialNumber = function () {\r\n\r\n                    productsService.checkProductSerialNumber($scope.scanSerialNumberWithCallback.itemID, configService.lastOutletID, $scope.scanedSerialNumber.value)\r\n                        .then(function (resp) {\r\n                            if (resp.found) {\r\n                                $scope.scanSerialNumberWithCallback.callback();\r\n                                $scope.closeScanSerialNumberDialog();\r\n                            } else {\r\n                                $scope.showNotNoundSerialNumberDialog();\r\n                            }\r\n                        }, function () {\r\n                            $scope.showNotNoundSerialNumberDialog();\r\n                        });\r\n\r\n                };\r\n\r\n                $scope.notNoundSerialNumberAddToCheckOut = function () {\r\n                    $scope.scanSerialNumberWithCallback.callback();\r\n                    $scope.closeNotFoundSerialNumberDialog();\r\n                    $scope.closeScanSerialNumberDialog(true);\r\n                };\r\n\r\n\r\n                /*Custom sale*/\r\n\r\n                $scope.showCustomSaleDialog = function () {\r\n                    $scope.hideMenuDropdown();\r\n                    if ($scope.operationName === 'Pay') {\r\n                        $scope.customSale = {};\r\n                        $scope.customSale.Quantity = 1;\r\n                        $scope.customSale.Price = 0;\r\n                        $scope.customSale.Title = '';\r\n                        $(\"#customSaleDialogPartial\").attr('isActive', 'true');\r\n                        var objScope = angular.element(document.getElementById('customSaleDialogPartial')).scope();\r\n                        objScope.customSaleForm.title.$setPristine(); // clear validation on title\r\n\r\n                        helperService.showDialog('#customSaleDialogPartial', function () {\r\n                            $('#customSalePorductName').focus();\r\n                        });\r\n\r\n                    }\r\n\r\n                    //$scope.customSale.Quantity = 1;\r\n                    //$scope.customSaleModalInstance = $uibModal.open({\r\n                    //    animation: true,\r\n                    //    ariaLabelledBy: 'modal-title',\r\n                    //    ariaDescribedBy: 'modal-body',\r\n                    //    templateUrl: 'customSaleDialogPartial.html',\r\n                    //    scope: $scope\r\n                    //});\r\n                }\r\n\r\n                $scope.closeCustomSaleDialog = function () {\r\n                    helperService.closeDialog('#customSaleDialogPartial');\r\n                    // $scope.customSaleModalInstance.dismiss('cancel');\r\n                };\r\n\r\n                $scope.addCustomSaleProduct = function (scp) {\r\n                    var productName = $scope.customSale.Title;\r\n                    if (productName && productName.length > 256) {\r\n                        errorService.showError(gettextCatalog.getString('Maximum name length is 256 characters.'));\r\n                        return false;\r\n                    }\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    var loyaltyEarning = parseFloat(configService.loyaltyEarning);\r\n\r\n                    var taxObject = saleService.getTaxObject($scope.currentSale);\r\n\r\n                    var priceWithTax = $scope.posTaxInclucive ? parseFloat($scope.customSale.Price) : parseFloat($scope.customSale.Price) + calculateTax(taxObject, parseFloat($scope.customSale.Price));\r\n\r\n                    // add new payment line\r\n                    var price = parseFloat($scope.customSale.Price);\r\n\r\n\r\n                    var pl = {\r\n                        ID: uuid2.newguid(),\r\n                        ProductID: uuid2.newguid(),\r\n                        Name: $scope.customSale.Title,\r\n                        Count: $scope.customSale.Quantity,\r\n                        Price: price, //price,\r\n                        BasePrice: parseFloat($scope.customSale.Price),\r\n                        Amount: (+$scope.customSale.Quantity) * price,\r\n                        Discount: 0, //discount,\r\n                        Note: '',\r\n                        Tax: calculateTax(taxObject, parseFloat($scope.customSale.Price * $scope.customSale.Quantity)),\r\n                        TaxRuleID: taxObject.ruleID,\r\n                        ProductTaxString: null,\r\n                        Taxes: taxObject,\r\n                        LoyaltyPoints: loyaltyEarning ? (priceWithTax * loyaltyEarning) : 0,\r\n                        LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        LoyaltyEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        PriceWithTax: priceWithTax,\r\n                        CanEdit: true,\r\n                        CanDelete: true,\r\n                        SaleType: 'customsale',\r\n                        BasePriceWithDiscount: parseFloat($scope.customSale.Price)\r\n                    };\r\n\r\n                    if (isNewSale) {\r\n                        CalculatorHelperService.addCheckoutItemsToSale($scope.currentSale, pl, saleService.getProductDeals(), $scope);\r\n                    } else {\r\n                        $scope.currentSale.CheckoutItems.push(pl);\r\n                        // $scope.customSaleModalInstance.dismiss('cancel');\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                    }\r\n\r\n                    helperService.closeDialog('#customSaleDialogPartial');\r\n                    $scope.updateSizesInCheckout();\r\n                };\r\n\r\n\r\n                $scope.returnSaleDialog = function () {\r\n                    $scope.showRefundAmountError = false;\r\n                    $scope.returnSaleDialogInstance = $uibModal.open({\r\n                        animation: true,\r\n                        ariaLabelledBy: 'modal-title',\r\n                        ariaDescribedBy: 'modal-body',\r\n                        templateUrl: 'returnSaleDialogPartial.html',\r\n                        scope: $scope\r\n                    });\r\n                }\r\n\r\n                $scope.closeReturnSaleDialog = function () {\r\n                    $scope.returnSaleDialogInstance.dismiss('cancel');\r\n                };\r\n\r\n                $scope.showRefundAmountError = false;\r\n\r\n                $scope.cancelSearchMode = function () {\r\n                    $scope.isSearchVisible = true;\r\n                    $scope.searchItems = null;\r\n                    $scope.page = 0;\r\n                    $scope.searchTotal = 0;\r\n                    $scope.searchText = null;\r\n                };\r\n\r\n                $scope.hideOptions = function (selPrn) {\r\n                    var prn = $(selPrn);\r\n                    var el = $(prn.attr('data-target'));\r\n                    el.collapse('hide');\r\n                    prn.attr('aria-expanded', 'false');\r\n                    prn.addClass('collapsed');\r\n                };\r\n\r\n                $scope.discountDlg = null; // is bound to discount popover object with methods from directive\r\n                $scope.discountCls = null;\r\n                $scope.discountTitle = gettextCatalog.getString(\"Paste code\");\r\n                $scope.LLCurrentValue = null;\r\n                $scope.LLDiscountType = null;\r\n                $scope.LLDiscountTitle = null;\r\n                $scope.LLCopiedCode = null;\r\n\r\n                $scope.showDiscountDlg = function () {\r\n                    if ($scope.canAddDiscount) {\r\n                        $scope.discountCls = loyaltyService.isLoyaltyEnabled() ? 'll-discount-zone' : null;\r\n                        var stagedCode = ($scope.LLCopiedCode && $scope.LLCopiedCode.customerID === $scope.currentSale.customer.ID) ? $scope.LLCopiedCode.code : null;\r\n                        $scope.LLCurrentValue = $scope.currentSale.customer.ID ? ($scope.currentSale.customer.LLDiscountCode || stagedCode) : null;\r\n                        if(!!$scope.LLCurrentValue && $scope.LLDiscountTitle !== null) {\r\n                            $scope.LLDiscountType = $scope.currentSale.isDiscountPercent ? 'percentage' : 'flat';\r\n                        }\r\n                        $scope.discountDlg.toggle();\r\n                    }\r\n                };\r\n\r\n                // callback\r\n\r\n                $scope.setDiscount = function (prm) {\r\n\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (typeof (prm) === 'boolean') {\r\n                        $scope.currentSale.manuallyAppliedDiscount = true;\r\n                        $scope.currentSale.isDiscountPercent = prm;\r\n                        $scope.discountDlg.hide(true);\r\n                        if ($scope.currentSale.customer.ID)\r\n                            $scope.currentSale.customer.LLDiscountCode = $scope.LLCurrentValue;\r\n                    } else if (typeof (prm) == 'string') {\r\n                        if (prm === 'clean') {\r\n                            $scope.discountDlg.clean();\r\n                            $scope.currentSale.manuallyAppliedDiscount = false;\r\n                        } else\r\n                        if (prm === 'cancel') {\r\n                            $scope.discountDlg.hide(false);\r\n                        }\r\n                    }\r\n\r\n                    if (isNewSale) {\r\n\r\n                        $timeout(function () {\r\n                            if (typeof ($scope.currentSale.Discount) === 'string') {\r\n                                $scope.currentSale.Discount = helperService.DEARRound(Number($scope.currentSale.Discount), 2);\r\n                            }\r\n\r\n                            if (needClearLLDiscount(prm)) {\r\n                                $scope.currentSale.manuallyAppliedDiscount = undefined;\r\n                                clearSaleLLDiscount();\r\n                            }\r\n\r\n                            var res = CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Total);\r\n                            if (res.updateSaleOrderDiscount !== null) {\r\n                                $scope.currentSale.Discount = helperService.DEARRound(res.updateSaleOrderDiscount, 2);\r\n                            }\r\n                            $scope.updateSizesInCheckout();\r\n                        });\r\n                    } else {\r\n                        if (needClearLLDiscount(prm)) {\r\n                            clearSaleLLDiscount();\r\n                        }\r\n                        helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                        $scope.updateSizesInCheckout();\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.removeItemFromCheckout = function (item) {\r\n                    if (item.CanEdit !== false) {\r\n                        $scope.checkOutItem = {};\r\n                        angular.copy(item, $scope.checkOutItem);\r\n\r\n                        if (item.ProductType == 'GiftCard') {\r\n                            $scope.dialogMode = 'giftCardRemoveItem';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('Would you like to remove gift card: ') + item.GiftCardCode + '?',\r\n                                gettextCatalog.getString('Remove'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                        } else if (item.SerialNumber) {\r\n                            $scope.dialogMode = 'serialNumberProductRemove';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('Would you like to remove product: ') + item.SerialNumber + '?',\r\n                                gettextCatalog.getString('Remove'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                        } else {\r\n                            $scope.dialogMode = 'ProductRemove';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('Would you like to remove this product?'),\r\n                                gettextCatalog.getString('Remove'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.showItemQuantityDlg = function (item, el) {\r\n                    if (item.CanEdit !== false) {\r\n                        $scope.checkOutItem = {};\r\n                        angular.copy(item, $scope.checkOutItem);\r\n\r\n                        if (item.ProductType == 'GiftCard') {\r\n                            return false;\r\n                            // $scope.dialogMode = 'giftCardRemoveItem';\r\n                            // helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                            //                                gettextCatalog.getString('Do you want to remove Gift Card: ') + item.GiftCardCode + '?',\r\n                            //                                gettextCatalog.getString('Remove'),\r\n                            //                                gettextCatalog.getString('Cancel'));\r\n                        } else if (item.SerialNumber) {\r\n                            $scope.dialogMode = 'serialNumberProductRemove';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString(\"Quantity for serial numbered products can't be changed. Would you like to delete this product from checkout?\"),\r\n                                gettextCatalog.getString('Remove'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                        } else {\r\n                            $timeout(function () {\r\n                                $scope.itemQuantityDlg.show(el);\r\n                            });\r\n                        }\r\n                    }\r\n\r\n                };\r\n\r\n                // callback\r\n                $scope.setQuantity = function (prm, event) {\r\n\r\n                    $timeout(function () {\r\n                        $scope.itemQuantityDlg.hide(true);\r\n                    });\r\n\r\n                    if (prm === true) {\r\n                        $timeout(function () {\r\n                            $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                if (el.ID === $scope.checkOutItem.ID) {\r\n                                    el.Count = $scope.checkOutItem.Count;\r\n\r\n                                    if (el.Count > 0 || (($scope.currentSale.StandAloneReturn || $scope.currentSale.StandAloneExchange) && el.Count < 0)) {\r\n                                        $scope.changeItemCount(el);\r\n                                    } else {\r\n                                        $scope.removePaymentItem(el.ID);\r\n                                        if (!helperService.showNewCheckoutUI($scope.currentSale))\r\n                                            saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                                    }\r\n\r\n                                    $timeout(function () {\r\n                                        fontMeasureService.updateFontSize('quantityValueParent', el.ID + '-quantityValue', 13.5);\r\n                                        fontMeasureService.updateFontSize('productQuantityParent', el.ID + '-productQuantity', 12);\r\n                                        fontMeasureService.updateFontSize('productPriceParent', el.ID + '-productPrice', 12);\r\n                                        fontMeasureService.updateFontSize('productDiscountParent', el.ID + '-productDiscount', 12);\r\n\r\n                                    }, 100);\r\n\r\n                                    return false;\r\n                                }\r\n                            });\r\n                        });\r\n                    } else if (typeof (prm) == 'string') {\r\n                        if (prm === 'clean') {\r\n                            $scope.removePaymentItem($scope.checkOutItem.ID);\r\n                        }\r\n                    }\r\n\r\n                    if (event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                    }\r\n                };\r\n\r\n                $scope.customDiscountDlg = null;\r\n\r\n                $scope.customDiscountSettings = {\r\n                    title: ''\r\n                };\r\n\r\n                $scope.tryShowCustomDiscountDlg = function (item, el) {\r\n                    if ($scope.canChangePrice || $scope.operationName === \"Refund\") {\r\n                        $scope.showCustomDiscountDlg(item, el);\r\n                    }\r\n                };\r\n\r\n                $scope.showCustomDiscountDlg = function (item, el) {\r\n                    var isNewVersion = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if ($scope.saleType === 'standaloneReturn')\r\n                        $scope.customDiscountSettings.title = \"Price\";\r\n                    else\r\n                        $scope.customDiscountSettings.title = \"Price or % discount\";\r\n\r\n                    if (item.CanEdit !== false) {\r\n                        $scope.checkOutItem = angular.copy(item);\r\n\r\n                        if ($scope.saleType === 'standaloneReturn') {\r\n                            if (isNewVersion !== true)\r\n                                $scope.checkOutItem.Discount = $scope.checkOutItem.Price;\r\n                            else\r\n                                $scope.checkOutItem.Discount = $scope.checkOutItem.FinalPrice;\r\n\r\n                            $scope.checkOutItem.CustomDiscountType = \"standaloneReturn\";\r\n                        } else {\r\n                            if (!$scope.checkOutItem.Discount)\r\n                                $scope.checkOutItem.Discount = 0;\r\n\r\n                            if (!$scope.checkOutItem.CustomDiscountType) {\r\n                                $scope.checkOutItem.CustomDiscountType = \"percent\";\r\n                                $scope.checkOutItem.Discount = 0;\r\n                            }\r\n                        }\r\n\r\n                        $timeout(function () {\r\n                            $scope.customDiscountDlg.show(el);\r\n                        });\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.customSetDiscount = function (prm) {\r\n                    var isNewVersion = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    $timeout(function () {\r\n                        $scope.customDiscountDlg.hide(true);\r\n                    });\r\n\r\n                    if (prm !== 'cancel') {\r\n                        $timeout(function () {\r\n                            if (!isNewVersion) {\r\n                                $scope.currentSale.manuallyAppliedDiscount = true;\r\n                                $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                    if (el.ID === $scope.checkOutItem.ID) {\r\n                                        if (prm === 'standaloneReturn') {\r\n                                            var price = -Math.abs($scope.checkOutItem.Discount);\r\n                                            el.Discount = 0;\r\n                                            el.CustomDiscountType = undefined;\r\n                                            el.Price = price;\r\n                                            el.Amount = price * el.Count;\r\n                                            el.BasePrice = price;\r\n                                            el.BasePriceWithDiscount = price;\r\n                                            el.PriceWithDiscount = price;\r\n                                        } else {\r\n                                            el.Discount = $scope.checkOutItem.Discount;\r\n                                            el.CustomDiscountType = prm;\r\n                                        }\r\n\r\n                                        $scope.changeItemCount(el); // actually no item count will be changed but this function does all we need to recalculate all\r\n\r\n                                        $timeout(function () {\r\n                                            fontMeasureService.updateFontSize('productPriceParent', el.ID + '-productPrice', 12);\r\n                                            fontMeasureService.updateFontSize('productDiscountParent', el.ID + '-productDiscount', 12);\r\n\r\n                                        }, 100);\r\n\r\n                                        return false;\r\n                                    }\r\n                                });\r\n                            } else {\r\n                                CalculatorHelperService.setCustomItemDiscount($scope.currentSale, saleService.getProductDeals(), $scope,\r\n                                    $scope.checkOutItem.ID,\r\n                                    $scope.checkOutItem.Discount, prm);\r\n\r\n                                $timeout(function () {\r\n                                    fontMeasureService.updateFontSize('productPriceParent', el.ID + '-productPrice', 12);\r\n                                    fontMeasureService.updateFontSize('productDiscountParent', el.ID + '-productDiscount', 12);\r\n\r\n                                }, 100);\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    if (event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.payDlg = null;\r\n\r\n                $scope.showPayDlg = function () {\r\n                    if ($scope.saleType === 'standaloneReturn' ||\r\n                        ($scope.saleType === 'return' && $scope.currentSale.Total < 0)) {\r\n                        if (!$scope.currentSale.customer ||\r\n                            !$scope.currentSale.customer.ID) {\r\n                            errorService.showError('Please add a customer for this refund.');\r\n                        } else {\r\n                            showReturnPaymentsDialog();\r\n                        }\r\n                    } else\r\n                        $scope.payDlg.toggle();\r\n                };\r\n\r\n                $scope.setPay = function (prm) {\r\n                    $scope.payDlg.hide(prm);\r\n                    if (prm === true) {\r\n                        $scope.payAmountChanged();\r\n\r\n                        $timeout(function () {\r\n                            fontMeasureService.updateFontSize('payAmountParent', 'payAmount', 18);\r\n                            $timeout(function () {\r\n                                $rootScope.$broadcast('recalculate');\r\n                            }, 100);\r\n\r\n                        }, 100);\r\n                    }\r\n                };\r\n\r\n                $scope.productOptionsDlg = null;\r\n                $scope.currentProductFamily = null;\r\n                $scope.showProductOptionsDlg = function (el) {\r\n                    $scope.productOptionsDlg.show(el);\r\n                };\r\n\r\n                $scope.addProductToCheckout = function (res) {\r\n                    $scope.productOptionsDlg.hide();\r\n                    $scope.currentProductFamily = null;\r\n\r\n                    if (!!res && (res instanceof OptionsTreeItem)) {\r\n                        $scope.addPaymentItem(res);\r\n                    }\r\n                };\r\n\r\n                $scope.currentNote = '';\r\n                $scope.noteMode = 'note'; // note - means simply add note, 'park' - means dialog after which sale wil be parked\r\n\r\n                $scope.callbackModal2 = function (code) {\r\n                    switch (code) {\r\n                        case 'delete':\r\n                            // do nothing as sale is already removed from parked sales\r\n                            //$.blockUI();\r\n                            //saleService.discardParkedSale($scope.currentSale.ID).then(function () {\r\n                            //    $scope.cleanSale();\r\n                            //    window.localStorage.setItem('continueSale', null);\r\n                            //})\r\n                            //.finally(function (res) {\r\n                            //    $.unblockUI();\r\n                            //});\r\n                            $scope.cleanSale();\r\n                            window.localStorage.setItem('continueSale', null);\r\n                            break;\r\n\r\n                        case 'clear':\r\n                            // save sale back to parked list as we have removed it when go to the sale page from the parked sales page\r\n                            $scope.parkSale()\r\n                                .then(function () {\r\n                                    $scope.cleanSale();\r\n                                    window.localStorage.setItem('continueSale', null);\r\n                                });\r\n\r\n                            break;\r\n                    }\r\n                };\r\n\r\n                $scope.showDiscardDialog = function (mode) {\r\n\r\n                    $scope.customModalDlg2Caption = '';\r\n                    $scope.customModalDlg2Text = gettextCatalog.getString('Would you like to delete the parked sale or clear the current sale?');\r\n                    $scope.customModalDlg2Buttons = [{\r\n                            name: gettextCatalog.getString('Cancel'),\r\n                            value: 'cancel'\r\n                        },\r\n                        {\r\n                            name: gettextCatalog.getString('Delete'),\r\n                            value: 'delete'\r\n                        },\r\n                        {\r\n                            name: gettextCatalog.getString('Clear'),\r\n                            value: 'clear'\r\n                        }\r\n                    ];\r\n\r\n                    helperService.showDialog('#customModalDlg2');\r\n                };\r\n\r\n\r\n                $scope.afterParkCallback = null;\r\n                $scope.showSkipButton = false;\r\n\r\n                $scope.showAddSaleNoteDialog = function (mode) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    $scope.hideMenuDropdown();\r\n\r\n                    if (!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length === 0) {\r\n                        return;\r\n                    }\r\n\r\n                    $scope.noteMode = !mode ? 'note' : mode;\r\n                    $scope.currentNote = !isNewSale ? $scope.currentSale.comment : $scope.currentSale.Comment;\r\n                    var $windowElement = $('#addNotesDialogModal');\r\n                    helperService.showDialog($windowElement, function () {\r\n                        $(\"#saleNoteArea\").focus();\r\n                    });\r\n\r\n                };\r\n\r\n                $scope.closeAddSaleNoteDialog = function (cancel) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    $scope.showSkipButton = false;\r\n\r\n                    if (cancel === false) {\r\n                        if (!isNewSale)\r\n                            $scope.currentSale.comment = $scope.currentNote;\r\n                        else\r\n                            $scope.currentSale.Comment = $scope.currentNote;\r\n                    }\r\n                    var fun = $scope.afterParkCallback;\r\n                    $scope.afterParkCallback = null;\r\n                    var $windowElement = $('#addNotesDialogModal');\r\n\r\n                    if (cancel === true || $scope.noteMode != 'park') {\r\n                        helperService.closeDialog($windowElement);\r\n                    } else\r\n                        helperService.closeDialog($windowElement, function () {\r\n\r\n                            if (cancel !== 'skip') {\r\n                                var p = $scope.parkSale();\r\n\r\n                                if (typeof (fun) === 'function') {\r\n                                    p = p.then(function (res) {\r\n                                        return fun();\r\n                                    });\r\n                                }\r\n\r\n                                return p;\r\n                            } else {\r\n                                if (typeof (fun) === 'function') {\r\n                                    $.blockUI();\r\n                                    var id = $scope.currentSale.ID;\r\n                                    $scope.cleanSale();\r\n                                    window.localStorage.setItem('continueSale', null);\r\n\r\n                                    p = saleService.discardParkedSale(id)\r\n                                        .then(function () {\r\n                                            return fun();\r\n                                        })\r\n                                        .finally(function (res) {\r\n                                            $.unblockUI();\r\n                                        });\r\n\r\n                                    return p;\r\n                                }\r\n                            }\r\n                        });\r\n                };\r\n\r\n                $scope.quickPayDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.showqQickPayDlg = function () {\r\n                    $(\"#customSaleDialogPartial\").attr('isActive', 'false');\r\n                    $scope.quickPayDlg.toggle();\r\n                };\r\n\r\n                // callback\r\n                $scope.setQuickQuantity = function (prm, event) {\r\n\r\n                    if (event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                    }\r\n                    $timeout(function () {\r\n                        if (typeof (prm) === 'boolean') {\r\n                            if (prm === true) {\r\n                                var scp = $scope.quickPayDlg.getScope();\r\n                                var model = scp.$$childHead.model;\r\n                                if (model <= 0)\r\n                                    scp.$$childHead.model = 1;\r\n                                $scope.quickPayDlg.hide(true);\r\n                            } else\r\n                                $scope.quickPayDlg.hide(false);\r\n                        } else if (typeof (prm) == 'string') {\r\n                            if (prm === 'clean') {\r\n                                var scp = $scope.quickPayDlg.getScope();\r\n                                scp.$$childHead.model = 0;\r\n                            } else if (prm === 'cancel') {\r\n                                $scope.quickPayDlg.hide(false);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    setTimeout(function () {\r\n                        $(\"#customSaleDialogPartial\").attr('isActive', 'true');\r\n                    }, 100);\r\n                };\r\n\r\n\r\n                $scope.quickPaySumDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.showQuickPaySumDlg = function () {\r\n                    $(\"#customSaleDialogPartial\").attr('isActive', 'false');\r\n                    $scope.quickPaySumDlg.toggle();\r\n                };\r\n\r\n                // callback\r\n                $scope.setQuickPrice = function (prm, event) {\r\n\r\n                    if (event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        if (typeof (prm) === 'boolean') {\r\n                            if (prm === true) {\r\n                                var scp = $scope.quickPaySumDlg.getScope();\r\n                                var model = scp.$$childHead.model;\r\n                                scp.$parent.invalidPrice = model <= 0;\r\n\r\n                                $scope.quickPaySumDlg.hide(true);\r\n                            } else {\r\n                                $scope.quickPaySumDlg.hide(false);\r\n                            }\r\n                        } else if (typeof (prm) == 'string') {\r\n                            if (prm === 'clean') {\r\n                                var scp = $scope.quickPaySumDlg.getScope();\r\n                                scp.$$childHead.model = 0;\r\n                            } else if (prm === 'cancel') {\r\n                                $scope.quickPaySumDlg.hide(false);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    setTimeout(function () {\r\n                        $(\"#customSaleDialogPartial\").attr('isActive', 'true');\r\n                    }, 100);\r\n\r\n                };\r\n\r\n                $scope.getEmailClasss = function (form, isControl) {\r\n                    if (isControl) {\r\n                        if ((!form.$invalid && form.$dirty) || (!form.$invalid && form.length > 0))\r\n                            return 'dp_has-success has-success';\r\n                        else if (((form.$invalid || form.$error.required || form.$error.email) && (form.$dirty || form.length > 0)))\r\n                            return 'has-danger dp_has-danger';\r\n                    } else {\r\n                        if ((!form.receiptEmail.$invalid && form.receiptEmail.$dirty) || (!form.receiptEmail.$invalid && form.receiptEmail.length > 0))\r\n                            return 'dp_has-success has-success';\r\n                        else if (((form.receiptEmail.$invalid || form.receiptEmail.$error.required || form.receiptEmail.$error.email) && (form.receiptEmail.$dirty || form.receiptEmail.length > 0)))\r\n                            return 'has-danger dp_has-danger';\r\n                    }\r\n                }\r\n\r\n                $scope.swipeDirection = 'current';\r\n                $scope.swipe = function (direction) {\r\n                    if (direction === 'left' && $scope.page > 1) {\r\n                        $scope.page -= 1;\r\n                        $scope.swipeDirection = 'left';\r\n                        $timeout(function () {\r\n                            $scope.hideNoProdMessage = true;\r\n                            $scope.searchItems = [];\r\n                            $scope.swipeDirection = 'current';\r\n                            $scope.changePage($scope.page);\r\n                        }, 100);\r\n                    }\r\n\r\n                    if (direction === 'right' && $scope.page < $scope.totalPages) {\r\n                        $scope.page += 1;\r\n                        $scope.swipeDirection = 'right';\r\n                        $timeout(function () {\r\n                            $scope.hideNoProdMessage = true;\r\n                            $scope.searchItems = [];\r\n                            $scope.swipeDirection = 'current';\r\n                            $scope.changePage($scope.page);\r\n                        }, 100);\r\n                    }\r\n                }\r\n\r\n                //$scope.generateTestScanSeries = function () {\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000001');\r\n                //    }, 100);\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000002');\r\n                //    }, 100);\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000003');\r\n                //    }, 100);\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000004');\r\n                //    }, 100);\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000005');\r\n                //    }, 100);\r\n                //};\r\n\r\n\r\n                function updateCustomSale(sale) {\r\n                    var loyaltyEarning = parseFloat(configService.loyaltyEarning);\r\n\r\n                    var taxObject = saleService.getTaxObject($scope.currentSale);\r\n                    var priceWithTax = $scope.posTaxInclucive ? parseFloat(sale.Price) : parseFloat(sale.Price) + calculateTax(taxObject, parseFloat(sale.Price));\r\n\r\n                    // add new payment line\r\n                    var price = parseFloat(sale.Price);\r\n\r\n\r\n                    var pl = {\r\n                        ID: uuid2.newguid(),\r\n                        ProductID: uuid2.newguid(),\r\n                        Name: sale.Name,\r\n                        Count: parseInt(sale.Count),\r\n                        Price: price, //price,\r\n                        BasePrice: parseFloat(sale.Price),\r\n                        Amount: parseInt(sale.Count) * price,\r\n                        Discount: 0, //discount,\r\n                        Note: '',\r\n                        Tax: calculateTax(taxObject, parseFloat(sale.Price)),\r\n                        TaxRuleID: taxObject.ruleID,\r\n                        Taxes: taxObject,\r\n                        LoyaltyPoints: loyaltyEarning ? (priceWithTax * loyaltyEarning * parseInt(sale.Count)) : 0,\r\n                        LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        PriceWithTax: priceWithTax,\r\n                        CanEdit: true,\r\n                        CanDelete: true,\r\n                        SaleType: 'customsale',\r\n                        BasePriceWithDiscount: parseFloat(sale.Price)\r\n                    };\r\n\r\n                    return pl;\r\n                }\r\n\r\n                watchers.push($scope.$on('sell.reload', function (event, data) {\r\n                    var promises = [];\r\n                    if ($scope.currentSale.Payments.length === 0) {\r\n\r\n                        if ($scope.saleType !== \"continue\")\r\n                            $scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n                        $scope.showLoyalty = configService.enableLoyalty;\r\n\r\n                        if ($scope.searchItems && $scope.searchText) {\r\n                            var pr = productsService.search($scope.searchText)\r\n                                .then(function (res) {\r\n\r\n                                    // build page\r\n                                    $scope.searchTotal = res;\r\n                                    $scope.totalPages = Math.ceil(res / $scope.pageSize);\r\n                                    $scope.isInFamily = false;\r\n                                    return productsService.getSearchPage($scope.page - 1, $scope.pageSize);\r\n                                })\r\n                                .then(function (res) {\r\n                                    $scope.searchItems = res.data;\r\n                                    $scope.currentPage = res.page;\r\n                                    //$scope.addImages(res.data);\r\n\r\n                                    $timeout(function () {\r\n                                        fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                                    }, 100);\r\n                                });\r\n\r\n                            promises.push(pr);\r\n                        } else if ($scope.searchType != \"quickKey\") {\r\n                            $scope.searchItems = [];\r\n                        }\r\n\r\n\r\n                        $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                            if (el.CanEdit !== false && el.CanDelete !== false) {\r\n                                if (el.SaleType !== 'customsale') {\r\n                                    var pr1 = productsService.getProductByID(el.ProductID).then(function (resp) {\r\n                                        var foundItem = resp.data[0];\r\n                                        if (foundItem && foundItem.ProductType !== 'GiftCard') {\r\n\r\n                                            if (foundItem.CostingMethod === \"FESN\" || foundItem.CostingMethod === \"SN\" || foundItem.CostingMethod === \"FISN\") {\r\n                                                $scope.scanSerialNumberWithCallback = {\r\n                                                    skipScanDialog: true\r\n                                                };\r\n                                            } else {\r\n                                                $scope.scanSerialNumberWithCallback = null;\r\n                                            }\r\n\r\n                                            var itemToCoppy = $scope.addPaymentItem(foundItem, true, true);\r\n                                            var updateItem = angular.copy(itemToCoppy);\r\n                                            var separetedItemID = $scope.currentSale.CheckoutItems[idx].SeparatedItemID;\r\n                                            var id = $scope.currentSale.CheckoutItems[idx].ID;\r\n                                            updateItem.Count = el.Count;\r\n                                            updateItem.SerialNumber = el.SerialNumber;\r\n\r\n                                            if (el.CustomDiscountType === \"price\") {\r\n                                                if (CalculatorHelperService.isSaleInNewFormat($scope.currentSale)) {\r\n                                                    updateItem.CustomDiscountType = el.CustomDiscountType;\r\n                                                    updateItem.BasePriceWithDiscount = el.BasePriceWithDiscount;\r\n                                                    updateItem.FinalAmount = el.FinalAmount;\r\n                                                    updateItem.FinalTaxAmount = el.FinalTaxAmount;\r\n                                                    updateItem.Discount = el.Discount;\r\n                                                    updateItem.ItemDiscount = el.ItemDiscount;\r\n                                                    updateItem.BasePrice = el.BasePrice;\r\n                                                    updateItem.FinalPrice = el.FinalPrice;\r\n                                                    updateItem.LoyaltyPointsEarning = el.LoyaltyPointsEarning;\r\n                                                    updateItem.DefaultPrice = el.DefaultPrice;\r\n                                                } else {\r\n                                                    updateItem.CustomDiscountType = el.CustomDiscountType;\r\n                                                    updateItem.BasePriceWithDiscount = el.BasePriceWithDiscount;\r\n                                                    updateItem.Amount = el.Amount;\r\n                                                    updateItem.Discount = el.Discount;\r\n                                                    updateItem.itemAppliedDiscount = el.itemAppliedDiscount;\r\n                                                    updateItem.itemDiscount = el.itemDiscount;\r\n                                                    updateItem.Price = el.Price;\r\n                                                    updateItem.PriceWithDiscount = el.PriceWithDiscount;\r\n                                                    updateItem.Tax = el.Tax;\r\n                                                    updateItem.PriceWithTax = el.PriceWithTax;\r\n                                                    updateItem.LoyaltyPoints = el.LoyaltyPoints;\r\n                                                }\r\n                                            }\r\n\r\n                                            $scope.currentSale.CheckoutItems[idx] = updateItem;\r\n                                            $scope.currentSale.CheckoutItems[idx].SeparatedItemID = separetedItemID;\r\n                                            $scope.currentSale.CheckoutItems[idx].ID = id;\r\n                                            $scope.changeItemCount(updateItem);\r\n                                        }\r\n                                    });\r\n                                    promises.push(pr1);\r\n                                }\r\n                            }\r\n                        });\r\n                        $scope.scanSerialNumberWithCallback = null;\r\n                    }\r\n\r\n                    if (!!data.dontReloadReceipt || !data.dontReloadReceipt) {\r\n                        var pr2 = receiptService.getReceiptTemplate(false).then(function (resp) {\r\n\r\n                            var injectedString = '; white-space: pre-wrap;';\r\n                            var position = resp.Template.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                            var result = [resp.Template.slice(0, position), injectedString, resp.Template.slice(position)].join('');\r\n\r\n                            var replacedString = '<canvas class=\"barcode\" id=\"code93\" type=\"code93\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code93}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code93}}</canvas><div class=\"barcode_img img_code93\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"barcode\" id=\"code128\" type=\"code128\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code128}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code128}}</canvas><div class=\"barcode_img img_code128\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean8\" type=\"ean8\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean8}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean13\" type=\"ean13\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean13}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-industrial2of5\" type=\"industrial2of5\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_industrial2of5}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upca\" type=\"upca\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upca}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upce\" type=\"upce\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upce}}\", replacedString);\r\n\r\n                            $scope.receiptTemplate = result;\r\n\r\n                            if (resp.EmailTemplate) {\r\n                                position = resp.EmailTemplate.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                result = [resp.EmailTemplate.slice(0, position), injectedString, resp.EmailTemplate.slice(position)].join('');\r\n\r\n                                var replacedString = '<div class=\"barcode_img img_code93\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_code128\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean8}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean13}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_industrial2of5}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upca}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upce}}\", replacedString);\r\n\r\n                                $scope.receiptEmailTemplate = result;\r\n                            } else {\r\n                                $scope.receiptEmailTemplate = result;\r\n                            }\r\n\r\n                            $scope.receiptEmailSubject = resp.EmailSubject;\r\n                            $scope.receiptTemplateID = resp.TemplateID;\r\n                        });\r\n\r\n                        promises.push(pr2);\r\n                    }\r\n\r\n                    return Promise.all(promises).then(function () {\r\n                        $.unblockUI();\r\n                        if (data.modal)\r\n                            data.modal.modal('hide');\r\n                        data.modal = null;\r\n                    }, function (err) {\r\n                        $.unblockUI();\r\n                        if (data.modal)\r\n                            data.modal.modal('hide');\r\n                        data.modal = null;\r\n                        errorService.showError(err);\r\n                    });\r\n                }));\r\n\r\n                watchers.push($scope.$on('sell.clean', function (e, data) {\r\n                    $scope.cleanSale();\r\n                    $scope.searchItems = [];\r\n                    $scope.searchText = null;\r\n                }));\r\n\r\n                watchers.push($scope.$on('receipt.template', function (event, data) {\r\n                    secondTerminalService.update($scope, $scope.mode == 'summary' ? 'payment' : 'sale');\r\n                }));\r\n\r\n                watchers.push($scope.$on('sale.update', function () {\r\n                    secondTerminalService.update($scope, 'sale');\r\n                }));\r\n\r\n                $scope.isTotalExceedingMaxPrice = false;\r\n                $scope.isTotalExceedingDlgShow = false;\r\n\r\n                $scope.checkSaleTotalLimit = function () {\r\n\t\t\t\t\tif (!$scope.currentSale || typeof $scope.currentSale.Total !== 'number') {\r\n                        return;\r\n                    }\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    var saleTotal = isNewSale ? Math.abs($scope.currentSale.Total)\r\n\t\t\t\t\t\t\t\t\t\t\t  : Math.abs($scope.totalSum($scope.currentSale, true));\r\n\r\n                    if (saleTotal > constants.maxAllowedTotalPrice) {\r\n                        if (!$scope.isTotalExceedingDlgShow) {\r\n                            $scope.isTotalExceedingMaxPrice = true;\r\n                            $scope.isTotalExceedingDlgShow = true;\r\n  \r\n                            var errorMessage = gettextCatalog.getString(\r\n                                'Sale total ({{total}}) exceeds maximum allowed price ({{maxPrice}})', {\r\n                                total: $filter('currency')(saleTotal),\r\n                                maxPrice: $filter('currency')(constants.maxAllowedTotalPrice)\r\n                            });\r\n                            \r\n                            errorService.showError(errorMessage, () => {\r\n                                $scope.isTotalExceedingDlgShow = false;\r\n                            }, gettextCatalog.getString('Warning'), false, false);\r\n                        }\r\n                    } else {\r\n                        $scope.isTotalExceedingMaxPrice = false;\r\n                        $scope.isTotalExceedingDlgShow = false;\r\n                    }\r\n                };\r\n\r\n                // update on sale change\r\n                watchers.push($scope.$on('sale.update', function () {\r\n                    $scope.checkSaleTotalLimit();\r\n\r\n                }));\r\n\r\n                // availability check\r\n\r\n                $scope.availabilityObject = {\r\n                    productID: null,\r\n                    isFamily: false,\r\n                    option1: null,\r\n                    option2: null,\r\n                    option3: null,\r\n                    name: null,\r\n                    sku: null,\r\n                    checkData: [],\r\n                    displayCheckData: [],\r\n                    FilterName: null,\r\n                    FilterNames: [],\r\n                    FilterSKU: null,\r\n                    FilterSKUs: [],\r\n                    FilterOption1: null,\r\n                    FilterOption1s: [],\r\n                    FilterOption2: null,\r\n                    FilterOption2s: [],\r\n                    FilterOption3: null,\r\n                    FilterOption3s: [],\r\n                    FilterOutlet: null,\r\n                    FilterOutlets: []\r\n                };\r\n\r\n                $scope.mode = 'none';\r\n                $scope.listSortFun = function (a, b) {\r\n                    if (a.value == null) return -1;\r\n                    if (b.value == null) return 1;\r\n\r\n                    if (a.name < b.name) return -1;\r\n                    else if (a.name > b.name) return 1;\r\n\r\n                    return 0;\r\n                };\r\n\r\n                $scope.itemsByAvailability = 7; // page size\r\n\r\n                $scope.dataPageAvailability = 1;\r\n                $scope.dataCountAvailability = 0;\r\n\r\n                watchers.push($scope.$on(\"showAvailabilityCheckDlg\", function (evt, opts) {\r\n\r\n                    $scope.dataPageAvailability = 1;\r\n                    $scope.dataCountAvailability = 0;\r\n\r\n                    $scope.availabilityObject = $.extend($scope.availabilityObject, opts);\r\n                    var searchOpts = {};\r\n\r\n                    if ($scope.availabilityObject.isFamily) {\r\n                        searchOpts.FamilyID = $scope.availabilityObject.productID;\r\n                        if (!!opts.option1)\r\n                            searchOpts.Option1 = opts.option1;\r\n                        if (!!opts.option2)\r\n                            searchOpts.Option2 = opts.option2;\r\n                        if (!!opts.option3)\r\n                            searchOpts.Option3 = opts.option3;\r\n                    } else\r\n                        searchOpts.ProductID = $scope.availabilityObject.productID;\r\n\r\n\r\n                    $.blockUI();\r\n                    saleService.getProductAvailability(searchOpts).then(function (res) {\r\n                            $scope.availabilityObject.checkData = [];\r\n                            $scope.availabilityObject.displayCheckData = [];\r\n                            $scope.availabilityObject.FilterNames = [];\r\n                            $scope.availabilityObject.FilterSKUs = [];\r\n                            $scope.availabilityObject.FilterOption1s = [];\r\n                            $scope.availabilityObject.FilterOption2s = [];\r\n                            $scope.availabilityObject.FilterOption3s = [];\r\n                            $scope.availabilityObject.FilterOutlets = [];\r\n                            $scope.availabilityObject.averageCost = res && res.data && res.data.length > 0 ? res.data[0].AverageCost : null;\r\n                            $scope.availabilityObject.canSeeItemValue = configService.CanSeeItemValue;\r\n\r\n                            $scope.availabilityFilterName = null;\r\n                            var maxLevel = 0;\r\n\r\n                            var filterNames = {};\r\n                            var filterSKUs = {};\r\n                            var filterOption1s = {};\r\n                            var filterOption2s = {};\r\n                            var filterOption3s = {};\r\n                            var filterOutlets = {};\r\n\r\n                            $.each(res.data, function (idx, el) {\r\n                                if (maxLevel < 1 && !!el.Option1)\r\n                                    maxLevel = 1;\r\n                                if (maxLevel < 2 && !!el.Option2)\r\n                                    maxLevel = 2;\r\n                                if (maxLevel < 3 && !!el.Option3)\r\n                                    maxLevel = 3;\r\n\r\n                                filterNames[el.Name] = {\r\n                                    name: el.Name,\r\n                                    value: el.Name\r\n                                };\r\n                                filterSKUs[el.ProductCode] = {\r\n                                    name: el.ProductCode,\r\n                                    value: el.ProductCode\r\n                                };\r\n                                filterOption1s[el.Option1] = {\r\n                                    name: el.Option1,\r\n                                    value: el.Option1\r\n                                };\r\n                                filterOption2s[el.Option2] = {\r\n                                    name: el.Option2,\r\n                                    value: el.Option2\r\n                                };\r\n                                filterOption3s[el.Option3] = {\r\n                                    name: el.Option3,\r\n                                    value: el.Option3\r\n                                };\r\n                                filterOutlets[el.ECSLocationName] = {\r\n                                    name: el.ECSLocationName,\r\n                                    value: el.ECSLocationName\r\n                                };\r\n                            });\r\n\r\n                            $scope.availabilityObject.FilterNames.push({\r\n                                name: \"All Names\",\r\n                                value: null\r\n                            });\r\n                            for (var i in filterNames)\r\n                                $scope.availabilityObject.FilterNames.push(filterNames[i]);\r\n\r\n                            $scope.availabilityObject.FilterNames.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterSKUs.push({\r\n                                name: \"All SKU\",\r\n                                value: null\r\n                            });\r\n                            for (var i in filterSKUs)\r\n                                $scope.availabilityObject.FilterSKUs.push(filterSKUs[i]);\r\n\r\n                            $scope.availabilityObject.FilterSKUs.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterOption1s.push({\r\n                                name: \"All \" + $scope.availabilityObject.option1Name,\r\n                                value: null\r\n                            });\r\n                            for (var i in filterOption1s)\r\n                                $scope.availabilityObject.FilterOption1s.push(filterOption1s[i]);\r\n\r\n                            $scope.availabilityObject.FilterOption1s.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterOption2s.push({\r\n                                name: \"All \" + $scope.availabilityObject.option2Name,\r\n                                value: null\r\n                            });\r\n                            for (var i in filterOption2s)\r\n                                $scope.availabilityObject.FilterOption2s.push(filterOption2s[i]);\r\n\r\n                            $scope.availabilityObject.FilterOption2s.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterOption3s.push({\r\n                                name: \"All \" + $scope.availabilityObject.option3Name,\r\n                                value: null\r\n                            });\r\n                            for (var i in filterOption3s)\r\n                                $scope.availabilityObject.FilterOption3s.push(filterOption3s[i]);\r\n\r\n                            $scope.availabilityObject.FilterOption3s.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterOutlets.push({\r\n                                name: \"All outlets\",\r\n                                value: null\r\n                            });\r\n                            for (var i in filterOutlets)\r\n                                $scope.availabilityObject.FilterOutlets.push(filterOutlets[i]);\r\n\r\n                            $scope.availabilityObject.FilterOutlets.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.maxLevel = maxLevel;\r\n\r\n                            $scope.availabilityObject.checkData = res.data;\r\n                            $scope.availabilityObject.displayCheckData = [].concat(res.data);\r\n                            $scope.dataCountAvailability = $scope.availabilityObject.displayCheckData.length;\r\n                            $scope.mode = 'availability';\r\n                            $scope.refreshAvailabilityPaging();\r\n                            $timeout(function () {\r\n                                $('#availabilityNameSelector').trigger('refresh');\r\n                                $('#availabilitySKUSelector').trigger('refresh');\r\n                                $('#availabilityOption1Selector').trigger('refresh');\r\n                                $('#availabilityOption2Selector').trigger('refresh');\r\n                                $('#availabilityOption3Selector').trigger('refresh');\r\n                                $('#availabilityOutletSelector').trigger('refresh');\r\n                                //$('div.jq-selectbox').css('display', 'block'); // fix for iOS\r\n\r\n                            }, 0);\r\n                            $.unblockUI();\r\n                        })\r\n                        .catch(function (err) {\r\n                            $scope.availabilityObject.maxLevel = 0;\r\n                            $.unblockUI();\r\n                            $scope.mode = 'availability';\r\n                            errorService.showError(err);\r\n                        });\r\n\r\n                }));\r\n\r\n                $scope.refreshAvailabilityPaging = function () {\r\n                    $scope.$broadcast('availability.event');\r\n                };\r\n\r\n                $scope.$watchCollection('availabilityObject.displayCheckData', function (newCol, oldCol, scope) {\r\n                    scope.refreshAvailabilityPaging();\r\n                });\r\n\r\n                $scope.isOnline = function () {\r\n                    return configService.isOnline === true;\r\n                }\r\n\r\n                $timeout(function () {\r\n                    initSelects();\r\n                    $('div.jq-selectbox').css('display', 'block'); // iOS fix\r\n                }, 0);\r\n\r\n                $scope.getLastCheckoutItems = function (limit) {\r\n                    if (!$scope.currentSale.CheckoutItems)\r\n                        return [];\r\n\r\n                    var arrn = [];\r\n                    if ($scope.currentSale.CheckoutItems.length <= limit)\r\n                        arrn = $scope.currentSale.CheckoutItems;\r\n                    else\r\n                        arrn = $scope.currentSale.CheckoutItems.slice($scope.currentSale.CheckoutItems.length - limit);\r\n\r\n                    angular.forEach(arrn, function (el) {\r\n                        var op = [];\r\n                        if (!!el.Option1 && el.Option1.length > 0)\r\n                            op.push(el.Option1);\r\n                        if (!!el.Option2 && el.Option2.length > 0)\r\n                            op.push(el.Option2);\r\n                        if (!!el.Option3 && el.Option3.length > 0)\r\n                            op.push(el.Option3);\r\n\r\n                        el.OptionLine = op.join(' / ');\r\n                    });\r\n\r\n                    return arrn;\r\n                }\r\n\r\n                $scope.firstShowPartialPaymentsDlg = true;\r\n\r\n                // show dialog to remove existing partial payments\r\n                // for card payment linked to real card payment provider we will do refund\r\n                $scope.showCancelPartialPaymentsDlg = function () {\r\n                    helperService.showDialog('#partialPaymentsDlg');\r\n\r\n                    if ($scope.firstShowPartialPaymentsDlg) {\r\n                        $scope.firstShowPartialPaymentsDlg = false;\r\n                    }\r\n                };\r\n\r\n                $scope.cancelPaymentRow = null;\r\n                $scope.cancelPaymentDlg = function (row) {\r\n                    $scope.cancelPaymentRow = row;\r\n                    $scope.dialogMode = 'partialPayment';\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        (gettextCatalog.getString('Would you like to delete ') + row.PaymentTypeName + ': ' + $filter('currency')(row.Amount) + '?'));\r\n                };\r\n\r\n                $scope.cancelPayment = function () {\r\n                    $.blockUI();\r\n                    var row = $scope.cancelPaymentRow;\r\n\r\n                    var initialPayment = {\r\n                        RawSaleObject: {\r\n                            Payments: [row]\r\n                        }\r\n                    };\r\n\r\n                    var d = $q.defer();\r\n                    d.resolve(null);\r\n                    var p = d.promise;\r\n\r\n                    const SCOPE = $scope;\r\n                    var refunds = {};\r\n                    if (row.PaymentTypeName == 'Credit Card') {\r\n                        refunds[cardPayService.combineKey(row.ServerTransactionID, row.ClientTransactionID)] = {\r\n                            amount: row.Amount\r\n                        };\r\n\r\n                        p = p.then(function (res) {\r\n                            return cardPayService.refund(initialPayment, refunds, $scope, {\r\n                                OrderNumber: $scope.currentSale.ClearOrderNumber,\r\n                                receiptCallback: function (code, text, p) {\r\n                                    return printService.printAdditionalReceipts(SCOPE, code, text, p);\r\n                                },\r\n                                Currency: configService.currency,\r\n                            });\r\n                        });\r\n                    }\r\n\r\n                    p = p.then(function (res) {\r\n                            // actually remove payment\r\n                            for (var i = 0; i < $scope.currentSale.Payments.length; i++) {\r\n                                if ($scope.currentSale.Payments[i].ID == $scope.cancelPaymentRow.ID) {\r\n                                    $scope.currentSale.Payments.splice(i, 1);\r\n                                    break;\r\n                                }\r\n                            }\r\n\r\n                            $scope.goPayment();\r\n\r\n                            if ($scope.currentSale.Payments.length == 0) {\r\n                                // close cancel dialog as we have no more payments\r\n                                helperService.closeDialog('#partialPaymentsDlg');\r\n                            }\r\n\r\n                            var d2 = $q.defer();\r\n                            d2.resolve(null);\r\n                            return d2.promise;\r\n                        })\r\n                        .catch(function (err) {})\r\n                        .finally(function () {\r\n                            // reset after processing\r\n                            $scope.cancelPaymentRow = null;\r\n                            $.unblockUI();\r\n                        })\r\n\r\n                    return p;\r\n                };\r\n\r\n                $scope.gotoParkedSales = function () {\r\n                    // check if we have non zero current sale\r\n                    var hasSale = !!$scope.currentSale && !!$scope.currentSale.CheckoutItems && $scope.currentSale.CheckoutItems.length > 0 && $scope.canParkSale === true;\r\n\r\n                    if (hasSale === true) {\r\n                        $scope.afterParkCallback = $scope.processParkedSales;\r\n                        $scope.showSkipButton = true;\r\n\r\n                        // ask about park current sale\r\n                        $scope.showAddSaleNoteDialog('park');\r\n                    } else\r\n                        helperService.gotoParkedSales();\r\n                };\r\n\r\n                $scope.processParkedSales = function () {\r\n                    var deferred = $q.defer();\r\n                    helperService.gotoParkedSales();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                };\r\n\r\n                $scope.hasAvailableCoupons = function () {\r\n\r\n                    var newAvailableCouponsValue = saleService.hasAvailableCoupons($scope.currentSale);\r\n\r\n                    if ($scope.oldAvailableCouponsValue != newAvailableCouponsValue) {\r\n                        $scope.oldAvailableCouponsValue = newAvailableCouponsValue;\r\n                        $timeout(function () {\r\n                            $scope.forceHeightRecalc();\r\n                        });\r\n                    }\r\n\r\n                    return newAvailableCouponsValue;\r\n                };\r\n\r\n                // coupon dialog\r\n                $scope.canDismissCoupon = function () {\r\n                    return !!$scope.currentSale.selectedCoupon;\r\n                };\r\n\r\n                $scope.checkCouponIsValidAndProcess = function (cause) {\r\n\r\n                    if (!saleService.getCouponFromDealsByCode($scope.couponCode, true)) {\r\n                        errorService.showError(gettextCatalog.getString(\"A coupon with this code has already been used or doesn't exist. Please enter another code.\"));\r\n                        return false;\r\n                    }\r\n\r\n                    helperService.closeDialog('#couponlDialogPartial');\r\n                    $timeout(function () {\r\n                        $scope.couponDialogCallback(cause);\r\n                    }, 150);\r\n                    return true;\r\n                };\r\n\r\n                $scope.couponDialogCallback = function (cause) {\r\n                    switch (cause) {\r\n                        case 'cancel':\r\n                            break;\r\n\r\n                        case 'ok':\r\n                            // some processing\r\n                            // we need to check if this coupon is allowable\r\n                            // apply if so\r\n                            // else show error\r\n                            $.blockUI();\r\n\r\n                            saleService.getSaleCoupons($scope.couponCode)\r\n                                .then(function (res) {\r\n                                    $.unblockUI();\r\n                                    var deferred = $q.defer();\r\n                                    var p = deferred.promise;\r\n\r\n                                    if (!saleService.checkSingleUsageCouponIsAvailable($scope.couponCode)) {\r\n                                        deferred.reject(gettextCatalog.getString(\"This one-off coupon has already been used!\"));\r\n                                    } else {\r\n                                        $scope.currentSale.selectedCoupon = $scope.couponCode;\r\n                                        var sc = saleService.getCouponFromDealsByCode($scope.couponCode);\r\n                                        if (sc != null) {\r\n                                            $scope.currentSale.selectedCouponID = sc.ID;\r\n                                            $scope.currentSale.selectedCouponDealID = sc.DealID;\r\n                                        } else {\r\n                                            $scope.currentSale.selectedCouponID = null;\r\n                                            $scope.currentSale.selectedCouponDealID = null;\r\n                                        }\r\n\r\n                                        deferred.resolve(res);\r\n                                    }\r\n\r\n                                    return deferred.promise;\r\n                                })\r\n                                .then(function (res) {\r\n                                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                                    var deferred = $q.defer();\r\n                                    if (!isNewSale)\r\n                                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                                    else\r\n                                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n\r\n                                    deferred.resolve(res);\r\n                                    return deferred.promise;\r\n                                })\r\n                                .catch(function (err) {\r\n                                    $.unblockUI();\r\n                                    errorService.showError(err);\r\n                                });\r\n\r\n                            break;\r\n\r\n                        case 'dismiss':\r\n                            var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                            $scope.currentSale.selectedCouponID = null;\r\n                            $scope.currentSale.selectedCouponDealID = null;\r\n                            $scope.currentSale.selectedCoupon = null;\r\n                            if (!isNewSale)\r\n                                saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                            else\r\n                                CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n\r\n                            break;\r\n                    }\r\n                };\r\n\r\n                $scope.couponDialogActive = false;\r\n\r\n                $scope.showCouponDlg = function () {\r\n                    $scope.couponCode = $scope.currentSale.selectedCoupon;\r\n                    helperService.showDialog('#couponlDialogPartial', function () {\r\n                        if (!configService.isMobile)\r\n                            $('#couponCode').focus();\r\n                    });\r\n                };\r\n\r\n                $scope.couponPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        helperService.closeDialog('#couponlDialogPartial');\r\n                        $scope.couponDialogCallback('ok');\r\n                    }\r\n                };\r\n\r\n                // gift card functionality\r\n                $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n                $scope.currentGiftCardProduct = null;\r\n                $scope.giftCardSaleDialogCallback = function (res) {\r\n                    if (!$scope.currentGiftCardProduct)\r\n                        return;\r\n\r\n                    switch (res) {\r\n                        case 'save':\r\n                            $scope.addPaymentItem($scope.currentGiftCardProduct.obj,\r\n                                $scope.currentGiftCardProduct.isElement,\r\n                                $scope.currentGiftCardProduct.returnElement,\r\n                                true);\r\n                            $scope.scrollToAddedPaymentItem();\r\n                            break;\r\n                    }\r\n\r\n\r\n                };\r\n\r\n                $scope.showGiftCardDialog = function (obj, isElement, returnElement, el) {\r\n                    if (!configService.isGiftCardEnabled()) {\r\n                        errorService.showError(gettextCatalog.getString(\"Gift card support is disabled.\"));\r\n                        return false;\r\n                    }\r\n\r\n                    var expDate = null;\r\n                    if (configService.isGiftCardExpirationDateEnabled()) {\r\n                        switch (configService.giftCardSettings.DefaultGiftCardExpirationPeriod) {\r\n                            case 'month':\r\n                                expDate = moment().add(1, 'M');\r\n                                break;\r\n                            case 'quarter':\r\n                                expDate = moment().add(3, 'M');\r\n                                break;\r\n                            case 'threeyears':\r\n                                expDate = moment().add(3, 'Y');\r\n                                break;\r\n                            default:\r\n                                expDate = moment().add(12, 'M');\r\n                                break;\r\n                        }\r\n                    }\r\n\r\n                    $scope.currentGiftCardProduct = {\r\n                        obj: obj,\r\n                        isElement: isElement,\r\n                        returnElement: returnElement,\r\n                        el: el,\r\n                        giftCardCode: null,\r\n                        expirationDate: !!expDate ? helperService.getFormatedDate2(expDate) : null,\r\n                        isExpirationDateEnabled: configService.isGiftCardExpirationDateEnabled(),\r\n                        amount: 0\r\n                    };\r\n\r\n                    helperService.showDialog('#giftCardSaleDlg', function () {\r\n                        if (!configService.isMobile)\r\n                            $('#newSaleGiftCardCode').focus();\r\n\r\n                    });\r\n\r\n                };\r\n\r\n                $scope.onGiftCardDialogSave = function () {\r\n                    saleService.giftCardExists($scope.currentGiftCardProduct.giftCardCode).then(function (resp) {\r\n                        $.unblockUI();\r\n                        if (resp == true) {\r\n                            errorService.showError(gettextCatalog.getString(\"Gift card with this code already exists.\"));\r\n                        } else {\r\n                            helperService.closeDialog('#giftCardSaleDlg');\r\n                            $scope.giftCardSaleDialogCallback('save');\r\n                        }\r\n                }).catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err)\r\n                        helperService.closeDialog('#giftCardSaleDlg');\r\n                        $scope.giftCardSaleDialogCallback('cancel');\r\n                    })\r\n\r\n                };\r\n\r\n                $scope.giftCardAmountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.showGiftCardAmountDlg = function () {\r\n                    $scope.giftCardAmountDlg.toggle();\r\n                };\r\n\r\n                // callback\r\n                $scope.setGiftCardAmount = function (prm) {\r\n                    if (typeof (prm) === 'boolean') {\r\n                        if (prm === true) {\r\n                            var scp = $scope.giftCardAmountDlg.getScope();\r\n                            var model = scp.$$childHead.model;\r\n                            scp.$parent.invalidPrice = model <= 0;\r\n\r\n                            $scope.giftCardAmountDlg.hide(true);\r\n                        } else {\r\n                            $scope.giftCardAmountDlg.hide(false);\r\n                        }\r\n                    } else if (typeof (prm) == 'string') {\r\n                        if (prm === 'clean') {\r\n                            var scp = $scope.giftCardAmountDlg.getScope();\r\n                            scp.$$childHead.model = 0;\r\n                        } else if (prm === 'cancel') {\r\n                            $scope.giftCardAmountDlg.hide(false);\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.giftCardPayAmountDlg = null;\r\n\r\n                $scope.showGiftCardPayAmountDlg = function () {\r\n                    $scope.giftCardPayAmountDlg.toggle();\r\n                };\r\n\r\n                // callback\r\n                $scope.setGiftCardPayAmount = function (prm) {\r\n                    if (typeof (prm) === 'boolean') {\r\n                        if (prm === true) {\r\n                            var scp = $scope.giftCardPayAmountDlg.getScope();\r\n                            var model = scp.$$childHead.model;\r\n                            scp.$parent.invalidPrice = model <= 0;\r\n\r\n                            $scope.giftCardPayAmountDlg.hide(true);\r\n                        } else {\r\n                            $scope.giftCardPayAmountDlg.hide(false);\r\n                        }\r\n                    } else if (typeof (prm) == 'string') {\r\n                        if (prm === 'clean') {\r\n                            var scp = $scope.giftCardPayAmountDlg.getScope();\r\n                            scp.$$childHead.model = 0;\r\n                        } else if (prm === 'cancel') {\r\n                            $scope.giftCardPayAmountDlg.hide(false);\r\n                        }\r\n                    }\r\n                };\r\n\r\n\r\n                $scope.hasGiftCardCodes = function () {\r\n                    var ids = saleService.getGiftCardCodes($scope.currentSale);\r\n\r\n                    return !!ids && ids.length > 0;\r\n                };\r\n\r\n                // gift card pay objects\r\n                $scope.currentGiftCardPay = null;\r\n\r\n                $scope.isGiftCardEnabled = function () {\r\n                    return configService.isGiftCardEnabled();\r\n                };\r\n\r\n                $scope.showGiftCardPayDialog = function () {\r\n                    if (!configService.isGiftCardEnabled()) {\r\n                        errorService.showError(gettextCatalog.getString(\"Gift card support is disabled.\"));\r\n                        return false;\r\n                    }\r\n\r\n                    if (configService.isOnline !== true) {\r\n                        errorService.showError(gettextCatalog.getString(\"Gift card payment is available in online mode only.\"));\r\n                        return false;\r\n                    }\r\n\r\n                    $scope.currentGiftCardPay = {\r\n                        giftCardCode: null,\r\n                        amount: $scope.formHolder.realSum\r\n                    };\r\n\r\n                    helperService.showDialog('#giftCardPayDlg', function () {\r\n                        if (!configService.isMobile)\r\n                            $('#payGiftCardCode').focus();\r\n\r\n                    });\r\n\r\n                };\r\n\r\n                function _getSumByGiftCard(id, toAddAmount) {\r\n                    var sumByGiftCard = toAddAmount;\r\n                    angular.forEach($scope.currentSale.Payments, function (el) {\r\n                        if (!!el.GiftCardID && el.GiftCardID === id && el.Amount > 0\r\n                                // because balance would already updated if payment is saved\r\n                                && (!$scope.currentSale.alreadyCountedPayments || !$scope.currentSale.alreadyCountedPayments[el.ID])) {\r\n                            sumByGiftCard += el.Amount;\r\n                        }\r\n                    });\r\n\r\n                    return sumByGiftCard;\r\n                }\r\n\r\n                $scope.giftCardPayDialogCallback = function (res) {\r\n                    if (!$scope.currentGiftCardPay)\r\n                        return;\r\n\r\n                    switch (res) {\r\n                        case 'save':\r\n                            $.blockUI();\r\n                            webOnlyProvider.getGiftCardForPayment($scope.currentGiftCardPay.giftCardCode)\r\n                                .then(function (res) {\r\n                                    $.unblockUI();\r\n\r\n                                    if (res.data.Success !== true) {\r\n                                        var deferred = $q.defer();\r\n                                        deferred.reject(res.data.Message);\r\n                                        return deferred.promise;\r\n                                    } else {\r\n\r\n                                        var isValidUsage = true;\r\n                                        // check that this card to pay is not sold in the same sale\r\n                                        angular.forEach($scope.currentSale.CheckoutItems, function (el) {\r\n                                            if (!!el.GiftCardCode && el.GiftCardCode === res.data.GiftCard.GiftCardCode) {\r\n                                                isValidUsage = false;\r\n                                                return false;\r\n                                            }\r\n                                        });\r\n\r\n                                        if (!isValidUsage) {\r\n                                            var deferred = $q.defer();\r\n                                            deferred.reject(gettextCatalog.getString(\"Gift card {{code}} is being sold in this sale and can't be used for payment.\", {\r\n                                                code: res.data.GiftCard.GiftCardCode\r\n                                            }));\r\n                                            return deferred.promise;\r\n                                        }\r\n\r\n\r\n                                        var toAddAmount = Number($scope.currentGiftCardPay.amount);\r\n                                        var sumByGiftCard =  _getSumByGiftCard(res.data.GiftCard.ID, Number($scope.currentGiftCardPay.amount));\r\n                                        // check that we already have any payments by this card. Add them to requested sum\r\n                                       \r\n\r\n                                        if (toAddAmount > Number($scope.formHolder.realSum)) {\r\n                                            errorService.showError(gettextCatalog.getString(\"Amount to pay {{sum}} is larger than gift card {{code}} balance {{bal}}. The entire gift card balance will be used.\", {\r\n                                                sum: toAddAmount,\r\n                                                saleSum: $scope.formHolder.realSum\r\n                                            }));\r\n\r\n                                            toAddAmount = Number($scope.formHolder.realSum);\r\n                                            sumByGiftCard = _getSumByGiftCard(res.data.GiftCard.ID, toAddAmount);\r\n                                        }\r\n\r\n                                        if (sumByGiftCard > res.data.GiftCard.CurrentBalance) {\r\n                                            errorService.showError(gettextCatalog.getString(\"Amount to pay {{sum}} is larger than gift card {{code}} balance {{bal}}. The entire gift card balance will be used.\", {\r\n                                                sum: sumByGiftCard,\r\n                                                code: res.data.GiftCard.GiftCardCode,\r\n                                                bal: res.data.GiftCard.CurrentBalance\r\n                                            }));\r\n\r\n                                            toAddAmount = res.data.GiftCard.CurrentBalance - sumByGiftCard + toAddAmount;\r\n                                            $scope.formHolder.realSum -= toAddAmount;\r\n                                        }\r\n\r\n                                        $scope.currentGiftCardPay.amount = toAddAmount;\r\n\r\n                                        $scope.giftCardPay(res.data.GiftCard.ID, res.data.GiftCard.GiftCardCode, toAddAmount);\r\n                                        var deferred = $q.defer();\r\n                                        deferred.resolve(res.data.GiftCard);\r\n                                        return deferred.promise;\r\n                                    }\r\n                                })\r\n                                .catch(function (err) {\r\n                                    $.unblockUI();\r\n                                    errorService.showError(err);\r\n                                });\r\n\r\n                            break;\r\n                    }\r\n\r\n\r\n                };\r\n\r\n                function isContinueExchange() {\r\n                    var hasItemToReturn = false;\r\n                    var hasNewItem = false;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        if (el.Amount < 0) {\r\n                            hasItemToReturn = true;\r\n                        } else {\r\n                            hasNewItem = true;\r\n                        }\r\n                    });\r\n\r\n                    var hasExchangeItems = hasNewItem && hasItemToReturn;\r\n\r\n                    return hasExchangeItems && $scope.currentSale.Refunds;\r\n                }\r\n\r\n                function onResize() {\r\n\r\n                    $scope.updateSizesInCheckout();\r\n\r\n                    $scope.updateSizesInCashPayment();\r\n                    filterService.clearCanvas();\r\n                }\r\n\r\n                function initMeasure() {\r\n                    $(window).on('resize', onResize);\r\n                }\r\n\r\n                //function getCharMeasure(currentChar, pt) {\r\n                //    var measureObject = window['PTMeasure' + pt];\r\n                //    var width = measureObject[currentChar];\r\n                //    if (typeof (width) == \"undefined\") {\r\n                //        var canvas = getCharMeasure.canvas || (getCharMeasure.canvas = document.createElement(\"canvas\"));\r\n                //        var context = canvas.getContext(\"2d\");\r\n                //        context.font = pt + \"pt 'Open Sans'\";\r\n                //        var _chTMP = context.measureText(currentChar);\r\n                //        width = context.measureText(currentChar).width;\r\n                //        measureObject[currentChar] = width;\r\n                //    }\r\n                //    return width;\r\n                //}\r\n\r\n                //function measureTextWidth(value, maxWidth, defaultSize) {\r\n                //    maxWidth = maxWidth - 12;\r\n                //    try {\r\n                //        for (var i = 0; i < window.AvailablePT.length; i++) {\r\n                //            var v = window.AvailablePT[i];\r\n                //            if (v <= defaultSize) {\r\n                //                var measureObject = window['PTTextMeasure' + v];\r\n                //                var width = measureObject[value];\r\n\r\n                //                if (typeof (width) == \"undefined\") {\r\n                //                    width = 0;\r\n                //                    for (var j = 0; j < value.length; j++)\r\n                //                        width += getCharMeasure(value.charAt(j), v);\r\n                //                    width = Math.floor(width) + 1;\r\n                //                    measureObject[value] = width;\r\n                //                }\r\n\r\n                //                if (width < maxWidth)\r\n                //                    return v;\r\n                //            }\r\n                //        }\r\n                //        return MinPT;\r\n                //    }\r\n                //    catch (e) {\r\n                //        return defaultSize;\r\n                //    }\r\n                //}\r\n\r\n                //function measureTextHeight(value, maxHeight, defaultSize) {\r\n                //    //maxHeight = maxHeight - 12;\r\n                //    try {\r\n                //        for (var i = 0; i < window.AvailablePT.length; i++) {\r\n                //            var v = window.AvailablePT[i];\r\n                //            if (v <= defaultSize) {\r\n                //                var height = getFontHeight(value, v);\r\n\r\n                //                if (height < maxHeight)\r\n                //                    return v;\r\n                //            }\r\n                //        }\r\n                //        return MinPT;\r\n                //    }\r\n                //    catch (e) {\r\n                //        return defaultSize;\r\n                //    }\r\n                //}\r\n\r\n                //function getFontHeight(text, pt) {\r\n                //    var canvas = getFontHeight.canvas || (getFontHeight.canvas = document.createElement(\"canvas\"));\r\n                //    var context = canvas.getContext(\"2d\");\r\n                //    context.font = pt + \"pt 'Open Sans'\";\r\n\r\n                //    var sourceWidth = canvas.width;\r\n                //    var sourceHeight = canvas.height;\r\n\r\n                //    // place the text somewhere\r\n                //    context.textAlign = \"left\";\r\n                //    context.textBaseline = \"top\";\r\n                //    context.fillText(text, 25, 5);\r\n\r\n                //    // returns an array containing the sum of all pixels in a canvas\r\n                //    // * 4 (red, green, blue, alpha)\r\n                //    // [pixel1Red, pixel1Green, pixel1Blue, pixel1Alpha, pixel2Red ...]\r\n                //    var data = context.getImageData(0, 0, sourceWidth, sourceHeight).data;\r\n\r\n                //    var firstY = -1;\r\n                //    var lastY = -1;\r\n\r\n                //    // loop through each row\r\n                //    for(var y = 0; y < sourceHeight; y++) {\r\n                //        // loop through each column\r\n                //        for(var x = 0; x < sourceWidth; x++) {\r\n                //            var alpha = data[((sourceWidth * y) + x) * 4 + 3];\r\n\r\n                //            if(alpha > 0) {\r\n                //                firstY = y;\r\n                //                // exit the loop\r\n                //                break;\r\n                //            }\r\n                //        }\r\n                //        if(firstY >= 0) {\r\n                //            // exit the loop\r\n                //            break;\r\n                //        }\r\n\r\n                //    }\r\n\r\n                //    // loop through each row, this time beginning from the last row\r\n                //    for(var y = sourceHeight; y > 0; y--) {\r\n                //        // loop through each column\r\n                //        for(var x = 0; x < sourceWidth; x++) {\r\n                //            var alpha = data[((sourceWidth * y) + x) * 4 + 3];\r\n                //            if(alpha > 0) {\r\n                //                lastY = y;\r\n                //                // exit the loop\r\n                //                break;\r\n                //            }\r\n                //        }\r\n                //        if(lastY >= 0) {\r\n                //            // exit the loop\r\n                //            break;\r\n                //        }\r\n\r\n                //    }\r\n\r\n                //    return lastY - firstY;\r\n\r\n                //    //return {\r\n                //        // The actual height\r\n                //        //height: lastY - firstY,\r\n\r\n                //        // The first pixel\r\n                //        //firstPixel: firstY,\r\n\r\n                //        // The last pixel\r\n                //        //lastPixel: lastY\r\n                //    //}\r\n\r\n                //}\r\n\r\n                //function updateFontSize(parent, child, defaultSize, minSize, checkHeight) {\r\n\r\n                //    if (minSize == null || minSize == undefined) {\r\n                //        minSize = 0;\r\n                //    }\r\n\r\n                //    if (checkHeight == null || checkHeight == undefined) {\r\n                //        checkHeight = false;\r\n                //    }\r\n\r\n                //    var childClass = child + \"-measure\";\r\n                //    var children = $(\".\" + childClass);\r\n                //    if (children.length > 0) {\r\n                //        var prn = children.first().closest('.' + parent + '-measure');\r\n                //        var maxWidth = prn.width();\r\n                //        var maxHeight = prn.height();\r\n\r\n                //        // if (!!parentPercent)\r\n                //        //     maxWidth *= parentPercent / 100;\r\n\r\n                //        children.each(function () {\r\n                //            var txt = this;\r\n                //            var val = txt.innerText;\r\n                //            if (val != null && val != '') {\r\n                //                var widthSize = measureTextWidth(val, maxWidth, defaultSize);\r\n                //                var heightSize = 0;\r\n                //                var size = 0;\r\n                //                if (checkHeight) {\r\n                //                    heightSize = measureTextHeight(val, maxHeight, defaultSize);\r\n                //                    size = Math.min(widthSize, heightSize);\r\n                //                }\r\n                //                else {\r\n                //                    size = widthSize;\r\n                //                }\r\n\r\n                //                size = Math.max(size, minSize);\r\n\r\n                //                var className = 'product-text' + (size+'').replace('.','-');\r\n                //                var arr = txt.className.trim().split(' ');\r\n                //                var fSz = arr.filter(function(s) {return s === className;});\r\n\r\n                //                if(fSz.length==0) {\r\n                //                    var fArr = arr.filter(function(s) {return s.indexOf('product-text') != 0;});\r\n                //                    fArr.push(className);\r\n                //                    txt.className = fArr.join(' ');\r\n                //                }\r\n                //            }\r\n                //        });\r\n                //    }\r\n                //}\r\n\r\n                //function fitFontSize(parent, child, defaultSize) {\r\n                //    var childClass = child + \"-measure\";\r\n                //    var children = $(\".\" + childClass);\r\n                //    if (children.length > 0) {\r\n                //        var maxWidth = children.first().closest('.' + parent + '-measure').width();\r\n                //        var maxHeight = children.first().closest('.' + parent + '-measure').height();\r\n\r\n                //        children.each(function (idx, el) {\r\n                //            var txt = this;\r\n                //            for (var i = 0; i < window.AvailablePT.length; i++) {\r\n                //                var v = window.AvailablePT[i];\r\n                //                if (v <= defaultSize) {\r\n                //                    var className = childClass;\r\n                //                    if (v != defaultSize)\r\n                //                        className += ' ' + 'product-text' + (v + '').replace('.', '-');\r\n                //                    if (txt.className.trim() != className) {\r\n                //                        txt.className = className;\r\n                //                    }\r\n\r\n                //                    var elWidth = el.offsetWidth;\r\n                //                    var elHeight = el.offsetHeight;\r\n                //                    if (elWidth > maxWidth || elHeight > maxHeight) {\r\n                //                        continue;\r\n                //                    }\r\n                //                    else {\r\n                //                        console.log(elWidth + '-' + elHeight);\r\n                //                        break;\r\n                //                    }\r\n                //                }\r\n                //            }\r\n                //        });\r\n                //    }\r\n                //}\r\n\r\n                $scope.scrollTo = function (selector) {\r\n\r\n                    var target = $(selector);\r\n                    if (target.length) {\r\n                        event.preventDefault();\r\n                        $('html, body').stop().animate({\r\n                            scrollTop: target.offset().top\r\n                        }, 1000);\r\n                    }\r\n                }\r\n\r\n                //$scope.getSurcharge = function() {\r\n                //    var deferred = $q.defer();\r\n\r\n                //    var currentDate = new Date();\r\n                //    if ($scope.surchargeCacheLastLoad == null || $scope.surchargeCacheLastLoad.getTime() + 15 * 1000 < currentDate.getTime()) {\r\n                //        $.blockUI();\r\n                //        webOnlyProvider.loadSurcharges()\r\n                //            .then(function(res){\r\n                //                $.unblockUI();\r\n\r\n                //                $scope.surchargeCache = res.data.Surcharges;\r\n                //                $scope.surchargeCacheLastLoad = currentDate;\r\n\r\n                //                deferred.resolve($scope.surchargeCache);\r\n                //            })\r\n                //            .catch(function (err) {\r\n\r\n                //                $scope.surchargeCache = null;\r\n\r\n                //                $.unblockUI();\r\n                //                errorService.showError(err);\r\n                //            });;\r\n                //    }\r\n                //    else {\r\n                //        deferred.resolve($scope.surchargeCache);\r\n                //    }\r\n\r\n                //    return deferred.promise.then(function(surcharges) {\r\n                //        var surchargeTax = JSON.parse(configService.lastSurchargeTax);\r\n                //        if(!!surcharges && !!surchargeTax) {\r\n                //            $.each(surcharges, function(idx, s){\r\n                //                s.TaxRuleID = surchargeTax.ruleID;\r\n                //            })\r\n\r\n                //            var deferred2 = $q.defer();\r\n                //            deferred2.resolve(surcharges);\r\n                //            return deferred2.promise;\r\n                //        }\r\n                //    });\r\n                //};\r\n\r\n                $scope.oldReturnPayments = function () {\r\n                    var sum = 0;\r\n                    if ($scope.operationSubName == 'continue' && !!$scope.currentSale.Payments) {\r\n                        sum += $scope.currentSale.Payments.sum(\"Amount\");\r\n                    }\r\n\r\n                    return sum;\r\n                };\r\n\r\n                $scope.getRemainingToRefund = function (excludeSelectedAmount) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!isNewSale) {\r\n                        var fullReturnRounding = 0;\r\n                        var totalSum = 0;\r\n                        if ($scope.currentSale) {\r\n                            totalSum = $scope.totalSum($scope.currentSale, true) * -1;\r\n                            fullReturnRounding = $scope.currentSale.FullReturnRounding;\r\n                        }\r\n\r\n                        var amountSums = 0;\r\n                        if (!(excludeSelectedAmount === true)) {\r\n                            amountSums = $scope.amountSums();\r\n                        }\r\n\r\n                        return helperService.DEARRound(totalSum - amountSums + $scope.oldReturnPayments() + fullReturnRounding, 2);\r\n                    } else {\r\n                        return Math.abs($scope.currentSale.RemainingToRefund);\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.itemCustomerToggle = function () {\r\n                    $('.checkout-item-customer.hidden-info').toggleClass('open');\r\n                }\r\n\r\n                $scope.toggleItemDetails = function (item) {\r\n                    const itemID = item.ID;\r\n                    $('.checkout-item.open[id!=\"checkoutItem_' + itemID + '\"]').removeClass('open');\r\n                    $('#checkoutItem_' + itemID).toggleClass('open');\r\n\r\n                    if ( $('#checkoutItem_' + itemID).hasClass('open')) {\r\n                        $scope.showItemQuantityDlg(item,'#checkoutItem_' + itemID);\r\n                    }\r\n                };\r\n\r\n                $scope.showCalendar = function (e) {\r\n                    // var family = document.elementsFromPoint(e.pageX, e.pageY);\r\n                    // if(family.length>0 && family[0].id!='layByDate')\r\n                    $('#layByDate').datepicker(\"show\");\r\n                }\r\n\r\n                $scope.paymentDetails = false;\r\n                $scope.togglePaymentDetails = function () {\r\n                    $scope.paymentDetails = !$scope.paymentDetails;\r\n\r\n                    /** hack for total info block */\r\n                    $rootScope.$broadcast('sideBar.toggle');\r\n                    $rootScope.$broadcast('sideBar.hideDetails');\r\n                }\r\n\r\n                $scope.currentLayby = {\r\n                    date: null\r\n                };\r\n\r\n                $scope.laybyPayDialog = function () {\r\n                    if (!$scope.currentSale.LaybyDate) {\r\n                        $scope.currentLayby.date = helperService.getFormatedDate2(new Date());\r\n                        helperService.showDialog('#layByDateDlg', null, null, function () {\r\n                            $('#layByDate').datepicker(\"hide\");\r\n                        });\r\n                    } else {\r\n                        $scope.laybyPay();\r\n                    }\r\n                };\r\n\r\n                $scope.layByDateDialogCallback = function (res) {\r\n                    if (res === 'save') {\r\n                        $scope.laybyPay($scope.currentLayby.date);\r\n                    }\r\n                };\r\n\r\n                $scope.updateSizesInCheckout = function () {\r\n                    $timeout(function () {\r\n                        //console.log('updateSizesInCheckout');\r\n                        fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                        fontMeasureService.updateFontSize('quantityValueParent', 'quantityValue', 14);\r\n                        //fontMeasureService.updateFontSize('productQuantityParent', 'productQuantity', 12);\r\n                        //fontMeasureService.updateFontSize('productPriceParent', 'productPrice', 12);\r\n                        //fontMeasureService.updateFontSize('productDiscountParent', 'productDiscount', 12);\r\n\r\n                        fontMeasureService.updateFontSize('name-container', 'size_14', 14, 8);\r\n                        fontMeasureService.updateFontSize('name-container', 'size_13_5', 13.5, 8);\r\n                        fontMeasureService.updateFontSize('name-container', 'size_12', 12, 8);\r\n\r\n                        fontMeasureService.updateFontSize('name-container2', 'size_14d', 14, 8);\r\n                        fontMeasureService.updateFontSize('name-container2', 'size_13_5d', 13.5, 8);\r\n                        fontMeasureService.updateFontSize('name-container2', 'size_12d', 12, 8);\r\n\r\n                        fontMeasureService.updateFontSize('price-container', 'size_14p', 14, 8);\r\n\r\n                    }, 100);\r\n                    $scope.updateTotalsFontSizes();\r\n\r\n                };\r\n\r\n                $scope.updateSizesInCashPayment = function () {\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payCashAmountParent', 'payCashAmount', 18);\r\n                        fontMeasureService.updateFontSize('predictionParent', 'cl-0-prediction', 14);\r\n                        fontMeasureService.updateFontSize('predictionParent', 'cl-1-prediction', 14);\r\n                        fontMeasureService.updateFontSize('predictionParent', 'cl-2-prediction', 14);\r\n                        fontMeasureService.updateFontSize('predictionParent', 'cl-3-prediction', 14);\r\n                    }, 100);\r\n                };\r\n\r\n                $scope.updateTotalsFontSizes = function () {\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('pay-button', 'size_21', 15.75);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_subtotal', 14);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_discount', 14);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_tax', 14);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_total', 14);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_incl_tax', 14);\r\n                        $timeout(function () {\r\n                            $rootScope.$broadcast('recalculate');\r\n                        }, 100);\r\n\r\n                    }, 100);\r\n                };\r\n\r\n                $scope.robj = null;\r\n\r\n                $scope.handleRemotedlyProcessed = function (obj) {\r\n                    if (!obj.isRemotedlyProcessed) {\r\n                        $scope.dialogMode = 'remoteprocessing';\r\n                        $scope.robj = obj;\r\n                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                            gettextCatalog.getString('Are you sure you want to skip card machine processing?'),\r\n                            gettextCatalog.getString('Yes'),\r\n                            gettextCatalog.getString('No'));\r\n                    } else\r\n                        obj.isRemotedlyProcessed = false;\r\n                };\r\n\r\n\r\n                initMeasure();\r\n\r\n                watchers.push( $scope.$on(\"view.resized\", function () {\r\n                    $scope.updateSizesInCheckout();\r\n                }));\r\n\r\n\r\n                watchers.push($scope.$on(\"keyboard.hide\", function () {\r\n                    $timeout(function () {\r\n                        helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), false);\r\n                    });\r\n                }));\r\n\r\n                watchers.push($scope.$on(\"keyboard.show\", function () {\r\n                    $timeout(function () {\r\n                        helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), false);\r\n                    });\r\n                }));\r\n\r\n                var catalogWindowWidth = $window.innerWidth;\r\n                var catalogWindowHeight = $window.innerHeight;\r\n                function onCatalogResize() {\r\n                    // Android resizes the WebView for the keyboard; keep the catalog rows while it is open.\r\n                    var keyboardShrink = $window.innerWidth === catalogWindowWidth && $window.innerHeight < catalogWindowHeight;\r\n                    if (keyboardShrink && window.device && window.device.platform === 'Android' && $(document.activeElement).is('input, textarea')) {\r\n                        return;\r\n                    }\r\n                    catalogWindowWidth = $window.innerWidth;\r\n                    catalogWindowHeight = $window.innerHeight;\r\n                    $scope.calculateActualCatalogRows();\r\n                }\r\n                $(window).on('resize', onCatalogResize);\r\n\r\n                $scope.chooseProductTierPrice = function (p) {\r\n                    if (!!p && configService.useCustomerPriceTier === true &&\r\n                        $scope.currentSale.customer != null &&\r\n                        !!$scope.currentSale.customer.PriceTier &&\r\n                        p.SaleType !== \"customsale\" &&\r\n                        p.ProductType !== \"GiftCard\"\r\n                    ) {\r\n                        var tier = Number($scope.currentSale.customer.PriceTier.substr('Tier '.length));\r\n                        if (tier >= 1 && tier <= 10) {\r\n                            var extra = p;\r\n                            // input product object can contain parsed prices or packed into ExtraInfo\r\n                            if (!!p.ExtraInfo)\r\n                                extra = JSON.parse(p.ExtraInfo);\r\n\r\n                            var val = extra['Price' + tier];\r\n                            if (!val) val = 0;\r\n                            return val;\r\n                        }\r\n                    }\r\n\r\n                    return !!p.DefaultPrice ? p.DefaultPrice : p.Price;\r\n                };\r\n\r\n                $scope.updateCheckoutProductPrice = function (sale, leaveTaxAsIs) {\r\n                    if (!sale || !sale.CheckoutItems) return;\r\n\r\n                    $.each(sale.CheckoutItems, function (idx, p) {\r\n                        if (p.Amount >= 0 && p.CanEdit !== false) {\r\n                            var revertPrice = $scope.saleType === 'standaloneReturn';\r\n                            var pp = $scope.chooseProductTierPrice(p);\r\n                            var price = revertPrice ? -pp : pp;\r\n\r\n                            var taxObject = p.Taxes;\r\n                            var priceWithTax = $scope.posTaxInclucive ? pp : pp + calculateTax(taxObject, pp);\r\n                            var priceWithT = revertPrice ? -priceWithTax : priceWithTax;\r\n\r\n                            p.Price = price;\r\n                            //                p.Amount = p.Price * p.Count;\r\n                            p.PriceWithTax = priceWithT;\r\n                            p.BasePrice = price;\r\n                            //                p.Tax = calculateTax(taxObject, price * p.Count);\r\n\r\n                            $scope.changeItemCount(p, leaveTaxAsIs); // for recalculations\r\n                        }\r\n                    });\r\n                };\r\n\r\n                $scope.setDisableLoyaltyFlag = function () {\r\n                    // loyaltyUnavailable is an LL CDN/auth latch; loyaltyEnabled is LoyaltyLion-only when an LL token is configured, so this cannot gate DEAR points.\r\n                    if (!$scope.loyaltyUnavailable &&\r\n                        !!$scope.currentSale && !!$scope.currentSale.customer &&\r\n                        $scope.currentSale.customer.EnableLoyaltyPoints === true && $scope.showLoyalty === true) {\r\n                        $scope.disableLoyalty = false;\r\n                    } else\r\n                        $scope.disableLoyalty = true;\r\n                };\r\n\r\n                $scope.calculateCashChangeValue = function () {\r\n                    var nativeSum = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n                    var clientSum = helperService.DEARRound(parseFloat($scope.formHolder.realCashSum), 2);\r\n                    var change = clientSum - nativeSum;\r\n                    if (change < 0) change = 0;\r\n                    change = helperService.DEARRound(change, 2);\r\n                    return change;\r\n                };\r\n\r\n                $scope.payCashDlg = null;\r\n                $scope.banknotePredictions = [];\r\n\r\n                $scope.showPayCashDlg = function () {\r\n                    $scope.payCashDlg.toggle();\r\n                };\r\n\r\n                $scope.setCashPay = function (prm) {\r\n                    $scope.payCashDlg.hide(prm);\r\n                    if (prm === true) {\r\n                        $scope.payAmountChanged();\r\n\r\n                        $timeout(function () {\r\n                            fontMeasureService.updateFontSize('payCashAmountParent', 'payCashAmount', 18);\r\n                        }, 100);\r\n                    }\r\n                };\r\n\r\n                $scope.setCashMode = function (mode) {\r\n                    $scope.cashMode = mode;\r\n                };\r\n\r\n                $scope.setCreditCardMode = function (mode) {\r\n                    $scope.creditCardMode = mode;\r\n                };\r\n\r\n                $scope.setPredefinedCash = function (amount) {\r\n                    $scope.formHolder.realCashSum = amount;\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payCashAmountParent', 'payCashAmount', 18);\r\n                    }, 100);\r\n                };\r\n\r\n                $scope.cashPay2 = function () {\r\n                    var amount = $scope.formHolder.realCashSum;\r\n                    if (amount > 0) {\r\n                        $scope.formHolder.realSum = $scope.formHolder.realCashSum;\r\n                        $scope.formHolder.realCashSum = 0;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payAmountParent', 'payAmount', 18);\r\n                    }, 100);\r\n\r\n                    return $scope.cashPay();\r\n                };\r\n\r\n                $scope.creditCardPay2 = function () {\r\n                    var amount = $scope.formHolder.realCashSum;\r\n                    if (amount > 0) {\r\n                        $scope.formHolder.realSum = $scope.formHolder.realCashSum;\r\n                        $scope.formHolder.realCashSum = 0;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payAmountParent', 'payAmount', 18);\r\n                    }, 100);\r\n\r\n                    return $scope.creditCardPay();\r\n                };\r\n\r\n                $scope.showSelectTaxDialog = function () {\r\n                    //var frm = $('#taxModelDlg');\r\n                    //helperService.showDialog(frm);\r\n                    $rootScope.$broadcast('selectTax.show', $scope.currentSale);\r\n\r\n                };\r\n\r\n                watchers.push($scope.$on('selectTax.changed', function (event, data) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    // data is the map of checkout id->tax object pairs\r\n                    $.each($scope.currentSale.CheckoutItems, function (i, c) {\r\n                        var mp = data[c.ID];\r\n\r\n                        if (mp) {\r\n                            if (isNewSale) {\r\n                                c.EffectiveExclusiveTaxPercent = mp.effectivePercentExclusive;\r\n                                c.EffectiveInclusiveTaxPercent = mp.effectivePercentInclusive;\r\n                            } else {\r\n                                c.Taxes = $.extend(c.Taxes, mp);\r\n                            }\r\n                            c.TaxRuleID = mp.ruleID;\r\n                        }\r\n                    });\r\n\r\n                    if (!isNewSale)\r\n                        calculateSums();\r\n                    else\r\n                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Tax);\r\n                }));\r\n\r\n                $scope.isTaxPopupAvailable = function () {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    var lst = $scope.currentSale.CheckoutItems.filter(function (el) {\r\n                        return el.CanEdit !== false;\r\n                    });\r\n                    return lst.length > 0;\r\n                };\r\n\r\n                $scope.getPaymentMethodSurcharges = function (paymentTypeShortName, surcharges) {\r\n                    var methods = configService.paymentProcessors.filter(function (p) {\r\n                        return p.loweredPaymentMethodName === paymentTypeShortName;\r\n                    });\r\n\r\n                    if (methods.length > 0 && methods[0].surcharges && methods[0].surcharges.length > 0) {\r\n                        var mp = {};\r\n                        $.each(surcharges, function (i, s) {\r\n                            mp[s.SurchargeID] = s;\r\n                        });\r\n\r\n                        var res = [];\r\n                        $.each(methods[0].surcharges, function (i, s) {\r\n                            var srch = mp[s];\r\n                            if (srch)\r\n                                res.push(srch);\r\n                        });\r\n\r\n                        return res;\r\n                    }\r\n\r\n                    return null;\r\n                };\r\n\r\n                $scope.calcSelectedSurcharges = function () {\r\n                    return saleService.calcSelectedSurcharges($scope.payments, $scope.paymentValidation);\r\n                };\r\n\r\n                $scope.calcTotalPay = function () {\r\n                    return saleService.calcSelectedSurcharges($scope.payments, $scope.paymentValidation) +\r\n                        saleService.calcTotalPay($scope.payments, $scope.paymentValidation);\r\n                };\r\n\r\n                $scope.hideMenuDropdown = function () {\r\n                    var mn = $('#paymentFooter ul:visible');\r\n                    if (mn.length > 0) {\r\n                        mn.dropdown('toggle');\r\n                    }\r\n                };\r\n\r\n                $scope.useNewCalculation = function () {\r\n                    return CalculatorHelperService.useNewCalculation($scope.currentSale);\r\n                };\r\n\r\n\r\n                $scope.isLoyaltyLionEnabled = function () {\r\n                    var b = !configService.loyaltyLionToken ? false : true;\r\n                    var sm = $scope.currentSale.Total > 0 && configService.isOnline;\r\n                    var llExistedCustomer = !!$scope.currentSale.customer.LLCustomerID && $scope.currentSale.customer.LLCustomerID != \"0\";\r\n                    var res = b && llExistedCustomer && configService.isOnline && !$scope.loyaltyUnavailable && !loyaltyLionProvider.sdkFailed;\r\n                    if ($scope.mode !== 'summary' && b && sm && llExistedCustomer && !$scope.loyaltyUnavailable && !loyaltyLionProvider.sdkFailed) {\r\n                        if ($scope.currentSale.customer.ID) {\r\n                            loyaltyLionProvider.showWidget()\r\n                        } else {\r\n                            loyaltyLionProvider.hideWidget()\r\n                        }\r\n                    } else {\r\n                        loyaltyLionProvider.hideWidget()\r\n                    }\r\n\r\n                    return res;\r\n                };\r\n\r\n                $rootScope.closeLoyaltyLionDialog = function () {\r\n                    helperService.closeDialog($('#loyaltyLionModal'));\r\n                };\r\n\r\n\r\n                function prepareQuoteReceipt() {\r\n                    if ($scope.quoteTemplateHolder.QuoteTemplate) {\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve($scope.quoteTemplateHolder);\r\n                        return deferred.promise;\r\n                    }\r\n                    $.blockUI();\r\n                    return receiptService.getReceiptTemplate('remote', 'SaleQuote', 'receiptSaleModel')\r\n                        .then(function (resp) {\r\n\r\n                            var injectedString = '; white-space: pre-wrap;';\r\n                            var position = resp.Template.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                            var result = [resp.Template.slice(0, position), injectedString, resp.Template.slice(position)].join('');\r\n\r\n                            var replacedString = '<canvas class=\"barcode\" id=\"code93\" type=\"code93\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code93}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code93}}</canvas><div class=\"barcode_img img_code93\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                            replacedString = '<canvas class=\"barcode\" id=\"code128\" type=\"code128\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code128}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code128}}</canvas><div class=\"barcode_img img_code128\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean8\" type=\"ean8\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean8}}\", replacedString);\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean13\" type=\"ean13\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean13}}\", replacedString);\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-industrial2of5\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  type=\"industrial2of5\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_industrial2of5}}\", replacedString);\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upca\" type=\"upca\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upca}}\", replacedString);\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upce\" type=\"upce\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upce}}\", replacedString);\r\n\r\n                            $scope.quoteTemplateHolder.QuoteTemplate = result;\r\n\r\n                            if (resp.EmailTemplate) {\r\n                                position = resp.EmailTemplate.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                result = [resp.EmailTemplate.slice(0, position), injectedString, resp.EmailTemplate.slice(position)].join('');\r\n\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_code93\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_code128\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean8}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean13}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_industrial2of5}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upca}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upce}}\", replacedString);\r\n\r\n                                $scope.quoteTemplateHolder.QuoteEmailTemplate = result;\r\n                            } else {\r\n                                $scope.quoteTemplateHolder.QuoteEmailTemplate = result;\r\n                            }\r\n                            $scope.quoteTemplateHolder.QuoteEmailSubject = resp.EmailSubject;\r\n                            $scope.quoteTemplateHolder.QuoteTemplateID = resp.TemplateID;\r\n\r\n                            $.unblockUI();\r\n\r\n                            return $scope.quoteTemplateHolder;\r\n\r\n                        }, function (err) {\r\n                            $.unblockUI();\r\n\r\n                            let ex = '';\r\n                            if (typeof (err) === 'string') {\r\n                                ex = err;\r\n                            } else if (err.Exception) {\r\n                                ex = err.Exception;\r\n                            } else if (err.data) {\r\n                                if (err.data.Exception)\r\n                                    ex = err.data.Exception;\r\n                                else if (err.data[0] && err.data[0].Exception)\r\n                                    ex = err.data[0].Exception;\r\n                            }\r\n\r\n                            let errorMessage = gettextCatalog.getString(\"Failed to load sale quote template.\") + \": \" + ex;\r\n                            errorService.showError(errorMessage);\r\n                            return false;\r\n                        });\r\n                };\r\n\r\n                function getQuoteNumberAndReceipt() {\r\n                    return prepareQuoteReceipt()\r\n                        .then(function (resp) {\r\n                            if (resp === false)\r\n                                return resp;\r\n\r\n                            if (!$scope.currentSale.ClearOrderNumber || parseInt($scope.currentSale.ClearOrderNumber) < 1) {\r\n                                return saleService.getNextSequence(configService.lastOutletID, configService.lastRegistryID)\r\n                                    .then(function (data) {\r\n                                        var lastRegistryPiece = configService.lastRegistryID.split('-');\r\n                                        $scope.currentSale.OrderNumber = (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                                            data + (configService.registrySuffix ? configService.registrySuffix : \"\");\r\n                                        $scope.currentSale.ClearOrderNumber = data;\r\n                                        $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" + Math.floor(Date.now() / 1000).toString(36) + \"-\" + parseInt(data, 10).toString(36);\r\n                                    });\r\n                            }\r\n                        });\r\n                }\r\n\r\n\r\n\r\n                $scope.canEmailQuote = function () {\r\n                    return !(!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length == 0 || $scope.canParkSale === false) &&\r\n                        configService.isOnline && $scope.currentSale.customer.ID && (!$scope.saleType || $scope.saleType === 'newSale');\r\n                }\r\n\r\n                $scope.canPrintQuote = function () {\r\n                    return !(!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length == 0 || $scope.canParkSale === false) &&\r\n                        configService.isSite && $scope.currentSale.customer.ID && (!$scope.saleType || $scope.saleType === 'newSale');\r\n\r\n                    // The code below allows to show quote print button on mobile device\r\n                    // return !(!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length==0 || $scope.canParkSale === false)\r\n                    //             && !$scope.disablePrintReceipt() && $scope.currentSale.customer.ID && (!$scope.saleType || $scope.saleType === 'newSale');\r\n                }\r\n\r\n\r\n\r\n                $scope.printQuote = function () {\r\n                    getQuoteNumberAndReceipt()\r\n                        .then(function (resp) {\r\n                            if (resp === false)\r\n                                return;\r\n\r\n                            updateReceipt();\r\n                            setTimeout(function () {\r\n                                return printService.printReceipt($(\"#quote-template\"), null, true, false);\r\n                            }, 50)\r\n                        })\r\n\r\n                };\r\n\r\n\r\n                $scope.showQuoteEmailDialog = function () {\r\n                    if (!!$scope.currentSale.SelectedContact &&\r\n                        $scope.currentSale.SelectedContact.Email) {\r\n                        $scope.quoteTemplateHolder.QuoteEmail = $scope.currentSale.SelectedContact.Email;\r\n                    } else {\r\n                        $scope.quoteTemplateHolder.QuoteEmail = '';\r\n                    }\r\n\r\n                    var $windowElement = $('#quoteEmailDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n\r\n                $scope.closeQuoteEmailDialog = function () {\r\n                    var $windowElement = $('#quoteEmailDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                }\r\n\r\n\r\n                $scope.sendEmailQuote = function () {\r\n                    getQuoteNumberAndReceipt()\r\n                        .then(function (resp) {\r\n                            if (resp === false)\r\n                                return;\r\n\r\n                            updateReceipt();\r\n                            $.blockUI();\r\n\r\n                            setTimeout(function () {\r\n                                var emailBody = emailService.setEmailToken('#quote-email-template').html();\r\n                                var emailSubject = $scope.quoteTemplateHolder.QuoteEmailSubject;\r\n\r\n                                var email = $scope.quoteTemplateHolder.QuoteEmail;\r\n                                var orders = emailService.extractOrderIDs($scope.currentSale);\r\n                                emailService.sendEmailReceipt(orders.orderID, orders.baseOrderID, email, emailSubject, emailBody, true, $scope.quoteTemplateHolder.QuoteTemplateID)\r\n                                    .then(function (result) {\r\n                                        // show message box about sending result\r\n                                        $.unblockUI();\r\n                                        $scope.closeQuoteEmailDialog();\r\n\r\n                                        if (result.Result == true) {\r\n\r\n\r\n                                            var $windowElement = $('#quoteEmailCompletion');\r\n                                            helperService.showDialog($windowElement);\r\n\r\n                                            $scope.closeQuoteEmailCompleteDialog = function () {\r\n                                                var $windowElement = $('#quoteEmailCompletion');\r\n                                                helperService.closeDialog($windowElement);\r\n                                            };\r\n                                        } else {\r\n                                            var $windowElement = $('#quoteEmailCompletionError');\r\n                                            helperService.showDialog($windowElement);\r\n\r\n                                            $scope.closeQuoteEmailCompleteDialog = function () {\r\n                                                var $windowElement = $('#quoteEmailCompletionError');\r\n                                                helperService.closeDialog($windowElement);\r\n                                            };\r\n                                        }\r\n                                    }, function (err) {\r\n                                        $.unblockUI();\r\n                                        var txt = gettextCatalog.getString(\"Error sending email.\");\r\n                                        if (!!err.data && err.data.length > 0 && !!err.data[0].Exception)\r\n                                            txt = err.data[0].Exception;\r\n\r\n                                        errorService.showError(!!err.data ? err.data : txt);\r\n                                    });\r\n                            }, 50);\r\n                        });\r\n                };\r\n\r\n                watchers.push($scope.$on('ll.clipboard.code.copy', function (event, data) {\r\n                    if ($scope.currentSale.customer.ID) {\r\n                        $scope.LLCurrentValue = data.code;\r\n                        if (data.code) {\r\n                            $scope.LLCopiedCode = { customerID: $scope.currentSale.customer.ID, code: data.code };\r\n                        }\r\n                        if(data.title !== null) {\r\n                            if(!configService.canGiveDiscount) {\r\n                                errorService.showError(\r\n                                    gettextCatalog.getString(\"You can’t discount sales. Your Admin can update the Can Give Discount user permission.\"),\r\n                                    null,\r\n                                    gettextCatalog.getString(\"Permission denied\")\r\n                                );\r\n                                return;\r\n                            }\r\n                            $.blockUI();\r\n                            saleService.loadLLCustomerRewards($scope.currentSale.customer.LLMerchantID)\r\n                            .then(function (result) {\r\n                                $.unblockUI();\r\n                                const error = result?.[0];\r\n                                if(error?.ErrorCode == 403){\r\n                                    errorService.showError(error.Exception, null, gettextCatalog.getString(\"Permission denied\"));\r\n                                    return; \r\n                                }\r\n                                if(result?.Rewards) {\r\n                                    const reward = result.Rewards.find(x => x.title === data.title);\r\n                                    const llReward = window.loyaltylion?.customer?.claimedRewards?.[0];\r\n                                    if (!reward || !llReward) {\r\n                                        errorService.showError(\r\n                                            gettextCatalog.getString(\"The discount could not be applied automatically. The code has been copied into the Discount field, please apply it manually.\")\r\n                                        );\r\n                                        return;\r\n                                    }\r\n                                    $scope.currentSale.customer.LLDiscountCode = data.code;\r\n                                    $scope.currentSale.Discount = reward.discount_amount;\r\n                                    $scope.currentSale.isDiscountPercent = reward.discount_type === 'percentage' ? true : false;\r\n                                    $scope.LLDiscountType = reward.discount_type;\r\n                                    $scope.LLDiscountTitle = data.title;\r\n                                    $scope.currentSale.manuallyAppliedDiscount = true;\r\n\r\n                                        var payment = {\r\n                                        ID: uuid2.newguid(),\r\n                                        PaymentProcessorID: null,\r\n                                        Amount: 0, // we counted it before in the discount section\r\n                                        Date: moment.utc(),\r\n                                        ShortName: 'loyaltylion',\r\n                                        PaymentTypeName:  gettextCatalog.getString(\"Loyalty Lion points\"),\r\n                                        Loyalty: llReward.point_cost,\r\n                                        SaleServerTransactionID:  llReward.id,\r\n                                        Reference: $scope.currentSale.customer.LLMerchantID\r\n                                    };\r\n                                    $scope.currentSale.Payments.push(payment);\r\n                                        \r\n                                    var res = CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Total);\r\n                                    if (res.updateSaleOrderDiscount !== null) {\r\n                                        $scope.currentSale.Discount = helperService.DEARRound(res.updateSaleOrderDiscount, 2);\r\n                                    }\r\n                                }                   \r\n                            })\r\n                            .catch(function (err) {\r\n                                $.unblockUI();\r\n                            });     \r\n                        }\r\n                        else {\r\n                            let el = $scope.discountDlg.getScope();\r\n                            el.$$childHead.model = 0;\r\n                            el.LLDiscountType = null;\r\n                            $scope.LLDiscountTitle = null;\r\n                            $scope.LLDiscountType = null;\r\n                        }\r\n                        soundService.playGood();                             \r\n                    }\r\n                    if (!configService.isSite && buildConfiguration.platform === 'android') {\r\n                        cordova.plugins.clipboard.copy(data.code);\r\n                    }\r\n                }));\r\n\r\n                $scope.showInMobileDesign = function() {\r\n                    return configService.isMobileDesign ? '' : 'desktop-hide';\r\n                };\r\n\r\n                $scope.addDelivery = function(){\r\n                    $rootScope.$broadcast('deliveryDialog.show',\r\n                    {\r\n                        sale: $scope.currentSale,\r\n                        addNew: true\r\n                    });\r\n                };\r\n                $scope.showInDesktopDesign = function() {\r\n                    return configService.isMobileDesign ? 'mobile-hide' : '';\r\n                };\r\n\r\n                // $scope.showLoyaltyPanel = function() {\r\n                //     $('.lion-loyalty-widget__body').click();\r\n                // };\r\n\r\n                $scope.scan = function() {\r\n                    cordova.plugins.barcodeScanner.scan(\r\n                        function (result) {\r\n                            console.log(\"We got a barcode\\n\" +\r\n                                \"Result: \" + result.text + \"\\n\" +\r\n                                \"Format: \" + result.format + \"\\n\" +\r\n                                \"Cancelled: \" + result.cancelled);\r\n                        },\r\n                        function (error) {\r\n                            console.log(\"Scanning failed: \" + error);\r\n                        }\r\n                    );\r\n                };\r\n\r\n                $scope.getCatalogTileContainerHeight = function() {\r\n                    const container = $('.tileGrid');\r\n                    if (container && container.length) {\r\n                        return container.height();\r\n                    }\r\n\r\n                    return null;\r\n                }\r\n\r\n                $scope.calculateActualCatalogRows = function() {\r\n                    if ($scope.tilesVisibility !== 'image_text') {\r\n                        return;\r\n                    }\r\n\r\n                    let rows = configService.getCatalogPageRows();\r\n                    const containerHeight = $scope.getCatalogTileContainerHeight();\r\n\r\n                    if (!containerHeight) {\r\n                        return\r\n                    }\r\n                    \r\n                    if (rows == 6 && containerHeight < 560) {\r\n                        rows = 5\r\n                    } \r\n                    if (rows > 4 && containerHeight < 480) {\r\n                        rows = 4\r\n                    }\r\n                    $scope.pageRows = rows;\r\n                    $scope.catalogTileRows = rows;\r\n                };\r\n\r\n                $scope.showCustomerEmailWarningDialog = function (customer) {\r\n\r\n                    $('#customerEmail').val(\"\");\r\n                    var $windowElement = $('#customerEmailWarningDialog');\r\n                    $windowElement.find('#warningModalBody').text(customer.Warning);\r\n                    helperService.showDialog($windowElement);\r\n                };\r\n        \r\n                $scope.closeCustomerEmailWarningDialog = function () {\r\n        \r\n                    var $windowElement = $('#customerEmailWarningDialog');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                $scope.editCustomerEmail = function () {\r\n\r\n                    var customerEmail = $('#customerEmail').val();\r\n\r\n                    if (!!customerEmail) {\r\n\r\n                        $.blockUI();\r\n\r\n                        var customerToSave = angular.copy($scope.currentSale.customer);\r\n\r\n                        if (!!customerToSave.Contacts && customerToSave.Contacts.length > 0)\r\n                            customerToSave.Contacts[0].Email = customerEmail;\r\n                        else\r\n                        {\r\n                            var contact = [{\r\n                                Name: customerToSave.Name,\r\n                                Email: customerEmail,\r\n                                Phone: null,\r\n                                MobilePhone: null,\r\n                                MarketingConsent: '1'\r\n                            }];\r\n                            customerToSave.Contacts = contact;\r\n                        }\r\n\r\n                        var updateMode = \"\";\r\n\r\n                        var customer = angular.extend(customerToSave, { updateMode: updateMode });\r\n\r\n                        customerService.updateCustomer(customer).then(function (resp) {\r\n                            customerService.onCustomerUpdated(customer.id || customer.ID)\r\n                                .finally(function () {\r\n                                    $scope.currentSale.customer = customer;\r\n                                    $scope.addCustomerHandler($scope.currentSale.customer);\r\n                                    $.unblockUI();\r\n                                });\r\n\r\n                        }, function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        });\r\n                    }\r\n                };\r\n\r\n                $scope.setRegistrySales = function () {\r\n                    return registryService.getActiveRegistrySales(configService.lastRegistryID, configService.lastUserName, null, 'simple').then(function (resp) {\r\n                        if (resp[0]) {\r\n                            $scope.registrySalesID = resp[0].ID;\r\n                            configService.registrySalesID = resp[0].ID;\r\n                        } else {\r\n                            $scope.registrySalesID = null;\r\n                            $location.path('/opencloseregistry');\r\n                        }\r\n                    });\r\n                }\r\n\r\n                $scope.triggerSendEmailReceipt = function (resp) {\r\n                    if (resp.Success && !$scope.receiptHolder.receiptForm.receiptEmail.$isEmpty($scope.email.receiptEmail) && !$scope.receiptHolder.receiptForm.receiptEmail.$invalid && $scope.currentSale.customer.SendReceiptViaEmail) {\r\n                        $scope.emailSent = false;\r\n                        var deferred4 = $q.defer();  \r\n                        $scope.sendEmailReceipt();  \r\n                        $scope.$watch('emailSent', function (newValue) {\r\n                            if (newValue === true) {\r\n                                deferred4.resolve();  \r\n                            }\r\n                        });\r\n\r\n                        $timeout(function () {\r\n                            if (!$scope.emailSent) {\r\n                                deferred4.resolve();\r\n                            }\r\n                        }, 2000);\r\n\r\n                        return deferred4.promise;  \r\n                    }\r\n                }\r\n\r\n                watchers.push($scope.$on(\"$destroy\", function () {\r\n                    //printService.disconnect();\r\n                    loyaltyService.clearCustomer();\r\n                    $(document).off('click.loyaltyLionWidget', '#dear-loyalty-lion-widget .lion-loyalty-widget .lion-loyalty-widget__body', onLoyaltyLionWidgetClick);\r\n\r\n                    $rootScope.$broadcast('header.enableMenu', true);\r\n                    $(window).off('resize', onResize);\r\n                    $(window).off('resize', onCatalogResize);\r\n                    watchers.forEach((x) => {\r\n                        try {\r\n                            x()\r\n                        } catch (e) {\r\n                            console.log(e);\r\n                        }\r\n                    });\r\n                }));\r\n            }\r\n        ]);\r\n\r\nangular.module(\"mainApp\").filter('comboStrictFilter', function ($filter) {\r\n    return function (input, predicate) {\r\n        var res = [];\r\n        angular.forEach(input, function (el) {\r\n            var contains = true;\r\n\r\n            for (let p in predicate) {\r\n                var v = predicate[p];\r\n                if (!!v.distinct && el[p] !== v.distinct) {\r\n                    contains = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (contains) {\r\n                res.push(el);\r\n            }\r\n        });\r\n\r\n        return res;\r\n    };\r\n});\r\n\r\nangular.module('mainApp').filter('currency2', ['$filter', 'helperService', function($filter, helperService) {\r\nvar currencyFilter = $filter('currency');\r\nreturn function(amount, currencySymbol) {\r\n    if(!amount)\r\n        amount = 0;\r\n\r\n    return currencyFilter(helperService.DEARRound(amount, 4), currencySymbol);\r\n};\r\n} ]);\r\n","angular.module(\"mainApp\").controller('setPinController',\r\n    ['$scope', '$rootScope', 'errorService', 'helperService', '$timeout', 'loginService', 'configService', 'gettextCatalog', '$route','$location',\r\n    function ($scope, $rootScope, errorService, helperService, $timeout, loginService, configService, gettextCatalog, $route, $location) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: '' }); // to hide sidebar details\r\n\r\n        $scope.pinFormCaption = gettextCatalog.getString('Enter your new Cin7 Core POS PIN');\r\n\r\n        $scope.pinMode = true;\r\n        $scope.hideGoToLogin = true;\r\n        $scope.pinEnabled = configService.pinEnabled;\r\n        $scope.pinToken = configService.pinToken;\r\n        $scope.isSuccessMessage = false;\r\n\r\n        $scope.pinValue = [];\r\n        for (var i = 0; i < configService.pinSize; i++)\r\n            $scope.pinValue.push(null);\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            $scope.isSuccessMessage = $route.current.params.isSuccessMessage || false;\r\n            $timeout(function () {\r\n                helperService.showPageAfterInit();\r\n                $(document).on('keydown', keyboardListener);\r\n            });\r\n\r\n            $scope.raiseViewChanged();\r\n        };\r\n\r\n        $scope.$watch('configService.pinToken', function(newVal, oldVal) {\r\n            $scope.pinToken = newVal;\r\n        })\r\n\r\n        $scope.$on(\"$destroy\", function () {\r\n            $(document).unbind('keydown', keyboardListener); \r\n        });\r\n\r\n        function keyboardListener(e){\r\n            if($scope.pinMode){\r\n                if((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105))\r\n                    $scope.clickFun(e.key);\r\n                else if(e.keyCode === 8)\r\n                    $scope.clickFun('backspace');\r\n                else if(e.keyCode === 13)\r\n                    $scope.save();\r\n            }\r\n        };\r\n\r\n        $scope.finished = false;\r\n        $scope.raiseViewChanged = function () {\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            });\r\n        };\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        };\r\n\r\n        $scope.clickFun = function (s) {\r\n            $timeout(function () {\r\n                if (s == 'backspace') {\r\n                    for (var i = ($scope.pinValue.length - 1) ; i >= 0; i--) {\r\n                        if ($scope.pinValue[i] != null) {\r\n                            $scope.pinValue[i] = null;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    for (var i = 0; i < $scope.pinValue.length; i++) {\r\n                        if ($scope.pinValue[i] == null) {\r\n                            $scope.pinValue[i] = s;\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                }\r\n\r\n                $scope.finished = $scope.pinValue[$scope.pinValue.length - 1] != null;\r\n            });\r\n        };\r\n\r\n        $scope.save = function () {\r\n            $.blockUI();\r\n            var pin = '';\r\n            for (var i = 0; i < $scope.pinValue.length; i++)\r\n                pin += $scope.pinValue[i];\r\n\r\n            loginService.savePin(pin)\r\n            .then(function () {\r\n                    $.unblockUI();\r\n                    // helperService.showInfoDialog({\r\n                    //     title: '',\r\n                    //     body: gettextCatalog.getString('PIN code is saved.')\r\n                    // }, function() {\r\n                    //     $timeout(function(){\r\n                    //         $route.reload();\r\n                    //     });\r\n                    // });\r\n\r\n                    $scope.isSuccessMessage = true;\r\n                    $scope.raiseViewChanged();\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.reset = function () {\r\n            $.blockUI();\r\n\r\n            loginService.savePin(null)\r\n            .then(function () {\r\n                $.unblockUI();\r\n                helperService.showInfoDialog({\r\n                    title: '',\r\n                    body: gettextCatalog.getString('The PIN code is reset.')\r\n                }, function() {\r\n                    $timeout(function(){\r\n                        $route.updateParams({\r\n                            isSuccessMessage: true\r\n                        });\r\n                    });\r\n                });\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.openRegister = function() {\r\n            $location.path('/sell');\r\n        };\r\n    }]);\r\n","angular.module(\"mainApp\").controller('setupController',\r\n    ['$scope', '$rootScope', 'loginService', 'constants', 'configService', 'printService', 'labelPrintService', 'labelService', 'errorService',\r\n        'helperService', '$timeout', 'gettextCatalog', 'cardPayService', 'secondTerminalServiceWeb',\r\n    function ($scope, $rootScope, loginService, constants, configService, printService, labelPrintService, labelService, errorService,\r\n        helperService, $timeout, gettextCatalog, cardPayService, secondTerminalServiceWeb) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSetupSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: '' }); // to hide sidebar details\r\n\r\n        $scope.fcss = { 'height': window.innerHeight * 0.95 + 'px' };\r\n        $scope.ifcss = { 'height': (window.innerHeight * 0.9) - 160 + 'px' };\r\n        $scope.printerModalMode = 'connect';\r\n        $scope.selected = {\r\n            selectedSystem: null,\r\n            selectedModel: null\r\n        };\r\n\r\n        $scope.showSoftKbdPart = buildConfiguration.platform == 'ios';\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            printService.disconnect();\r\n            labelPrintService.disconnect();\r\n\r\n            $timeout(function () {\r\n                helperService.showPageAfterInit();\r\n            });\r\n\r\n            $scope.raiseViewChanged();\r\n\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            });\r\n        };\r\n        $scope.isSite = configService.isSite;\r\n\r\n        $scope.printArea = [\r\n            { text: '2inch', value: 2, points: 384 },\r\n            { text: '3inch', value: 3, points: 566 },\r\n            { text: '4inch', value: 4, points: 822 }\r\n        ];\r\n\r\n        $scope.labelPrintArea = labelService.getLabelPrintArea();\r\n        $scope.printerModels = [];\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        };\r\n\r\n        $scope.settings = configService.getPrinterSettings(true);\r\n        $scope.labelSettings = configService.getLabelPrinterSettings(true);\r\n\r\n        console.log('settings', $scope.settings);\r\n\r\n        /* Payment SetUp */\r\n        $scope.paymentSettings = configService.getCardPaymentSettings();\r\n        if ($scope.paymentSettings.printTyroReceiptOnTerminal == null ||\r\n            $scope.paymentSettings.printTyroReceiptOnTerminal == undefined) {\r\n                $scope.paymentSettings.printTyroReceiptOnTerminal = true;\r\n        }\r\n            \r\n        \r\n        if ($scope.paymentSettings.printWindcaveReceipts == null) {\r\n            $scope.paymentSettings.printWindcaveReceipts = true;\r\n        }\r\n\r\n        $scope.paymentSettings.triPOSLaneID = configService.triPOSLaneID;\r\n\r\n        $scope.selectedPaymentSystem = { key: $scope.paymentSettings.providerKey };\r\n\r\n        $scope.$watch('selectedPaymentSystem.key',\r\n            function (newValue, oldValue) {\r\n\r\n                var provider = $scope.providers.filter(function (el) { return el.key === newValue; });\r\n                var providerName = provider[0].name;\r\n                $scope.selectedPaymentSystem.systemName = providerName;\r\n\r\n                try {\r\n                    if ($scope.selectedPaymentSystem.key =='paymentSenseReaderProvider') {\r\n                        $scope.showPaymentSenseTerminals();\r\n                    }\r\n                } catch(e) {\r\n                }\r\n                \r\n\r\n                // switch (newValue) {\r\n                //     case 'squareReaderProvider':\r\n                //         $scope.selectedPaymentSystem.systemName = 'Square Reader';\r\n                //         break;\r\n                // }\r\n            }\r\n        );\r\n\r\n        $scope.selectedPaymentSystem.key = $scope.paymentSettings.providerKey;\r\n\r\n        //$scope.paymentModalMode = $scope.paymentSettings.providerKey == 'emptyProvider' ?  'connect' : 'succ';\r\n\r\n        $scope.providers = cardPayService.getAvailableProviders();\r\n\r\n        var fiteredKeys = $scope.providers.filter(function (el) { return el.key === $scope.paymentSettings.providerKey; });\r\n        if (fiteredKeys.length != 1) {\r\n            $scope.selectedPaymentSystem.key = \"emptyProvider\";\r\n        }\r\n        /* /Payment SetUp */\r\n\r\n        $scope.selectedArea = $scope.printArea[1];\r\n        //$scope.labelSelectedArea = $scope.labelPrintArea[1];\r\n\r\n        $scope.printerSystems = configService.getPrinterSystems();\r\n\r\n        if(!!$scope.settings && !!$scope.settings.printSystem) {\r\n            var pf = $scope.printerSystems.filter(function(p) {return p.value === $scope.settings.printSystem;});\r\n            if(pf.length>0)\r\n                $scope.selected.selectedSystem = pf[0].value;\r\n        }\r\n\r\n        if(!$scope.selected.selectedSystem)\r\n            $scope.selected.selectedSystem = $scope.printerSystems[0].value;\r\n\r\n        if($scope.selected.selectedSystem == 'star' || $scope.selected.selectedSystem == 'epson') {\r\n            $scope.printerModels = printService.getPrinterModels($scope.selected.selectedSystem);\r\n        }\r\n\r\n        if(!!$scope.settings && !!$scope.settings.printerModel) {\r\n            var models = $scope.printerModels.filter(function(p) {return p.modelTitle === $scope.settings.printerModel;});\r\n            if(models.length > 0)\r\n                $scope.selected.selectedModel = models[0];\r\n        }\r\n    \r\n        if(!$scope.selected.selectedModel)\r\n            $scope.selected.selectedModel = '';\r\n\r\n        $scope.labelPrinterSystems = configService.getLabelPrinterSystems();\r\n        $scope.labelSelectedSystem = $scope.labelPrinterSystems[0].value;\r\n\r\n        $scope.$watch('selected.selectedSystem',\r\n          function (newValue, oldValue) {\r\n                  switch (newValue) {\r\n                      case 'clover':\r\n                          $scope.settings.printerName = 'Station';\r\n                          $scope.selected.selectedModel = '';\r\n                          break;\r\n                      case 'embedded':\r\n                          $scope.settings.printerName = 'Embedded Printing';\r\n                          $scope.selected.selectedModel = '';\r\n                          break;\r\n                      case 'epson':\r\n                        if(oldValue && oldValue != newValue) {\r\n                            $scope.selected.selectedModel = '';\r\n                            $scope.settings.printerName = '';\r\n                            $scope.settings.modelName = '';\r\n                        }\r\n                          $scope.printerModels = printService.getPrinterModels('epson');\r\n                          $timeout(function () {\r\n                            $('#printerWidth').trigger('refresh');\r\n                            $('#printerModel').trigger('refresh');\r\n                        }, 0);\r\n                          break;\r\n                      default:\r\n                        if(!$scope.settings.printerName){\r\n                            $scope.settings.printerName = 'Star Micronics';\r\n                        }\r\n                        if(oldValue && oldValue != newValue) {\r\n                            $scope.selected.selectedModel = '';\r\n                            $scope.settings.printerName = '';\r\n                            $scope.settings.modelName = '';\r\n                        }\r\n                        $scope.printerModels = printService.getPrinterModels('star');\r\n                        $timeout(function () {\r\n                            $('#printerWidth').trigger('refresh');\r\n                            $('#printerModel').trigger('refresh');\r\n                        }, 0);\r\n                          break;\r\n                  }\r\n          }\r\n        );\r\n\r\n        $scope.$watch('selected.selectedModel',\r\n          function (newValue) {\r\n                  if(newValue) {\r\n                    var pageSizeCode = 3;\r\n                    $scope.printerModels.forEach(function (e, idx) {\r\n                        if (e.modelTitle == newValue && e.paperSize) {\r\n                            pageSizeCode = e.paperSize;\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    $scope.printArea.forEach(function (e, idx) {\r\n                        if (e.value == pageSizeCode) {\r\n                            $scope.selectedArea = {\r\n                                points: e.points,\r\n                                text: e.text,\r\n                                value: e.value\r\n                            };\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        $('#printerWidth').trigger('refresh');\r\n                        $('#printerModel').trigger('refresh');\r\n                    }, 0);\r\n                    \r\n                  }\r\n          }\r\n        );\r\n\r\n        $scope.$watch('labelSelectedSystem',\r\n          function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                  switch (newValue) {\r\n                      /*\r\n                      case 'clover':\r\n                          $scope.labelSettings.labelPrinterName = 'Station';\r\n                          break;\r\n                      */\r\n                      default:\r\n                          $scope.labelSettings.labelPrinterName = 'Dymo';\r\n                          break;\r\n                  }\r\n              }\r\n          }\r\n         );\r\n\r\n        $scope.findPrintArea = function () {\r\n            $scope.printArea.forEach(function (e, idx) {\r\n                if (e.value == $scope.settings.printerWidthCode) {\r\n                    $scope.selectedArea = {\r\n                        points: e.points,\r\n                        text: e.text,\r\n                        value: e.value\r\n                    };\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            $scope.printerSystems.forEach(function (e, idx) {\r\n                if (e.value == $scope.settings.printSystem) {\r\n                    $scope.selected.selectedSystem = e.value;\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            $scope.printerModels.forEach(function (e, idx) {\r\n                if (e.modelTitle == $scope.settings.printerModel) {\r\n                    $scope.selected.selectedModel = e.modelTitle;\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            $timeout(function () {\r\n                $('#printerWidth').trigger('refresh');\r\n                $('#printerModel').trigger('refresh');\r\n            }, 0);\r\n        };\r\n\r\n        $timeout(function () {\r\n            initSelects(function() {\r\n                var el = $(this);\r\n                if (el[0].id === 'printerModel-styler') {\r\n                    angular.forEach($scope.printerModels, function(l) {\r\n                        var p =\r\n                            \"<div class='width100'>\" +\r\n                            l.display +\r\n                            '</div>' +\r\n                            \"<div class='width100' style='font-size:12px'>\" +\r\n                            (!!l.modelNames ? l.modelNames.join(', ') : '&nbsp;') +\r\n                            '</div>';\r\n                        var ef = el.find('li.model-' + l.modelId);\r\n\r\n                        ef.html(p);\r\n                    });\r\n                }\r\n            });\r\n            $('.jq-selectbox__select-text').css('width', '100%');\r\n        }, 1000);\r\n\r\n\r\n        /* Payment SetUp */\r\n        $scope.customModalDlg2Caption = gettextCatalog.getString('Tyro payment system');\r\n        $scope.customModalDlg2Text = gettextCatalog.getString(\"Please perform the 'Authorise POS' function on your terminal.\");\r\n        $scope.customModalDlg2Buttons = $scope.customModalDlg2Buttons =\r\n            [{\r\n                name: gettextCatalog.getString('Cancel'),\r\n                value: 'cancel'\r\n            }];\r\n\r\n        $scope.callbackModal2 = function (code) {\r\n            switch (code) {\r\n                case 'cancel':\r\n                    cardPayService.cancelCurrentTransaction($scope, 'tyroReaderProvider');\r\n                    break;\r\n            }\r\n        };\r\n\r\n        $scope.pairTyro = function () {\r\n\r\n            helperService.showDialog('#customModalDlg2');\r\n            $.blockUI();\r\n\r\n            var promise = cardPayService.pair($scope, 'tyroReaderProvider');\r\n\r\n            promise.then(function (res) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#customModalDlg2');\r\n                helperService.showInfoDialog({\r\n                    title: $scope.customModalDlg2Caption,\r\n                    body: gettextCatalog.getString('Terminal has been successfully paired with Cin7 Core POS.')\r\n                });\r\n                $scope.printerModalMode = 'succ';\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#customModalDlg2');\r\n                errorService.showError(err.response.errorDescription);\r\n                $scope.printerModalMode = 'fail';\r\n            });\r\n        };\r\n\r\n        $scope.pairTriPOS = function () {\r\n            $.blockUI();\r\n\r\n            return cardPayService.pair($scope, 'triPOSReaderProvider', $scope.paymentSettings)\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                    helperService.showInfoDialog({\r\n                        title: $scope.customModalDlg2Caption,\r\n                        body: gettextCatalog.getString('Terminal has been successfully paired with Cin7 Core POS.')\r\n                    });\r\n                    $scope.printerModalMode = 'succ';\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    if (!!err.response && !!err.response.errorDescription)\r\n                        errorService.showError(err.response.errorDescription);\r\n                    else\r\n                        errorService.showError(err);\r\n                    $scope.printerModalMode = 'fail';\r\n                });\r\n        };\r\n\r\n        $scope.removePairTriPOS = function () {\r\n            $.blockUI();\r\n\r\n            return cardPayService.unpair($scope, 'triPOSReaderProvider', $scope.paymentSettings)\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                    helperService.showInfoDialog({\r\n                        title: $scope.customModalDlg2Caption,\r\n                        body: gettextCatalog.getString('Terminal has been successfully disconnected from Cin7 Core POS.')\r\n                    });\r\n                    $scope.printerModalMode = 'succ';\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    if (!!err.response && !!err.response.errorDescription)\r\n                        errorService.showError(err.response.errorDescription);\r\n                    else\r\n                        errorService.showError(err);\r\n                    $scope.printerModalMode = 'fail';\r\n                });\r\n        };\r\n\r\n        $scope.savePaymentSystem = function () {\r\n            const key = $scope.selectedPaymentSystem.key;\r\n            $scope.showPaymentSenseTerminal = false;\r\n\r\n            try {\r\n                if (!cardPayService.validate(key)) {\r\n                    return;\r\n                }\r\n            } catch (e) {\r\n                errorService.showError(e);\r\n                return;\r\n            }\r\n            $scope.paymentSettings.providerKey = key;\r\n\r\n            if ($scope.selectedPaymentSystem.key != 'tyroReaderProvider')\r\n                delete $scope.paymentSettings.printTyroReceiptOnTerminal;\r\n\r\n            if ($scope.selectedPaymentSystem.key != 'linklyPaymentReaderProvider')\r\n            {\r\n                delete $scope.paymentSettings.printLinklyPaymentReceiptOnTerminal;\r\n                delete $scope.paymentSettings.receiptsLinklyPaymentReceiptOnTerminal;\r\n                delete $scope.paymentSettings.linklyPaymentPairCode;\r\n                window.localStorage.removeItem('token');\r\n                window.localStorage.removeItem('secret');\r\n            }\r\n\r\n            if ($scope.selectedPaymentSystem.key != 'windcaveProvider') {\r\n                delete $scope.paymentSettings.printWindcaveReceipts;\r\n            }\r\n\r\n            $scope.paymentModalMode = 'succ';\r\n            $timeout(function(){\r\n                $(window).trigger('resize');\r\n            });  \r\n            configService.setCardPaymentSettings($scope.paymentSettings);\r\n        };\r\n\r\n        $scope.isConnectionReady = function() {\r\n            if ($scope.selectedPaymentSystem.key === 'paymentSenseReaderProvider') {\r\n                return !!$scope.paymentSettings.PaymentSenseTerminalID;\r\n            } else\r\n            if ($scope.selectedPaymentSystem.key === 'linklyPaymentReaderProvider') {\r\n                return configService.isLinklyPairWithTerminal\r\n            }\r\n\r\n            return true;\r\n        };\r\n\r\n        $scope.customModalDlg2Caption = gettextCatalog.getString('Linkly payment system');\r\n        $scope.customModalDlg2Text = gettextCatalog.getString(\"Please perform the 'Authorise POS' function on your terminal.\");\r\n        $scope.customModalDlg2Buttons = $scope.customModalDlg2Buttons =\r\n            [{\r\n                name: gettextCatalog.getString('Cancel'),\r\n                value: 'cancel'\r\n            }];\r\n\r\n        $scope.callbackModal2 = function (code) {\r\n            switch (code) {\r\n                case 'cancel':\r\n                    cardPayService.cancelCurrentTransaction($scope, 'linklyPaymentReaderProvider');\r\n                    break;\r\n            }\r\n        };\r\n\r\n        $scope.pairLinklyPayment = function () {\r\n\r\n            if (configService.isLinklyPairWithTerminal)\r\n                $scope.showLinklyPinPadPairingConfirmDialog();\r\n            else\r\n                $scope.pairLinklyPaymentSystem();\r\n        };\r\n\r\n        $scope.pairLinklyPaymentSystem = function () {\r\n\r\n            helperService.showDialog('#customModalDlg2');\r\n            $.blockUI();\r\n\r\n            var promise = cardPayService.pair($scope, 'linklyPaymentReaderProvider');\r\n\r\n            promise.then(function (res) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#customModalDlg2');\r\n                helperService.showInfoDialog({\r\n                    title: $scope.customModalDlg2Caption,\r\n                    body: gettextCatalog.getString('Terminal has been successfully paired with Cin7 Core POS.')\r\n                });\r\n                $scope.printerModalMode = 'success';\r\n                configService.isLinklyPairWithTerminal = true;\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#customModalDlg2');\r\n                errorService.showError(err.response.errorDescription);\r\n                $scope.printerModalMode = 'failure';\r\n            });\r\n        };\r\n\r\n        $scope.removePairLinklyPayment = function () {\r\n            $.blockUI();\r\n\r\n            return cardPayService.unpair($scope, 'linklyPaymentReaderProvider', $scope.paymentSettings)\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                    helperService.showInfoDialog({\r\n                        title: $scope.customModalDlg2Caption,\r\n                        body: gettextCatalog.getString('Terminal has been successfully disconnected from Cin7 Core POS.')\r\n                    });\r\n                    $scope.printerModalMode = 'success';\r\n                    delete $scope.paymentSettings.linklyPaymentPairCode;\r\n                    delete $scope.paymentSettings.printLinklyPaymentReceiptOnTerminal;\r\n                    delete $scope.paymentSettings.receiptsLinklyPaymentReceiptOnTerminal;\r\n                    configService.isLinklyPairWithTerminal = false;\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    if (!!err.response && !!err.response.errorDescription)\r\n                        errorService.showError(err.response.errorDescription);\r\n                    else\r\n                        errorService.showError(err);\r\n                    $scope.printerModalMode = 'failure';\r\n                });\r\n        };\r\n\r\n        $scope.connectAnotherPaymentSystem = function () {\r\n            $scope.paymentModalMode = 'connect';\r\n            $timeout(function(){\r\n                $(window).trigger('resize');\r\n            });  \r\n        };\r\n        /* /Payment SetUp */\r\n\r\n        $scope.findPrintArea();\r\n        //$scope.findLabelPrintArea();\r\n\r\n        $scope.getFieldClass = function (ctrl, isInput) {\r\n            if (ctrl.$dirty) {\r\n                if (ctrl.$error.required)\r\n                    return isInput ? 'dp_form-control-danger form-control-danger' : 'has-danger dp_has-danger';\r\n                else\r\n                    return isInput ? 'dp_form-control-success form-control-success' : 'has-success dp_has-success';\r\n            }\r\n        };\r\n\r\n        $scope.resetPrinter = function () {\r\n            $scope.settings = {};\r\n            $scope.selectedArea = $scope.printArea[1];\r\n            $scope.selected.selectedSystem = $scope.printerSystems[0].value;\r\n            $scope.selected.selectedModel = '';\r\n            // $scope.printerSetup.$dirty = true;\r\n        };\r\n\r\n        $scope.printersList = [];\r\n        $scope.labelPrintersList = [];\r\n\r\n        $scope.discoverPrinter = function () {\r\n            $.blockUI();\r\n            printService.discoverAvailablePrinters($scope.selected.selectedSystem).then(function (res) {\r\n                // will assume that no more than one printer will be found\r\n                // so will get only first array item\r\n                console.log('Printers: ' + JSON.stringify(res));\r\n\r\n                $.unblockUI();\r\n                if (!res || res.length == 0) {\r\n                    errorService.showError(gettextCatalog.getString('No printer was found. Please try to specify the printer name manually.'));\r\n                }\r\n                else {\r\n                    $scope.printersList = res;\r\n\r\n                    if (res.length == 1) {\r\n                        $scope.setSelectedPrinter(res[0]);\r\n                    }\r\n                    else {\r\n                        // show select printer dialog\r\n                        helperService.showDialog('#selectPrinterFromListModalDlg');\r\n                    }\r\n                }\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.discoverLabelPrinter = function () {\r\n            $.blockUI();\r\n            labelPrintService.discoverAvailableLabelPrinters($scope.selected.selectedSystem).then(function (res) {\r\n                // will assume that no more than one label printer will be found\r\n                // so will get only first array item\r\n                console.log('Label Printers: ' + JSON.stringify(res));\r\n\r\n                $.unblockUI();\r\n                if (!res || res.length == 0) {\r\n                    errorService.showError(gettextCatalog.getString('No label printer was found. Please try to specify the label printer name manually.'));\r\n                }\r\n                else {\r\n                    $scope.labelPrintersList = res;\r\n\r\n                    if (res.length == 1) {\r\n                        $scope.setSelectedLabelPrinter(res[0]);\r\n                    }\r\n                    else {\r\n                        // show select label printer dialog\r\n                        helperService.showDialog('#selectLabelPrinterFromListModalDlg');\r\n                    }\r\n                }\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.save = function () {\r\n            if(($scope.selected.selectedSystem == 'star'\r\n            || $scope.selected.selectedSystem == 'epson') &&\r\n            !$scope.selected.selectedModel) {\r\n                errorService.showError('Please select printer model');\r\n                return;\r\n            }\r\n\r\n            $scope.printArea.forEach(function (e, idx) {\r\n                if (e.text == $scope.selectedArea.text) {\r\n                    $scope.selectedArea = {\r\n                        points: e.points,\r\n                        text: e.text,\r\n                        value: e.value\r\n                    };\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            $scope.settings.printerWidthCode = $scope.selectedArea.value;\r\n            $scope.settings.printerWidthPoints = $scope.selectedArea.points;\r\n            $scope.settings.printSystem = $scope.selected.selectedSystem;\r\n            $scope.settings.printerModel = $scope.selected.selectedModel;\r\n\r\n            if ($scope.selected.selectedSystem == 'clover') {\r\n                $scope.settings.printerName = 'Station';\r\n                $scope.settings.printerModel = '';\r\n            }\r\n\r\n            configService.setPrinterSettings($scope.settings);\r\n\r\n            helperService.showInfoDialog({\r\n                title: '',\r\n                body: gettextCatalog.getString('Printer settings have been saved.')\r\n            }, function () {\r\n                printService.disconnect();\r\n            });\r\n            // $scope.printerModalMode = \"succ\";\r\n\r\n            var scope = angular.element('#formPrintSetup').scope();\r\n            scope.printerSetup.$setPristine();\r\n        };\r\n\r\n        $scope.testConnection = function () {\r\n            $.blockUI();\r\n            printService.checkPrinterConnection()\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n\r\n                    helperService.showInfoDialog({\r\n                        title: '',\r\n                        body: gettextCatalog.getString('Printer is found.')\r\n                    });\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n        $scope.testLabelConnection = function () {\r\n            $.blockUI();\r\n            labelPrintService.checkLabelPrinterConnection()\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n\r\n                    helperService.showInfoDialog({\r\n                        title: '',\r\n                        body: gettextCatalog.getString('Label printer found.')\r\n                    });\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n        $scope.printTest = function () {\r\n            $.blockUI();\r\n            printService.printTest()\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.labelPrintTest = function () {\r\n            $.blockUI();\r\n            labelPrintService.labelPrintTest()\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        // select form multiple attached printers dialog\r\n        $scope.setSelectedPrinter = function (row) {\r\n        //    $scope.printerSetup.$dirty = true;\r\n\r\n            angular.copy(row, $scope.settings);\r\n            // printAreaValue\r\n            $scope.findPrintArea();\r\n\r\n            helperService.showInfoDialog({\r\n                title: '',\r\n                body: gettextCatalog.getString('The printer has been successfully set.')\r\n            });\r\n        };\r\n\r\n        $scope.setSelectedLabelPrinter = function (row) {\r\n            $scope.labelPrinterSetup.$dirty = true;\r\n\r\n            angular.copy(row, $scope.settings);\r\n            // labelPrintAreaValue\r\n            //$scope.findLabelPrintArea();\r\n\r\n            helperService.showInfoDialog({\r\n                title: '',\r\n                body: gettextCatalog.getString('The label printer has been successfully set.')\r\n            });\r\n        };\r\n\r\n        $scope.scanModalMode = \"scan\";\r\n        \r\n        $scope.openScannerSetup = function () {\r\n            $scope.scanModalMode = \"scan\";\r\n            var $windowElement = $('#scannerSetupModal');\r\n            helperService.showDialog($windowElement, function() {\r\n                $('input, select').trigger('refresh');                \r\n            });\r\n        };\r\n\r\n        $scope.closeScannerSetup = function () {\r\n            $scope.scanModalMode = \"scan\";\r\n            $scope.scanValue = '';\r\n            var $windowElement = $('#scannerSetupModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.scannerSettings = configService.getScannerSettings();\r\n\r\n        $scope.$watch('scannerSettings.enableSoftKbd',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    configService.setScannerSettings($scope.scannerSettings);\r\n                }\r\n            }\r\n        );\r\n\r\n        $scope.$watch('scannerSettings.enableCameraScan',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    configService.setScannerSettings($scope.scannerSettings);\r\n                }\r\n            }\r\n        );\r\n\r\n        $scope.$watch('printerModalMode',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    $timeout(function(){\r\n                        $(window).trigger('resize');\r\n                    });                    \r\n                }\r\n            }\r\n        );\r\n\r\n        $scope.scanValue = '';\r\n        $scope.$on('scan.barcode', function (event, barcode) {\r\n            console.log('scan.barcode: ' + barcode);\r\n            $scope.scanValue = barcode;\r\n            $scope.scanModalMode = \"succ\";\r\n        });\r\n\r\n        $scope.scanAgain = function(){\r\n            $scope.scanModalMode = 'scan';\r\n            $scope.scanValue = '';\r\n        };\r\n\r\n        $scope.isScanAgainReady = function() {\r\n            return $scope.scanModalMode == 'scan';\r\n        };\r\n\r\n        $scope.openPaymentSetup = function () {\r\n\r\n            $scope.paymentModalMode = 'connect';\r\n            if ($scope.selectedPaymentSystem && $scope.selectedPaymentSystem.key && $scope.selectedPaymentSystem.key != 'emptyProvider') {\r\n                $scope.savePaymentSystem();\r\n            }\r\n\r\n            var $windowElement = $('#paymentSetupModal');\r\n            helperService.showDialog($windowElement);\r\n\r\n            $timeout(function () {\r\n                $('input, select').trigger('refresh');\r\n            }, 100);\r\n        };\r\n\r\n        $scope.closePaymentSetup = function () {\r\n            const paymentSettings = configService.getCardPaymentSettings();\r\n            const providerKey = paymentSettings && paymentSettings.providerKey ? paymentSettings.providerKey : null;\r\n            if (($scope.selectedPaymentSystem && $scope.selectedPaymentSystem.key && $scope.selectedPaymentSystem.key != 'emptyProvider') && $scope.isConnectionReady() && (providerKey == null || providerKey == 'emptyProvider')) {\r\n                $scope.showCardPaymentSetupConfirmDialog();\r\n            }\r\n            else {\r\n                const $windowElement = $('#paymentSetupModal');\r\n                helperService.closeDialog($windowElement);\r\n            }\r\n        };\r\n\r\n        $scope.secondScreenSettings = {};\r\n\r\n        $scope.opencustomerDisplaySetup = function () {\r\n            var enableAuto = localStorage.getItem('secondScreenEnableAuto') === 'true';\r\n            $scope.secondScreenSettings.enableAuto = enableAuto;\r\n            var $windowElement = $('#customerDisplaySetupModal');\r\n            helperService.showDialog($windowElement);\r\n        };\r\n\r\n        $scope.closeCustomerDisplaySetup = function () {\r\n            var $windowElement = $('#customerDisplaySetupModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.saveCustomerDisplaySetup = function () {\r\n            localStorage.setItem('secondScreenEnableAuto', $scope.secondScreenSettings.enableAuto);\r\n            var $windowElement = $('#customerDisplaySetupModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.openCustomerScreen = function() {\r\n            secondTerminalServiceWeb.openSecondScreenPage(); // promise\r\n        };\r\n\r\n        // if ($scope.settings.printerName != null)\r\n        //     $scope.printerModalMode = 'succ';\r\n        // else\r\n        //     $scope.printerModalMode = 'connect';\r\n\r\n        $scope.firstTimeOpenPrinterModal = true;\r\n\r\n        $scope.openPrinterSetup = function () {\r\n            $scope.printerModalMode = 'connect';\r\n            var $windowElement = $('#printerSetupModal');\r\n            helperService.showDialog($windowElement);\r\n            $timeout(function () {\r\n                $('input, select').trigger('refresh');\r\n            }, 100);\r\n\r\n            $timeout(function () {\r\n                if ($scope.firstTimeOpenPrinterModal) {\r\n                    $scope.firstTimeOpenPrinterModal = false;\r\n                }\r\n            }, 100);\r\n        };\r\n\r\n        $scope.closePrinterSetup = function () {\r\n            var $windowElement = $('#printerSetupModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.connectAnotherPrinter = function () {\r\n            $scope.printerModalMode = 'connect';\r\n        };\r\n\r\n        $scope.paymentSenseTerminals = [];\r\n        $scope.showPaymentSenseTerminal = false;\r\n\r\n        $scope.showPaymentSenseTerminals = function () {\r\n            $.blockUI();\r\n            $scope.paymentSenseTerminals = [];\r\n\r\n            // this will return list of all available terminals to connect\r\n            return cardPayService.pair($scope, 'paymentSenseReaderProvider', $scope.paymentSettings)\r\n                .then(function (res) {\r\n                    $scope.paymentSenseTerminals = res.result.filter(function (t) {\r\n                        return t.status === \"AVAILABLE\";\r\n                    });\r\n\r\n                    $scope.showPaymentSenseTerminal = true;\r\n                    $.unblockUI();\r\n                })\r\n                .catch(function (err) {\r\n                    $scope.showPaymentSenseTerminal = false;\r\n                    $.unblockUI();\r\n                    if (!!err.response && !!err.response.errorDescription)\r\n                        errorService.showError(err.response.errorDescription);\r\n                    else\r\n                        errorService.showError(err);\r\n                })\r\n                .finally(function () {\r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n        };        \r\n\r\n        $scope.showLinklyPinPadPairingConfirmDialog = function () {\r\n\r\n            var $windowElement = $('#linklyPinPadPairing');\r\n            helperService.showDialog($windowElement);\r\n        };\r\n\r\n        $scope.closeLinklyPinPadPairingConfirmDialog = function () {\r\n\r\n            var $windowElement = $('#linklyPinPadPairing');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.showCardPaymentSetupConfirmDialog = function () {\r\n            $scope.messageBoxText = gettextCatalog.getString(\"The PIN pad has already been paired. Do you want to exit without connecting?\");\r\n            $scope.messageBoxYes = gettextCatalog.getString(\"Yes\");\r\n            $scope.messageBoxNo = gettextCatalog.getString(\"No\");\r\n            $scope.closeDiscardDialog = $scope.closeCardPaymentSetupConfirmDialog;\r\n\r\n            const $windowElement = $('#messageBoxModal');\r\n            helperService.showDialog($windowElement);\r\n        };\r\n\r\n        $scope.closeCardPaymentSetupConfirmDialog = function (showPaymentSetupModal) {\r\n            const $windowElement = $('#messageBoxModal');\r\n            helperService.closeDialog($windowElement);\r\n\r\n            if (!showPaymentSetupModal) {\r\n                const $windowElement = $('#paymentSetupModal');\r\n                helperService.closeDialog($windowElement);\r\n            }\r\n        };\r\n\r\n    }]);","angular.module(\"mainApp\").controller('sideBarController',\r\n    ['$scope', '$rootScope', '$location', 'constants', 'productsService',\r\n        'configService', 'loginService', '$uibModal', 'helperService', '$timeout', 'gettextCatalog',\r\n        'cacheService', 'saleService', 'remoteRequestProvider', 'liveSearchService', 'printService', 'errorService', 'dataChangeNotificationService', \r\n        'googleHelperService', \r\n        function ($scope, $rootScope, $location, constants, productsService,\r\n            configService, loginService, $uibModal, helperService, $timeout, gettextCatalog,\r\n            cacheService, saleService, remoteRequestProvider, liveSearchService, printService, errorService, dataChangeNotificationService, \r\n            googleHelperService) {\r\n\r\n            $scope.detailsVisibility = {\r\n                sales: false,\r\n                products: false,\r\n                product: false,\r\n                customers: false,\r\n                users: false,\r\n                setup: false,\r\n                session: false,\r\n                inventory: false,\r\n                reports: false\r\n            };\r\n\r\n            $scope.isAndroid = buildConfiguration.platform === 'android';\r\n\r\n\r\n            $scope.getUserImageUrl = function () {\r\n                if (configService.userImageID) {\r\n                    var url = configService.baseImageURL + '?ID=' + configService.userImageID;\r\n                    url += '&width=' + 60 + '&height=' + 60;\r\n                    return url;\r\n                } else\r\n                    return null;\r\n\r\n            };\r\n\r\n            function updateUserImageSrc() {\r\n                $rootScope.$broadcast('image.src.update', {\r\n                });\r\n            }\r\n\r\n            $scope.isQA = function () {\r\n                return configService.isQAMode;\r\n            };\r\n\r\n            $scope.allowManagerAndOnline = function () {\r\n                return configService.isManagerAndHigherAndConnected();\r\n            };\r\n\r\n            $scope.constSessionSectionName = constants.constSessionSectionName;\r\n            $scope.constSessionViewName = constants.constSessionViewName;\r\n\r\n            $scope.constInventorySectionName = constants.constInventorySectionName;\r\n            $scope.constInventoryViewName = constants.constInventoryViewName;\r\n\r\n            $scope.constReportsSectionName = constants.constReportsSectionName;\r\n            $scope.constReportsViewName = constants.constReportsViewName;\r\n\r\n            $scope.constSellSectionName = constants.constSellSectionName;\r\n            $scope.constSellViewName = constants.constSellViewName;\r\n            $scope.constOfflineSalesViewName = constants.constOfflineSalesViewName;\r\n            $scope.constSalesHistoryViewName = constants.constSalesHistoryViewName;\r\n            $scope.constDeliveryViewName = constants.constDeliveryViewName;\r\n            $scope.constSalesParkedViewName = constants.constSalesParkedViewName;\r\n            $scope.constClickAndCollectViewName = constants.constClickAndCollectViewName;\r\n\r\n\r\n            $scope.constProductsSectionName = constants.constProductsSectionName;\r\n            $scope.constProductsViewName = constants.constProductsViewName;\r\n\r\n            $scope.constHomeSectionName = constants.constHomeSectionName;\r\n            $scope.constHomeViewName = constants.constHomeViewName;\r\n\r\n            $scope.constCustomersSectionName = constants.constCustomersSectionName;\r\n            $scope.constCustomersViewName = constants.constCustomersViewName;\r\n\r\n            $scope.constUsersSectionName = constants.constUsersSectionName;\r\n            $scope.constUserManagementViewName = constants.constUserManagementViewName;\r\n\r\n            $scope.constDashboardSectionName = constants.constDashboardSectionName;\r\n            $scope.constDashboardViewName = constants.constDashboardViewName;\r\n\r\n            $scope.constProductSectionName = constants.constProductSectionName;\r\n            $scope.constProductManagementViewName = constants.constProductManagementViewName;\r\n\r\n            $scope.constSetupViewName = constants.constSetupViewName;\r\n\r\n            $scope.constSetupSectionName = constants.constSetupSectionName;\r\n            $scope.constPrinterSetupViewName = constants.constPrinterSetupViewName;\r\n            $scope.constLabelPrinterSetupViewName = constants.constLabelPrinterSetupViewName;\r\n            $scope.currentSection = constants.constHomeSectionName;\r\n\r\n            $scope.selectedMenuOption = null;\r\n            $scope.selectedMenuOptionMobile = null;\r\n\r\n            $scope.isSite = configService.isSite;\r\n            $scope.canSeeDashboard = function () {\r\n                return configService.canSeeDashboard;\r\n            };\r\n            \r\n            $scope.showDetailsPanel = false;\r\n            $scope.hideHomeAndProducts = true;\r\n\r\n            $scope.isScanSetupVisible = true;//buildConfiguration.platform == 'ios';\r\n\r\n            $scope.appVersion = buildConfiguration.appVersion;\r\n\r\n            $scope.goHome = function () {\r\n                $location.path('/home');\r\n            }\r\n\r\n            $scope.currentUser = null;\r\n            $scope.currentPosName = null;\r\n            $scope.currentRoleName = null;\r\n            $scope.currentOutlet = null;\r\n            $scope.currentRegister = null;\r\n\r\n            $scope.$on('header.setUserInfo', function (event, data) {\r\n\r\n                $scope.currentUser = data.currentUser;\r\n                $scope.currentPosName = data.currentPosName;\r\n                $scope.currentRoleName = data.currentRoleName;\r\n                $scope.currentUserId = data.currentUserId;\r\n                $timeout(function () {\r\n                    updateUserImageSrc();\r\n                }, 100);\r\n            });\r\n\r\n            $scope.$on('header.setOutletInfo', function (event, data) {\r\n                $scope.currentOutlet = data.outletName;\r\n                $scope.currentRegister = data.registryName;\r\n            });\r\n\r\n            $scope.isOnline = configService.isOnline;\r\n\r\n            $scope.canManageUsers = false;\r\n            $scope.canDelivery = false;\r\n            $scope.canSale = false;\r\n\r\n            loginService.setAfterLoginCallbacks(setRights);\r\n\r\n            function setRights() {\r\n                $scope.canManageUsers = configService.role !== 'Сashier';\r\n                $scope.canDelivery = configService.canSeeAllScheduledDeliveries === true;\r\n                $scope.canSale = true;\r\n            }\r\n\r\n            $scope.mobileTrigger = true;\r\n\r\n            $scope.showDetails = function (secName, force) {\r\n                $scope.mobileTrigger = !$scope.mobileTrigger;\r\n\r\n                Object.getOwnPropertyNames($scope.detailsVisibility).filter(\r\n                    function (val) {\r\n                        return val != secName;\r\n                    }).forEach(\r\n                        function (val) {\r\n                            $scope.detailsVisibility[val] = false;\r\n                        });\r\n\r\n                if ($scope.isVisible) {\r\n                    const previousSection = $scope.currentSection;\r\n                    if (!force && $scope.detailsVisibility.hasOwnProperty(secName)) {\r\n                        $scope.showDetailsPanel = true;\r\n                        $scope.detailsVisibility[secName] = $scope.showDetailsPanel;\r\n                        $scope.currentSection = secName;\r\n                        $scope.selectedMenuOption = secName;\r\n                        $scope.selectedMenuOptionMobile = secName;\r\n\r\n                        $timeout(function () {\r\n                            $('#subNavScrollWrapper').trigger('element.shown');\r\n                        });\r\n                    }\r\n                    else {\r\n                        $scope.showDetailsPanel = false;\r\n                        $scope.currentSection = constants.constHomeSectionName;\r\n                        $scope.selectedMenuOption = constants.constHomeSectionName;\r\n                        $scope.selectedMenuOptionMobile = constants.constHomeSectionName;\r\n                    }\r\n\r\n                    if ($scope.mobileTrigger === true && previousSection == secName) {\r\n                        $scope.showDetailsPanel = false;\r\n                        $scope.currentSection = constants.constHomeSectionName;\r\n                        $scope.selectedMenuOption = constants.constHomeSectionName;\r\n                        $scope.selectedMenuOptionMobile = constants.constHomeSectionName;\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.isVisible = false;\r\n\r\n            $scope.openWMS = function () {\r\n                var SCOPE = $scope;\r\n                $.blockUI();\r\n                printService.disconnect()\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                        \r\n                        const isQA = SCOPE.isQA();\r\n                        const scheme = isQA ? 'dearwmsqa://' : 'dearwms://';\r\n                        const packName = isQA ? 'dear.wms.qa' : 'dear.wms';\r\n\r\n                        window.plugins.starPrinter.externalAppCall({\r\n                            appName: 'crdwms',\r\n                            packageName: packName,\r\n                            url: scheme\r\n                        }, function (error, success) {\r\n                            if (error) {\r\n                                SCOPE.$apply(function () {\r\n                                    wmsApplicationNotAvailableDialog();\r\n                                    printService.connect();\r\n                                });\r\n                            }\r\n                        });\r\n                    });\r\n            };\r\n\r\n            $scope.$on('sideBar.toggle', function (event) {\r\n                if ($scope.isVisible)\r\n                    $scope.hideDetails();\r\n                else\r\n                    $scope.selectedMenuOption = null;\r\n                    $scope.selectedMenuOptionMobile = null;\r\n\r\n                $scope.isVisible = $scope.isVisible === true ? false : true;\r\n\r\n                $timeout(function () {\r\n                    //$('#navScrollWrapper').trigger('element.shown');\r\n                });\r\n            });\r\n\r\n            $scope.$on('sideBar.hideDetails', function (event, data) {\r\n                $scope.isVisible = false;\r\n                $scope.hideDetails(data);\r\n            });\r\n\r\n            $scope.hideSideBar = function () {\r\n                if ($scope.isVisible) {\r\n                    $scope.hideDetails('', true);\r\n\r\n                    $scope.isVisible = false;\r\n                }\r\n\r\n                $scope.removeQueryparam();\r\n\r\n                return true;\r\n            };\r\n\r\n            $scope.removeQueryparam = function() {\r\n                $location.search('isSuccessMessage', null)\r\n            };\r\n            \r\n            $scope.clickOutside = function (e) {\r\n                if ($(e.target).attr('id') === 'idSideBar') {\r\n                    $scope.hideSideBar();\r\n                }\r\n            }\r\n\r\n            $scope.hideDetails = function (data, force) {\r\n                var curSec = (!!data && !!data.sectionName) ? data.sectionName : $scope.currentSection;\r\n                $scope.showDetails('', force);\r\n                $scope.currentSection = curSec;\r\n            };\r\n\r\n            $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n                $scope.isOnline = object;\r\n                var path = $location.path();\r\n                console.log(\"homec: ConnectionStateChanged: \" + path);\r\n\r\n                if (!!path && path !== '/sell' && path !== '/salesparked' && path !== '/home' &&\r\n                    path !== '/opencloseregistry' && path !== '/cashManagement'\r\n                    && path !== '/offlinesales' && object === false) {\r\n                    pageNotAvailableDialog();\r\n                } else {\r\n                    $scope.closePageNotAvailableDialog();\r\n                }\r\n\r\n            });\r\n\r\n            function pageNotAvailableDialog() {\r\n                var $windowElement = $('#pageNotAvailablePartial');\r\n                helperService.showDialog($windowElement);\r\n            }\r\n\r\n            $scope.closePageNotAvailableDialog = function () {\r\n                var $windowElement = $('#pageNotAvailablePartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.sellOffline = function () {\r\n                window.localStorage.setItem('continueSale', null);\r\n                $location.path('/sell');\r\n            };\r\n\r\n\r\n            function wmsApplicationNotAvailableDialog() {\r\n                var $windowElement = $('#wmsApplicationNotAvailablePartial');\r\n                var qa = $scope.isQA() ? 'QA' : '';\r\n                var msg = gettextCatalog.getString(\"Warehouse Management System {{qa}} application is not available\", { qa: qa });\r\n                $('#wmsAvailabeID').html();\r\n                helperService.showDialog($windowElement);\r\n            }\r\n\r\n            $scope.closeWMSApplicationNotAvailableDialog = function () {\r\n                var $windowElement = $('#wmsApplicationNotAvailablePartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.getWMS = function () {\r\n                var appName = $scope.isQA() ? 'Cin7 Core WMS QA' : 'Cin7 Core WMS';\r\n                var link = $scope.isQA() ? buildConfiguration.WMSApplicationLink : 'dear.wms';\r\n                var url = constants.playStoreAppLink + link;\r\n\r\n                if (buildConfiguration.platform == 'ios') {\r\n                    link = $scope.isQA() ? buildConfiguration.WMSApplicationLinkIOS : 'cin7-core-wms/id1463374716';\r\n                    url = constants.appleStoreAppLink + link;\r\n                }\r\n\r\n                var SCOPE = $scope;\r\n                window.plugins.starPrinter.externalAppCall({ appName: \"crdwms\", url: url, activityForResult: true }, function (error, success) {\r\n                    SCOPE.$apply(function () {\r\n                        if (error !== \"Payment failed\") {\r\n                            var msg = gettextCatalog.getString(\"Some things went wrong, please download {{app}} application from store manually\", { app: appName });\r\n                            errorService.showError(msg);\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n\r\n\r\n            $scope.$on('changeLanguage', function (event) {\r\n                var newLanguageObj = constants.UpdateLanguageFunction();\r\n                $scope.constSellViewName = newLanguageObj.constSellViewName;\r\n                $scope.constOfflineSalesViewName = newLanguageObj.constOfflineSalesViewName;\r\n                $scope.constSalesHistoryViewName = newLanguageObj.constSalesHistoryViewName;\r\n                $scope.constDeliveryViewName = newLanguageObj.constDeliveryViewName;\r\n                $scope.constSalesParkedViewName = newLanguageObj.constSalesParkedViewName;\r\n                $scope.constClickAndCollectViewName = newLanguageObj.constClickAndCollectViewName;\r\n                $scope.constProductsViewName = newLanguageObj.constProductsViewName;\r\n                $scope.constHomeViewName = newLanguageObj.constHomeViewName;\r\n                $scope.constCustomersViewName = newLanguageObj.constCustomersViewName;\r\n                $scope.constUserManagementViewName = newLanguageObj.constUserManagementViewName;\r\n                $scope.constDashboardViewName = newLanguageObj.constDashboardViewName;\r\n                $scope.constProductManagementViewName = newLanguageObj.constProductManagementViewName;\r\n                $scope.constSetupViewName = newLanguageObj.constSetupViewName;\r\n                $scope.constPrinterSetupViewName = newLanguageObj.constPrinterSetupViewName;\r\n                $scope.constLabelPrinterSetupViewName = newLanguageObj.constLabelPrinterSetupViewName;\r\n            });\r\n\r\n            $scope.reloadAll = function (stayAtPage) {\r\n                $scope.hideSideBar();\r\n                $.blockUI();\r\n                loginService.loadAll(dataChangeNotificationService)\r\n                    .then(function () {\r\n                        if (configService.isMobile) {\r\n                            cacheService.clearCache();\r\n                        }\r\n                        if (stayAtPage===false) {\r\n                            helperService.showInfoDialog({\r\n                                title: '',\r\n                                body: gettextCatalog.getString('All application data has been successfully updated!')\r\n                            }, function () {\r\n                                $timeout(function () {\r\n                                    window.localStorage.setItem('continueSale', null);\r\n                                    $location.path('/sell');\r\n                                    $rootScope.$broadcast('products.reloaded');\r\n                                }, 0);\r\n                            });\r\n                        }\r\n                    })\r\n                    .finally(function () { $.unblockUI(); });\r\n            };\r\n\r\n            //$scope.reloadProducts = function (stayAtPage) {\r\n            //    $scope.hideSideBar();\r\n            //    $.blockUI();\r\n            //    productsService.loadProducts('force')\r\n            //    .then(function () {\r\n            //        return productsService.getGiftCardSettings();\r\n            //    })\r\n            //    .then(function () {\r\n            //        return saleService.getPosDiscounts()\r\n            //            .then(function () {\r\n            //            if (configService.isMobile) {\r\n            //                cacheService.clearCache();\r\n            //            }\r\n            //            if (!stayAtPage) {\r\n            //                helperService.showInfoDialog({\r\n            //                    title: '',\r\n            //                    body: gettextCatalog.getString('Product list has been successfully updated!')\r\n            //                }, function () {\r\n            //                    $timeout(function () {\r\n            //                        window.localStorage.setItem('continueSale', null);\r\n            //                        $location.path('/sell');\r\n            //                    }, 0);\r\n            //                });\r\n            //            }                \r\n            //        });\r\n            //    }).finally(function () { $.unblockUI(); });\r\n            //};\r\n\r\n            $scope.changeLanguage = function () {\r\n                $scope.hideSideBar();\r\n                $rootScope.$broadcast('header.changeLanguage');\r\n            };\r\n\r\n            $scope.logoff = function () {\r\n                $scope.hideSideBar();\r\n                $rootScope.$broadcast('header.logoff');\r\n\r\n                googleHelperService.logout();\r\n\r\n            };\r\n\r\n            $scope.changeOutlet = function () {\r\n                $scope.hideSideBar();\r\n                $rootScope.$broadcast('header.changeOutlet');\r\n            };\r\n\r\n            $scope.blockScreen = function () {\r\n                //$.blockUI();\r\n                return true;\r\n            };\r\n\r\n            $scope.isOldBrowser = function () {\r\n                return configService.isSite && !window.isSupported;\r\n            };\r\n\r\n            $scope.$on('sideBar.reloadProducts', function (event, object) {\r\n                if (configService.isSite && $scope.isOldBrowser()) {\r\n                    remoteRequestProvider.getLiveSearchProducs()\r\n                        .then(function (data) {\r\n                            return liveSearchService.fillData(data.Products);\r\n                        });\r\n                }\r\n                else\r\n                    $scope.reloadAll(true);\r\n                //            $scope.reloadProducts(true);\r\n            });\r\n\r\n        }]);\r\n","import badSound from  '../PosContent/badSound.mp3';\r\nimport goodSound from '../PosContent/goodSound.mp3';\r\n\r\nangular.module('services').factory('soundService',\r\n    ['$q',\r\n        function ($q) {\r\n\r\n            var soundService = {};\r\n            var goodAudio = new Audio(goodSound);\r\n            var badAudio = new Audio(badSound);\r\n\r\n            function isAndroid() {\r\n                return window.device && device.platform && device.platform.toLowerCase() === 'android';\r\n            }\r\n\r\n            function canPlayOnCurrentDevice() {\r\n                var deferred = $q.defer();\r\n\r\n                if (!window.cordova || !cordova.exec || !isAndroid()) {\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                try {\r\n                    cordova.exec(\r\n                        function (result) {\r\n                            deferred.resolve(result && result.canPlaySound === true);\r\n                        },\r\n                        function () {\r\n                            deferred.resolve(true);\r\n                        },\r\n                        'AudioMode',\r\n                        'canPlaySound',\r\n                        []\r\n                    );\r\n                } catch (e) {\r\n                    deferred.resolve(true);\r\n                }\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            function resetAndPlay(audio) {\r\n                var deferred = $q.defer();\r\n\r\n                try {\r\n                    audio.pause();\r\n                    audio.currentTime = 0;\r\n\r\n                    var playPromise = audio.play();\r\n\r\n                    if (playPromise && angular.isFunction(playPromise.then)) {\r\n                        playPromise.then(function () {\r\n                            deferred.resolve(null);\r\n                        }).catch(function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n                    } else {\r\n                        deferred.resolve(null);\r\n                    }\r\n\r\n                } catch (e) {\r\n                    deferred.resolve(null);\r\n                }\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            function playSound(audio) {\r\n\r\n                return canPlayOnCurrentDevice()\r\n                    .then(function (canPlay) {\r\n\r\n                        if (!canPlay) {\r\n                            return null;\r\n                        }\r\n\r\n                        return resetAndPlay(audio);\r\n                    })\r\n                    .catch(function () {\r\n                        return null;\r\n                    });\r\n            }\r\n\r\n            soundService.playGood = function () {\r\n                return playSound(goodAudio);\r\n            };\r\n\r\n            soundService.playBad = function () {\r\n                return playSound(badAudio);\r\n            };\r\n\r\n            return soundService;\r\n        }\r\n    ]);","angular.module('services').service('squareReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider','uuid2', \r\n        function ($q, configService, gettextCatalog, webOnlyProvider, uuid2) {\r\n\r\n            this.appID = buildConfiguration.squareApplicationId;\r\n            this.backDeferred = null;\r\n            const schemes = buildConfiguration.CFBundleURLSchemes;\r\n            this.squareURLSchema = Array.isArray(schemes)\r\n                    ? schemes.find(x => x.startsWith(\"square\")) ?? null\r\n                    : schemes ?? null;\r\n\r\n            this.makePayment = function (options) {\r\n\r\n                var deferred = $q.defer();\r\n\r\n                var opts = {\r\n                    applicationId: this.appID,\r\n                    currency: options.currency,\r\n                    metadata: options.metadata,\r\n                    tenders: ['CARD'],\r\n                    locationId: configService.lastSquareLocationID,\r\n                    schema: this.squareURLSchema\r\n                };\r\n\r\n                if (!configService.lastSquareLocationID) {\r\n                    deferred.reject({\r\n                        result: false, response: {\r\n                            errorDescription: gettextCatalog.getString(\"The payment cannot be processed. The 'Square integration to process' parameter isn't set for the outlet on the POS setup page or you need to reset the outlet.\")\r\n                        }\r\n                    });\r\n\r\n                    return deferred.promise;\r\n                }\r\n\r\n                if (!this.squareURLSchema) {\r\n                    deferred.reject({\r\n                        result: false, response: {\r\n                            errorDescription: gettextCatalog.getString(\"The payment cannot be processed. Square URL scheme is not configured for this app build.\")\r\n                        }\r\n                    });\r\n\r\n                    return deferred.promise;\r\n                }\r\n\r\n                // sum should be in cents\r\n                cordova.square.requestCharge(options.amount * 100, opts,\r\n                   function (res) {\r\n                       console.log('successfully payed: ' + res);\r\n                       deferred.resolve({\r\n                           result: true, response: {\r\n                               ClientTransactionID: res.clientTransactionId,\r\n                               ServerTransactionID: res.serverTransactionId,\r\n                               squareIntegrationID: configService.lastSquareIntegrationID,\r\n                               squareLocationID: configService.lastSquareLocationID\r\n                           }\r\n                       });\r\n                   },\r\n                    function (err) {\r\n                        console.log('erroneously payed: ');\r\n                        console.log(err);\r\n                        deferred.reject({ result: false, response: err, message: typeof err === 'string' ? err : undefined });\r\n                    })\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.refund = function (el, refundSum) {\r\n                var deferred = $q.defer();\r\n\r\n                // call here square.\r\n                webOnlyProvider.squareRefund(el.squareIntegrationID,\r\n                                                    el.ServerTransactionID,\r\n                                                    !el.ServerTransactionID ? el.ClientTransactionID : null,\r\n                                                    el.Date, 'refund via Cin7 Core POS',\r\n                                                    refundSum,\r\n                                                    el.Amount,\r\n                                                    uuid2.newguid()\r\n                                                    )\r\n            .success(function (res) {\r\n                deferred.resolve({\r\n                    ServerTransactionID: el.ServerTransactionID,\r\n                    ClientTransactionID: el.ClientTransactionID,\r\n                    amount: refundSum,\r\n                    result:true\r\n                });\r\n            })\r\n            .error(function (err) {\r\n                var message=null;\r\n                if (!!err && err.length > 0) {\r\n                    \r\n                    if (!!err[0].Exception) {\r\n                        try{\r\n                            var obj = JSON.parse(err[0].Exception);\r\n                            message = obj.message;\r\n                        }\r\n                        catch (ex) {\r\n                            message = err[0].Exception;\r\n                        }\r\n                    }\r\n                }\r\n                deferred.resolve({\r\n                    amount: refundSum,\r\n                    result: false,\r\n                    message: message\r\n                }); // in error case enlarge rest sum. It will be appended to user account\r\n            });\r\n\r\n                return deferred.promise;\r\n            };\r\n\r\n        }]);","angular.module(\"mainApp\").controller('stockFamilyProductMatrixController',\r\n    ['$scope', '$rootScope', 'loginService', 'gettextCatalog', 'stockOrderingService',\r\n     'helperService', '$timeout', 'configService', 'errorService', '$q', \r\n     'printService','uuid2', 'productsService', '$filter',\r\n     function ($scope, $rootScope, loginService, gettextCatalog, stockOrderingService,\r\n               helperService, $timeout, configService, errorService,\r\n               soundService, $q, printService, uuid2, stockTakeService, $filter) {\r\n\r\n                $scope.QuantityPropName = 'OrderedQuantity';\r\n                $scope.type = 'transfer';\r\n\r\n                $scope.avaivedProducts = [];\r\n                $scope.options = {};\r\n                $scope.familyID = {};\r\n                $scope.familyName = {};\r\n                $scope.firstFormShow = true;     \r\n                $scope.baseOptionChange = function () { }; \r\n                $scope.hideBaseGridLine = false;\r\n\r\n                $scope.baseOption = '';\r\n                $scope.baseOptionValue = '';\r\n                $scope.gridColumnsCount = 2;\r\n                $scope.gridColumnsSizePercent = 50;\r\n\r\n                $scope.productFamily = {};\r\n                $scope.variationGrid = [];\r\n                $scope.isDlgVisible = false;\r\n                $scope.isEditable = true;\r\n                $scope.productFamilyOptions = [];\r\n\r\n                $scope.firstDlgShow = true;\r\n                $scope.firstInitSelects = true;\r\n                $scope.isMobile = configService.isMobile;\r\n\r\n                var multiplier = window.innerHeight > window.innerWidth ? 0.6 : 0.4;\r\n                $scope.fcss = { 'height': window.innerHeight * multiplier + 'px' };\r\n\r\n                $scope.$on(\"stockFamilyMatrix.show\", function(event, data) {\r\n                    $scope.productFamily = {};\r\n                    \r\n                    $scope.availableProducts = data.availableProducts;\r\n                    $scope.selectedProducts = data.selectedProducts;\r\n                    $scope.familyID = data.familyID;\r\n                    $scope.familyName = data.familyName;\r\n                    $scope.options = data.options;\r\n                    $scope.isEditable = data.isEditable;\r\n                    $scope.fromLocationName = data.fromLocationName;\r\n                    $scope.toLocationName = data.toLocationName;\r\n\r\n                    if(data.fromLocationName){\r\n                        $scope.QuantityPropName = 'OrderedQuantity';\r\n                        $scope.type = 'transfer';\r\n                    } else {\r\n                        $scope.QuantityPropName = 'Quantity';\r\n                        $scope.type = 'purchase';\r\n                    }\r\n\r\n                                        \r\n\r\n                    $scope.evaluateProductFamily();\r\n\r\n                    $scope.showMatrixDlg();\r\n                });\r\n\r\n                $scope.evaluateProductFamily = function() {\r\n                    var option1ValuesDistinct = [];\r\n                    var option2ValuesDistinct = [];\r\n                    var option3ValuesDistinct = [];\r\n\r\n                    var option1Values = [];\r\n                    var option2Values = [];\r\n                    var option3Values = [];\r\n\r\n                    var option1 = $scope.availableProducts[0].Option1Name;\r\n                    var option2 = $scope.availableProducts[0].Option2Name;\r\n                    var option3 = $scope.availableProducts[0].Option3Name;\r\n                    var available = [];\r\n                    var index = 0;\r\n                    var comments = \"\";\r\n                    angular.forEach($scope.availableProducts, function(item) {\r\n                        if(item.Option1 && option1ValuesDistinct.indexOf(item.Option1) < 0) {\r\n                            option1ValuesDistinct.push(item.Option1);\r\n                        }\r\n\r\n                        if(item.Option2 && option2ValuesDistinct.indexOf(item.Option2) < 0) {\r\n                            option2ValuesDistinct.push(item.Option2);\r\n                        }\r\n\r\n                        if(item.Option3 && option3ValuesDistinct.indexOf(item.Option3) < 0) {\r\n                            option3ValuesDistinct.push(item.Option3);\r\n                        }\r\n                        var selectedItem;\r\n                        var selectedItems = $scope.selectedProducts.filter(function(s) {return s.ProductID === item.ProductID;});\r\n                        if(selectedItems.length === 1){\r\n                            selectedItem = selectedItems[0];\r\n                        }\r\n\r\n                        if(selectedItem && (selectedItem.Comments || selectedItem.Comment)){\r\n                            comments = selectedItem.Comments || selectedItem.Comment;\r\n                        }\r\n                        var availableItem = angular.copy(item);\r\n                        availableItem.Index = index;\r\n                        availableItem.QuantityOnHand = item.OnHand;\r\n                        availableItem.QuantityAvailable = item.Available;\r\n                        if($scope.type === 'purchase') {\r\n                            availableItem.Price = item.Price;\r\n                        }\r\n                        index++;\r\n                        if(selectedItem){\r\n                            availableItem[$scope.QuantityPropName] = +selectedItem[$scope.QuantityPropName];\r\n                            availableItem.Comments = selectedItem.Comments;\r\n                            availableItem.Comment = selectedItem.Comment;\r\n                            availableItem.Available = selectedItem.QuantityAvailable;\r\n                            if($scope.type === 'purchase') {\r\n                                availableItem.Price = selectedItem.Price;\r\n                            }\r\n                        } else {\r\n                            availableItem[$scope.QuantityPropName] = null;\r\n                            availableItem.Comments = '';\r\n                            availableItem.Comment = '';\r\n                        }\r\n\r\n                        available.push(availableItem);\r\n                    });\r\n\r\n                    angular.forEach($scope.options.Option1Values, function(opt) {\r\n                        if(option1ValuesDistinct.filter(function(it) {return it === opt;}).length > 0){\r\n                            option1Values.push(opt);\r\n                        }\r\n                    });\r\n                    angular.forEach($scope.options.Option2Values, function(opt) {\r\n                        if(option2ValuesDistinct.filter(function(it) {return it === opt;}).length > 0){\r\n                            option2Values.push(opt);\r\n                        }\r\n                    });\r\n                    angular.forEach($scope.options.Option3Values, function(opt) {\r\n                        if(option3ValuesDistinct.filter(function(it) {return it === opt;}).length > 0){\r\n                            option3Values.push(opt);\r\n                        }\r\n                    });\r\n\r\n                    $scope.productFamily = {\r\n                        Options: {\r\n                            Option1: option1,\r\n                            Option1Values: option1Values,\r\n                            Option2: option2,\r\n                            Option2Values: option2Values,\r\n                            Option3: option3,\r\n                            Option3Values: option3Values\r\n                        },\r\n                        Available: available\r\n                    };\r\n                    $scope.qty.comments = comments;\r\n                    $scope.baseOption = option1;\r\n                    $scope.baseOptionChange($scope.baseOption);\r\n\r\n                    $timeout(function () {\r\n                        initSelects();\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                };\r\n\r\n                $scope.$on('view.loaded', function (evt) {       \r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n                $scope.showSetQty = function(col) {\r\n                    if($scope.isEditable) {\r\n                        $scope.quantityObject = {\r\n                            value: $scope.productFamily.Available.filter(function(i) {return i.Index === col.Index;})[0][$scope.QuantityPropName],\r\n                            Index: col.Index,\r\n                            Available: col.Available,\r\n                            OnOrder: col.OnOrder,\r\n                            infoText: $scope.fromLocationName ? (\"Available at \" + $scope.fromLocationName + \": \" \r\n                            + col.Available \r\n                            + \", On Order at \" + $scope.toLocationName + \": \" + col.OnOrder) : (\"Available: \" + \r\n                            + col.Available + \", On Order: \" + col.OnOrder)\r\n                        };\r\n                        $scope.showItemQuantityDlg('qty-' + col.ProductID);\r\n                    }\r\n                    return;\r\n                };\r\n\r\n                $scope.showMatrixDlg = function() {\r\n                    helperService.showDialog('#stockMatrixDlg', function () {\r\n                        if ($scope.firstDlgShow) {\r\n                            $scope.firstDlgShow = false;\r\n                            $('.stockFamilyMatrixWrapper').show();\r\n                        }\r\n                        $scope.isDlgVisible = true;\r\n                    });\r\n                };\r\n\r\n                $scope.hasOption2 = function () {\r\n                    if (typeof $scope.productFamily.Options.Option2 !== 'undefined' &&\r\n                        $scope.productFamily.Options.Option2 !== null &&\r\n                        $scope.productFamily.Options.Option2 !== '' &&\r\n                        $scope.productFamily.Options.Option2Values && $scope.productFamily.Options.Option2Values.length > 0) return true;\r\n                    return false;\r\n                };\r\n\r\n                $scope.hasOption3 = function () {\r\n                    if (typeof $scope.productFamily.Options.Option3 !== 'undefined' &&\r\n                        $scope.productFamily.Options.Option3 !== null &&\r\n                        $scope.productFamily.Options.Option3 !== ''\r\n                    && $scope.productFamily.Options.Option3Values && $scope.productFamily.Options.Option3Values.length > 0) return true;\r\n                    return false;\r\n                };\r\n\r\n                $scope.updateGrid = function () {\r\n                    var optionsCount = 1;\r\n                    var obaseNum = 1;\r\n                    $scope.variationGrid = [];\r\n            \r\n                    if (typeof $scope.productFamily.Options.Option2 !== 'undefined' &&\r\n                        $scope.productFamily.Options.Option2 !== null &&\r\n                        $scope.productFamily.Options.Option2 !== ''&&\r\n                        $scope.productFamily.Options.Option2Values && $scope.productFamily.Options.Option2Values.length > 0) {\r\n                        optionsCount++;\r\n            \r\n                        if ($scope.baseOption.toUpperCase() === $scope.productFamily.Options.Option2.toUpperCase()) {\r\n                            obaseNum = 2;\r\n                        }\r\n                    }\r\n            \r\n                    if (typeof $scope.productFamily.Options.Option3 !== 'undefined' &&\r\n                        $scope.productFamily.Options.Option3 !== null &&\r\n                        $scope.productFamily.Options.Option3 !== ''\r\n                        && $scope.productFamily.Options.Option3Values && $scope.productFamily.Options.Option3Values.length > 0) {\r\n                        optionsCount++;\r\n            \r\n                        if ($scope.baseOption.toUpperCase() === $scope.productFamily.Options.Option3.toUpperCase()) {\r\n                            obaseNum = 3;\r\n                        }\r\n                    }\r\n            \r\n                    if (optionsCount === 1) {\r\n                        // logic for single option family\r\n                        $scope.hideBaseGridLine = true;\r\n                        var variationCount = $scope.productFamily.Options.Option1Values.length;\r\n            \r\n            \r\n                        if (variationCount > 6) // number of columns to look&feel beautiful\r\n                        {\r\n                            $scope.gridColumnsCount = 2;\r\n                            $scope.gridColumnsSizePercent = 100 / $scope.gridColumnsCount;\r\n                            $scope.variationGrid = [\r\n                                [{ IsHeader: true, Header: '' }, { Header: $scope.productFamily.Options.Option1, IsHeader: true }]\r\n                            ];\r\n            \r\n                            for (var i = 0; i < variationCount; i++) {\r\n                                var availLen = $scope.productFamily.Available.length;\r\n                                var item = null;\r\n                                for (var v = 0; v < availLen; v++) {\r\n                                    if ($scope.productFamily.Available[v].Option1.toUpperCase() === $scope.productFamily.Options.Option1Values[i].toUpperCase()) {\r\n                                        item = $scope.productFamily.Available[v];\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                $scope.variationGrid.push([{ Header: $scope.productFamily.Options.Option1Values[i], IsHeader: true }, item]);\r\n                            }\r\n                        } else {\r\n                            $scope.gridColumnsCount = $scope.productFamily.Options.Option1Values.length + 1;\r\n                            $scope.gridColumnsSizePercent = 100 / $scope.gridColumnsCount;\r\n                            var lineHeader = [{ IsHeader: true, Header: '' }];\r\n                            var lineData = [{ Header: $scope.productFamily.Options.Option1, IsHeader: true }];\r\n            \r\n                            for (var i = 0; i < variationCount; i++) {\r\n                                lineHeader.push({ Header: $scope.productFamily.Options.Option1Values[i], IsHeader: true });\r\n            \r\n                                var availLen = $scope.productFamily.Available.length;\r\n                                var item = null;\r\n                                for (var v = 0; v < availLen; v++) {\r\n                                    var pr = $scope.productFamily.Available[v];\r\n                                    if (pr.Option1.toUpperCase() === $scope.productFamily.Options.Option1Values[i].toUpperCase() && !pr.Option2 && !pr.Option3) {\r\n                                        item = pr;\r\n                                        break;\r\n                                    }\r\n                                }\r\n            \r\n                                lineData.push(item);\r\n                            }\r\n            \r\n                            $scope.variationGrid = [lineHeader, lineData];\r\n                        }\r\n                    }\r\n            \r\n                    if (optionsCount === 2) {\r\n                        // logic for matrix option family\r\n                        $scope.hideBaseGridLine = true;\r\n                        var variationCount1 = $scope.productFamily.Options.Option1Values.length;\r\n                        var variationCount2 = 0;\r\n                        var varOpt2No = 2;\r\n                        if (typeof $scope.productFamily.Options.Option2 !== 'undefined' &&\r\n                            $scope.productFamily.Options.Option2 !== null &&\r\n                            $scope.productFamily.Options.Option2 !== '') {\r\n                            variationCount2 = $scope.productFamily.Options.Option2Values.length;\r\n                        }\r\n                        else {\r\n                            variationCount2 = $scope.productFamily.Options.Option3Values.length;\r\n                            varOpt2No = 3;\r\n                        }\r\n            \r\n                        var axisXName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1 : (varOpt2No === 2 ? $scope.productFamily.Options.Option2 : $scope.productFamily.Options.Option3)).toUpperCase();\r\n                        var axisYName = (variationCount1 <= variationCount2 ? (varOpt2No === 2 ? $scope.productFamily.Options.Option2 : $scope.productFamily.Options.Option3) : $scope.productFamily.Options.Option1).toUpperCase();\r\n                        var axisXData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1Values : (varOpt2No === 2 ? $scope.productFamily.Options.Option2Values : $scope.productFamily.Options.Option3Values));\r\n                        var axisYData = (variationCount1 <= variationCount2 ? (varOpt2No === 2 ? $scope.productFamily.Options.Option2Values : $scope.productFamily.Options.Option3Values) : $scope.productFamily.Options.Option1Values);\r\n            \r\n                        var headerLine = [{ IsHeader: true, Header: '' }];\r\n                        for (var d = 0; d < axisXData.length; d++) {\r\n                            headerLine.push({ IsHeader: true, Header: axisXData[d] });\r\n                        }\r\n                        $scope.variationGrid.push(headerLine);\r\n                        $scope.gridColumnsCount = axisXData.length + 1;\r\n                        $scope.gridColumnsSizePercent = 100 / $scope.gridColumnsCount;\r\n            \r\n                        var availLen = $scope.productFamily.Available.length;\r\n            \r\n                        for (var y = 0; y < axisYData.length; y++) {\r\n                            var dataBlock = [{ IsHeader: true, Header: axisYData[y] }];\r\n            \r\n                            for (var x = 0; x < axisXData.length; x++) {\r\n                                var item = null;\r\n                                for (var v = 0; v < availLen; v++) {\r\n                                    var av = $scope.productFamily.Available[v];\r\n                                    if (axisXName === $scope.productFamily.Options.Option1.toUpperCase() &&\r\n                                        ((varOpt2No === 2 && axisYName === $scope.productFamily.Options.Option2.toUpperCase())\r\n                                            || (varOpt2No === 3 && axisYName === $scope.productFamily.Options.Option3.toUpperCase()))) {\r\n                                        if ((av.Option1.toUpperCase() === axisXData[x].toUpperCase())\r\n                                         && ((varOpt2No === 2 && av.Option2.toUpperCase() === axisYData[y].toUpperCase() && !av.Option3)\r\n                                            || (varOpt2No === 3 && av.Option3.toUpperCase() === axisYData[y].toUpperCase()) && !av.Option2)\r\n                                        ) {\r\n                                            item = av;\r\n                                            break;\r\n                                        }\r\n                                    }\r\n                                    else if (axisYName === $scope.productFamily.Options.Option1.toUpperCase() &&\r\n                                        ((varOpt2No === 2 && axisXName === $scope.productFamily.Options.Option2.toUpperCase())\r\n                                            || (varOpt2No === 3 && axisXName === $scope.productFamily.Options.Option3.toUpperCase()))) {\r\n                                        if ((av.Option1.toUpperCase() === axisYData[y].toUpperCase())\r\n                                         && ((varOpt2No === 2 && av.Option2.toUpperCase() === axisXData[x].toUpperCase() && !av.Option3)\r\n                                            || (varOpt2No === 3 && av.Option3.toUpperCase() === axisXData[x].toUpperCase()) && !av.Option2)\r\n                                        ) {\r\n                                            item = av;\r\n                                            break;\r\n                                        }\r\n                                    }\r\n                                } //for v\r\n                                if (item !== null) dataBlock.push(item);\r\n                                else dataBlock.push({ Empty: true });\r\n                            } // for x\r\n                            $scope.variationGrid.push(dataBlock);\r\n                        } // for y\r\n                    }\r\n            \r\n                    if (optionsCount === 3) {\r\n                        // logic for complex matrix option family\r\n                        $scope.hideBaseGridLine = false;\r\n                        var variationCount1 = 0;\r\n                        var variationCount2 = 0;\r\n                        var axisXName = '';\r\n                        var axisYName = '';\r\n                        var axisXData = [];\r\n                        var axisYData = [];\r\n                        if (obaseNum === 1) {\r\n                            variationCount1 = $scope.productFamily.Options.Option2Values.length;\r\n                            variationCount2 = $scope.productFamily.Options.Option3Values.length;\r\n            \r\n                            axisXName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option2 : $scope.productFamily.Options.Option3).toUpperCase();\r\n                            axisYName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option3 : $scope.productFamily.Options.Option2).toUpperCase();\r\n                            axisXData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option2Values : $scope.productFamily.Options.Option3Values);\r\n                            axisYData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option3Values : $scope.productFamily.Options.Option2Values);\r\n                        } else\r\n                            if (obaseNum === 2) {\r\n                                variationCount1 = $scope.productFamily.Options.Option1Values.length;\r\n                                variationCount2 = $scope.productFamily.Options.Option3Values.length;\r\n            \r\n                                axisXName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1 : $scope.productFamily.Options.Option3).toUpperCase();\r\n                                axisYName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option3 : $scope.productFamily.Options.Option1).toUpperCase();\r\n                                axisXData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1Values : $scope.productFamily.Options.Option3Values);\r\n                                axisYData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option3Values : $scope.productFamily.Options.Option1Values);\r\n                            } else\r\n                                if (obaseNum === 3) {\r\n                                    variationCount1 = $scope.productFamily.Options.Option1Values.length;\r\n                                    variationCount2 = $scope.productFamily.Options.Option2Values.length;\r\n            \r\n                                    axisXName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1 : $scope.productFamily.Options.Option2).toUpperCase();\r\n                                    axisYName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option2 : $scope.productFamily.Options.Option1).toUpperCase();\r\n                                    axisXData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1Values : $scope.productFamily.Options.Option2Values);\r\n                                    axisYData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option2Values : $scope.productFamily.Options.Option1Values);\r\n                                }\r\n            \r\n                        var headerLine = [{ IsHeader: true, Header: '' }];\r\n                        for (var d = 0; d < axisXData.length; d++) {\r\n                            headerLine.push({ IsHeader: true, Header: axisXData[d] });\r\n                        }\r\n                        $scope.variationGrid.push(headerLine);\r\n                        $scope.gridColumnsCount = axisXData.length + 1;\r\n                        $scope.gridColumnsSizePercent = 100 / $scope.gridColumnsCount;\r\n            \r\n                        var availLen = $scope.productFamily.Available.length;\r\n            \r\n                        for (var y = 0; y < axisYData.length; y++) {\r\n                            var dataBlock = [{ IsHeader: true, Header: axisYData[y] }];\r\n            \r\n                            for (let x = 0; x < axisXData.length; x++) {\r\n                                var item = null;\r\n                                for (let v = 0; v < availLen; v++) {\r\n                                    if (obaseNum === 1) {\r\n                                        if (axisXName === $scope.productFamily.Options.Option2.toUpperCase() && axisYName === $scope.productFamily.Options.Option3.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option1.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option2.toUpperCase() === axisXData[x].toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option3.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                        else if (axisXName === $scope.productFamily.Options.Option3.toUpperCase() && axisYName === $scope.productFamily.Options.Option2.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option1.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                              && $scope.productFamily.Available[v].Option3.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option2.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                    } else if (obaseNum === 2) {\r\n                                        if (axisXName === $scope.productFamily.Options.Option1.toUpperCase() && axisYName === $scope.productFamily.Options.Option3.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option2.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option1.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option3.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                        else if (axisXName === $scope.productFamily.Options.Option3.toUpperCase() && axisYName === $scope.productFamily.Options.Option1.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option2.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option3.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option1.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                    } else if (obaseNum === 3) {\r\n                                        if (axisXName === $scope.productFamily.Options.Option1.toUpperCase() && axisYName === $scope.productFamily.Options.Option2.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option3.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option1.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option2.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                        else if (axisXName === $scope.productFamily.Options.Option2.toUpperCase() && axisYName === $scope.productFamily.Options.Option1.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option3.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option2.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option1.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                } //for v\r\n                                if (item !== null) dataBlock.push(item);\r\n                                else dataBlock.push({ Empty: true })\r\n                            } // for x\r\n                            $scope.variationGrid.push(dataBlock);\r\n                        } // for y\r\n                    }\r\n                    $scope.variationGridColLength = $scope.variationGrid[0].length;\r\n                    $timeout(function () {\r\n                        $('select').trigger('refresh');\r\n                        $(\"select.baseOptionValueSelect\").trigger(\"change\");\r\n                    }, 20);\r\n                };\r\n\r\n                $scope.baseOptionValueChange = function (baseOptionValue) {\r\n                    $scope.baseOptionValue = baseOptionValue;\r\n                    $scope.updateGrid();\r\n                };\r\n\r\n                $scope.baseOptionChange = function (baseOption) {\r\n                    $scope.productFamilyOptions = [];\r\n\r\n                    $scope.baseOption = baseOption;\r\n                    if (baseOption === $scope.productFamily.Options.Option1) {\r\n                        $scope.productFamilyOptions = $scope.productFamily.Options.Option1Values;\r\n                        $scope.baseOptionValue = $scope.productFamily.Options.Option1Values[0];\r\n                    }\r\n                    if ($scope.productFamily.Options.Option2 !== '') {\r\n                        if (baseOption === $scope.productFamily.Options.Option2) {\r\n                            $scope.productFamilyOptions = $scope.productFamily.Options.Option2Values;\r\n                            $scope.baseOptionValue = $scope.productFamily.Options.Option2Values[0];\r\n                        }\r\n                    }\r\n                    if ($scope.productFamily.Options.Option3 !== '') {\r\n                        if (baseOption === $scope.productFamily.Options.Option3) {\r\n                            $scope.productFamilyOptions = $scope.productFamily.Options.Option3Values;\r\n                            $scope.baseOptionValue = $scope.productFamily.Options.Option3Values[0];\r\n                        }\r\n                    }\r\n                    $scope.updateGrid(); \r\n                };\r\n\r\n                $scope.qty = {};\r\n                $scope.setAllQty = function(){\r\n                    $scope.quantityObject = {\r\n                        value: \"\",\r\n                        infoText: \"\",\r\n                        isToAll: true\r\n                    };\r\n                    $scope.showItemQuantityDlg('setToAll');\r\n                };\r\n\r\n                $scope.itemQuantityDlg2 = null; // is bound to popover object with methods from directive\r\n\r\n                $scope.showItemQuantityDlg = function (elID) {\r\n                    $timeout(function () {\r\n                            $scope.itemQuantityDlg2.show(!elID ? '#quantityObject' : '#'+elID);\r\n                    });\r\n                };\r\n       \r\n                // callback\r\n                $scope.setQuantity = function (prm, event) {\r\n       \r\n                    $timeout(function () { $scope.itemQuantityDlg2.hide(true); });\r\n       \r\n                    if (prm === true) {\r\n                        $timeout(function () {\r\n                            if(!$scope.quantityObject.isToAll) {\r\n                                $scope.quantityObject[$scope.QuantityPropName] = +$scope.quantityObject.value;\r\n                                var itemIndex = $scope.productFamily.Available.filter(function(i) {return i.Index === $scope.quantityObject.Index;})[0];\r\n                                var items = $scope.productFamily.Available.filter(function(i) {return i.Option1 === itemIndex.Option1 \r\n                                    && i.Option2 === itemIndex.Option2 && i.Option3 === itemIndex.Option3;\r\n                                });\r\n                                angular.forEach(items, function(item) {\r\n                                    item[$scope.QuantityPropName] = $scope.quantityObject[$scope.QuantityPropName];\r\n                                });\r\n                            } else {\r\n                                angular.forEach($scope.productFamily.Available, function(item){\r\n                                    item[$scope.QuantityPropName] = +$scope.quantityObject.value;\r\n                                });\r\n                            }\r\n                        });\r\n                    }       \r\n                    event.stopPropagation();\r\n                    event.preventDefault();\r\n                };\r\n\r\n                $scope.save = function() {\r\n                    var processed = [];\r\n                    angular.forEach($scope.productFamily.Available, function(item) {\r\n                        item.Comments = $scope.qty.comments;\r\n                        item.Comment = $scope.qty.comments;\r\n\r\n                        if(processed.filter(function(x){\r\n                            return x.Option1 == item.Option1 && x.Option2 == item.Option2 && x.Option3 == item.Option3\r\n                        }).length == 0){\r\n                            var otherItems = $scope.productFamily.Available.filter(function(i) {\r\n                                return i.Option1 === item.Option1 && i.Option2 === item.Option2 && i.Option3 === item.Option3\r\n                                && item.Index !== i.Index;\r\n                            });\r\n\r\n                            angular.forEach(otherItems, function(otherItem) {\r\n                                otherItem[$scope.QuantityPropName] = item[$scope.QuantityPropName];\r\n                            });\r\n                            processed.push({Option1: item.Option1, Option2: item.Option2, Option3: item.Option3});\r\n                        }\r\n\r\n                    });\r\n                    $rootScope.$broadcast($scope.type == 'transfer' ? \"stockFamilyMatrix.save\" : \"stockFamilyMatrixPurchase.save\", {\r\n                        familyID: $scope.familyID,\r\n                        items: $scope.productFamily.Available.filter(function(it) {return it[$scope.QuantityPropName] > 0;}),\r\n                        comments: $scope.qty.comments\r\n                    });\r\n                    $scope.hide();\r\n                };\r\n\r\n                $scope.hide = function(){\r\n                    $scope.isDlgVisible = false;\r\n                    helperService.closeDialog('#stockMatrixDlg');\r\n                    $scope.hideBaseGridLine = true;\r\n                    $scope.qty = {};\r\n                };\r\n\r\n}])\r\n.directive('myRepeatDirectiveGrid',\r\n        function() {\r\n            return function(scope, element, attrs) {\r\n\r\n                var textColor = 'white';\r\n                var availColor = 'red';\r\n                if(!scope.isEditable || !scope.isMobile) {\r\n                    $(element)\r\n                    .css('width', '90%')\r\n                    .css('margin-left', '5%')\r\n                    .popover({\r\n                        placement: 'auto top',\r\n                        trigger: 'focus click',\r\n                        html: true,\r\n                        content: function () {\r\n                            return $('<div />')\r\n                                .html('<span>Available: ' + attrs.available + ', On order: ' + attrs.orderedqty + '</span>')[0].outerHTML;\r\n                        },\r\n                        'template':\r\n                            '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\" style=\"font-weight: bold; color: ' +\r\n                                textColor +\r\n                                '; background-color: ' +\r\n                                availColor +\r\n                                ';\"></h3><div class=\"popover-content\"></div></div>'\r\n                    })\r\n                    .blur(function() {\r\n                        $(this).popover('hide');\r\n                    });\r\n                }\r\n            };\r\n        });","angular.module(\"mainApp\").controller('stockOrderingController',\r\n    ['$scope', '$rootScope', 'loginService', 'stockOrderingService',\r\n     'helperService', '$timeout', 'configService',\r\n     function ($scope, $rootScope, loginService, stockOrderingService,\r\n               helperService, $timeout, configService) {\r\n\r\n                if (!loginService.isLoggedIn()) {\r\n                    helperService.goToHomePage();\r\n                    return;\r\n                }\r\n\r\n                var ST_ORDER_TYPE = 'ST';\r\n                var STATUS_DRAFT = 'DRAFT';\r\n                var STATUS_ORDERED = 'ORDERED';\r\n                var STATUS_PICKING = 'PICKING';\r\n                var STATUS_IN_TRANSIT = 'IN TRANSIT';\r\n                var STATUS_IN_PROGRESS = 'IN PROGRESS';\r\n                var STATUS_COMPLETED = 'COMPLETED';\r\n                var STATUS_VOIDED = 'VOIDED';\r\n\r\n                $scope.searchText = '';\r\n                $scope.mode = '';\r\n                $scope.totalPages = 0;\r\n                $scope.dataPage = 1;\r\n                $scope.dataPageDisplay;\r\n                $scope.dataStatus = '0';\r\n                $scope.itemsByPage = 20;\r\n                $scope.isLoading = false;\r\n                $scope.stockOrderingData = [];\r\n                $scope.availableProducts = [];//flat\r\n                $scope.groupedAvailableProducts = [];//grouped\r\n                $scope.totalCount = 0;\r\n                $scope.inStocktransferCount = 0;\r\n                $scope.filterStatuses = [\r\n                    {status: '0', statusName: \"All\"},\r\n                    {status: STATUS_DRAFT, statusName: \"Draft\"},\r\n                    {status: STATUS_ORDERED, statusName: \"Ordered\"},\r\n                    {status: STATUS_IN_PROGRESS, statusName: \"In progress\"},\r\n                    {status: STATUS_COMPLETED, statusName: \"Completed\"}];\r\n\r\n                $scope.locations = [];\r\n                $scope.allLocations = [];\r\n                $scope.suppliers = [];\r\n                $scope.referenceData = {};\r\n                $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n                $scope.firstShow = true;\r\n\r\n                $scope.deleteMode = null;\r\n                $scope.deleteObject = null;\r\n\r\n                $scope.onLoad = function () {\r\n                    $.blockUI();\r\n                    stockOrderingService.loadAvailableLocations()\r\n                    .then(function (data) {\r\n                        var currentLocation = configService.lastOutletID;\r\n                        var res = data.data.locations;\r\n                        $scope.allLocations = res;\r\n                        angular.forEach(res, function (el) {\r\n                            if(el.LocationID !== currentLocation\r\n                            && (el.ParentID === null || (el.ParentID !== null && el.ParentID !== currentLocation))){\r\n                                $scope.locations.push(el);\r\n                            }\r\n                        });\r\n\r\n                        $scope.$broadcast('refreshStTable');\r\n                        return stockOrderingService.loadSuppliers();\r\n                    })\r\n                    .then(function(data) {\r\n                        var res = data.data.suppliers;\r\n                        $scope.suppliers = res;\r\n                        $scope.referenceData = data.data.referenceData;\r\n                    })\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n                };\r\n\r\n                $scope.gridControl = function (tableState) {\r\n                    var sort = {};\r\n       \r\n                    if (tableState.sort.predicate) {\r\n                        sort.FieldName = tableState.sort.predicate;\r\n                        sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n                    }\r\n       \r\n                    $.blockUI();\r\n                    $scope.loadGrid(sort)\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n                };\r\n\r\n                const scrollReachBottomCallback = function (){\r\n                    if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                        $scope.selectPage($scope.dataPage + 1);\r\n                    }\r\n                };\r\n\r\n                initPagerOnScroll(scrollReachBottomCallback);\r\n        \r\n                function getPages(total) {\r\n                    var step = $scope.itemsByPage;\r\n                    $scope.totalPages = Math.ceil(total / step);\r\n                    $scope.totalRecords = total;\r\n                    if ($scope.totalPages === 0) {\r\n                        $scope.totalPages = 1;\r\n                    }\r\n                };\r\n        \r\n                $scope.selectPage = function (page) {\r\n                    $scope.dataPage = page;\r\n                    $scope.$broadcast('refreshStTable');\r\n                };\r\n\r\n                $scope.$on('refreshStTable', function(sorting) {\r\n                    $.blockUI();\r\n                    $scope.isLoading = true;\r\n\r\n                    $scope.loadGrid(sorting).finally(function() {\r\n                        $scope.isLoading = false;\r\n                        $.unblockUI();\r\n\r\n                        const $itemsContainer = $('.grid-content .dp_content.grid-content');\r\n                        const itemsContainerHeight = $itemsContainer.outerHeight();\r\n                        const itemsTableHeight = $itemsContainer.find('.table-data-collapsed').outerHeight();\r\n                        const isPossibleToLoadMoreItems = itemsTableHeight < itemsContainerHeight;\r\n                        if (isPossibleToLoadMoreItems) {\r\n                            scrollReachBottomCallback()\r\n                        }\r\n                    });\r\n                });\r\n       \r\n                $scope.loadGrid = function (sorting) {\r\n                    helperService.hideKeyboard();\r\n                    var lst = stockOrderingService.loadTasksList($scope.searchText, $scope.dataPage, $scope.itemsByPage, $scope.dataStatus, sorting)\r\n                        .then(function (data) {\r\n                            if($scope.dataPage === 1){\r\n                                $scope.stockOrderingData = [];\r\n                            }\r\n       \r\n                            $scope.dataPage = data.data.Page;\r\n                            $scope.dataPageDisplay = data.data.Page;\r\n                            getPages(data.data.Total);\r\n       \r\n                            angular.forEach(data.data.Rows, function (el) {\r\n                                el.date = el.CompletionDate ? helperService.getFormatedDateOnlyAsIs(el.CompletionDate) : '';\r\n                                el.stRequiredBy = el.STRequiredBy ? helperService.getFormatedDateOnlyAsIs(el.STRequiredBy) : '';\r\n                                el.statusName = $scope.getStatusName(el.Status);\r\n                                el.canUndo = $scope.getCanUndo(el.Type, el.Status);\r\n                                el.canVoid = $scope.getCanVoid(el.Type, el.Status);\r\n                                el.FromLocationAddress = $.trim(el.FromLocationAddress);\r\n                                \r\n                                $scope.stockOrderingData.push(el);\r\n                            });\r\n                        });\r\n       \r\n                    return lst;\r\n                };\r\n\r\n                $scope.$watch('dataStatus',\r\n                    function (newValue, oldValue) {\r\n                        if (newValue !== oldValue) {\r\n                            $scope.dataPage = 1;\r\n                            $scope.$broadcast('refreshStTable');\r\n                        }\r\n                    }\r\n                );\r\n                \r\n                $timeout(function () {\r\n                    $scope.mode = 'management';\r\n                    initSelects();\r\n                });\r\n\r\n                $scope.$on('view.loaded', function (evt) {\r\n       \r\n                    if ($scope.firstShow) {\r\n                        $scope.firstShow = false;\r\n                    }\r\n                    else {\r\n                        $scope.$broadcast('refreshStTableProcess');\r\n                    }\r\n       \r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n       \r\n                $scope.search = function (event) {\r\n                    $scope.dataPage = 1;\r\n                    $scope.dataPageDisplay = 1;\r\n                    $scope.$broadcast('refreshStTable');\r\n                };\r\n       \r\n                $scope.selectPage = function (page) {\r\n                    $scope.dataPage = page;\r\n                    $scope.$broadcast('refreshStTable');\r\n                };\r\n\r\n                $scope.getStatusName = function(status) {\r\n                    switch(status) {\r\n                        case \"DRAFT\":\r\n                            return \"Draft\";\r\n                        case \"ORDERED\":\r\n                            return \"Ordered\";\r\n                        case \"PICKING\":\r\n                            return \"Picking\";\r\n                        case \"IN TRANSIT\":\r\n                            return \"In transit\";\r\n                        case \"COMPLETED\":\r\n                            return \"Completed\";\r\n                        case \"INVOICE COMPLETED\":\r\n                            return \"Billed\";\r\n                        case \"PARTIALLY RECEIVED\":\r\n                            return \"Receiving\";\r\n                        case \"PO COMPLETED\":\r\n                            return \"Ordered\";\r\n                        case \"PO IN PROGRESS\":\r\n                            return \"Ordering\";\r\n                        case \"PARTIALLY RECEIVED / CREDITED\":\r\n                            return \"Receiving / Credited\";\r\n                        case \"PARTIALLY INVOICED\":\r\n                            return \"Partially billed\";\r\n                        case \"INVOICED\":\r\n                            return \"Billed\";\r\n                        case \"ORDERING\":\r\n                            return \"Orderring\";\r\n                    }\r\n\r\n                    return status;\r\n                };\r\n\r\n                $scope.getCanUndo = function(itemType, status) {\r\n                    return itemType === ST_ORDER_TYPE \r\n                    && status === STATUS_ORDERED;\r\n                };\r\n\r\n                $scope.getCanVoid = function(type, status) {\r\n                    return type === ST_ORDER_TYPE && (status === STATUS_ORDERED \r\n                        || status === STATUS_DRAFT );\r\n                };\r\n\r\n                //------------ Stock Order Details --------------------------------------\r\n                $scope.closeAddOrder = function(type) {\r\n                    if(type) {\r\n                        $scope.mode = 'new';\r\n\r\n                        var mn = $('#orderingFilterPanel ul:visible');\r\n                        if (mn.length > 0) {\r\n                            mn.dropdown('toggle');\r\n                        }\r\n\r\n                        if(type === 'transfer') {\r\n                            $rootScope.$broadcast('stockTransferDetail.add', {\r\n                                locations: $scope.locations\r\n                            });\r\n                        } else {\r\n                            $rootScope.$broadcast('purchaseDetail.add', {\r\n                                suppliers: $scope.suppliers,\r\n                                referenceData: $scope.referenceData,\r\n                                locations: $scope.allLocations\r\n                            });\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.currentDetails = function (row) {\r\n                    $scope.mode = 'edit';\r\n                    if(row.Type === ST_ORDER_TYPE) {\r\n                        $rootScope.$broadcast('stockTransferDetail.edit', {\r\n                            locations: $scope.locations,\r\n                            row: row\r\n                        });\r\n                    } else {\r\n                        $rootScope.$broadcast('purchaseDetail.edit', {\r\n                            suppliers: $scope.suppliers,\r\n                            referenceData: $scope.referenceData,\r\n                            row: row\r\n                        });\r\n                    }\r\n                };\r\n\r\n                $scope.getStatusBg = function(row) {\r\n                    if (row.statusName == 'Ordering') {\r\n                        return {'background-color':'#D6E3F3'};\r\n                    } else if (row.statusName == 'Ordered') {\r\n                        return {'background-color':'#DED6F3'}\r\n                    } else if (row.statusName == 'Completed') {\r\n                        return {'background-color':'#D6F3F0'}\r\n                    } else if (row.statusName == 'Billed') {\r\n                        return {'background-color':'#D6E3F3'}\r\n                    } else if (row.statusName == 'Draft') {\r\n                        return {'background-color':'#D5F3E2'}\r\n                    } else if (row.statusName == 'Partially billed') {\r\n                        return {'background-color':'#D6E3F3'}\r\n                    }\r\n                };\r\n\r\n                $rootScope.$on('stockOrdering.showList', function() {\r\n                    $scope.dataPage = 1;\r\n                    $scope.mode = 'management';\r\n                    $scope.$broadcast('refreshStTable');\r\n\r\n                    var $windowElement = $('#stockTransferOrderDetailPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                });\r\n}]);","angular.module('services').factory('stockOrderingService',\r\n    ['gettext', 'helperService', 'remoteRequestProvider', 'configService','$q', 'webOnlyProvider',\r\n        function (gettextCatalog, helperService, remoteRequestProvider, configService, $q, webOnlyProvider) {\r\n\r\n            var stockOrderingService = {};\r\n\r\n            // stock transfer methods\r\n            stockOrderingService.loadTasksList = function (searchText, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n                var location = configService.lastOutletID;\r\n                return provider.loadStockOrderingList(searchText, page, limit, status, sorting, location);\r\n            };\r\n\r\n            stockOrderingService.loadAvailableProducts = function (locationID) {\r\n                var prms = {\r\n                    locationID: locationID,\r\n                    infoType: 'availableProductsByLocation',\r\n                    toLocationId: configService.lastOutletID,\r\n                    compress: true\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferOrderRelatedData(prms)\r\n                    .then(function (res) {\r\n                        if (res && res.data && res.data.productsCompressed) {\r\n                            // decompress\r\n                            return helperService.unpack(stockOrderingService, res.data.productsCompressed)\r\n                                .then(function (arr) {\r\n                                    res.data.products = arr;\r\n                                    return helperService.resolvePromise(res);\r\n                                });\r\n                        } else\r\n                            return helperService.resolvePromise(res);\r\n                    });\r\n            };\r\n\r\n            stockOrderingService.loadAvailableLocations = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'orderAvailableLocations'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferOrderRelatedData(prms);\r\n            };\r\n\r\n            stockOrderingService.loadStockTransferOrderDetails = function (taskID, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadStockTransferOrderDetails(taskID, page, limit, status, sorting);\r\n\r\n            };\r\n\r\n            stockOrderingService.modifyStockTransfer = function (task) {\r\n                var prm = {};\r\n                prm.FromLocationID = task.fromLocationID;\r\n                prm.ToLocationID = task.toLocationID;\r\n                prm.CompletionDate = task.date ? helperService.toDateFromDatepickerDirect(task.date) : '';\r\n                prm.LastUpdatedBy = configService.lastUserName;\r\n                prm.Details = [];\r\n                prm.RequiredBy = task.stRequiredBy ? helperService.toDateFromDatepickerDirect(task.stRequiredBy) : '';\r\n\r\n                angular.forEach(task.data, function (el) {\r\n                    var rid = null;\r\n                    if (el.ID.indexOf(el.ProductID) !== 0)\r\n                        rid = el.ID;\r\n\r\n                    var dtl = {\r\n                        ID: rid,\r\n                        ProductID: el.ProductID,\r\n                        QuantityOnHand: el.QuantityOnHand,\r\n                        QuantityAvailable: el.QuantityAvailable,\r\n                        TransferQuantity: el.TransferQuantity,\r\n                        Comments: el.Comments,\r\n                        OrderedQuantity: el.OrderedQuantity\r\n                    };               \r\n                    prm.Details.push(dtl);\r\n                    \r\n                });\r\n\r\n                if (!task.taskID) {\r\n                    prm.TaskID = null;\r\n                    // new\r\n                    return webOnlyProvider.saveNewStockTransferOrder(prm);\r\n                }\r\n                else {\r\n                    // update\r\n                    prm.TaskID = task.taskID;\r\n                    return webOnlyProvider.updateStockTransferOrder(prm);\r\n                }\r\n            };\r\n\r\n            stockOrderingService.loadReorderProducts = function (fromLocationID, toLocationID, onlyAvailable) {\r\n                return webOnlyProvider.loadStockTransferReorderData(fromLocationID, toLocationID, onlyAvailable);\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseAvailableProducts = function (supplierID) {\r\n                var prms = {\r\n                    supplierID: supplierID,\r\n                    infoType: 'availableProductsByLocation',\r\n                    locationID: configService.lastOutletID\r\n                };\r\n\r\n                return webOnlyProvider.loadPurchaseOrderRelatedData(prms);\r\n            };\r\n\r\n            stockOrderingService.loadSuppliers = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'orderAvailableSuppliers'\r\n                };\r\n\r\n                return webOnlyProvider.loadPurchaseOrderRelatedData(prms);\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseOrderDetails = function (taskID, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadPurchaseOrderDetails(taskID, configService.lastOutletID, page, limit, status, sorting);\r\n\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseTask = function (taskID) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadPurchaseTask(taskID);\r\n            };\r\n\r\n            stockOrderingService.getRate = function(from, to, date) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.getExchangeRate(from, to, date);\r\n            };\r\n\r\n            stockOrderingService.modifyPurchaseOrder = function(task, originalTask, referenceData) {\r\n                if(!originalTask) {\r\n                    originalTask = {};\r\n                }\r\n\r\n                if(originalTask.supplierID !== task.supplierID) {\r\n                    originalTask.Contact = '';\r\n                    originalTask.Phone = '';\r\n                    originalTask.CurrencyRate = task.currencyRate;\r\n                    originalTask.TaxRule = task.TaxRule;\r\n                    originalTask.TaxPercent = task.TaxPercent;\r\n                    originalTask.TaxCalculation = task.TaxCalculation;\r\n                    originalTask.Terms = task.Terms;\r\n                }\r\n\r\n                originalTask.SupplierID = task.supplierID;\r\n                originalTask.Supplier = task.supplierName;\r\n                originalTask.Approach = originalTask.Approach || referenceData.approach;\r\n                originalTask.Location = task.locationName;\r\n                originalTask.RequiredBy = helperService.toDateFromDatepickerDirect(task.date);\r\n                originalTask.CurrencyRate = originalTask.CurrencyRate || task.currencyRate;\r\n                originalTask.TaxRule = originalTask.TaxRule || task.TaxRule;\r\n                originalTask.TaxPercent = originalTask.TaxPercent || task.TaxPercent;\r\n                originalTask.TaxCalculation = originalTask.TaxCalculation || task.TaxCalculation;\r\n                originalTask.Terms = originalTask.Terms || task.Terms;\r\n                originalTask.LastUpdatedBy = configService.lastUserName;                \r\n\r\n                var order = {\r\n                    TaskID: originalTask ? originalTask.TaskID : null,\r\n                    CombineAdditionalCharges: false,\r\n                    Memo: '',\r\n                    Status: 'AUTHORISED',\r\n                    Lines: []\r\n                };\r\n\r\n                angular.forEach(task.data, function (el) {\r\n\r\n                    if(el.FamilyID && el.Items && el.Items.length > 0) {\r\n                        angular.forEach(el.Items, function(variant) {\r\n                            if (variant.ProductID){\r\n                                var dtl = {\r\n                                    ProductID: variant.ProductID,\r\n                                    SKU: variant.ProductCode,\r\n                                    Name: variant.Name,\r\n                                    Quantity: variant.Quantity,\r\n                                    Price: variant.Price || variant.Cost,\r\n                                    Discount: 0,\r\n                                    Tax:0,\r\n                                    TaxRule: variant.TaxRule || originalTask.TaxRule,\r\n                                    TaxPercent: variant.TaxPercent || originalTask.TaxPercent,\r\n                                    SupplierSKU: '',\r\n                                    Comment: variant.Comment,\r\n                                    Total: 0\r\n                                };\r\n    \r\n                                updateAdditionalTaxAndTotal(dtl, referenceData.taxPrecision, referenceData.pricePrecision);\r\n            \r\n                                order.Lines.push(dtl);\r\n                            }\r\n                        });\r\n                    } else {\r\n                        var dtl = {\r\n                            ProductID: el.ProductID,\r\n                            SKU: el.ProductCode,\r\n                            Name: el.Name,\r\n                            Quantity: el.Quantity,\r\n                            Price: el.Price,\r\n                            Discount: 0,\r\n                            Tax:0,\r\n                            TaxRule: el.TaxRule || originalTask.TaxRule,\r\n                            TaxPercent: el.TaxPercent || originalTask.TaxPercent,\r\n                            SupplierSKU: '',\r\n                            Comment: el.Comment,\r\n                            Total: 0\r\n                        };\r\n\r\n                        updateAdditionalTaxAndTotal(dtl, referenceData.taxPrecision, referenceData.pricePrecision);\r\n    \r\n                        order.Lines.push(dtl);\r\n                    }\r\n                });\r\n\r\n                if (!task.taskID) {\r\n                    return webOnlyProvider.saveNewPurchase(originalTask)\r\n                    .then(function(data) {\r\n                        order.TaskID = data.data.ID;\r\n                        if (task.dataStatus === \"DRAFT\" && task.saveAsDraft === true) {\r\n                            order.Status = 'DRAFT';\r\n                        }\r\n\r\n                        return webOnlyProvider.savePurchaseOrder(order);\r\n                    })\r\n                    .then(function(data) {\r\n                        return true;\r\n                    });\r\n                } else {\r\n                    return webOnlyProvider.updatePurchase(originalTask)\r\n                    .then(function(data) {\r\n                        order.TaskID = data.data.ID;\r\n                        return webOnlyProvider.savePurchaseOrder(order);\r\n                    })\r\n                    .then(function(data) {\r\n                        return true;\r\n                    });\r\n                }\r\n            };\r\n\r\n            stockOrderingService.undoPurchase = function(taskID) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.deleteUndoPurchase(taskID, false);\r\n            };\r\n\r\n            stockOrderingService.voidPurchase = function(taskID) {\r\n                var provider = webOnlyProvider;\r\n                if(taskID) {\r\n                    return provider.deleteUndoPurchase(taskID, true);\r\n                } else {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseReorderProducts = function (locationID, supplierID) {\r\n                return webOnlyProvider.loadPurchaseReorderData(locationID, supplierID);\r\n            };\r\n\r\n            var updateAdditionalTaxAndTotal = function(record, taxPrecision, pricePrecision) {\r\n                var Quantity = record.Quantity;\r\n                var Price = record.Price;\r\n                var Discount = record.Discount;\r\n                var Total = Price * (100 - Discount) / 100;\r\n                var TaxPercent = record.TaxPercent;\r\n                Total = helperService.DEARRound(Total, pricePrecision);\r\n                Total = Quantity * Total;\r\n                Total = helperService.DEARRound(Total, 2);\r\n                var Tax = 0;\r\n                if (TaxPercent > 0)\r\n                    Tax = Total * TaxPercent / 100;\r\n                Tax = helperService.DEARRound(Tax, taxPrecision);\r\n                record.Tax = Tax;\r\n                record.Total = Total;\r\n            };\r\n\r\n            stockOrderingService.printPurchaseOrder = function (taskID, templateID) {\r\n                return webOnlyProvider.printPurchaseOrder(taskID, configService.lastUserName, templateID);\r\n            };\r\n\r\n            stockOrderingService.getPurchaseOrderEmail = function (taskID, templateID) {\r\n                return webOnlyProvider.getPurchaseOrderEmail(taskID, configService.lastUserName, templateID);\r\n            };\r\n\r\n            stockOrderingService.sendPurchaseOrderEmail = function (taskID, data) {\r\n                return webOnlyProvider.sendPurchaseOrderEmail(taskID, data);\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseOrderTemplates = function () {\r\n                var prms = {\r\n                    infoType: 'orderAvailableTemplates'\r\n                };\r\n\r\n                return webOnlyProvider.loadPurchaseOrderRelatedData(prms);\r\n            };\r\n\r\n            return stockOrderingService;\r\n        }\r\n\r\n\r\n\r\n    ]);","angular.module(\"mainApp\").controller('stockPurchaseOrderDetailController',\r\n    ['$scope', '$rootScope', 'loginService', 'gettextCatalog', 'stockOrderingService',\r\n        'helperService', '$timeout', 'configService', 'errorService',\r\n        '$q', 'uuid2', '$element', '$sce', 'fileDownloadService',\r\n        function ($scope, $rootScope, loginService, gettextCatalog, stockOrderingService,\r\n            helperService, $timeout, configService, errorService,\r\n            $q, uuid2, $element, $sce, fileDownloadService) {\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            $scope.mode = '';\r\n            $scope.dataStatus = '';\r\n            $scope.availableProducts = [];//flat\r\n            $scope.groupedAvailableProducts = [];//grouped\r\n            $scope.totalCount = 0;\r\n\r\n            $scope.suppliers = [];\r\n            $scope.locations = [];\r\n            $scope.referenceData = {};\r\n            $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n            $scope.firstShow = true;\r\n            $scope.firstAddFormShow = true;\r\n\r\n            $scope.currentOrder = {\r\n                data: []\r\n            };\r\n            $scope.originalTask = null;\r\n\r\n            $scope.deleteMode = null;\r\n            $scope.deleteObject = null;\r\n\r\n            $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n            $scope.quantityObject = {};\r\n            $scope.ifcss = { 'height': (window.innerHeight * 0.9) - 400 + 'px' };\r\n            //$scope.fcss = { 'height': (window.innerHeight * 0.9) - 400 + 'px' };\r\n            $scope.fcss = { 'height': window.innerHeight * 0.8 + 'px' };\r\n            $scope.fcss_m = { 'height': window.innerHeight * 0.7 + 'px' };\r\n\r\n            $scope.isSite = configService.isSite;\r\n            \r\n            $rootScope.$on('purchaseDetail.add', function (event, data) {\r\n                $scope.suppliers = data.suppliers;\r\n                $scope.referenceData = data.referenceData;\r\n                $scope.locations = data.locations;\r\n                $scope.firstData = true;\r\n                $scope.addNew();\r\n\r\n                helperService.showDialog($element, function () { });\r\n                $scope.initInputs();\r\n                $scope.loadGridProcess();\r\n            });\r\n\r\n            \r\n            $rootScope.$on('purchaseDetail.edit', function (event, data) {\r\n                $scope.suppliers = data.suppliers;\r\n                $scope.referenceData = data.referenceData;\r\n                $scope.currentRow = data.row;\r\n                $scope.firstData = true;\r\n                $scope.currentDetails($scope.currentRow);\r\n\r\n                helperService.showDialog($element, function () { });\r\n                $scope.initInputs();\r\n            });\r\n\r\n            $scope.initInputs = function () {\r\n                $timeout(function () {\r\n                    if ($scope.firstAddFormShow) {\r\n                        $scope.firstAddFormShow = false;\r\n                        initSelects();\r\n                        //                            helperService.setDatepicker2($scope.dateFormat, '#requiredByDate');\r\n                        helperService.setDatepicker($scope.dateFormat, '#requiredByDate');\r\n                    }\r\n\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            };\r\n\r\n            $scope.showCalendar = function (e) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                $('#requiredByDate').datepicker(\"show\");\r\n            };\r\n\r\n            $timeout(function () {\r\n                if ($scope.firstShow) {\r\n                    $scope.firstShow = false;\r\n                }\r\n                else {\r\n                    $scope.$broadcast('refreshStTableProcess');\r\n                }\r\n            });\r\n\r\n            $scope.goBack = function () {\r\n                helperService.hideDatePickers('#requiredByDate');\r\n\r\n                if ($scope.mode === 'new' ||\r\n                    $scope.mode === 'edit' ||\r\n                    $scope.mode === 'process') {\r\n                    $scope.mode = 'management';\r\n                }\r\n                $rootScope.$broadcast('stockOrdering.showList');\r\n                helperService.closeDialog($element);\r\n            };\r\n\r\n            $scope.callbackModal = function (isDelete) {\r\n                var $windowElement = $('#undoVoidDialogModal');\r\n                helperService.closeDialog($windowElement);\r\n                if (!isDelete) {\r\n                    return;\r\n                }\r\n\r\n                if ($scope.deleteMode === 'task') {\r\n                    $.blockUI();\r\n                    stockOrderingService.voidPurchase($scope.deleteObject)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n                            $scope.goBack();\r\n                            $scope.needReloadAvailable = true;\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n                else if ($scope.deleteMode === 'undo') {\r\n                    $.blockUI();\r\n                    stockOrderingService.undoPurchase($scope.deleteObject)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n                            $scope.goBack();\r\n                            $scope.needReloadAvailable = true;\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.voidItem = function (item) {\r\n                $scope.deleteMode = 'task';\r\n                $scope.deleteObject = item.TaskID || item.taskID;\r\n                var $windowElement = $('#undoVoidDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.undoItem = function (item) {\r\n                $scope.deleteMode = 'undo';\r\n                $scope.deleteObject = item.TaskID || item.taskID;\r\n                var $windowElement = $('#undoVoidDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.getStatusName = function (status) {\r\n                switch (status) {\r\n                    case \"DRAFT\":\r\n                        return \"Draft\";\r\n                    case \"ORDERED\":\r\n                        return \"Ordered\";\r\n                    case \"PICKING\":\r\n                        return \"Picking\";\r\n                    case \"IN TRANSIT\":\r\n                        return \"In transit\";\r\n                    case \"COMPLETED\":\r\n                        return \"Completed\";\r\n                    case \"INVOICE COMPLETED\":\r\n                        return \"Billed\";\r\n                    case \"PARTIALLY RECEIVED\":\r\n                        return \"Receiving\";\r\n                    case \"PO COMPLETED\":\r\n                        return \"Ordered\";\r\n                    case \"PO IN PROGRESS\":\r\n                        return \"Ordering\";\r\n                    case \"PARTIALLY RECEIVED / CREDITED\":\r\n                        return \"Receiving / Credited\";\r\n                    case \"PARTIALLY INVOICED\":\r\n                        return \"Partially billed\";\r\n                    case \"INVOICED\":\r\n                        return \"Billed\";\r\n                    case \"ORDERING\":\r\n                        return \"Orderring\";\r\n                }\r\n\r\n                return status;\r\n            };\r\n\r\n            $scope.getCanUndo = function (itemType, status, hasChild) {\r\n                return itemType === 'P'\r\n                    && (status === 'ORDERED' || status === 'PO COMPLETED') && !hasChild;\r\n            };\r\n\r\n            $scope.getCanVoid = function (type, status, hasChild) {\r\n                return type === 'P' && (status === 'ORDERED'\r\n                    || status === 'DRAFT' || status === 'PO COMPLETED' || status === 'PO IN PROGRESS' || status === 'ORDERING')\r\n                    && !hasChild;\r\n            };\r\n\r\n            //------------ Stock Order Details --------------------------------------                \r\n            $scope.addNew = function () {\r\n                $scope.originalTask = null;\r\n\r\n                var location = $scope.locations.filter(function (el) {\r\n                    return el.LocationID === configService.lastOutletID;\r\n                })\r\n\r\n                $scope.currentOrder = {\r\n                    dataStatus: 'DRAFT',\r\n                    supplierID: null,\r\n                    supplierName: null,\r\n                    location: configService.lastOutlet,\r\n                    locationName: location[0].Description,\r\n                    date: null,\r\n                    data: [],\r\n                    dataDisplay: [],\r\n                    showAvailability: true,\r\n                    statusName: $scope.getStatusName('DRAFT'),\r\n                    canUndo: $scope.getCanUndo('P', 'DRAFT', false),\r\n                    canVoid: false,\r\n                    Type: 'P',\r\n                    currencyRate: 1,\r\n                    saveAsDraft: false\r\n                };\r\n                $scope.originalTask = null;\r\n                $scope.mode = 'new';\r\n            };\r\n\r\n            $scope.currentDetails = function (row) {\r\n                $scope.originalTask = null;\r\n                //get existing\r\n                $.blockUI();\r\n\r\n                stockOrderingService.loadPurchaseTask(row.TaskID)\r\n                    .then(function (data) {\r\n                        $scope.originalTask = data.data;\r\n\r\n                        $scope.currentOrder = {\r\n                            dataStatus: $scope.originalTask.OrderStatus === 'DRAFT' ? 'DRAFT' : row.Status,\r\n                            number: row.Number,\r\n                            taskID: row.TaskID,\r\n                            location: row.ToName,\r\n                            date: row.date,\r\n                            status: row.Status,\r\n                            supplierID: $scope.originalTask.SupplierID,\r\n                            supplierName: $scope.originalTask.Supplier,\r\n                            data: [],\r\n                            dataDisplay: [],\r\n                            showAvailability: (row.Status === 'PO IN PROGRESS' || row.Status === 'DRAFT' || row.Status === 'ORDERING'\r\n                                || row.Status === 'ORDERED'\r\n                                || row.Status === 'PO COMPLETED') && !row.HasChild,\r\n                            statusName: $scope.getStatusName(row.Status),\r\n                            canUndo: $scope.getCanUndo('P', row.Status, row.HasChild),\r\n                            canVoid: $scope.getCanVoid('P', row.Status, row.HasChild),\r\n                            Type: 'P',\r\n                            currencyRate: $scope.originalTask.CurrencyRate,\r\n                            TaxRule: $scope.originalTask.TaxRule,\r\n                            TaxCalculation: $scope.originalTask.TaxCalculation,\r\n                            Terms: $scope.originalTask.Terms\r\n                        };\r\n                        var rules = $scope.referenceData.taxRules.filter(function (item) {\r\n                            return item.Description === $scope.originalTask.TaxRule;\r\n                        });\r\n                        if (rules && rules.length === 1) {\r\n                            $scope.currentOrder.TaxPercent = $scope.originalTask.TaxCalculation === 'Inclusive' ?\r\n                                rules[0].EffectivePercentInclusive : rules[0].EffectivePercentExclusive;\r\n                        }\r\n\r\n                        $scope.mode = 'edit';\r\n\r\n                        $scope.loadGridProcess();\r\n\r\n                        $timeout(function () {\r\n                            $('input, select').trigger('refresh');\r\n                        });\r\n                    })\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n            };\r\n\r\n            $scope.loadGridProcess = function (sorting) {\r\n                if (!$scope.currentOrder.taskID) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                $.blockUI();\r\n                stockOrderingService.loadPurchaseOrderDetails($scope.currentOrder.taskID, 1,\r\n                    100000, sorting)\r\n                    .then(function (data) {\r\n                        $scope.currentOrder.data = [];\r\n                        $scope.currentOrder.dataDisplay = [];\r\n\r\n                        angular.forEach(data.data.Rows, function (el) {\r\n                            el.refID = uuid2.newguid();\r\n\r\n                            $scope.currentOrder.data.push(el);\r\n                        });\r\n\r\n                        $.unblockUI();\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.needReloadAvailable = true;\r\n\r\n            $scope.loadAvailableProducts = function (supplierID) {\r\n                $scope.availableProducts = [];\r\n                $scope.displayAvailableProducts = [];\r\n                $scope.totalCount = 0;\r\n\r\n                return stockOrderingService.loadPurchaseAvailableProducts(supplierID)\r\n                    .then(function (res) {\r\n                        $scope.groupedAvailableProducts = res.data.products;\r\n                        angular.forEach(res.data.products, function (el) {\r\n                            if (el.FamilyID && el.Items && el.Items.length > 0) {\r\n                                angular.forEach(el.Items, function (item) {\r\n                                    item.IsVariation = true;\r\n                                    $scope.availableProducts.push(item);\r\n                                });\r\n\r\n                            } else {\r\n                                $scope.availableProducts.push(el);\r\n                            }\r\n                        });\r\n\r\n                        $scope.totalCount = res.data.totalCount;\r\n\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve($scope.availableProducts);\r\n                        return deferred2.promise;\r\n                    });\r\n            };\r\n\r\n            $scope.showScanDlg = function () {\r\n                if ($scope.needReloadAvailable) {\r\n                    $.blockUI();\r\n\r\n                    if ($scope.currentOrder.supplierID == null) {\r\n                        errorService.showError(\"Please select Supplier\");\r\n                        $.unblockUI();\r\n                        return;\r\n                    }\r\n\r\n                    $scope.loadAvailableProducts($scope.currentOrder.supplierID)\r\n                        .then(function (res) {\r\n                            $scope.needReloadAvailable = false;\r\n                            $rootScope.$broadcast(\"purchaseOrder.addLine\",\r\n                                {\r\n                                    currentOrder: $scope.currentOrder,\r\n                                    availableProducts: $scope.availableProducts,\r\n                                    groupedAvailableProducts: $scope.groupedAvailableProducts,\r\n                                    modifyTransferItemFunc: $scope.modifyTransferItem\r\n                                });\r\n                        })\r\n                        .finally(function () {\r\n                            $.unblockUI();\r\n                        });\r\n                } else {\r\n                    $rootScope.$broadcast(\"purchaseOrder.addLine\",\r\n                        {\r\n                            currentOrder: $scope.currentOrder,\r\n                            availableProducts: $scope.availableProducts,\r\n                            groupedAvailableProducts: $scope.groupedAvailableProducts,\r\n                            modifyTransferItemFunc: $scope.modifyTransferItem\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.$watch('currentOrder.supplierID',\r\n                function (newValue, oldValue) {\r\n                    if (newValue !== oldValue) {\r\n                        // reload available products list\r\n                        if (!newValue) {\r\n                            $scope.availableProducts = [];\r\n                            $scope.displayAvailableProducts = [];\r\n                            $scope.totalCount = 0;\r\n                            return;\r\n                        }\r\n\r\n                        $.blockUI();\r\n                        $scope.loadAvailableProducts($scope.currentOrder.supplierID)\r\n                            .then(function (res) {\r\n                                if ($scope.firstData === false) {\r\n                                    $scope.currentOrder.data = [];\r\n                                } else {\r\n                                    $scope.firstData = false;\r\n                                }\r\n                                var items = $scope.suppliers.filter(function (l) {\r\n                                    return l.SupplierID === $scope.currentOrder.supplierID;\r\n                                });\r\n                                var supplierCurrency = $scope.referenceData.baseCurrency;\r\n                                if (items.length === 1) {\r\n                                    $scope.currentOrder.supplierName = items[0].Name;\r\n                                    $scope.currentOrder.supplierCurrency = items[0].Currency;\r\n                                }\r\n\r\n                                if ($scope.currentOrder.supplierCurrency !== $scope.referenceData.baseCurrency\r\n                                    && (!$scope.originalTask || $scope.originalTask.SupplierID !== $scope.currentOrder.supplierID)\r\n                                    && $scope.currentOrder.dataStatus === 'DRAFT') {\r\n                                    return stockOrderingService.getRate($scope.currentOrder.supplierCurrency,\r\n                                        $scope.referenceData.baseCurrency, helperService.getDateByFormat(new Date(), 'DD.MM.YYYY'));\r\n                                } else {\r\n                                    var deferred = $q.defer();\r\n                                    deferred.resolve($scope.originalTask ? { data: { rate: $scope.originalTask.CurrencyRate } } : null);\r\n                                    return deferred.promise;\r\n                                }\r\n                            })\r\n                            .then(function (data) {\r\n                                if (data) {\r\n                                    $scope.currentOrder.currencyRate = data.data.rate;\r\n                                } else {\r\n                                    $scope.currentOrder.currencyRate = 1;\r\n                                }\r\n\r\n                                var items = $scope.suppliers.filter(function (l) {\r\n                                    return l.SupplierID === $scope.currentOrder.supplierID;\r\n                                });\r\n                                if (items.length === 1) {\r\n                                    var supplier = items[0];\r\n                                    if ((!$scope.originalTask || $scope.originalTask.SupplierID !== $scope.currentOrder.supplierID)\r\n                                        && $scope.currentOrder.dataStatus === 'DRAFT') {\r\n                                        $scope.currentOrder.TaxRule = supplier.TaxRuleName;\r\n                                        $scope.currentOrder.TaxCalculation = supplier.TaxInclusive ? 'Inclusive' : 'Exclusive';\r\n                                        $scope.currentOrder.Terms = supplier.PaymentTermName;\r\n                                        $scope.currentOrder.TaxPercent = supplier.TaxInclusive ? supplier.TaxPercentInclusive\r\n                                            : supplier.TaxPercentExclusive;\r\n                                    }\r\n                                }\r\n\r\n                            })\r\n                            .finally(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                    }\r\n                }\r\n            );\r\n\r\n            $scope.modifyTransferItem = function (row, isAbsolute, currentOrder, quantityObject, showMessageWhenAdded = false) {\r\n\r\n                if (row.FamilyID && !row.IsVariation) {\r\n                    $scope.openFamilyDlg(row);\r\n                    return;                }\r\n\r\n\r\n                var processed = false;\r\n                angular.forEach(currentOrder.data, function (el) {\r\n                    if (el.ProductID === row.ProductID) {\r\n                        processed = true;\r\n\r\n                        if (isAbsolute === true) {\r\n                            el.Quantity = quantityObject.Adjustment;\r\n                        }\r\n                        else {\r\n                            el.Quantity += 1;\r\n                        }\r\n\r\n                        return false;\r\n                    }\r\n                });\r\n\r\n                if (!processed) {\r\n                    var ne = {\r\n                        ID: row.OrderLineID || row.ProductID,\r\n                        OrderLineID: row.OrderLineID,\r\n                        ProductID: row.ProductID,\r\n                        ProductCode: row.ProductCode,\r\n                        Name: row.Name,\r\n                        UnitName: row.UnitName,\r\n                        UnitOfMeasure: row.UnitOfMeasure,\r\n                        OnHand: row.OnHand,\r\n                        Available: row.Available,\r\n                        OnOrder: row.OnOrder,\r\n                        Quantity: 1,\r\n                        CostingMethod: row.CostingMethod,\r\n                        FamilyID: row.FamilyID,\r\n                        FamilyName: row.FamilyName,\r\n                        Option1: row.Option1,\r\n                        Option2: row.Option2,\r\n                        Option3: row.Option3,\r\n                        refID: uuid2.newguid(),\r\n                        Comments: '',\r\n                        Price: row.Cost,\r\n                        TaxRule: row.TaxRule,\r\n                        TaxPercent: row.TaxPercent,\r\n                        Discount: 0,\r\n                        Items: null\r\n                    };\r\n\r\n                    if (isAbsolute === true) {\r\n                        ne.Quantity = quantityObject.Adjustment;\r\n                    }\r\n\r\n                    currentOrder.data.push(ne);\r\n\r\n                    if (showMessageWhenAdded) {\r\n                        var msg = gettextCatalog.getString(\"Product {{name}} was added.\", { name: ne.Name });\r\n                        $rootScope.$broadcast('snackbar.show', {message: msg});\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.removeLineItem = function (row) {\r\n                for (var i = 0; i < $scope.currentOrder.data.length; i++) {\r\n                    if ($scope.currentOrder.data[i].ID === row.ID) {\r\n                        $scope.currentOrder.data.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.showSetQuantityDlg = function (row) {\r\n                if ($scope.currentOrder.dataStatus === 'DRAFT') {\r\n                    $scope.makeQuantityObject(row);\r\n                    $scope.showItemQuantityDlg(row.refID);\r\n                }\r\n            };\r\n\r\n            $scope.openFamilyDlg = function (row) {\r\n                var availableItems = $scope.groupedAvailableProducts.filter(function (item) { return item.FamilyID === row.FamilyID; });\r\n                var data = {\r\n                    familyID: row.FamilyID,\r\n                    familyName: row.FamilyName,\r\n                    selectedProducts: row.Items || [],\r\n                    availableProducts: availableItems[0].Items || [],\r\n                    isEditable: $scope.currentOrder.dataStatus === 'DRAFT',\r\n                    options: {\r\n                        Option1Values: availableItems[0].Option1Values,\r\n                        Option2Values: availableItems[0].Option2Values,\r\n                        Option3Values: availableItems[0].Option3Values\r\n                    }\r\n                };\r\n                $rootScope.$broadcast(\"stockFamilyMatrix.show\", data);\r\n            };\r\n\r\n            $scope.makeQuantityObject = function (row) {\r\n                $scope.quantityObject = {};\r\n                angular.copy(row, $scope.quantityObject);\r\n                $scope.quantityObject.Adjustment = !!$scope.quantityObject.Quantity ? $scope.quantityObject.Quantity : 1;\r\n                $scope.quantityObject.QuantityOnHand = !!row.QuantityOnHand ? row.QuantityOnHand : row.OnHand;\r\n                $scope.quantityObject.OnOrder = !!row.OnOrder ? row.OnOrder : row.OnOrder;\r\n                $scope.quantityObject.QuantityAvailable = !!row.QuantityAvailable ? row.QuantityAvailable : row.Available;\r\n                $scope.quantityObject.showOnHand = true;\r\n                $scope.quantityObject.hideBarcode = true;\r\n                $scope.quantityObject.readOnly = true;\r\n            };\r\n\r\n            $scope.showItemQuantityDlg = function (elID) {\r\n                $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n                $timeout(function () {\r\n                    $scope.itemQuantityDlg.show(!elID ? '#quantityObject' : '#' + elID);\r\n                });\r\n            };\r\n\r\n            // callback\r\n            $scope.setQuantity = function (prm, event) {\r\n\r\n                $timeout(function () { $scope.itemQuantityDlg.hide(true); });\r\n\r\n                if (prm === true) {\r\n                    $timeout(function () {\r\n                        if (Number($scope.quantityObject.value) != NaN) {\r\n                            $scope.quantityObject.Adjustment = Number($scope.quantityObject.value);\r\n                        }\r\n                        else {\r\n                            $scope.quantityObject.Adjustment = 0;\r\n                        }\r\n                        $scope.adjustStockTransfer();\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.adjustStockTransfer = function () {\r\n                angular.forEach($scope.currentOrder.data, function (el) {\r\n                    if (el.refID === $scope.quantityObject.refID) {\r\n                        processed = true;\r\n                        el.Quantity = $scope.quantityObject.Adjustment;\r\n                        return false;\r\n                    }\r\n                });\r\n            };\r\n\r\n            $scope.modifyOrder = function () {\r\n                helperService.hideDatePickers('#requiredByDate');\r\n\r\n                $.blockUI();\r\n\r\n                return stockOrderingService.modifyPurchaseOrder($scope.currentOrder, $scope.originalTask, $scope.referenceData)\r\n                    .then(function (res) {\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    })\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                        $scope.needReloadAvailable = true;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.currentLineCommentRow = '';\r\n            $scope.currentLineComment = { value: '' };\r\n\r\n            $scope.showChangeRowCommentDialog = function (row) {\r\n                $scope.currentLineCommentRow = row;\r\n                $scope.currentLineComment = { value: row.Comment };\r\n                var $windowElement = $('#addPurchaseCommentsDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeAddLineCommentsDialog = function (cancel) {\r\n                if (cancel === false) {\r\n                    $scope.currentLineCommentRow.Comment = $scope.currentLineComment.value;  \r\n                }\r\n\r\n                var $windowElement = $('#addPurchaseCommentsDialogModal');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            // ------------- Reorder -------------------------------------------\r\n            $scope.reorderProducts = function () {\r\n                if (!$scope.currentOrder.supplierID) {\r\n                    errorService.showError(\"Please select Supplier\");\r\n                    return;\r\n                }\r\n\r\n                $.blockUI();\r\n                stockOrderingService.loadPurchaseReorderProducts(configService.lastOutletID,\r\n                    $scope.currentOrder.supplierID)\r\n                    .then(function (res) {\r\n                        if (res.data.totalCount > 0) {\r\n                            $scope.currentOrder.data = [];\r\n                            angular.forEach(res.data.products, function (row) {\r\n\r\n                                var ne = {\r\n                                    ID: row.ProductID,\r\n                                    ProductID: row.ProductID,\r\n                                    ProductCode: row.ProductCode,\r\n                                    Name: row.Name,\r\n                                    UnitName: row.UnitName,\r\n                                    Available: row.Available,\r\n                                    OnOrder: row.OnOrder,\r\n                                    Quantity: row.Quantity,\r\n                                    CostingMethod: row.CostingMethod,\r\n                                    Price: row.Price,\r\n                                    FamilyID: row.FamilyID,\r\n                                    FamilyName: row.FamilyName,\r\n                                    Option1: row.Option1,\r\n                                    Option2: row.Option2,\r\n                                    Option3: row.Option3,\r\n                                    Items: row.Items,\r\n                                    refID: uuid2.newguid(),\r\n                                    Comment: ''\r\n                                };\r\n\r\n                                $scope.currentOrder.data.push(ne);\r\n                            });\r\n                        } else {\r\n                            errorService.showError(\"Products to reorder not found\", null, null, null, true);\r\n                        }\r\n\r\n                    })\r\n                    .catch(function (err) {\r\n                        errorService.showError(err, null, null, null, true);\r\n                    })\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    })\r\n            };\r\n\r\n            // ------------- Family ---------------------------------------------\r\n            $scope.$on(\"stockFamilyMatrixPurchase.save\", function (event, data) {\r\n                data.items.forEach(function (item) {\r\n                    $scope.addFamilyItemToOrder(item, data.comments);\r\n                });\r\n            });\r\n\r\n            $scope.templates = [];\r\n            $scope.printingMode = null;\r\n            $scope.templateModel = {};\r\n\r\n            $scope.trustAsHtml = function (string) {\r\n                return $sce.trustAsHtml(string);\r\n            };\r\n            $scope.showPrintDialog = function (mode) {\r\n                $scope.printingMode = mode;\r\n                if ($scope.templates && $scope.templates.length > 0) {\r\n                    var $windowElement = $('#orderChooseTemplateDialogModal');\r\n                    helperService.showDialog($windowElement);\r\n                } else {\r\n                    $.blockUI();\r\n                    stockOrderingService.loadPurchaseOrderTemplates()\r\n                        .then(function (res) {\r\n                            $scope.templates = res.data.Templates;\r\n\r\n                            if ($scope.templates.length > 0) {\r\n                                $scope.templateModel.Template = $scope.templates[0].TemplateID;\r\n                            }\r\n                            var $windowElement = $('#orderChooseTemplateDialogModal');\r\n                            helperService.showDialog($windowElement);\r\n                            $timeout(function () {\r\n                                initSelects();\r\n                                $('select').trigger('refresh');\r\n                            });\r\n\r\n                            $.unblockUI();\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.processChosenTemplate = function (isOk) {\r\n                var $windowElement = $('#orderChooseTemplateDialogModal');\r\n                helperService.closeDialog($windowElement);\r\n\r\n                if (isOk) {\r\n                    if ($scope.printingMode == 'email') {\r\n                        $scope.showEmailDlg();\r\n                    } else {\r\n                        $scope.downloadOrder();\r\n                    }\r\n                }\r\n\r\n            };\r\n\r\n            $scope.downloadOrder = function () {\r\n                $.blockUI();\r\n\r\n                stockOrderingService.printPurchaseOrder($scope.currentOrder.TaskID || $scope.currentOrder.taskID, $scope.templateModel.Template)\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        if (res.data.Success) {\r\n                            var url = res.data.Url;\r\n                            return fileDownloadService.downloadFile(url, res.data.FileName, 'application/pdf');\r\n                        } else {\r\n                            errorService.showError(\"Something went wrong. Try again later.\", null, null, null, true);\r\n                        }\r\n\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.emailModel = {};\r\n\r\n            $scope.showEmailDlg = function () {\r\n                $.blockUI();\r\n                stockOrderingService.getPurchaseOrderEmail($scope.currentOrder.TaskID || $scope.currentOrder.taskID, $scope.templateModel.Template)\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n\r\n                        $scope.emailModel = res.data.result;\r\n                        $scope.emailModel.BodyHtml = res.data.body;\r\n\r\n                        var $windowElement = $('#emailOrderDialogModal');\r\n                        helperService.showDialog($windowElement);\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.trustAsHtml = function (string) {\r\n                return $sce.trustAsHtml(string);\r\n            };\r\n\r\n            $scope.emailOrder = function (isSend) {\r\n                if (isSend) {\r\n                    $.blockUI();\r\n                    stockOrderingService.sendPurchaseOrderEmail($scope.currentOrder.TaskID || $scope.currentOrder.taskID, $scope.emailModel)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n\r\n                            if (res.data.Success) {\r\n                                var $windowElement = $('#emailOrderDialogModal');\r\n                                helperService.closeDialog($windowElement);\r\n                            } else {\r\n                                if (res.data.ValidationState === \"Invalid\") {\r\n                                    errorService.showError(res.data.ValidationText || \"Something went wrong. Please try again later.\", null, null, null, true);\r\n                                }\r\n                            }\r\n\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n\r\n                } else {\r\n                    var $windowElement = $('#emailOrderDialogModal');\r\n                    helperService.closeDialog($windowElement);\r\n                }\r\n\r\n            };\r\n\r\n             $scope.addFamilyItemToOrder = function (row, comments) {\r\n                const existing = $scope.currentOrder.data.find(function (x) { return x.ProductID === row.ProductID; });\r\n                if (existing) {\r\n                    existing.Quantity += row.Quantity;\r\n                } else {\r\n                    const newRec = {\r\n                        ID: row.ProductID,\r\n                        OrderLineID: row.OrderLineID,\r\n                        ProductID: row.ProductID,\r\n                        ProductCode: row.ProductCode,\r\n                        Name: row.Name,\r\n                        Unit: row.UnitName,\r\n                        OnHand: row.OnHand,\r\n                        Available: row.Available,\r\n                        OnOrder: row.OnOrder,\r\n                        Quantity: row.Quantity,\r\n                        CostingMethod: row.CostingMethod,\r\n                        FamilyID: row.FamilyID,\r\n                        FamilyName: row.FamilyName,\r\n                        Option1: row.Option1,\r\n                        Option2: row.Option2,\r\n                        Option3: row.Option3,\r\n                        refID: uuid2.newguid(),\r\n                        Comment: comments,\r\n                        Items: null,\r\n                        Price: row.Cost,\r\n                        TaxRule: row.TaxRule,\r\n                        TaxPercent: row.TaxPercent,\r\n                    };\r\n                    $scope.currentOrder.data = $scope.currentOrder.data.concat(newRec);\r\n                }\r\n            };\r\n        }]);","angular.module('mainApp').controller('stockTakeController', [\r\n    '$scope',\r\n    '$rootScope',\r\n    'loginService',\r\n    'gettextCatalog',\r\n    'helperService',\r\n    '$timeout',\r\n    'configService',\r\n    'errorService',\r\n    'outletService',\r\n    '$q',\r\n    'stockTakeService',\r\n    'soundService',\r\n    'printService',\r\n    'uuid2',\r\n    function(\r\n        $scope,\r\n        $rootScope,\r\n        loginService,\r\n        gettextCatalog,\r\n        helperService,\r\n        $timeout,\r\n        configService,\r\n        errorService,\r\n        outletService,\r\n        $q,\r\n        stockTakeService,\r\n        soundService,\r\n        printService,\r\n        uuid2\r\n    ) {\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n            //             $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n        $scope.mode = '';\r\n\r\n        $scope.dataStatus = 'NEW';\r\n        $scope.activeTab = '0';\r\n        $scope.dataCount = 0;\r\n        $scope.totalPages = 0;\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 20;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.dataCountProcess = 0;\r\n        $scope.dataPageProcess = 1;\r\n        $scope.dataPageDisplayProcess;\r\n        $scope.itemsByPageProcess = 20;\r\n        $scope.isProcessLoading = false;\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n        $scope.ifcss = { height: window.innerHeight * 0.9 - 200 + 'px' };\r\n        $scope.fcss = { height: window.innerHeight * 0.8 + 'px' };\r\n\r\n        $scope.liveSearch = {\r\n            categoryLiveSearchIsOpen: false,\r\n            brandLiveSearchIsOpen: false,\r\n            tagLiveSearchIsOpen: false\r\n        };\r\n\r\n        $scope.$watch('liveSearch.categoryLiveSearchIsOpen',\r\n            function (newValue, oldValue) {                \r\n                $timeout(function() {\r\n                    helperService.resizeModalTypeahead('#category','#editStocktakeModal', newValue);\r\n                },400);                \r\n            }\r\n        );\r\n        $scope.$watch('liveSearch.brandLiveSearchIsOpen',\r\n            function (newValue, oldValue) {\r\n                $timeout(function() {\r\n                    helperService.resizeModalTypeahead('#brand','#editStocktakeModal', newValue);\r\n                },400);\r\n            }\r\n        );\r\n        $scope.$watch('liveSearch.tagLiveSearchIsOpen',\r\n            function (newValue, oldValue) {                \r\n                $timeout(function() {\r\n                    helperService.resizeModalTypeahead('#tag','#editStocktakeModal', newValue);\r\n                },400);              \r\n            }\r\n        );\r\n\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n        $scope.datePickerReady = false;\r\n        $scope.prepareDatePicker = function() {\r\n            if ($scope.datePickerReady) return;\r\n\r\n            $scope.datePickerReady = true;\r\n            $timeout(function() {\r\n                var dateFormat = $scope.dateFormat,\r\n                    date = $('[name=\"expiryDate\"], [name=\"receivedDate\"]').datepicker({\r\n                        defaultDate: '-1w',\r\n                        numberOfMonths: 1,\r\n                        dateFormat: dateFormat,\r\n                        showButtonPanel: true,\r\n                        beforeShow: function(input) {\r\n                            setTimeout(function() {\r\n                                var buttonPane = $(input)\r\n                                    .datepicker('widget')\r\n                                    .find('.ui-datepicker-buttonpane');\r\n                                buttonPane.empty();\r\n                                $('<button>', {\r\n                                    text: 'Reset',\r\n                                    click: function() {\r\n                                        $.datepicker._clearDate(input);\r\n                                    }\r\n                                })\r\n                                    .appendTo(buttonPane)\r\n                                    .addClass('ui-datepicker-current ui-state-default ui-priority-primary ui-corner-all');\r\n                            }, 1);\r\n                        }\r\n                    });\r\n            });\r\n        };\r\n\r\n        $scope.prepareAddNew = function() {\r\n            var defaultAcc = $scope.defaultAccount \r\n                        && (!$scope.accounts || $scope.accounts.findIndex(x => x.account === $scope.defaultAccount) !== -1)\r\n                    ? $scope.defaultAccount \r\n                    : !!$scope.accounts && $scope.accounts.length > 0 ? $scope.accounts[0].account : '';\r\n\r\n            $scope.newStocktake = {\r\n                lockSell: true,\r\n                showOnhand: false,\r\n                name: 'Stocktake ' + moment(new Date()).format('LL'),\r\n                categories: [],\r\n                brands: [],\r\n                tags: [],\r\n                account: defaultAcc,\r\n                outletID: null\r\n            };\r\n\r\n            // select current outlet\r\n            angular.forEach($scope.outlets, function(el) {\r\n                if (el.id === configService.lastECSMappingOutletID) {\r\n                    $scope.newStocktake.outletID = configService.lastECSMappingOutletID;\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            if ($scope.newStocktake.outletID)\r\n\r\n            $scope.selectedCategory = '';\r\n            $('#category').val('');\r\n            $scope.selectedBrand = '';\r\n            $('#brand').val('');\r\n            $scope.selectedTag = '';\r\n            $('#tag').val('');\r\n        };\r\n\r\n        $scope.prepareEdit = function(row) {\r\n            $scope.newStocktake = {\r\n                taskID: row.TaskID,\r\n                lockSell: row.LockSell,\r\n                showOnhand: row.IncludeQuantityOnHand,\r\n                name: row.Name,\r\n                outletID: row.OutletID,\r\n                account: !row.Account ? '' : row.Account,\r\n                categories: row.categoriesArr,\r\n                brands: row.brandsArr,\r\n                tags: row.tagsArr\r\n            };\r\n        };\r\n\r\n        $scope.selectedCategory = '';\r\n        $scope.selectedBrand = '';\r\n        $scope.selectedTag = '';\r\n        $scope.scanLocationID = '0';\r\n        $scope.scanLocationName = '';\r\n\r\n        $scope.stockTakesData = [];\r\n        $scope.categories = [];\r\n        $scope.brands = [];\r\n        $scope.tags = [];\r\n        $scope.outlets = [];\r\n        $scope.accounts = [];\r\n        $scope.defaultAccount = null;\r\n\r\n        $scope.loadData = function() {\r\n            $scope.accounts = [];\r\n            $scope.categories = [];\r\n            $scope.brands = [];\r\n            $scope.tags = [];\r\n            $scope.outlets = [];\r\n            $scope.dataCount = 0;\r\n            $scope.dataPageDisplay = 1;\r\n            $scope.dataPage = 1;\r\n\r\n            var p = outletService.getUserOulets(configService.loginUserID, true).then(function(data) {\r\n                // load outlets\r\n                angular.forEach(data.Outlets, function(el) {\r\n                    $scope.outlets.push({\r\n                        name: el.OutletName,\r\n                        id: el.EcsLocationMappingID\r\n                    });\r\n                });\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            });\r\n\r\n            var lst = stockTakeService.getData().then(function(data) {\r\n                $scope.brands = data.data.brands;\r\n                $scope.categories = data.data.categories;\r\n                $scope.tags = data.data.tags;\r\n                $scope.accounts = data.data.accounts;\r\n                $scope.defaultAccount = data.data.defaultAccount;\r\n                \r\n                if (data.data.defaultAccount) {\r\n                    if ($scope.accounts.findIndex(x => x.account === data.data.defaultAccount.account) === -1) {\r\n                        $scope.accounts = [$scope.defaultAccount].concat($scope.accounts);\r\n                    }\r\n                }\r\n\r\n                var deferred2 = $q.defer();\r\n                deferred2.resolve(true);\r\n                return deferred2.promise;\r\n            });\r\n\r\n            return $q.all([p, lst]);\r\n        };\r\n\r\n        const scrollReachBottomCallback = function() {\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n        \r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectPage = function(page) {\r\n            $scope.dataPage = page;\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        $scope.loadGrid = function(sorting) {\r\n            var lst = stockTakeService.loadStocktakeList($scope.dataPage, $scope.itemsByPage, $scope.dataStatus, sorting).then(function(data) {\r\n                if ($scope.dataPage === 1) {\r\n                    $scope.stockTakesData = [];\r\n                }\r\n\r\n                $scope.dataPage = data.data.Page;\r\n                $scope.dataPageDisplay = data.data.Page;\r\n                getPages(data.data.Total);\r\n\r\n                angular.forEach(data.data.Rows, function(el) {\r\n                    var flt = JSON.parse(el.SearchParameters);\r\n                    var isPartial = false;\r\n                    if (!!flt.categories && flt.categories.length > 0) {\r\n                        el.categories = flt.categories.join(', ');\r\n                        el.categoriesArr = flt.categories;\r\n                        isPartial = true;\r\n                    } else el.categoriesArr = [];\r\n\r\n                    if (!!flt.brands && flt.brands.length > 0) {\r\n                        el.brands = flt.brands.join(', ');\r\n                        el.brandsArr = flt.brands;\r\n                        isPartial = true;\r\n                    } else el.brandsArr = [];\r\n\r\n                    if (!!flt.tags && flt.tags.length > 0) {\r\n                        el.tags = flt.tags.join(', ');\r\n                        el.tagsArr = flt.tags;\r\n                        isPartial = true;\r\n                    } else el.tagsArr = [];\r\n\r\n                    el.type = isPartial ? 'Partial' : 'Full';\r\n                    el.date = helperService.getDateByFormat(el.CreatedDate, 'LLL');\r\n                    $scope.stockTakesData.push(el);\r\n                });\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return lst;\r\n        };\r\n\r\n        $.blockUI();\r\n\r\n        $scope.onLoad = function() {\r\n            //$.blockUI();\r\n\r\n            //$scope.loadData().finally(function() {\r\n            //    $.unblockUI();\r\n            //});\r\n        };\r\n\r\n        $scope.$on('refreshStTable', function() {\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n\r\n            var sort = {};\r\n            sort.FieldName = 'CreatedDate';\r\n            sort.Direction = 'desc';\r\n\r\n            $scope.loadGrid(sort).finally(function() {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            });\r\n        });\r\n\r\n        $scope.$watch('activeTab', function(newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                switch (newValue) {\r\n                    case '0':\r\n                        $scope.dataStatus = 'NEW';\r\n                        break;\r\n                    case '1':\r\n                        $scope.dataStatus = 'IN PROGRESS';\r\n                        break;\r\n                    case '2':\r\n                        $scope.dataStatus = 'COMPLETED';\r\n                        break;\r\n                    case '3':\r\n                        $scope.dataStatus = 'VOIDED';\r\n                        break;\r\n                }\r\n\r\n                $scope.dataPage = 1;\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n        });\r\n\r\n        $scope.firstAddFormShow = true;\r\n\r\n        // code below to give a chance to add event handlers before form is shown\r\n        $timeout(function() {\r\n            $scope.mode = 'management';\r\n\r\n            $.blockUI();\r\n            $scope.loadData().finally(function () {\r\n                $.unblockUI();\r\n                $scope.$broadcast('refreshStTable');\r\n            });\r\n\r\n        });\r\n\r\n        $timeout(function() {\r\n            if ($scope.firstAddFormShow) {\r\n                $scope.firstAddFormShow = false;\r\n                initSelects();\r\n            } else {\r\n                $('input, select').trigger('refresh');\r\n            }\r\n        }, 0);\r\n\r\n        $scope.addNew = function() {\r\n            $scope.prepareAddNew();\r\n            $scope.mode = 'new';\r\n            var element = $('#editStocktakeModal');\r\n            helperService.showDialog(element, function() {\r\n                initSelects();\r\n                $timeout(function() {\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            });\r\n        };\r\n\r\n        $scope.goBack = function() {\r\n            if ($scope.mode == 'new' || $scope.mode == 'edit') {\r\n                var element = $('#editStocktakeModal');\r\n                helperService.closeDialog(element);\r\n            }\r\n\r\n            if ($scope.mode == 'process') {\r\n                var element = $('#stockTakeProcessModal');\r\n                helperService.closeDialog(element);\r\n            }\r\n\r\n            if ($scope.mode == 'new' || $scope.mode == 'edit' || $scope.mode == 'process') {\r\n                $scope.mode = 'management';\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n        };\r\n\r\n        $scope.editStocktake = function(row) {\r\n            $scope.prepareEdit(row);\r\n            $scope.mode = 'edit';\r\n\r\n            var element = $('#editStocktakeModal');\r\n            helperService.showDialog(element, function() {\r\n                initSelects();\r\n                $timeout(function() {\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            });\r\n        };\r\n\r\n        $scope.modifyStocktake = function() {\r\n            var isNew = $scope.mode == 'new';\r\n\r\n            $.blockUI();\r\n            stockTakeService\r\n                .modifyTask($scope.newStocktake, isNew)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n\r\n                    if ($scope.stockTakesData.length >= $scope.itemsByPage) $scope.dataPage++;\r\n\r\n                    $scope.$broadcast('refreshStTable');\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        $scope.deleteStocktake = function(row) {\r\n            $scope.deleteMode = 'task';\r\n            $scope.deleteObject = row;\r\n\r\n            var message = gettextCatalog.getString('Would you like to delete') + '<br/>' + row.Name + '<br/>' + gettextCatalog.getString('stocktake?');\r\n\r\n            helperService.showCustomDialog(gettextCatalog.getString('Delete stocktake')\r\n            , message\r\n            );\r\n        };\r\n\r\n        $scope.callbackModal = function() {\r\n            if ($scope.deleteMode == 'task') {\r\n                $.blockUI();\r\n                stockTakeService\r\n                    .deleteStocktake($scope.deleteObject.TaskID)\r\n                    .then(function() {\r\n                        $.unblockUI();\r\n                        if ($scope.stockTakesData.length <= 1 && $scope.dataPage > 1) $scope.dataPage--;\r\n\r\n                        $scope.$broadcast('refreshStTable');\r\n                    })\r\n                    .catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            } else if ($scope.deleteMode == 'start') {\r\n                $.blockUI();\r\n                stockTakeService\r\n                    .startStocktake($scope.deleteObject.TaskID)\r\n                    .then(function() {\r\n                        $.unblockUI();\r\n                        $scope.activeTab = '1'; // grid will be updated automatically\r\n\r\n                        $timeout(function() {\r\n                            $('#activeTab').trigger('change');\r\n                        });\r\n                    })\r\n                    .catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            } else if ($scope.deleteMode == 'complete') {\r\n                $scope.completeStocktake();\r\n            } else if ($scope.deleteMode == 'cancel') {\r\n                $scope.cancelStocktake();\r\n            } else if ($scope.deleteMode == 'undo') {\r\n                $scope.undoStocktake();\r\n            }\r\n        };\r\n\r\n        $scope.startStocktake = function(row) {\r\n            $scope.deleteMode = 'start';\r\n            $scope.deleteObject = row;\r\n\r\n            var message = gettextCatalog.getString('Would you like to start') + '<br/>' + row.Name + '<br/>' + gettextCatalog.getString('stocktake?');\r\n\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Start stocktake'),\r\n                message,\r\n                gettextCatalog.getString('OK')\r\n            );\r\n        };\r\n\r\n        // grid control\r\n        $scope.gridControl = function(tableState) {\r\n            var sort = {};\r\n\r\n            if (!!tableState.sort.predicate) {\r\n                sort.FieldName = tableState.sort.predicate;\r\n                sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.loadGrid(sort).finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        $scope.selectPage = function(page) {\r\n            $scope.dataPage = page;\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        // live search for brands, tags, categories\r\n        $scope.liveSearchCategory = function(val) {\r\n            return stockTakeService.filterData($scope.categories, val, 10);\r\n        };\r\n\r\n        $scope.liveSearchCategorySelected = function(item, model, label, event) {\r\n            $scope.selectedCategory = '';\r\n            $('#category').val('');\r\n            stockTakeService.addTextToArray($scope.categories, model, $scope.newStocktake.categories);\r\n            helperService.hideKeyboard();\r\n        };\r\n\r\n        $scope.liveSearchCategoryFinished = function(m) {\r\n            return null;\r\n        };\r\n\r\n        $scope.liveSearchBrand = function(val) {\r\n            return stockTakeService.filterData($scope.brands, val, 10);\r\n        };\r\n\r\n        $scope.liveSearchBrandSelected = function(item, model, label, event) {\r\n            $scope.selectedBrand = '';\r\n            $('#brand').val('');\r\n            stockTakeService.addTextToArray($scope.brands, model, $scope.newStocktake.brands);\r\n            helperService.hideKeyboard();\r\n        };\r\n\r\n        $scope.liveSearchBrandFinished = function(m) {\r\n            return null;\r\n        };\r\n\r\n        $scope.liveSearchTag = function(val) {\r\n            return stockTakeService.filterData($scope.tags, val, 10);\r\n        };\r\n\r\n        $scope.liveSearchTagSelected = function(item, model, label, event) {\r\n            $scope.selectedTag = '';\r\n            $('#tag').val('');\r\n            stockTakeService.addTextToArray($scope.tags, model, $scope.newStocktake.tags);\r\n            helperService.hideKeyboard();\r\n        };\r\n\r\n        $scope.liveSearchTagFinished = function(m) {\r\n            return null;\r\n        };\r\n\r\n        $scope.removeFromList = function(arr, item) {\r\n            stockTakeService.removeTextFromArray(arr, item);\r\n        };\r\n\r\n        // stocktake process part\r\n\r\n        $scope.currentStocktake = {\r\n            bins: [],\r\n            sncnts: ['0', '1'],\r\n            scanLocationID: '0',\r\n            searchText: ''\r\n        };\r\n\r\n        $scope.$watch('currentStocktake.scanLocationID', function(newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.currentStocktake.scanLocationName = '';\r\n                angular.forEach($scope.currentStocktake.bins, function(el) {\r\n                    if (newValue == el.BinID) {\r\n                        $scope.currentStocktake.scanLocationName = el.Name;\r\n                        return false;\r\n                    }\r\n                });\r\n\r\n                $scope.fixQuantityObjectLocation();\r\n            }\r\n        });\r\n\r\n        $scope.prepareCurrentStocktake = function(row) {\r\n            $scope.currentStocktake.currentTask = row;\r\n            $scope.currentStocktake.name = row.Name;\r\n            $scope.currentStocktake.taskID = row.TaskID;\r\n            $scope.currentStocktake.locationID = row.LocationID;\r\n            $scope.currentStocktake.showOnHand = row.IncludeQuantityOnHand == true;\r\n            $scope.currentStocktake.bins = [];\r\n            $scope.currentStocktake.scanLocationID = row.LocationID;\r\n            $scope.currentStocktake.status = row.Status;\r\n            $scope.currentStocktake.searchText = '';\r\n        };\r\n\r\n        $scope.showProcessStocktake = function(row) {\r\n            $scope.dataCountProcess = 0;\r\n            $scope.dataPageProcess = 1;\r\n            $scope.totalPagesProcess = 0;\r\n\r\n            $scope.prepareCurrentStocktake(row);\r\n\r\n            $scope.mode = 'process';\r\n            $scope.loadGridProcess();\r\n\r\n            var element = $('#stockTakeProcessModal');\r\n            $scope.currentStocktake.searchText = '';\r\n\r\n            helperService.showDialog(element, function() {\r\n                initPagerOnScroll(scrollReachBottomCallbackProcess, element.find('.dp_modal-body'));\r\n            });\r\n\r\n            $.blockUI();\r\n            stockTakeService\r\n                .getLocationBins($scope.currentStocktake.locationID)\r\n                .then(function(res) {\r\n                    $scope.currentStocktake.bins = [];\r\n                    if (res.data.locations.length > 0) {\r\n                        $scope.currentStocktake.bins = res.data.locations;\r\n                        $scope.currentStocktake.bins.unshift({\r\n                            BinID: $scope.currentStocktake.locationID,\r\n                            ParentID: $scope.currentStocktake.locationID,\r\n                            Name: 'Not set'\r\n                        });\r\n                    }\r\n\r\n                    $.unblockUI();\r\n                })\r\n                .catch(function() {\r\n                    $.unblockUI();\r\n                });\r\n        };\r\n\r\n        const scrollReachBottomCallbackProcess = function() {\r\n            if (!$scope.isProcessLoading && $scope.dataPageProcess < $scope.totalPagesProcess) {\r\n                $scope.selectPageProcess($scope.dataPageProcess + 1);\r\n            }\r\n        };\r\n\r\n        function getPagesProcess(total) {\r\n            var step = $scope.itemsByPageProcess;\r\n            $scope.totalPagesProcess = Math.ceil(total / step);\r\n            if ($scope.totalPagesProcess === 0) {\r\n                $scope.totalPagesProcess = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectPageProcess = function(page) {\r\n            $scope.dataPageProcess = page;\r\n            $scope.loadGridProcess();\r\n        };\r\n\r\n        $scope.loadGridProcess = function(reloadAll) {\r\n            $.blockUI();\r\n            $scope.isProcessLoading = true;\r\n\r\n            var page = $scope.dataPageProcess;\r\n            var itemsInPage = $scope.itemsByPageProcess;\r\n\r\n            if (reloadAll === true) {\r\n                page = 1;\r\n                itemsInPage = $scope.dataPageProcess * $scope.itemsByPageProcess;\r\n            }\r\n\r\n            stockTakeService\r\n                .loadStocktake($scope.currentStocktake.taskID, page, itemsInPage, {}, $scope.currentStocktake.searchText, true)\r\n                .then(function(data) {\r\n                    if (page === 1) {\r\n                        $scope.currentStocktake.data = [];\r\n                    }\r\n\r\n                    if (reloadAll === true) {\r\n                        $scope.dataCountProcess = data.data.Total;\r\n                        getPagesProcess(data.data.Total);\r\n                    } else {\r\n                        $scope.dataCountProcess = data.data.Total;\r\n                        $scope.dataPageProcess = data.data.Page;\r\n                        $scope.dataPageDisplayProcess = data.data.Page;\r\n                        getPagesProcess(data.data.Total);\r\n                    }\r\n\r\n                    angular.forEach(data.data.Rows, function(el) {\r\n                        $scope.currentStocktake.data.push(el);\r\n                    });\r\n                })\r\n                .finally(function() {\r\n                    $.unblockUI();\r\n                    $scope.isProcessLoading = false;\r\n                });\r\n        };\r\n\r\n        $scope.rowClicked = function(row) {\r\n            if ($scope.dataStatus == 'NEW') {\r\n                $scope.startStocktake(row);\r\n            } else {\r\n                $scope.showProcessStocktake(row);\r\n            }\r\n        };\r\n\r\n        $scope.stockTakeScanData = [];\r\n        $scope.availableProducts = [];\r\n\r\n        // here the list of available items will be constructed\r\n        $scope.prepareScanData = function (arr) {\r\n            $scope.stockTakeScanData = [];\r\n\r\n            angular.forEach(arr, function (el) {\r\n                if (!!el.ExpiryDate) el.ExpiryDate2 = el.ExpiryDate;\r\n                $scope.stockTakeScanData.push(el);\r\n            });\r\n\r\n            $scope.availableProducts = $scope.stockTakeScanData;\r\n        };\r\n\r\n        // grid control\r\n        $scope.gridControlProcess = function(tableState) {\r\n            var sort = {};\r\n            if ($scope.mode != 'process') return;\r\n\r\n            if (!!tableState.sort.predicate) {\r\n                sort.FieldName = tableState.sort.predicate;\r\n                sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.loadGridProcess(sort).finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        // stocktake item set quantity\r\n        $scope.quantityObject = {};\r\n        $scope.showSetQuantityDlg = function(row) {\r\n            if ($scope.currentStocktake.status == 'IN PROGRESS') {\r\n                $scope.makeQuantityObject(row);\r\n                helperService.showDialog('#stocktakeSetQuantityDlg', function() {\r\n                    initSelects();\r\n                });\r\n                $scope.prepareDatePicker();\r\n            }\r\n        };\r\n\r\n        $scope.makeQuantityObject = function(row) {\r\n            $scope.quantityObject = angular.copy(row);\r\n            $scope.quantityObject.ParentLocationID = $scope.currentStocktake.locationID;\r\n            $scope.quantityObject.showOnHand = $scope.currentStocktake.showOnHand;\r\n\r\n            if (row.LocationID)\r\n                $scope.quantityObject.LocationID = row.LocationID;\r\n            else\r\n                $scope.quantityObject.LocationID = $scope.currentStocktake.locationID;\r\n//                $scope.currentStocktake.scanLocationID = row.LocationID;\r\n\r\n            if (!!$scope.quantityObject.ExpiryDate) $scope.quantityObject.ExpiryDate2 = $scope.quantityObject.ExpiryDate;\r\n\r\n            if ($scope.quantityObject.CostingMethod == 'FISN' || $scope.quantityObject.CostingMethod == 'FESN' || $scope.quantityObject.CostingMethod == 'SN') {\r\n                if ($scope.quantityObject.Adjustment > 1) $scope.quantityObject.Adjustment = 1;\r\n            }\r\n\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n        };\r\n\r\n        $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n        $scope.showItemQuantityDlg = function() {\r\n            $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n            $timeout(function() {\r\n                $scope.itemQuantityDlg.show('#quantityObject');\r\n            });\r\n        };\r\n\r\n        // callback\r\n        $scope.setQuantity = function(prm, event) {\r\n            $timeout(function() {\r\n                $scope.itemQuantityDlg.hide(true);\r\n            });\r\n\r\n            if (prm === true) {\r\n                $timeout(function() {\r\n                    $scope.quantityObject.Adjustment = $scope.quantityObject.value;\r\n                });\r\n            } else if (typeof prm == 'string') {\r\n                if (prm === 'clean') {\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.adjustStocktakeAbsolute = function() {\r\n            $.blockUI();\r\n\r\n            stockTakeService\r\n                .adjustStocktakeAbsolute(\r\n                    $scope.currentStocktake.taskID,\r\n                    $scope.quantityObject.ID,\r\n                    $scope.quantityObject.Adjustment,\r\n                    $scope.quantityObject.LocationID,\r\n                    $scope.quantityObject.BatchSN,\r\n                    $scope.quantityObject.ExpiryDate,\r\n                    $scope.quantityObject.ProductID,\r\n                    $scope.quantityObject.ReceivedDate\r\n                )\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.loadGridProcess(true);\r\n                    return soundService.playGood();\r\n                })\r\n                .catch(function(err) {\r\n                    soundService.playBad();\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        // stocktakeScan\r\n        $scope.stocktakeScanActiveTab = 0;\r\n        $scope.scanError = null;\r\n        $scope.scanSuccess = null;\r\n        $scope.isScanDlgVisible = false;\r\n        $scope.firstScanStart = true;\r\n        $scope.multiScanText = '';\r\n\r\n        $scope.setMultiscan = function(v) {\r\n            $scope.multiScanText = v;\r\n            $('#scanArea').val(v);\r\n        };\r\n\r\n        $scope.getMultiscan = function() {\r\n            $scope.multiScanText = $('#scanArea').val();\r\n            return $scope.multiScanText;\r\n        };\r\n\r\n        $scope.scanComboInit = true;\r\n\r\n        $scope.showScanDlg = function() {\r\n            $scope.scanError = null;\r\n            $scope.scanSuccess = null;\r\n            $scope.quantityObject = {};\r\n            $scope.setMultiscan('');\r\n            $scope.stockTakeScanData = [];\r\n            $scope.availableProducts = [];\r\n            $('#manualScanInput').val('');\r\n\r\n            helperService.showDialog('#stocktakeScanDlg', function() { });\r\n\r\n            if ($scope.scanComboInit) {\r\n                $scope.scanComboInit = false;\r\n                if ($('#stocktakeScanDlg select').length > 0) {\r\n                    $('#stocktakeScanDlg select').styler();\r\n                }\r\n            }\r\n\r\n            $scope.isScanDlgVisible = true;\r\n            printService.reconnect();\r\n            //printService.disconnect().then(function () { return printService.connect(); });\r\n\r\n            if ($scope.firstScanStart) {\r\n                $scope.firstScanStart = false;\r\n                $('#stocktakeScanDlg')\r\n                    .find('ul li a')\r\n                    .click(function(evt) {\r\n                        var v = Number(\r\n                            $(this)\r\n                                .parent()\r\n                                .attr('index')\r\n                        );\r\n\r\n                        $timeout(function() {\r\n                            $scope.stocktakeScanActiveTab = v;\r\n                        });\r\n                    });\r\n            }\r\n\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n            $scope.prepareDatePicker();\r\n        };\r\n\r\n        $scope.hideScanDlg = function() {\r\n            //printService.disconnect();\r\n            $scope.isScanDlgVisible = false;\r\n            helperService.closeDialog('#stocktakeScanDlg');\r\n            $scope.loadGridProcess(true);\r\n        };\r\n\r\n        $scope.fixQuantityObjectLocation = function() {\r\n            if (!$scope.currentStocktake.scanLocationID) {\r\n                $scope.quantityObject.LocationID = $scope.currentStocktake.locationID;\r\n                $scope.quantityObject.LocationName = '';\r\n            } else {\r\n                $scope.quantityObject.LocationID = $scope.currentStocktake.scanLocationID;\r\n                $scope.quantityObject.LocationName = $scope.currentStocktake.scanLocationID === $scope.currentStocktake.locationID ?\r\n                    '' :\r\n                    $scope.currentStocktake.scanLocationName;\r\n            }\r\n        };\r\n\r\n        $scope.scanStocktake = function() {\r\n            $scope.scanError = null;\r\n            $scope.scanSuccess = null;\r\n            $scope.fixQuantityObjectLocation();\r\n\r\n            if ($scope.stocktakeScanActiveTab == 2 && !!$scope.quantityObject.ID) {\r\n                $.blockUI();\r\n\r\n                return stockTakeService\r\n                    .adjustStocktakeAbsolute(\r\n                        $scope.currentStocktake.taskID,\r\n                        $scope.quantityObject.ID,\r\n                        $scope.quantityObject.Adjustment,\r\n                        $scope.quantityObject.LocationID,\r\n                        $scope.quantityObject.BatchSN,\r\n                        $scope.quantityObject.ExpiryDate,\r\n                        $scope.quantityObject.ProductID,\r\n                        $scope.quantityObject.ReceivedDate\r\n                    )\r\n                    .then(function(d) {\r\n                        $.unblockUI();\r\n                        $scope.scanSuccess = 'Product ' + $scope.quantityObject.Barcode + ' has been updated with stocktake quantity ' + $scope.quantityObject.Adjustment;\r\n                        $scope.quantityObject = {};\r\n                        $scope.loadGridProcess(true);\r\n                        return soundService.playGood();\r\n                    })\r\n                    .catch(function(err) {\r\n                        soundService.playBad();\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            } else if ($scope.stocktakeScanActiveTab == 1 && !!$scope.getMultiscan() && $scope.getMultiscan().length > 0) {\r\n                var searchValue =  $scope.getMultiscan();\r\n\r\n                $scope.setMultiscan('');\r\n                if (searchValue.length > 0) {\r\n                    \r\n                    var prm = stockTakeService.scanInventoryMode($scope.currentStocktake.taskID, $scope.currentStocktake.scanLocationID, searchValue)\r\n\r\n                    $.blockUI();\r\n\r\n                    prm.then(function(resp){\r\n                        $.unblockUI();\r\n\r\n                        if (resp && resp.data && resp.data.length > 0) {\r\n                            // error\r\n                            var codes = resp.data.join(\"\\n\");\r\n                            $scope.setMultiscan(codes);\r\n\r\n                            $scope.scanError =\r\n                                'Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Not processed barcodes are listed in the box below.';\r\n                        } else {\r\n                            $scope.scanSuccess = 'All barcodes were recognised and stocktake quantity has been incremented for products related to these barcodes';\r\n                        }\r\n\r\n                    }).catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n                }\r\n            } else if ($scope.stocktakeScanActiveTab == 0) {\r\n                $.blockUI();\r\n\r\n                return stockTakeService\r\n                    .adjustStocktakeRelative(\r\n                        $scope.currentStocktake.taskID,\r\n                        $scope.quantityObject.ID,\r\n                        $scope.quantityObject.value,\r\n                        $scope.quantityObject.LocationID,\r\n                        $scope.quantityObject.BatchSN,\r\n                        $scope.quantityObject.ExpiryDate,\r\n                        $scope.quantityObject.ProductID,\r\n                        $scope.quantityObject.ReceivedDate\r\n                    )\r\n                    .then(function(d) {\r\n                        $.unblockUI();\r\n                        $scope.scanSuccess = 'Product ' + $scope.quantityObject.Barcode + ' has been updated with stocktake quantity ' + ($scope.quantityObject.value);\r\n                        $scope.quantityObject.ID = null;\r\n                        return soundService.playGood();\r\n                    })\r\n                    .catch(function(err) {\r\n                        soundService.playBad();\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            }\r\n        };\r\n\r\n        $scope.processSingleScan = function(barcode) {\r\n            return stockTakeService\r\n                .search($scope.currentStocktake.taskID, barcode)\r\n                .then(function(res) {\r\n                    if (res.data.Rows.length != 1) {\r\n                        $scope.setMultiscan($scope.getMultiscan() + barcode + String.fromCharCode(13, 10));\r\n                    } else {\r\n                       $scope.fixQuantityObjectLocation();\r\n\r\n                        return stockTakeService\r\n                            .adjustStocktakeRelative(\r\n                                $scope.currentStocktake.taskID,\r\n                                res.data.Rows[0].ID,\r\n                                1,\r\n                                $scope.quantityObject.LocationID,\r\n                                $scope.quantityObject.BatchSN,\r\n                                $scope.quantityObject.ExpiryDate,\r\n                                $scope.quantityObject.ProductID\r\n                            )\r\n                            .catch(function(err) {\r\n                                $scope.setMultiscan($scope.getMultiscan() + barcode + String.fromCharCode(13, 10));\r\n                            });\r\n                    }\r\n                })\r\n                .catch(function(err) {\r\n                    $scope.setMultiscan($scope.getMultiscan() + barcode + String.fromCharCode(13, 10));\r\n                });\r\n        };\r\n\r\n        $scope.$watch('stocktakeScanActiveTab', function(newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.scanError = null;\r\n                $scope.scanSuccess = null;\r\n                $scope.quantityObject = {};\r\n                $scope.stockTakeScanData = [];\r\n                $scope.availableProducts = [];\r\n\r\n                switch (newValue) {\r\n                    case 0: // auto mode activate scanner\r\n                        break;\r\n                    case 1:\r\n                        break;\r\n                    case 2:\r\n                        $('#manualScanInput').val('');\r\n                        break;\r\n                }\r\n            }\r\n        });\r\n\r\n        $scope.selectScanProduct = function(row) {\r\n            //$scope.fixQuantityObjectLocation();\r\n\r\n            if ($scope.stocktakeScanActiveTab == 0) {\r\n                // auto mode - only increment\r\n                $.blockUI();\r\n\r\n                if (row.CostingMethod == 'FIFO' || !!row.BatchSN) {\r\n                    return stockTakeService\r\n                        .adjustStocktakeRelative($scope.currentStocktake.taskID, row.ID, 1, $scope.quantityObject.LocationID, row.BatchSN, row.ExpiryDate, row.ProductID)\r\n                        .then(function(d) {\r\n                            $.unblockUI();\r\n                            $scope.scanSuccess = 'Product ' + row.Barcode + ' has been updated with stocktake quantity ' + (row.Adjustment + 1);\r\n                            return soundService.playGood();\r\n                        })\r\n                        .catch(function(err) {\r\n                            soundService.playBad();\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        })\r\n                        .finally(function() {\r\n                            $scope.stockTakeScanData = [];\r\n                            $scope.availableProducts = [];\r\n                        });\r\n                } else {\r\n                    $.unblockUI();\r\n                    $scope.makeQuantityObject(row);\r\n                    // $scope.fixQuantityObjectLocation();\r\n                    $scope.stockTakeScanData = [];\r\n                    $scope.availableProducts = [];\r\n                    $scope.scanSuccess = 'Please, set Batch/SN for the product';\r\n                }\r\n            } else if ($scope.stocktakeScanActiveTab == 2) {\r\n                $scope.scanError = null;\r\n                $scope.scanSuccess = null;\r\n                $scope.makeQuantityObject(row);\r\n                $scope.stockTakeScanData = [];\r\n                $scope.availableProducts = [];\r\n            }\r\n        };\r\n\r\n        $scope.manualPress = function(event) {\r\n            if (event.which === 13) {\r\n                var v = $('#manualScanInput').val();\r\n                if (!!v && v.length > 0) {\r\n                    $rootScope.$broadcast('scan.barcode', v);\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.$on('scan.barcode', function(event, barcode) {\r\n            console.log('stockTakeService scan.barcode');\r\n           //  $scope.fixQuantityObjectLocation();\r\n\r\n            if ($scope.stocktakeScanActiveTab != 1 && $scope.isScanDlgVisible) {\r\n                $scope.scanError = null;\r\n                $scope.scanSuccess = null;\r\n                $scope.quantityObject = {};\r\n                $scope.stockTakeScanData = [];\r\n                $scope.availableProducts = [];\r\n\r\n                $.blockUI();\r\n                stockTakeService.search($scope.currentStocktake.taskID, barcode)\r\n                    .then(function (res) {\r\n                        if (res.data.Rows.length === 0) {\r\n                            $.unblockUI();\r\n                            // $scope.scanError = 'Product not found. Scan another barcode';\r\n                            var msg = gettextCatalog.getString(\"Product not found. Please scan another barcode.\");\r\n                            $rootScope.$broadcast('snackbar.show', {\r\n                                message: msg,\r\n                                type: 'error'\r\n                            });\r\n        \r\n                            return soundService.playBad();\r\n                        } else if ($scope.stocktakeScanActiveTab == 0) {\r\n                            if (res.data.Rows.length > 1 || (res.data.Rows[0] && res.data.Rows[0].CostingMethod !== 'FIFO' \r\n                                                                                && res.data.Rows[0].BatchSN \r\n                                                                                && res.data.Rows[0].BatchSN.toLowerCase() !== barcode.toLowerCase())) {\r\n                                $.unblockUI();\r\n                                $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                                $scope.prepareScanData(res.data.Rows);\r\n                                return soundService.playBad();\r\n                            } else {\r\n                                $scope.makeQuantityObject(res.data.Rows[0]);\r\n                                $scope.fixQuantityObjectLocation();\r\n\r\n                                if (($scope.quantityObject.CostingMethod == 'FIFO' || !!$scope.quantityObject.BatchSN) &&\r\n                                    $scope.quantityObject.QuantityOnHand > 0) {\r\n                                    return stockTakeService\r\n                                        .adjustStocktakeRelative(\r\n                                            $scope.currentStocktake.taskID,\r\n                                            $scope.quantityObject.ID,\r\n                                            1,\r\n                                            $scope.quantityObject.LocationID,\r\n                                            $scope.quantityObject.BatchSN,\r\n                                            $scope.quantityObject.ExpiryDate,\r\n                                            $scope.quantityObject.ProductID\r\n                                        )\r\n                                        .then(function(d) {\r\n                                            $.unblockUI();\r\n                                            $scope.scanSuccess = 'Product ' + barcode + ' has been updated with stocktake quantity ' + ($scope.quantityObject.Adjustment + 1);\r\n                                            $scope.quantityObject.ID = null;\r\n                                            return soundService.playGood();\r\n                                        })\r\n                                        .catch(function(err) {\r\n                                            soundService.playBad();\r\n                                            $.unblockUI();\r\n                                            errorService.showError(err);\r\n                                        });\r\n                                } else {\r\n                                    // need a batchSN field to be filled\r\n                                    $.unblockUI();\r\n                                    $scope.scanSuccess = 'Please, set Batch/SN for the product';\r\n                                    return soundService.playBad();\r\n                                }\r\n                            }\r\n                        } else {\r\n                            /*if (res.data.Rows.length == 1) {\r\n                                $.unblockUI();\r\n                                $scope.makeQuantityObject(res.data.Rows[0]);\r\n                                // $scope.fixQuantityObjectLocation();\r\n                            } else {*/\r\n                                $.unblockUI();\r\n                                $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                                $scope.prepareScanData(res.data.Rows);\r\n                                return soundService.playBad();\r\n                            //}\r\n                        }\r\n                    })\r\n                    .catch(function(err) {\r\n                        soundService.playBad();\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            } else if ($scope.stocktakeScanActiveTab == 1 && $scope.isScanDlgVisible) {\r\n                $timeout(function() {\r\n                    var v = $scope.getMultiscan();\r\n                    $('#scanArea')\r\n                        .focus()\r\n                        .val('')\r\n                        .val(v);\r\n                    $scope.setMultiscan(v + barcode + String.fromCharCode(13, 10));\r\n                });\r\n            }\r\n        });\r\n\r\n        $scope.completeStocktake = function() {\r\n            $.blockUI();\r\n\r\n            var localDate = helperService.getDateByFormatAlreadyLocal($scope.currentStocktake.currentTask.date, 'YYYY-MM-DD[T]HH:mm:ss');\r\n\r\n            return stockTakeService\r\n                .completeStocktake($scope.currentStocktake.taskID, localDate)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                    //$scope.loadGridProcess();\r\n                    $scope.$broadcast('refreshStTable');\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.cancelStocktake = function() {\r\n            $.blockUI();\r\n\r\n            return stockTakeService\r\n                .cancelStocktake($scope.currentStocktake.taskID)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                    //$scope.loadGridProcess();\r\n                    $scope.$broadcast('refreshStTable');\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.undoStocktake = function() {\r\n            $.blockUI();\r\n\r\n            return stockTakeService\r\n                .undoStocktake($scope.currentStocktake.taskID)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                    //$scope.loadGridProcess();\r\n                    $scope.$broadcast('refreshStTable');\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.completeStocktakeDlgShow = function() {\r\n            $scope.deleteMode = 'complete';\r\n            var message = gettextCatalog.getString('Would you like to complete') + '<br/>' + $scope.currentStocktake.name + '<br/>' +gettextCatalog.getString('stocktake?');\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Complete stocktake'),\r\n                message,\r\n                gettextCatalog.getString('Complete')\r\n            );\r\n        };\r\n\r\n        $scope.completeStocktakeDlgShow2 = function(row) {\r\n            $scope.prepareCurrentStocktake(row);\r\n            $scope.completeStocktakeDlgShow();\r\n        };\r\n\r\n        $scope.cancelStocktakeDlgShow2 = function(row) {\r\n            $scope.prepareCurrentStocktake(row);\r\n            $scope.cancelStocktakeDlgShow();\r\n        };\r\n\r\n        $scope.undoStocktakeDlgShow2 = function(row) {\r\n            $scope.prepareCurrentStocktake(row);\r\n            $scope.undoStocktakeDlgShow();\r\n        };\r\n\r\n        $scope.cancelStocktakeDlgShow = function() {\r\n            $scope.deleteMode = 'cancel';\r\n\r\n            var message = gettextCatalog.getString('Would you like to cancel') + '<br/>' + $scope.currentStocktake.name + '<br/>' +gettextCatalog.getString('stocktake?');\r\n\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Cancel stocktake'),\r\n                message,\r\n                gettextCatalog.getString('Yes')\r\n            );\r\n        };\r\n\r\n        $scope.undoStocktakeDlgShow = function() {\r\n            $scope.deleteMode = 'undo';\r\n\r\n            var message = gettextCatalog.getString('Would you like to undo') + '<br/>' + $scope.currentStocktake.name + '<br/>' + gettextCatalog.getString('stocktake?');\r\n\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Undo stocktake'),\r\n                message,\r\n                gettextCatalog.getString('Undo')\r\n            );\r\n        };\r\n\r\n        $scope.addNewZeroStockItem = function(){\r\n            var first = $scope.availableProducts[0];\r\n\r\n            var zeroStockProduct = {\r\n                Barcode:  first.Barcode,\r\n                BatchSN: null,\r\n                Comments: null,\r\n                CostingMethod: first.CostingMethod,\r\n                ExpiryDate: null,\r\n                ID: uuid2.newguid(),\r\n                LastChange: null,\r\n                LocationID: $scope.currentStocktake.scanLocationID,\r\n                LocationName: $scope.currentStocktake.scanLocationName,\r\n                Name: first.Name,\r\n                ProductCode: first.ProductCode,\r\n                ProductID: first.ProductID,\r\n                QtyOrder: 1,\r\n                QuantityOnHand: 0,\r\n                Adjustment: 0\r\n            }\r\n\r\n            $scope.selectScanProduct(zeroStockProduct);\r\n        }\r\n    }\r\n]);\r\n","angular.module('services').factory('stockTakeService',\r\n    ['gettext', 'helperService', 'remoteRequestProvider', 'configService', '$q', 'webOnlyProvider',\r\n        function (gettextCatalog, helperService, remoteRequestProvider, configService, $q, webOnlyProvider) {\r\n\r\n            var stockTakeService = {};\r\n\r\n            // return lists\r\n            stockTakeService.getData = function () {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.getStockTakeData();\r\n            };\r\n\r\n            stockTakeService.getLocationBins = function (locationID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.getStockTakeData({ locationID: locationID });\r\n            };\r\n\r\n            stockTakeService.loadStocktakeList = function (page, limit, status, sorting) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.loadStocktakeList(page, limit, status, sorting);\r\n            }\r\n\r\n            stockTakeService.filterData = function (arr, text, limit) {\r\n                if (!text || text.length == 0)\r\n                    return liveSearchService.data;\r\n\r\n                if (!limit) limit = 10;\r\n\r\n                text = text.toLowerCase();\r\n                var counter = 0;\r\n                var fd = [];\r\n\r\n                for (var i = 0; i < arr.length; i++) {\r\n                    var el = arr[i];\r\n\r\n                    if (counter >= limit)\r\n                        break;\r\n\r\n                    var cmp = (counter < limit) && (el.name.toLowerCase().indexOf(text) >= 0);\r\n\r\n                    if (cmp == true) {\r\n                        counter++;\r\n\r\n                        fd.push(el.name);\r\n                    }\r\n                }\r\n\r\n                return fd;\r\n            };\r\n\r\n            stockTakeService.addTextToArray = function (arr, text, dst) {\r\n                var canAdd = true;\r\n\r\n                angular.forEach(dst, function (c) {\r\n                    if (c.toLowerCase() == text.toLowerCase()) {\r\n                        canAdd = false;\r\n                        return false;\r\n                    }\r\n                });\r\n\r\n                if (canAdd) {\r\n                    dst.push(text);\r\n                }\r\n            };\r\n\r\n            stockTakeService.removeTextFromArray = function (arr, text) {\r\n                for (var i = 0; i < arr.length; i++) {\r\n                    if (arr[i].toLowerCase() == text.toLowerCase()) {\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            };\r\n\r\n            stockTakeService.modifyTask = function (data, isNew) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                var v = {\r\n                    taskID: !isNew ? data.taskID : null,\r\n                    name: data.name,\r\n                    includeQuantityOnHand: data.showOnhand,\r\n                    lockSell: data.lockSell,\r\n                    outletID: data.outletID,\r\n                    account: data.account,\r\n                    userName: configService.lastUserName,\r\n                    searchParameters: JSON.stringify({\r\n                        categories: data.categories,\r\n                        brands: data.brands,\r\n                        tags: data.tags\r\n                    })\r\n                };\r\n\r\n                if (isNew)\r\n                    return provider.saveNewStockTake(v);\r\n                else\r\n                    return provider.updateStockTake(v);\r\n            };\r\n\r\n            stockTakeService.deleteStocktake = function (taskID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.deleteStocktake(taskID);\r\n            };\r\n\r\n            stockTakeService.startStocktake = function (taskID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.startStocktake(taskID);\r\n            };\r\n\r\n            stockTakeService.loadStocktake = function (taskID, page, limit, sorting, searchText, isTemplateMode) {\r\n                var provider = remoteRequestProvider;\r\n                if (!searchText)\r\n                    searchText = null;\r\n\r\n                return provider.loadStocktake(taskID, page, limit, sorting, searchText, isTemplateMode === true ? 'Template' : '')\r\n                    .then(function (res) {\r\n                        return stockTakeService.correctDates(res);\r\n                    });\r\n            };\r\n\r\n            stockTakeService.adjustStocktakeAbsolute = function (taskID, itemID, value, locationID, batchSN, expiryDate, productID, receivedDate) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                var date = helperService.toDateFromDatepickerParameterUTC(expiryDate);\r\n                var receivedDateDate = helperService.toDateFromDatepickerParameterUTC(receivedDate);\r\n                return provider.adjustStocktakeItem(taskID, itemID, true, value, locationID, batchSN, date, productID, receivedDateDate);\r\n            };\r\n\r\n            stockTakeService.adjustStocktakeRelative = function (taskID, itemID, incValue, locationID, batchSN, expiryDate, productID, receivedDate) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                var date = helperService.toDateFromDatepickerParameterUTC(expiryDate);\r\n                var receivedDateDate = helperService.toDateFromDatepickerParameterUTC(receivedDate);\r\n                return provider.adjustStocktakeItem(taskID, itemID, false, incValue, locationID, batchSN, date, productID, receivedDateDate);\r\n            };\r\n\r\n            stockTakeService.search = function (taskID, text) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.loadStocktake(taskID, 1, 10, null, text)\r\n                    .then(function (res) {\r\n                        return stockTakeService.correctDates(res);\r\n                    });\r\n            };\r\n\r\n            stockTakeService.correctDates = function (res) {\r\n                var deferred = $q.defer();\r\n                if (!!res && !!res.data && !!res.data.Rows) {\r\n                    angular.forEach(res.data.Rows, function (el) {\r\n                        if (el.ExpiryDate != null) {\r\n                            el.ExpiryDate = helperService.getFormatedDateOnlyAsIs(el.ExpiryDate);\r\n                        }\r\n                        if (el.ReceivedDate != null) {\r\n                            el.ReceivedDate = helperService.getFormatedDateOnlyAsIs(el.ReceivedDate);\r\n                        }\r\n                    });\r\n                }\r\n\r\n                deferred.resolve(res);\r\n                return deferred.promise;\r\n            };\r\n\r\n            stockTakeService.completeStocktake = function (taskID, localDate) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.completeStocktake(taskID, localDate);\r\n            };\r\n\r\n            stockTakeService.cancelStocktake = function (taskID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.cancelStocktake(taskID);\r\n            };\r\n\r\n            stockTakeService.undoStocktake = function (taskID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.undoStocktake(taskID);\r\n            };\r\n\r\n            // stock transfer methods\r\n            stockTakeService.loadStockTransferList = function (searchText, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadStockTransferList(searchText, page, limit, status, sorting);\r\n            };\r\n\r\n            stockTakeService.loadUserAvailableOutlets = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'userEnabledLocations'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            stockTakeService.loadUserAvailableOutletsWithoutRegister = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'userEnabledOutletsNoRegister'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'userEnabledOutlets'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            stockTakeService.loadStockTransferDetails = function (taskID, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadStockTransferDetails(taskID, page, limit, status, sorting);\r\n\r\n            };\r\n\r\n            stockTakeService.loadAvailableProducts = function (locationID) {\r\n                var prms = {\r\n                    locationID: locationID,\r\n                    infoType: 'availableProductsByLocation'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            stockTakeService.modifyStockTransfer = function (task) {\r\n                var prm = {};\r\n                prm.FromLocationID = task.fromLocationID;\r\n                prm.ToLocationID = task.toLocationID;\r\n                prm.CompletionDate = helperService.toDateFromDatepickerDirect(task.date);\r\n                prm.LastUpdatedBy = configService.lastUserName;\r\n                prm.Details = [];\r\n\r\n                angular.forEach(task.data, function (el) {\r\n                    var rid = null;\r\n                    if (el.ID.indexOf(el.ProductID + '#') !== 0)\r\n                        rid = el.ID;\r\n                    var dtl = {\r\n                        ID: rid,\r\n                        ProductID: el.ProductID,\r\n                        QuantityOnHand: el.QuantityOnHand,\r\n                        QuantityAvailable: el.QuantityAvailable,\r\n                        TransferQuantity: el.TransferQuantity,\r\n                        BatchSN: el.BatchSN,\r\n                        ExpiryDate: !!el.ExpiryDate ? helperService.toDateFromDatepickerDirect(el.date) : null\r\n                    };\r\n\r\n                    prm.Details.push(dtl);\r\n                });\r\n\r\n                if (!task.taskID) {\r\n                    prm.TaskID = null;\r\n                    // new\r\n                    return webOnlyProvider.saveNewStockTransfer(prm);\r\n                }\r\n                else {\r\n                    // update\r\n                    prm.TaskID = task.taskID;\r\n                    return webOnlyProvider.updateStockTransfer(prm);\r\n                }\r\n\r\n\r\n            };\r\n\r\n            stockTakeService.voidStockTransfer = function (taskID) {\r\n                if (taskID) {\r\n                    return webOnlyProvider.deleteStockTransfer(taskID);\r\n                } else {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n            };\r\n\r\n            stockTakeService.completeStockTransfer = function (taskID, date, putAwayData) {\r\n                return webOnlyProvider.completeStockTransfer(taskID, date, putAwayData);\r\n            };\r\n\r\n            stockTakeService.undoStockTransfer = function (taskID) {\r\n                return webOnlyProvider.undoStockTransfer(taskID);\r\n            };\r\n\r\n            stockTakeService.scanInventoryMode = function(taskID, locationID, searchString){\r\n                return webOnlyProvider.scanStockTakeInventoryMode(taskID, locationID, searchString);\r\n            }\r\n\r\n            return stockTakeService;\r\n        }\r\n    ]);\r\n","\r\nangular.module('mainApp').controller('stockTransferController', [\r\n    '$scope',\r\n    '$rootScope',\r\n    'loginService',\r\n    'gettextCatalog',\r\n    'stockTakeService',\r\n    'helperService',\r\n    '$timeout',\r\n    'configService',\r\n    'errorService',\r\n    'soundService',\r\n    '$q',\r\n    'printService',\r\n    'uuid2',\r\n    function($scope, $rootScope, loginService, gettextCatalog, stockTakeService, helperService, $timeout, configService, errorService, soundService, $q, printService, uuid2) {\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n            //             $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        $scope.searchText = '';\r\n        $scope.mode = '';\r\n        $scope.dataStatus = 'DRAFT';\r\n        $scope.activeTab = '0';\r\n        $scope.dataCount = 0;\r\n        $scope.totalPages = 0;\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 20;\r\n        $scope.isLoading = false;\r\n        $scope.dataContainer = {\r\n            stockTransfersData: []\r\n        };\r\n\r\n        $scope.container = helperService.createNonWrappableContainer();\r\n        $scope.container.set({\r\n            availableProducts: []\r\n        });\r\n\r\n        $scope.totalCount = 0;\r\n        $scope.inStocktransferCount = 0;\r\n        $scope.ifcss = { height: window.innerHeight * 0.9 - 400 + 'px' };\r\n        $scope.fcss = { height: window.innerHeight * 0.85 - 250 + 'px' };\r\n\r\n        // grid control\r\n        $scope.gridControl = function(tableState) {\r\n            var sort = {};\r\n\r\n            if (!!tableState.sort.predicate) {\r\n                sort.FieldName = tableState.sort.predicate;\r\n                sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.loadGrid(sort).finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        const scrollReachBottomCallback = function() {\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectPage = function(page) {\r\n            $scope.dataPage = page;\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        $scope.$on('refreshStTable', function(sorting) {\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n\r\n            $scope.loadGrid(sorting).finally(function() {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            });\r\n        });\r\n\r\n        $scope.loadGrid = function(sorting) {\r\n            helperService.hideKeyboard();\r\n            var lst = stockTakeService.loadStockTransferList(\r\n                    $scope.searchText,\r\n                    $scope.dataPage,\r\n                    $scope.itemsByPage,\r\n                    $scope.dataStatus,\r\n                    sorting).then(function(data) {\r\n                    if ($scope.dataPage === 1) {\r\n                        $scope.dataContainer.stockTransfersData = [];\r\n                    }\r\n\r\n                    $scope.dataCount = data.data.Total;\r\n                    $scope.dataPage = data.data.Page;\r\n                    getPages(data.data.Total);\r\n\r\n                angular.forEach(data.data.Rows, function(el) {\r\n                    el.date = el.CompletionDate ? helperService.getFormatedDateOnlyAsIs(el.CompletionDate) : '';\r\n                    el.dateDisplay = el.CompletionDate ? el.CompletionDate : '';\r\n                    el.FromLocationAddress = $.trim(el.FromLocationAddress);\r\n                    el.ToLocationAddress = $.trim(el.ToLocationAddress);\r\n                    $scope.dataContainer.stockTransfersData.push(el);\r\n                });\r\n            });\r\n\r\n            return lst;\r\n        };\r\n\r\n        $scope.locations = [];\r\n        $scope.locationListTo = [];\r\n\r\n        $scope.setLocationListTo = function(newVal) {\r\n            $scope.locationListTo = $scope.locations.filter(function(v) {\r\n                return v.LocationID != $scope.currentTransfer.fromLocationID;\r\n            });\r\n\r\n            if (!!newVal && !!$scope.currentTransfer.fromLocationID) {\r\n                var flt = $scope.locationListTo.filter(function(v) {\r\n                    return v.LocationID == newVal;\r\n                });\r\n                if (!!flt && flt.length > 0) $scope.currentTransfer.toLocationID = newVal;\r\n                else $scope.currentTransfer.toLocationID = null;\r\n            } else if (!!$scope.locationListTo && $scope.locationListTo.length > 0 && !!$scope.currentTransfer.fromLocationID) {\r\n                if (!!$scope.currentTransfer.toLocationID) {\r\n                    var flt = $scope.locationListTo.filter(function(v) {\r\n                        return v.LocationID == $scope.currentTransfer.toLocationID;\r\n                    });\r\n                    if (flt.length == 0) $scope.currentTransfer.toLocationID = $scope.locationListTo[0].LocationID;\r\n                } else $scope.currentTransfer.toLocationID = $scope.locationListTo[0].LocationID;\r\n            } else {\r\n                $scope.currentTransfer.toLocationID = null;\r\n            }\r\n\r\n            $timeout(function() {\r\n                $('select').trigger('refresh');\r\n            });\r\n        };\r\n\r\n        $scope.onLoad = function() {\r\n            $.blockUI();\r\n            stockTakeService\r\n                .loadUserAvailableOutlets()\r\n                .then(function(res) {\r\n                    $scope.locations = res.data.locations;\r\n                    $.unblockUI();\r\n                })\r\n                .catch(function() {\r\n                    $.unblockUI();\r\n                });\r\n        };\r\n\r\n        $scope.firstScanFormShow = true;\r\n\r\n        $scope.$watch('activeTab', function(newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                switch (newValue) {\r\n                    case '0':\r\n                        $scope.dataStatus = 'DRAFT';\r\n                        break;\r\n                    case '1':\r\n                        $scope.dataStatus = 'COMPLETED';\r\n                        break;\r\n                    case '2':\r\n                        $scope.dataStatus = 'VOIDED';\r\n                        break;\r\n                }\r\n\r\n                $scope.dataPage = 1;\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n        });\r\n\r\n        // code below to give a chance to add event handlers before form is shown\r\n        $timeout(function() {\r\n            $scope.mode = 'management';\r\n            $scope.$broadcast('refreshStTable');\r\n            initSelects();\r\n        });\r\n\r\n        $scope.firstAddFormShow = true;\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function(evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            } else {\r\n                $scope.$broadcast('refreshStTableProcess');\r\n            }\r\n        });\r\n\r\n        $scope.search = function(event) {\r\n            if (!event || event.which === 13) {\r\n                $scope.dataPage = 1;\r\n                $scope.dataPageDisplay = 1;\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n        };\r\n\r\n        $scope.goBack = function() {\r\n            if ($scope.mode == 'new' || $scope.mode == 'edit' || $scope.mode == 'process') {\r\n                $scope.mode = 'management';\r\n            }\r\n\r\n            var wElement = $('#stockTransferProcessModal');\r\n            helperService.closeDialog(wElement);\r\n\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        $scope.currentTransfer = {};\r\n\r\n        $scope.addNew = function() {\r\n            var fromLoc = $scope.locations.filter(function(v) {\r\n                return v.PosOutletID == configService.lastOutletID;\r\n            })[0];\r\n\r\n            $scope.currentTransfer = {\r\n                dataStatus: 'DRAFT',\r\n                fromLocationID: fromLoc.LocationID,\r\n                toLocationID: null,\r\n                date: null,\r\n                data: [],\r\n                dataDisplay: []\r\n            };\r\n\r\n            $scope.setLocationListTo(null);\r\n            $scope.mode = 'new';\r\n\r\n            var wElement = $('#stockTransferProcessModal');\r\n            helperService.showDialog(wElement);\r\n\r\n\r\n            $scope.initInnerSelects();\r\n            $scope.loadGridProcess({});\r\n        };\r\n\r\n        $scope.editCurrent = function(row) {\r\n            var fromLoc = $scope.locations.filter(function(v) {\r\n                return v.LocationID == row.FromLocationID;\r\n            })[0];\r\n            var toLoc = $scope.locations.filter(function(v) {\r\n                return v.LocationID == row.ToLocationID;\r\n            })[0];\r\n\r\n            $scope.setLocationListTo(row.ToLocationID);\r\n\r\n            $scope.currentTransfer = {\r\n                dataStatus: $scope.dataStatus,\r\n                number: row.Number,\r\n                taskID: row.TaskID,\r\n                fromLocationID: row.FromLocationID,\r\n                fromLocationName: !!fromLoc ? fromLoc.OutletLocationName : null,\r\n                toLocationID: row.ToLocationID,\r\n                toLocationName: !!toLoc ? toLoc.OutletLocationName : null,\r\n                date: row.date,\r\n                status: row.Status,\r\n                data: [],\r\n                dataDisplay: []\r\n            };\r\n\r\n            $scope.mode = 'edit';\r\n\r\n            var wElement = $('#stockTransferProcessModal');\r\n            helperService.showDialog(wElement);\r\n\r\n            $scope.loadGridProcess({});\r\n            $scope.initInnerSelects();\r\n        };\r\n\r\n        $scope.initInnerSelects = function() {\r\n            $timeout(function() {\r\n                if ($scope.firstAddFormShow) {\r\n                    $scope.firstAddFormShow = false;\r\n                    initSelects(function() {\r\n                        var el = $(this);\r\n                        if (el[0].id === 'fromOutlet-styler' || el[0].id === 'toOutlet-styler') {\r\n                            // add address to outlet\r\n                            angular.forEach($scope.locations, function(l) {\r\n                                var p =\r\n                                    \"<div class='width100'>\" +\r\n                                    l.OutletLocationName +\r\n                                    '</div>' +\r\n                                    \"<div class='width100' style='font-size:12px'>\" +\r\n                                    (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    '</div>';\r\n                                var ef = el.find('li.loc-' + l.LocationID);\r\n\r\n                                ef.html(p);\r\n                            });\r\n                        }\r\n                    });\r\n\r\n                    helperService.setDatepicker($scope.dateFormat, '#effDate');\r\n                }\r\n\r\n                $('input, select').trigger('refresh');\r\n            });\r\n        };\r\n\r\n        $scope.loadAvailableProducts = function(locationID) {\r\n            $scope.container.get().availableProducts = [];\r\n            $scope.totalCount = 0;\r\n            $scope.inStocktransferCount = 0;\r\n            var arr = [];\r\n            return stockTakeService.loadAvailableProducts(locationID).then(function(res) {\r\n                angular.forEach(res.data.products, function(el) {\r\n                    if (!!el.ExpiryDate) el.ExpiryDate2 = helperService.getFormatedDateOnlyAsIs(el.ExpiryDate);\r\n                });\r\n\r\n                $scope.container.get().availableProducts = res.data.products;\r\n                $scope.totalCount = res.data.totalCount;\r\n                $scope.inStocktransferCount = res.data.inStockTakeCount;\r\n\r\n                var deferred2 = $q.defer();\r\n                deferred2.resolve(true);\r\n                return deferred2.promise;\r\n            });\r\n        };\r\n\r\n        $scope.loadGridProcess = function(sorting) {\r\n            if (!$scope.currentTransfer.taskID) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                return deferred.promise;\r\n            }\r\n\r\n            $.blockUI();\r\n            var lst = stockTakeService\r\n                .loadStockTransferDetails($scope.currentTransfer.taskID, 1, 100000, sorting)\r\n                .then(function(data) {\r\n                    $scope.currentTransfer.data = [];\r\n                    $scope.currentTransfer.dataDisplay = [];\r\n\r\n                    angular.forEach(data.data.Rows, function(el) {\r\n                        if (!el.ExpiryDate) el.date = ' ';\r\n                        else el.date = helperService.getFormatedDateOnlyAsIs(el.ExpiryDate);\r\n                        el.refID = uuid2.newguid();\r\n\r\n                        $scope.currentTransfer.data.push(el);\r\n                    });\r\n\r\n                    $.unblockUI();\r\n\r\n                    var deferred2 = $q.defer();\r\n                    deferred2.resolve(null);\r\n                    return deferred2.promise;\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n\r\n            return lst;\r\n        };\r\n\r\n        // add item part\r\n        $scope.stockTransferActiveTab = 0;\r\n\r\n        $scope.reloadAvailable = function() {\r\n            $.blockUI();\r\n            $scope.setLocationListTo(null);\r\n            return $scope\r\n                .loadAvailableProducts($scope.currentTransfer.fromLocationID)\r\n                .then(function(res) {})\r\n                .finally(function() {\r\n                    $.unblockUI();\r\n                });\r\n        };\r\n\r\n        $scope.$watch('currentTransfer.fromLocationID', function(newValue, oldValue) {\r\n            if (newValue !== oldValue && !!newValue) {\r\n                // reload available products list\r\n                $scope.currentTransfer.data = [];\r\n                return $scope.reloadAvailable();\r\n            }\r\n        });\r\n\r\n        $scope.firstScanStart = true;\r\n\r\n        $scope.setMultiscan = function(v) {\r\n            $scope.multiScanText = v;\r\n            $('#scanArea').val(v);\r\n        };\r\n\r\n        $scope.getMultiscan = function() {\r\n            $scope.multiScanText = $('#scanArea').val();\r\n            return $scope.multiScanText;\r\n        };\r\n\r\n        $scope.isScanDlgVisible = false;\r\n\r\n        $scope.showScanDlg = function() {\r\n            $scope.scanError = null;\r\n            $scope.scanSuccess = null;\r\n            $scope.quantityObject = {};\r\n            $scope.setMultiscan('');\r\n            $scope.stockTakeScanData = [];\r\n            $scope.displayAvailableProducts = [];\r\n\r\n            // no itens at all\r\n            if ($scope.container.get().availableProducts.length == 0 && $scope.totalCount == 0) {\r\n                helperService.showCustomDialog('', gettextCatalog.getString('There are no available products in this location.'), gettextCatalog.getString('OK'), null, false);\r\n                return;\r\n            }\r\n            if ($scope.container.get().availableProducts.length == 0 && $scope.inStocktransferCount > 0) {\r\n                helperService.showCustomDialog(\r\n                    '',\r\n                    gettextCatalog.getString('Stocktake is running in the location so there are no available products.'),\r\n                    gettextCatalog.getString('OK'),\r\n                    null,\r\n                    false\r\n                );\r\n                return;\r\n            }\r\n            // this condition is actually impossible but leave it for 'just in case'\r\n            else if ($scope.container.get().availableProducts.length > 0 && $scope.inStocktransferCount > 0) {\r\n                helperService.showCustomDialog(\r\n                    '',\r\n                    gettextCatalog.getString('There are more products in this location but some of them are under stocktake.'),\r\n                    gettextCatalog.getString('OK'),\r\n                    null,\r\n                    false\r\n                );\r\n            }\r\n\r\n            helperService.showDialog('#stockTransferAddDlg', function() {\r\n                if ($scope.firstScanFormShow) {                    \r\n                    $('.stocktransferScanGridScrollWrapper').show();\r\n                }\r\n                $scope.isScanDlgVisible = true;\r\n            });\r\n\r\n            printService.reconnect();\r\n            //printService.disconnect().then(function () { return printService.connect(); });\r\n\r\n            if ($scope.firstScanStart) {\r\n                $scope.firstScanStart = false;\r\n                $('#stockTransferAddDlg')\r\n                    .find('ul li a')\r\n                    .click(function(evt) {\r\n                        var v = Number(\r\n                            $(this)\r\n                                .parent()\r\n                                .attr('index')\r\n                        );\r\n\r\n                        $timeout(function() {\r\n                            $scope.stockTransferActiveTab = v;\r\n                        });\r\n                    });\r\n            }\r\n\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n\r\n            $scope.stocktakeScanActiveTab = 0;\r\n            $scope.clearScanData();\r\n        };\r\n\r\n        $scope.hideScanDlg = function() {\r\n            $scope.isScanDlgVisible = false;\r\n            //printService.disconnect();\r\n            helperService.closeDialog('#stockTransferAddDlg');\r\n            $('#manualScanInput').val('');\r\n        };\r\n\r\n        $scope.modifyTransferItem = function (row, isAbsolute) {\r\n            var processed = false;\r\n            var msg = '';\r\n            angular.forEach($scope.currentTransfer.data, function (el) {\r\n                if (el.ProductID == row.ProductID && el.BatchSN == row.BatchSN && el.ExpiryDate == row.ExpiryDate) {\r\n                    processed = true;\r\n                    if (isAbsolute === true) {\r\n                        el.TransferQuantity = $scope.quantityObject.Adjustment;\r\n                    } else {\r\n                        el.TransferQuantity = parseFloat(el.TransferQuantity) + 1;\r\n                    }\r\n\r\n                    msg = gettextCatalog.getString(\"Product {{name}} quantity was updated.\", { name: row.Name });\r\n\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            if (!processed) {\r\n                var ne = {\r\n                    ID: row.ProductID + '#' + row.BatchSN + '#' + row.ExpiryDate,\r\n                    ProductID: row.ProductID,\r\n                    ProductCode: row.ProductCode,\r\n                    Name: row.Name,\r\n                    Unit: row.UnitOfMeasure,\r\n                    BatchSN: row.BatchSN,\r\n                    ExpiryDate: row.ExpiryDate,\r\n                    QuantityOnHand: row.OnHand,\r\n                    QuantityAvailable: row.Available,\r\n                    TransferQuantity: 1,\r\n                    CostingMethod: row.CostingMethod,\r\n                    date: !!row.ExpiryDate ? helperService.getFormatedDateOnlyAsIs(row.ExpiryDate) : '',\r\n                    refID: uuid2.newguid()\r\n                };\r\n\r\n                if (isAbsolute === true) {\r\n                    ne.TransferQuantity = $scope.quantityObject.Adjustment;\r\n                }\r\n\r\n                $scope.currentTransfer.data.push(ne);\r\n                msg = gettextCatalog.getString(\"Product {{name}} was added.\", { name: row.Name });\r\n            }\r\n\r\n            $rootScope.$broadcast('snackbar.show', {\r\n                message: msg\r\n            });\r\n        };\r\n\r\n        $scope.removeTransferItem = function(row) {\r\n            for (var i = 0; i < $scope.currentTransfer.data.length; i++) {\r\n                if ($scope.currentTransfer.data[i].ID == row.ID) {\r\n                    $scope.currentTransfer.data.splice(i, 1);\r\n                    break;\r\n                }\r\n            }\r\n        };\r\n\r\n        // name is for compatibility with partial form from stocktake\r\n        $scope.currentStocktake = {\r\n            sncnts: ['0', '1']\r\n        };\r\n\r\n        $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n        $scope.quantityObject = {};\r\n\r\n        $scope.showSetQuantityDlg = function(row) {\r\n            if ($scope.currentTransfer.dataStatus !== 'DRAFT') {\r\n                return;\r\n            }\r\n            $scope.makeQuantityObject(row);\r\n            $scope.showItemQuantityDlg(row.refID);\r\n        };\r\n\r\n        $scope.makeQuantityObject = function(row) {\r\n            $scope.quantityObject = {};\r\n            angular.copy(row, $scope.quantityObject);\r\n            $scope.quantityObject.Adjustment = !!$scope.quantityObject.TransferQuantity ? $scope.quantityObject.TransferQuantity : 1;\r\n            $scope.quantityObject.QuantityOnHand = !!row.QuantityOnHand ? row.QuantityOnHand : row.OnHand;\r\n            $scope.quantityObject.showOnHand = true;\r\n            $scope.quantityObject.hideBarcode = true;\r\n            $scope.quantityObject.readOnly = true;\r\n            if (!$scope.quantityObject.ID) {\r\n                $scope.quantityObject.ID = row.ProductID + '#' + row.BatchSN + '#' + row.ExpiryDate;\r\n            }\r\n\r\n            if (!$scope.quantityObject.ExpiryDate) $scope.quantityObject.date = ' ';\r\n            else $scope.quantityObject.date = helperService.getFormatedDateOnlyAsIs($scope.quantityObject.ExpiryDate);\r\n\r\n            if ($scope.quantityObject.CostingMethod == 'FISN' || $scope.quantityObject.CostingMethod == 'FESN' || $scope.quantityObject.CostingMethod == 'SN') {\r\n                if ($scope.quantityObject.Adjustment > 1) $scope.quantityObject.Adjustment = 1;\r\n            }\r\n        };\r\n\r\n        $scope.showItemQuantityDlg = function(elID) {\r\n            $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n            $timeout(function() {\r\n                $scope.itemQuantityDlg.show(!elID ? '#quantityObject' : '#' + elID);\r\n            });\r\n        };\r\n\r\n        // callback\r\n        $scope.setQuantity = function(prm, event) {\r\n            $timeout(function() {\r\n                $scope.itemQuantityDlg.hide(true);\r\n            });\r\n\r\n            if (prm === true) {\r\n                $timeout(function() {\r\n                    $scope.quantityObject.Adjustment = $scope.quantityObject.value;\r\n                    $scope.adjustStockTransfer();\r\n                });\r\n            } else if (typeof prm == 'string') {\r\n                if (prm === 'clean') {\r\n                }\r\n            }\r\n\r\n            // event.stopPropagation();\r\n            // event.preventDefault();\r\n        };\r\n\r\n        $scope.adjustStockTransfer = function() {\r\n            angular.forEach($scope.currentTransfer.data, function(el) {\r\n                if (el.ID == $scope.quantityObject.ID) {\r\n                    processed = true;\r\n                    el.TransferQuantity = $scope.quantityObject.Adjustment;\r\n                    return false;\r\n                }\r\n            });\r\n        };\r\n\r\n        $scope.modifyStockTransfer = function(forceComplete) {\r\n            $.blockUI();\r\n\r\n            return stockTakeService\r\n                .modifyStockTransfer($scope.currentTransfer)\r\n                .then(function(res) {\r\n                    if (forceComplete) {\r\n                        return stockTakeService.completeStockTransfer(res.data.id);\r\n                    } else {\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    }\r\n                })\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.deleteMode = null;\r\n        $scope.deleteObject = null;\r\n\r\n        $scope.callbackModal = function() {\r\n            if ($scope.deleteMode == 'task') {\r\n                $.blockUI();\r\n                stockTakeService\r\n                    .voidStockTransfer($scope.deleteObject)\r\n                    .then(function(res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                    })\r\n                    .catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            } else if ($scope.deleteMode == 'undo') {\r\n                $.blockUI();\r\n                stockTakeService\r\n                    .undoStockTransfer($scope.deleteObject)\r\n                    .then(function(res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                    })\r\n                    .catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            }\r\n        };\r\n\r\n        $scope.voidStockTransfer = function(taskID) {\r\n            $scope.deleteMode = 'task';\r\n            $scope.deleteObject = taskID;\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Void stock transfer'),\r\n                gettextCatalog.getString('This will reverse all transfers and change the transfer status to voided! Would you like to proceed anyway?'),\r\n                gettextCatalog.getString('Yes'),\r\n                gettextCatalog.getString('No')\r\n            );\r\n        };\r\n\r\n        $scope.completeStockTransfer = function(taskID) {\r\n            $.blockUI();\r\n            stockTakeService\r\n                .completeStockTransfer(taskID)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.undoStockTransfer = function(taskID) {\r\n            $scope.deleteMode = 'undo';\r\n            $scope.deleteObject = taskID;\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Undo stock transfer'),\r\n                gettextCatalog.getString('This will reverse all transfers and change the transfer status to draft! Would you like to proceed anyway?'),\r\n                gettextCatalog.getString('Yes'),\r\n                gettextCatalog.getString('No')\r\n            );\r\n        };\r\n\r\n        $scope.scanGridProducts = [];\r\n\r\n        $scope.$watch('stockTransferActiveTab', function(newValue, oldValue) {\r\n            if (newValue != oldValue) {\r\n                $scope.clearScanData();\r\n            }\r\n        });\r\n\r\n        $scope.clearScanData = function() {\r\n            $scope.scanError = null;\r\n            $scope.scanSuccess = null;\r\n            $scope.quantityObject = {};\r\n            $scope.scanGridProducts = [];\r\n        };\r\n\r\n        $scope.comparator = function(a, b) {\r\n            if (a == null || typeof a != 'string') return false;\r\n            if (b == null || typeof b != 'string') return false;\r\n\r\n            return a.toLowerCase() == b.toLowerCase();\r\n        };\r\n\r\n        $scope.searchProductList = function(text) {\r\n            return $scope.container.get().availableProducts.filter(function(el) {\r\n                return $scope.comparator(el.Barcode, text) || $scope.comparator(el.ProductCode, text) || $scope.comparator(el.BatchSN, text);\r\n            });\r\n        };\r\n\r\n        $scope.$on('scan.barcode', function(event, barcode) {\r\n            if ($scope.stockTransferActiveTab != 0 && $scope.stockTransferActiveTab != 2 && $scope.isScanDlgVisible) {\r\n                $scope.clearScanData();\r\n\r\n                $.blockUI();\r\n                var rows = $scope.searchProductList(barcode);\r\n                $scope.scanGridProducts = angular.copy(rows);\r\n                $scope.$broadcast('refreshScanTable');\r\n                $.unblockUI();\r\n\r\n                if (rows.length == 0) {\r\n                    // $scope.scanError = 'Product not found. Scan another barcode';\r\n                    var msg = gettextCatalog.getString(\"Product not found. Please scan another barcode.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg,\r\n                        type: 'error'\r\n                    });\r\n\r\n                    return soundService.playBad();\r\n                } else if ($scope.stockTransferActiveTab == 1) {\r\n                    if (rows.length > 1) {\r\n                        $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                        return soundService.playBad();\r\n                    } else {\r\n                        $scope.scanSuccess = 'Product ' + barcode + ' has been added';\r\n                        $scope.modifyTransferItem(rows[0]);\r\n                        return soundService.playGood();\r\n                    }\r\n                } else if ($scope.stockTransferActiveTab == 3) {\r\n                    if (rows.length > 1) {\r\n                        $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                        return soundService.playBad();\r\n                    } else {\r\n                        $scope.scanSuccess = 'Product ' + barcode + ' has been found';\r\n                        $scope.makeQuantityObject(rows[0]);\r\n                    }\r\n                }\r\n            } else if ($scope.stockTransferActiveTab == 2 && $scope.isScanDlgVisible) {\r\n                $timeout(function() {\r\n                    var v = $scope.getMultiscan();\r\n                    $('#scanArea')\r\n                        .focus()\r\n                        .val('')\r\n                        .val(v);\r\n                    $scope.setMultiscan(v + barcode + String.fromCharCode(13, 10));\r\n                });\r\n            }\r\n        });\r\n\r\n        $scope.scanStockTransfer = function() {\r\n            if ($scope.stockTransferActiveTab == 2 && $scope.isScanDlgVisible && !!$scope.getMultiscan() && $scope.getMultiscan().length > 0) {\r\n                var arr = $scope.getMultiscan().split(String.fromCharCode(10));\r\n\r\n                $scope.setMultiscan('');\r\n                if (arr.length > 0) {\r\n                    $.blockUI();\r\n\r\n                    angular.forEach(arr, function(br) {\r\n                        br = br.trim();\r\n                        if (!!br) {\r\n                            var rows = $scope.container.get().availableProducts.filter(function(el) {\r\n                                if(!el.Barcode || !br)\r\n                                    return false;\r\n                                return el.Barcode.toLowerCase() == br.toLowerCase();\r\n                            });\r\n                            if (rows.length != 1) {\r\n                                $scope.setMultiscan($scope.getMultiscan() + br + String.fromCharCode(13, 10));\r\n                            } else {\r\n                                $scope.modifyTransferItem(rows[0]);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    $.unblockUI();\r\n\r\n                    if (!!$scope.getMultiscan()) {\r\n                        // error\r\n                        $scope.scanError =\r\n                            'Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Not processed barcodes are listed in the box below.';\r\n                        return soundService.playBad();\r\n                    } else {\r\n                        $scope.scanSuccess = 'All barcodes were recognised and stocktake quantity has been incremented for products related to these barcodes';\r\n                        return soundService.playGood();\r\n                    }\r\n                }\r\n\r\n                $scope.clearScanData();\r\n            }\r\n        };\r\n\r\n        $scope.manualPress = function(event) {\r\n            if (event.which === 13) {\r\n                var v = $('#manualScanInput').val();\r\n                if (!!v && v.length > 0) {\r\n                    $rootScope.$broadcast('scan.barcode', v);\r\n                }\r\n            }\r\n        };\r\n\r\n\r\n        \r\n\r\n                //-------------- LIVE SEARCH -----------------------------------------\r\n                $scope.minSymbolsToStartSearch = configService.minSymbolsToStartSearch;\r\n                $scope.minSymbolsMessage = gettextCatalog.getString(\"Only the first {{cnt}} products are shown.\", { cnt: 7 });\r\n                $scope.liveSearchIsOpen = false;\r\n                $scope.liveSearch = {\r\n                    liveSearchIsOpen: false\r\n                };\r\n                $scope.showMaxVisibleLiveSearchCountMsg = false;\r\n                $scope.searchProductID = null;\r\n                $scope.filter = {};\r\n                $scope.filter.scanGridSearchText = null;\r\n                \r\n                $scope.$watch('liveSearch.liveSearchIsOpen',\r\n                    function (newValue, oldValue) {\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n                        if (newValue) {\r\n                            $timeout(function() {\r\n                                helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), true, '#stockTransferAddItemModalContent');\r\n                            },400);\r\n                        }\r\n                    }\r\n                );\r\n\r\n                \r\n                $scope.placeMaxVisibleLiveSearchCountMsg = function () {\r\n                        if ($scope.showMaxVisibleLiveSearchCountMsg && $scope.liveSearchIsOpen) {\r\n                            $timeout(function () {\r\n                                var lst = $('.autoCompleteBox ul')[0].getBoundingClientRect();\r\n                                if (lst.width > 0 && lst.height > 0) {\r\n                                    console.log('lst: ' + lst.width + ' ' + lst.height);\r\n                                    $('#minProdMessage').css('left', lst.left);\r\n                                    $('#minProdMessage').css('top', lst.bottom - 10);\r\n                                    $('#minProdMessage').show();\r\n                                }\r\n                                else\r\n                                    $('#minProdMessage').hide();\r\n\r\n                            });\r\n                        }\r\n                        else\r\n                            $('#minProdMessage').hide();\r\n                    };\r\n\r\n                \r\n                $scope.liveSearchFunc = function (val) {\r\n                        $scope.searchType = 'live';\r\n                        $scope.filter.scanGridSearchText = val;\r\n                        \r\n                        var filter = $scope.filter.scanGridSearchText ? $scope.filter.scanGridSearchText.toLowerCase() : '';\r\n                        var filtered = $scope.container.get().availableProducts.filter(function(item) {\r\n                            return !filter || (item.Name && item.Name.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.ProductCode && item.ProductCode.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.Barcode && item.Barcode.toLowerCase().indexOf(filter) !== -1);\r\n                        });\r\n                        var res = filtered.length > 7 ? filtered.slice(0, 7) : filtered;\r\n\r\n                        $scope.showMaxVisibleLiveSearchCountMsg = !!res && res.length > 0;\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n\r\n                        return res;\r\n                    };\r\n\r\n                $scope.liveSearchFinished = function (val) {\r\n                        return !!val ? val.name : null;\r\n                    };\r\n\r\n                $scope.liveSearchSelected = function (item, model, label, event) {\r\n                    // make search by product id and add product to order\r\n                    $scope.searchProductID = model.ProductID;\r\n                    $scope.searchLocationID = model.LocationID;\r\n                    $scope.searchExpiryDate = model.ExpiryDate;\r\n                    $scope.searchBatchSN = model.BatchSN;\r\n                    $scope.filter.scanGridSearchText = item.Name;\r\n                    $scope.scanGridSearch();\r\n                };\r\n\r\n                $scope.liveKeyPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        $scope.searchProductID = null;\r\n                        $scope.scanGridSearch();\r\n                    }\r\n                };\r\n\r\n                $scope.scanGridSearch = function () { \r\n                        if (configService.isMobile)\r\n                            Keyboard.hide();\r\n                \r\n                        $.blockUI();\r\n                        var filter = $scope.filter.scanGridSearchText ? $scope.filter.scanGridSearchText.toLowerCase() : '';\r\n                        var filtered = $scope.container.get().availableProducts.filter(function(item) {\r\n                            return ($scope.searchProductID && item.ProductID === $scope.searchProductID) || \r\n                            (!$scope.searchProductID && (!filter \r\n                            || (item.Name && item.Name.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.ProductCode && item.ProductCode.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.Barcode && item.Barcode.toLowerCase().indexOf(filter) !== -1)));\r\n                        });\r\n\r\n                        if (filtered.length > 1 && ($scope.searchBatchSN || $scope.searchLocationID || $scope.searchExpiryDate)) {\r\n                            filtered = filtered.filter(function (item) {\r\n                                return (!$scope.searchBatchSN || $scope.searchBatchSN === item.BatchSN) && \r\n                                        (!$scope.searchLocationID || $scope.searchLocationID === item.LocationID) &&\r\n                                        (!$scope.searchExpiryDate || $scope.searchExpiryDate === item.ExpiryDate);\r\n                            });\r\n                        }\r\n\r\n                        if(filtered.length === 1) {\r\n                            $scope.modifyTransferItem(filtered[0]);\r\n                        }\r\n                        $scope.displayAvailableProducts = filtered;\r\n\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(true);\r\n                        $.unblockUI();\r\n                        return deferred2.promise;\r\n                    };\r\n\r\n                $scope.scanGridCancelSearchMode = function () {\r\n                        $scope.searchProductID = null;\r\n                        $scope.filter.scanGridSearchText = null;\r\n                        $scope.displayAvailableProducts = [];\r\n                    };\r\n    }\r\n]);\r\n","angular.module(\"mainApp\").controller('stockTransferOrderDetailController',\r\n    ['$scope', '$rootScope', 'loginService', 'gettextCatalog', 'stockOrderingService',\r\n        'helperService', '$timeout', 'configService', 'errorService',\r\n        'soundService', '$q', 'printService', 'uuid2', 'stockTakeService', '$element',\r\n        function ($scope, $rootScope, loginService, gettextCatalog, stockOrderingService,\r\n            helperService, $timeout, configService, errorService,\r\n            soundService, $q, printService, uuid2, stockTakeService, $element) {\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            const ST_ORDER_TYPE = 'ST';\r\n            const STATUS_DRAFT = 'DRAFT';\r\n            const STATUS_ORDERED = 'ORDERED';\r\n            const STATUS_PICKING = 'PICKING';\r\n            const STATUS_IN_TRANSIT = 'IN TRANSIT';\r\n            const STATUS_IN_PROGRESS = 'IN PROGRESS';\r\n            const STATUS_COMPLETED = 'COMPLETED';\r\n            const STATUS_VOIDED = 'VOIDED';\r\n\r\n            $scope.mode = '';\r\n            $scope.dataStatus = '';\r\n            $scope.availableProducts = [];//flat\r\n            $scope.groupedAvailableProducts = [];//grouped\r\n            $scope.totalCount = 0;\r\n\r\n            $scope.locations = [];\r\n            $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n            $scope.firstShow = true;\r\n            $scope.firstAddFormShow = true;\r\n\r\n            $scope.currentOrder = {\r\n                data: []\r\n            };\r\n\r\n            $scope.deleteMode = null;\r\n            $scope.deleteObject = null;\r\n\r\n            $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n            $scope.quantityObject = {};\r\n            $scope.ifcss = { 'height': (window.innerHeight * 0.9) - 400 + 'px' };\r\n            $scope.fcss = { 'height': window.innerHeight * 0.8 + 'px' };\r\n\r\n            $scope.isSite = configService.isSite;\r\n\r\n            $rootScope.$on('stockTransferDetail.add', function (event, data) {\r\n                $scope.locations = data.locations;\r\n                $scope.addNew();\r\n\r\n                helperService.showDialog($element, function () { });\r\n                $scope.initInputs();\r\n                helperService.setDatepicker($scope.dateFormat, '#effDate');\r\n                $scope.firstData = true;\r\n\r\n                $scope.loadGridProcess();\r\n            });\r\n\r\n            $rootScope.$on('stockTransferDetail.edit', function (event, data) {\r\n                $scope.locations = data.locations;\r\n                $scope.currentRow = data.row;\r\n                $scope.currentDetails($scope.currentRow);\r\n\r\n                helperService.showDialog($element, function () { });\r\n                $scope.initInputs();\r\n                helperService.setDatepicker($scope.dateFormat, '#effDate');\r\n                $scope.firstData = true;\r\n\r\n                $scope.loadGridProcess();\r\n            });\r\n\r\n            $timeout(function () {\r\n                if ($scope.firstShow) {\r\n                    $scope.firstShow = false;\r\n                }\r\n                else {\r\n                    $scope.$broadcast('refreshStTableProcess');\r\n                }\r\n            });\r\n\r\n            $scope.initInputs = function () {\r\n                $timeout(function () {\r\n                    if ($scope.firstAddFormShow) {\r\n                        $scope.firstAddFormShow = false;\r\n                        initSelects(function () {\r\n                            var el = $(this);\r\n                            if (el[0].id === 'fromOutlet-styler') {\r\n                                // add address to outlet\r\n                                angular.forEach($scope.locations, function (l) {\r\n                                    var p = \"<div class='width100'>\" + l.DisplayName + \"</div>\" +\r\n                                        \"<div class='width100' style='font-size:12px'>\" + (l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                        \"</div>\";\r\n                                    var ef = el.find('li.loc-' + l.LocationID);\r\n\r\n                                    ef.html(p);\r\n                                });\r\n                            }\r\n                        });\r\n\r\n                        helperService.setDatepicker($scope.dateFormat, '#effDate');\r\n                        helperService.setDatepicker($scope.dateFormat, '#reqByDate');\r\n                    }\r\n\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            };\r\n\r\n            $scope.goBack = function () {\r\n                helperService.hideDatePickers('#reqByDate');\r\n\r\n                if ($scope.mode === 'new' ||\r\n                    $scope.mode === 'edit' ||\r\n                    $scope.mode === 'process') {\r\n                    $scope.mode = 'management';\r\n\r\n                    helperService.closeDialog($element);\r\n                }\r\n\r\n                $rootScope.$broadcast('stockOrdering.showList');\r\n            };\r\n\r\n            $scope.callbackModal = function () {\r\n                if ($scope.deleteMode === 'task') {\r\n                    $.blockUI();\r\n                    stockTakeService.voidStockTransfer($scope.deleteObject)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n                            $scope.goBack();\r\n                            $scope.needReloadAvailable = true;\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n                else if ($scope.deleteMode === 'undo') {\r\n                    $.blockUI();\r\n                    stockTakeService.undoStockTransfer($scope.deleteObject)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n                            $scope.goBack();\r\n                            $scope.needReloadAvailable = true;\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.voidItem = function (item) {\r\n                if (item.Type === ST_ORDER_TYPE) {\r\n                    $scope.deleteMode = 'task';\r\n                    $scope.deleteObject = item.TaskID || item.taskID;\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Void stock transfer') + ' ' + (item.Number || item.number || ''),\r\n                        gettextCatalog.getString('This will reverse all transfers and change the transfer status to voided! Would you like to proceed anyway?'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n                }\r\n\r\n            };\r\n\r\n            $scope.undoItem = function (item) {\r\n                if (item.Type === ST_ORDER_TYPE) {\r\n                    $scope.deleteMode = 'undo';\r\n                    $scope.deleteObject = item.TaskID || item.taskID;\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Undo stock transfer') + ' ' + (item.Number || item.number || ''),\r\n                        gettextCatalog.getString('This will reverse all transfers and change the transfer status to draft! Would you like to proceed anyway?'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n                }\r\n\r\n            };\r\n\r\n            $scope.completeStockTransfer = function (row) {\r\n                if (row.dataStatus !== STATUS_IN_TRANSIT) {\r\n                    return;\r\n                }\r\n\r\n                var date = helperService.toDateFromDatepickerDirect(row.date);\r\n                if (!date || date === 'Invalid date') {\r\n                    errorService.showError(\"Please select Effective Date\");\r\n                    return;\r\n                }\r\n\r\n                var putAwayData = [];\r\n                if (!!row.putAway) {\r\n                    angular.forEach(row.data, function (el) {\r\n                        var rid = null;\r\n                        if (el.ID.indexOf(el.ProductID + '#') !== 0)\r\n                            rid = el.ID;\r\n                        var dtl = {\r\n                            ID: rid,\r\n                            ProductID: el.ProductID,\r\n                            BatchSN: el.BatchSN,\r\n                            ExpiryDate: el.ExpiryDate,\r\n                            LocationID: row.toLocationID,\r\n                            ReceivedQuantity: el.ReceivedQuantity,\r\n                            NonInventory: el.NonInventory\r\n                        };\r\n    \r\n                        putAwayData.push(dtl);\r\n                    });\r\n                }              \r\n\r\n                $.blockUI();\r\n                stockTakeService.completeStockTransfer(row.taskID, date, putAwayData)\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                        $scope.needReloadAvailable = true;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.getStatusName = function (status) {\r\n                switch (status) {\r\n                    case \"DRAFT\":\r\n                        return \"Draft\";\r\n                    case \"ORDERED\":\r\n                        return \"Ordered\";\r\n                    case \"PICKING\":\r\n                        return \"Picking\";\r\n                    case \"IN TRANSIT\":\r\n                        return \"In transit\";\r\n                    case \"COMPLETED\":\r\n                        return \"Completed\";\r\n                    case \"INVOICE COMPLETED\":\r\n                        return \"Billed\";\r\n                    case \"PARTIALLY RECEIVED\":\r\n                        return \"Receiving\";\r\n                    case \"PO COMPLETED\":\r\n                        return \"Ordered\";\r\n                    case \"PO IN PROGRESS\":\r\n                        return \"Ordering\";\r\n                    case \"PARTIALLY RECEIVED / CREDITED\":\r\n                        return \"Receiving / Credited\";\r\n                    case \"PARTIALLY INVOICED\":\r\n                        return \"Partially billed\";\r\n                    case \"INVOICED\":\r\n                        return \"Billed\";\r\n                    case \"ORDERING\":\r\n                        return \"Orderring\";\r\n                }\r\n\r\n                return status;\r\n            };\r\n\r\n            $scope.getCanUndo = function (itemType, status) {\r\n                return itemType === ST_ORDER_TYPE\r\n                    && status === STATUS_ORDERED;\r\n            };\r\n\r\n            $scope.getCanVoid = function (type, status) {\r\n                return type === ST_ORDER_TYPE && (status === STATUS_ORDERED\r\n                    || status === STATUS_DRAFT);\r\n            };\r\n\r\n            //------------ Stock Order Details --------------------------------------\r\n            $scope.addNew = function () {\r\n                var fromLoc = $scope.locations.length > 0 ? $scope.locations[0] : null;\r\n\r\n                $scope.currentOrder = {\r\n                    dataStatus: STATUS_DRAFT,\r\n                    fromLocationID: fromLoc ? fromLoc.LocationID : null,\r\n                    fromLocationName: fromLoc ? fromLoc.DisplayName : null,\r\n                    toLocationID: configService.lastOutletID,\r\n                    toLocationName: configService.lastOutlet,\r\n                    date: null,\r\n                    stRequiredBy: null,\r\n                    data: [],\r\n                    dataDisplay: [],\r\n                    showAvailability: true,\r\n                    statusName: $scope.getStatusName(STATUS_DRAFT),\r\n                    canUndo: $scope.getCanUndo(ST_ORDER_TYPE, STATUS_DRAFT),\r\n                    canVoid: false,\r\n                    Type: ST_ORDER_TYPE\r\n                };\r\n\r\n                $scope.mode = 'new';\r\n            };\r\n\r\n            $scope.currentDetails = function (row) {\r\n\r\n                var fromLoc = $scope.locations.filter(function (v) { return v.LocationID === row.FromLocationOrBinID; })[0];\r\n                var toLoc = configService.lastOutlet;\r\n\r\n                $scope.currentOrder = {\r\n                    dataStatus: row.Status,\r\n                    number: row.Number,\r\n                    taskID: row.TaskID,\r\n                    fromLocationID: row.FromLocationID,\r\n                    fromLocationOrBinId: row.FromLocationOrBinID,\r\n                    fromLocationName: !!fromLoc ? fromLoc.DisplayName : null,\r\n                    toLocationID: row.ToLocationID,\r\n                    toLocationName: toLoc,\r\n                    date: row.date,\r\n                    stRequiredBy: row.stRequiredBy,\r\n                    status: row.Status,\r\n                    data: [],\r\n                    dataDisplay: [],\r\n                    showAvailability: row.Status === STATUS_DRAFT || row.Status === STATUS_ORDERED\r\n                        || row.Status === STATUS_PICKING,\r\n                    statusName: $scope.getStatusName(row.Status),\r\n                    canUndo: $scope.getCanUndo(ST_ORDER_TYPE, row.Status),\r\n                    canVoid: $scope.getCanVoid(ST_ORDER_TYPE, row.Status),\r\n                    Type: ST_ORDER_TYPE,\r\n                    putAway: row.PutAway\r\n                };\r\n\r\n                $scope.mode = 'edit';\r\n            };\r\n\r\n            $scope.loadGridProcess = function (sorting) {\r\n                if (!$scope.currentOrder.taskID) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                $.blockUI();\r\n                var lst = stockOrderingService.loadStockTransferOrderDetails($scope.currentOrder.taskID, 1,\r\n                    100000, sorting)\r\n                    .then(function (data) {\r\n                        $scope.currentOrder.data = [];\r\n                        $scope.currentOrder.dataDisplay = [];\r\n\r\n                        angular.forEach(data.data.Rows, function (el) {\r\n                            el.refID = uuid2.newguid();\r\n                            el.ReceivedQuantity = !!el.ReceivedQuantity ? el.ReceivedQuantity : el.TransferQuantity;\r\n                            \r\n                            $scope.currentOrder.data.push(el);\r\n                        });\r\n\r\n                        $.unblockUI();\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n\r\n                return lst;\r\n            };\r\n\r\n            $scope.needReloadAvailable = true;\r\n\r\n            $scope.loadAvailableProducts = function (locationID, searchText) {\r\n                $scope.availableProducts = [];\r\n                $scope.displayAvailableProducts = [];\r\n                $scope.totalCount = 0;\r\n\r\n                return stockOrderingService.loadAvailableProducts(locationID)\r\n                    .then(function (res) {\r\n                        $scope.groupedAvailableProducts = res.data.products;\r\n                        angular.forEach(res.data.products, function (el) {\r\n                            if (el.FamilyID && el.Items && el.Items.length > 0) {\r\n                                angular.forEach(el.Items, function (item) {\r\n                                    item.IsVariation = true;\r\n                                    $scope.availableProducts.push(item);\r\n                                });\r\n\r\n                            } else {\r\n                                $scope.availableProducts.push(el);\r\n                            }\r\n                        });\r\n\r\n                        $scope.totalCount = res.data.totalCount;\r\n\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve($scope.availableProducts);\r\n                        return deferred2.promise;\r\n                    });\r\n            };\r\n\r\n            $scope.showScanDlg = function () {\r\n                if ($scope.needReloadAvailable) {\r\n                    $.blockUI();\r\n                    $scope.loadAvailableProducts($scope.currentOrder.fromLocationID)\r\n                        .then(function (res) {\r\n                            $scope.needReloadAvailable = false;\r\n                            $rootScope.$broadcast(\"stockTransferOrder.addLine\",\r\n                                {\r\n                                    currentOrder: $scope.currentOrder,\r\n                                    availableProducts: $scope.availableProducts,\r\n                                    groupedAvailableProducts: $scope.groupedAvailableProducts,\r\n                                    modifyTransferItemFunc: $scope.modifyTransferItem\r\n                                });\r\n                        })\r\n                        .finally(function () {\r\n                            $.unblockUI();\r\n                        });\r\n                } else {\r\n                    $rootScope.$broadcast(\"stockTransferOrder.addLine\",\r\n                        {\r\n                            currentOrder: $scope.currentOrder,\r\n                            availableProducts: $scope.availableProducts,\r\n                            groupedAvailableProducts: $scope.groupedAvailableProducts,\r\n                            modifyTransferItemFunc: $scope.modifyTransferItem\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.$watch('currentOrder.fromLocationID',\r\n                function (newValue, oldValue) {\r\n                    if (newValue !== oldValue) {\r\n                        // reload available products list\r\n                        $.blockUI();\r\n                        $scope.loadAvailableProducts($scope.currentOrder.fromLocationID)\r\n                            .then(function (res) {\r\n                                if ($scope.firstData === false) {\r\n                                    $scope.currentOrder.data = [];\r\n                                } else {\r\n                                    $scope.firstData = false;\r\n                                }\r\n                                var items = $scope.locations.filter(function (l) {\r\n                                    return l.LocationID === $scope.currentOrder.fromLocationID;\r\n                                });\r\n                                if (items.length === 1) {\r\n                                    $scope.currentOrder.fromLocationName = items[0].DisplayName;\r\n                                }\r\n                            })\r\n                            .finally(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                    }\r\n                }\r\n            );\r\n\r\n            $scope.modifyTransferItem = function (row, isAbsolute, currentOrder, quantityObject, showMessageWhenAdded = false) {\r\n                if (row.FamilyID && !row.IsVariation) {\r\n                    $scope.openFamilyDlg(row);\r\n                    return;\r\n                }\r\n\r\n                var processed = false;\r\n                angular.forEach(currentOrder.data, function (el) {\r\n                    if (el.ProductID === row.ProductID) {\r\n                        processed = true;\r\n                        \r\n                        if (isAbsolute === true) {\r\n                            el.OrderedQuantity = quantityObject.Adjustment;\r\n                        }\r\n                        else {\r\n                            el.OrderedQuantity += 1;\r\n                        }\r\n\r\n                        return false;\r\n                    }\r\n                });\r\n\r\n                if (!processed) {\r\n                    var ne = {\r\n                        ID: row.ProductID,\r\n                        ProductID: row.ProductID,\r\n                        ProductCode: row.ProductCode,\r\n                        Name: row.Name,\r\n                        Unit: row.UnitName,\r\n                        QuantityOnHand: row.OnHand,\r\n                        QuantityAvailable: row.Available,\r\n                        OnOrder: row.OnOrder,\r\n                        OrderedQuantity: 1,\r\n                        CostingMethod: row.CostingMethod,\r\n                        FamilyID: row.FamilyID,\r\n                        FamilyName: row.FamilyName,\r\n                        Option1: row.Option1,\r\n                        Option2: row.Option2,\r\n                        Option3: row.Option3,\r\n                        refID: uuid2.newguid(),\r\n                        Comments: '',\r\n                        Items: null\r\n                    };\r\n\r\n                    if (isAbsolute === true) {\r\n                        ne.TransferQuantity = quantityObject.Adjustment;\r\n                    }\r\n\r\n                    currentOrder.data.push(ne);\r\n                    \r\n                    if (showMessageWhenAdded) {\r\n                        var msg = gettextCatalog.getString(\"Product {{name}} was added.\", { name: ne.Name });\r\n                        $rootScope.$broadcast('snackbar.show', {message: msg});\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.removeTransferItem = function (row) {\r\n                for (var i = 0; i < $scope.currentOrder.data.length; i++) {\r\n                    if ($scope.currentOrder.data[i].ID === row.ID) {\r\n                        $scope.currentOrder.data.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.showSetQuantityDlg = function (row, type) {\r\n                if (($scope.currentOrder.dataStatus === STATUS_DRAFT && type === 'ordered') || ($scope.currentOrder.dataStatus === STATUS_IN_TRANSIT && type === 'received')) {\r\n                    $scope.makeQuantityObject(row, type);\r\n                    $scope.showItemQuantityDlg(row.refID);\r\n                }\r\n            };\r\n\r\n            $scope.openFamilyDlg = function (row) {\r\n                var availableItems = $scope.groupedAvailableProducts.filter(function (item) { return item.FamilyID === row.FamilyID; });\r\n                var data = {\r\n                    familyID: row.FamilyID,\r\n                    familyName: row.FamilyName,\r\n                    selectedProducts: row.Items || [],\r\n                    availableProducts: availableItems[0].Items || [],\r\n                    isEditable: $scope.currentOrder.dataStatus === STATUS_DRAFT,\r\n                    options: {\r\n                        Option1Values: availableItems[0].Option1Values,\r\n                        Option2Values: availableItems[0].Option2Values,\r\n                        Option3Values: availableItems[0].Option3Values\r\n                    },\r\n                    fromLocationName: $scope.currentOrder.fromLocationName,\r\n                    toLocationName: $scope.currentOrder.toLocationName\r\n                };\r\n                $rootScope.$broadcast(\"stockFamilyMatrix.show\", data);\r\n            };\r\n\r\n            $scope.makeQuantityObject = function (row, type) {\r\n                $scope.quantityObject = {};\r\n                angular.copy(row, $scope.quantityObject);\r\n                if(type === 'ordered') {\r\n                    $scope.quantityObject.Adjustment = !!$scope.quantityObject.OrderedQuantity ? $scope.quantityObject.OrderedQuantity : 1;\r\n                }\r\n                else {\r\n                    $scope.quantityObject.Adjustment = !!$scope.quantityObject.ReceivedQuantity ? $scope.quantityObject.ReceivedQuantity : 1;\r\n                }\r\n                $scope.quantityObject.QuantityOnHand = !!row.QuantityOnHand ? row.QuantityOnHand : row.OnHand;\r\n                $scope.quantityObject.OnOrder = !!row.OnOrder ? row.OnOrder : row.OnOrder;\r\n                $scope.quantityObject.QuantityAvailable = !!row.QuantityAvailable ? row.QuantityAvailable : row.Available;\r\n                $scope.quantityObject.showOnHand = true;\r\n                $scope.quantityObject.hideBarcode = true;\r\n                $scope.quantityObject.readOnly = true;\r\n                if (!$scope.quantityObject.ID) {\r\n                    $scope.quantityObject.ID = row.ProductID;\r\n                }\r\n                $scope.quantityObject.Type = type;\r\n            };\r\n\r\n            $scope.showItemQuantityDlg = function (elID) {\r\n                $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n                $timeout(function () {\r\n                    $scope.itemQuantityDlg.show(!elID ? '#quantityObject' : '#' + elID);\r\n                });\r\n            };\r\n\r\n            // callback\r\n            $scope.setQuantity = function (prm, event) {\r\n\r\n                $timeout(function () { $scope.itemQuantityDlg.hide(true); });\r\n\r\n                if (prm === true) {\r\n                    $timeout(function () {\r\n                        if (Number($scope.quantityObject.value) != NaN) {\r\n                            $scope.quantityObject.Adjustment = Number($scope.quantityObject.value);\r\n                        }\r\n                        else {\r\n                            $scope.quantityObject.Adjustment = 0;\r\n                        }\r\n                        $scope.adjustStockTransfer();\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.adjustStockTransfer = function () {\r\n                angular.forEach($scope.currentOrder.data, function (el) {\r\n                    if (el.ID === $scope.quantityObject.ID) {\r\n                        processed = true;\r\n                        if($scope.quantityObject.Type === 'ordered') {\r\n                            el.OrderedQuantity = $scope.quantityObject.Adjustment;\r\n                        }\r\n                        else {\r\n                            el.ReceivedQuantity = $scope.quantityObject.Adjustment;\r\n                        }\r\n                        return false;\r\n                    }\r\n                });\r\n            };\r\n\r\n            $scope.modifyStockTransfer = function () {\r\n                $.blockUI();\r\n\r\n                return stockOrderingService.modifyStockTransfer($scope.currentOrder)\r\n                    .then(function (res) {\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    })\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                        $scope.needReloadAvailable = true;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.currentLineCommentRow = '';\r\n            $scope.currentLineComment = { value: '' };\r\n\r\n            $scope.showChangeRowCommentDialog = function (row) {\r\n                $scope.currentLineCommentRow = row;\r\n                $scope.currentLineComment = { value: row.Comments };\r\n                var $windowElement = $('#addCommentsDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeAddLineCommentsDialog = function (cancel) {\r\n                if (cancel === false)\r\n                    $scope.currentLineCommentRow.Comments = $scope.currentLineComment.value;\r\n\r\n                var $windowElement = $('#addCommentsDialogModal');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            // ------------- Reorder -------------------------------------------\r\n            $scope.showReorderDlg = function () {\r\n                var $windowElement = $('#reorderItemsDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeReorderDlg = function (allLow, justClose) {\r\n                var all = !allLow;\r\n                if (!justClose)\r\n                    $scope.reorderProducts(all);\r\n                else {\r\n                    var $windowElement = $('#reorderItemsDialogModal');\r\n                    helperService.closeDialog($windowElement);\r\n                }\r\n            };\r\n\r\n            $scope.reorderProducts = function (onlyAvailable) {\r\n                $.blockUI();\r\n                stockOrderingService.loadReorderProducts($scope.currentOrder.fromLocationID,\r\n                    $scope.currentOrder.toLocationID, onlyAvailable)\r\n                    .then(function (res) {\r\n                        if (res.data.totalCount > 0) {\r\n                            $scope.currentOrder.data = [];\r\n                            angular.forEach(res.data.products, function (row) {\r\n                                \r\n                                if(row.FamilyID && row.Items && row.Items.length > 0) {\r\n                                    angular.forEach(row.Items, function(variant) {\r\n                                        var dtl = {\r\n                                            ID: variant.ProductID,\r\n                                            ProductID: variant.ProductID,\r\n                                            ProductCode: variant.ProductCode,\r\n                                            Name: variant.Name,\r\n                                            Unit: variant.UnitName,\r\n                                            QuantityOnHand: variant.OnHand,\r\n                                            QuantityAvailable: variant.Available,\r\n                                            OnOrder: variant.OnOrder,\r\n                                            OrderedQuantity: variant.OrderedQuantity,\r\n                                            CostingMethod: variant.CostingMethod,\r\n                                            FamilyID: variant.FamilyID,\r\n                                            FamilyName: variant.FamilyName,\r\n                                            Option1: variant.Option1,\r\n                                            Option2: variant.Option2,\r\n                                            Option3: variant.Option3,\r\n                                            Items: null,\r\n                                            refID: uuid2.newguid(),\r\n                                            Comments: ''\r\n                                        };\r\n                    \r\n                                        $scope.currentOrder.data.push(dtl);\r\n                                    });\r\n                                } else {\r\n                                    var ne = {\r\n                                        ID: row.ProductID,\r\n                                        ProductID: row.ProductID,\r\n                                        ProductCode: row.ProductCode,\r\n                                        Name: row.Name,\r\n                                        Unit: row.UnitName,\r\n                                        QuantityOnHand: row.OnHand,\r\n                                        QuantityAvailable: row.Available,\r\n                                        OnOrder: row.OnOrder,\r\n                                        OrderedQuantity: row.OrderedQuantity,\r\n                                        CostingMethod: row.CostingMethod,\r\n                                        FamilyID: row.FamilyID,\r\n                                        FamilyName: row.FamilyName,\r\n                                        Option1: row.Option1,\r\n                                        Option2: row.Option2,\r\n                                        Option3: row.Option3,\r\n                                        Items: null,\r\n                                        refID: uuid2.newguid(),\r\n                                        Comments: ''\r\n                                    };\r\n    \r\n                                    $scope.currentOrder.data.push(ne);\r\n                                }                               \r\n                            });\r\n                        } else {\r\n                            errorService.showError(\"Products to reorder not found\", null, null, null, true);\r\n                        }\r\n\r\n                    })\r\n                    .catch(function (err) {\r\n                        errorService.showError(err, null, null, null, true);\r\n                    })\r\n                    .finally(function () {\r\n                        var $windowElement = $('#reorderItemsDialogModal');\r\n                        helperService.closeDialog($windowElement);\r\n\r\n                        $.unblockUI();\r\n                    });\r\n            };\r\n\r\n            // ------------- Family ---------------------------------------------\r\n            $scope.$on(\"stockFamilyMatrix.save\", function (event, data) {\r\n                data.items.forEach(function (item) {\r\n                    $scope.addFamilyItemToOrder(item, data.comments);\r\n                });\r\n            });\r\n\r\n            $scope.addFamilyItemToOrder = function (row, comments) {\r\n                const existing = $scope.currentOrder.data.find(function (x) { return x.ProductID === row.ProductID; });\r\n                if (existing) {\r\n                    existing.OrderedQuantity += row.OrderedQuantity;\r\n                } else {\r\n                    const newRec = {\r\n                        ID: row.ProductID,\r\n                        ProductID: row.ProductID,\r\n                        ProductCode: row.ProductCode,\r\n                        Name: row.Name,\r\n                        Unit: row.UnitName,\r\n                        QuantityOnHand: row.OnHand,\r\n                        QuantityAvailable: row.Available,\r\n                        OnOrder: row.OnOrder,\r\n                        OrderedQuantity: row.OrderedQuantity,\r\n                        CostingMethod: row.CostingMethod,\r\n                        FamilyID: row.FamilyID,\r\n                        FamilyName: row.FamilyName,\r\n                        Option1: row.Option1,\r\n                        Option2: row.Option2,\r\n                        Option3: row.Option3,\r\n                        refID: uuid2.newguid(),\r\n                        Comments: comments,\r\n                        Items: null\r\n                    };\r\n                    $scope.currentOrder.data = $scope.currentOrder.data.concat(newRec);\r\n                }\r\n            };\r\n        }]);","angular.module('services').service('triPOSReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider', 'helperService', '$timeout', 'uuid2', '$locale',\r\n\r\n        function ($q, configService, gettextCatalog, webOnlyProvider, helperService, $timeout, uuid2, $locale) {\r\n\r\n            this.appID = buildConfiguration.triPOSApplicationId;\r\n            this.parentScope = null;\r\n            this.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            this.triPOSHeaders = function () {\r\n                return {\r\n                    'tp-application-id': this.appID,\r\n                    'tp-application-name': 'DEAR POS',\r\n                    'tp-application-version': buildConfiguration.appVersion,\r\n                    'tp-authorization': 'Version=2.0',\r\n                    'tp-express-account-id': configService.triPOSAccountID,\r\n                    'tp-express-acceptor-id': configService.triPOSAcceptorID,\r\n                    'tp-express-account-token': configService.triPOSAccountToken,\r\n                    'tp-request-id': uuid2.newguid(),\r\n                    'tp-return-logs': buildConfiguration.configuration == 'Debug' ? true : false,\r\n                    'Content-Type': 'application/json'\r\n                };\r\n            };\r\n\r\n            this.unpair = function (settings) {\r\n                var THIS = this;\r\n                var laneID = settings.triPOSLaneID;\r\n\r\n                if (!laneID) {\r\n                    var deferred = $q.defer();\r\n                    deferred.reject('LaneID is not set.');\r\n                    return deferred.promise;\r\n                }\r\n\r\n                // get lane and remove it\r\n                return webOnlyProvider.loadTriPOSLane(this.triPOSHeaders(), laneID, true)\r\n                .then(function (data) {\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                },\r\n                function (data) { // error\r\n                    var deferred = $q.defer();\r\n                    if (data.status == 404 || data.status == 410) // not found\r\n                    {\r\n                        deferred.resolve(false);\r\n                    }\r\n                    else {\r\n                        deferred.reject(data);\r\n                    }\r\n                    return deferred.promise;\r\n                }\r\n                )\r\n                .then(function (isRemoveNeeded) {\r\n                    if (!isRemoveNeeded) {\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(true);\r\n                        return deferred.promise;\r\n                    }\r\n                    else\r\n                        return webOnlyProvider.deleteTriPOSLane(THIS.triPOSHeaders(), laneID, true);\r\n                });\r\n            };\r\n\r\n            this.init = function (force, settings) {\r\n                if (!force) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                var THIS = this;\r\n                // if force, make relink to given LineID\r\n                var laneID = settings.triPOSLaneID;\r\n                var terminalID = settings.triTerminalID;\r\n                var activationCode = settings.triActivationCode;\r\n\r\n                return THIS.unpair(settings)\r\n                        .then(function (isOk) {\r\n                            return webOnlyProvider.createTriPOSLane(THIS.triPOSHeaders(), laneID, terminalID, activationCode, true);\r\n                        });\r\n            };\r\n\r\n            this.makePayment = function (options) {\r\n                var settings = configService.getCardPaymentSettings();\r\n                var THIS = this;\r\n\r\n                return webOnlyProvider.triPOSMakePayment(this.triPOSHeaders(), settings.triPOSLaneID, options.amount, options.OrderNumber)\r\n                .then(function (transactionData) {\r\n                    console.log('tryPOS payment. requestid:' + transactionData.config.headers['tp-request-id'] +\r\n                                ', amount:' + JSON.parse(transactionData.config.data).transactionAmount +\r\n                                ', transactionid:' + transactionData.data.transactionId +\r\n                                ', host response code: ' + transactionData.data._processor.expressResponseCode);\r\n\r\n\r\n                    var deferred = $q.defer();\r\n                    // transactionData.data.approvedAmount <= transactionAmount\r\n\r\n                    if (transactionData.data.isApproved) {\r\n\r\n                        // for partial payment approval\r\n                        if (transactionData.data._processor.expressResponseCode == 5 &&\r\n                            parseFloat(transactionData.data.approvedAmount) < parseFloat(options.amount)) {\r\n                            // show warning dialog\r\n                            var txt = gettextCatalog.getString('Only') + ' ' + helperService.applyCurrency(transactionData.data.approvedAmount, THIS.currency_symbol) + ' ' + gettextCatalog.getString('is approved. The rest of the amount must be paid in another way.');\r\n                            transactionData.data.partialApproved = true;\r\n\r\n                            helperService.showInfoDialog({ titel: '', body: txt }, function () {\r\n                                deferred.resolve(transactionData);\r\n                            });\r\n                        }\r\n                        else {\r\n                            deferred.resolve(transactionData);\r\n                        }\r\n\r\n                        var prms = deferred.promise;\r\n                        if (!!transactionData.data.signature) {\r\n                            // convert signature to png\r\n                            prms = prms.then(function (transactionData) {\r\n                                return webOnlyProvider.posUtils(\"vantivSignatureToPng\", transactionData.data.signature);\r\n                            })\r\n                            .then(function (res) {\r\n                                transactionData.data.signatureImage = res.data;\r\n                                var deferred3 = $q.defer();\r\n                                deferred3.resolve(transactionData);\r\n                                return deferred3.promise;\r\n                            });\r\n                        }\r\n\r\n                        prms = prms.then(function (transactionData) {\r\n                            transactionData.data.provider = 'triPOSReaderProvider';\r\n                            var deferred4 = $q.defer();\r\n                            var resp = {\r\n                                result: true,\r\n                                response: {\r\n                                    ServerTransactionID: transactionData.data.transactionId,\r\n                                    TransactionMetaData: transactionData.data\r\n                                }\r\n                            };\r\n\r\n                            if (transactionData.data.partialApproved === true) {\r\n                                resp.patialApprovedSum = transactionData.data.approvedAmount;\r\n                            }\r\n\r\n                            deferred4.resolve(resp);\r\n\r\n                            return deferred4.promise;\r\n                        });\r\n\r\n                        return prms;\r\n                    }\r\n                    else {\r\n                        var res = {\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: gettextCatalog.getString('Transaction is ') + transactionData.data.statusCode + '\\r\\n' + transactionData.data._processor.expressResponseMessage\r\n                            }\r\n                        };\r\n\r\n                        // in the case of EMV, decline might require receipt print\r\n                        // so mark this in special field and attach transaction data\r\n                        if (transactionData.data._processor.expressResponseCode == 20) {\r\n                            res.showCustomDialog = true;\r\n                            res.transactionData = transactionData.data;\r\n                            res.response.errorDescription = gettextCatalog.getString('Transaction is ') + transactionData.data.statusCode + '<br/>' + transactionData.data._processor.expressResponseMessage;\r\n                        }\r\n\r\n                        deferred.reject(res);\r\n                        return deferred.promise;\r\n                    }\r\n                });\r\n            };\r\n\r\n            this.refund = function (el, refundSum, options) {\r\n                var THIS = this;\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                // get refund link\r\n                var lnkObject = el.TransactionMetaData._links.find(x => x.rel && x.rel === 'return');\r\n\r\n                if (!lnkObject) { // Incase return link not exist get the reversal link\r\n                    lnkObject = el.TransactionMetaData._links.find(x => x.rel && x.rel === 'reversal');\r\n                }\r\n\r\n                if (!lnkObject) {\r\n                    var deferred = $q.defer();\r\n                    deferred.reject({\r\n                        result: false,\r\n                        response: {\r\n                            errorDescription: gettextCatalog.getString('refund is not supported for this payment: ') + el.transactionId\r\n                        }\r\n                    });\r\n\r\n                    return deferred.promise;\r\n                }\r\n\r\n                return webOnlyProvider.triPOSRefundPayment(lnkObject.href, this.triPOSHeaders(), settings.triPOSLaneID, refundSum, options.OrderNumber)\r\n                        .then(function (transactionData) {\r\n                            var deferred = $q.defer();\r\n\r\n                            console.log('tryPOS payment. requestid:' + transactionData.config.headers['tp-request-id'] +\r\n                                        ', amount:' + refundSum +\r\n                                        ', transactionid:' + transactionData.data.transactionId +\r\n                                        ', host response code: ' + transactionData.data._processor.expressResponseCode);\r\n\r\n\r\n                            if (transactionData.data.isApproved) {\r\n\r\n                                deferred.resolve(transactionData);\r\n\r\n                                if (!!transactionData.data.signature) {\r\n                                    // convert signature to png\r\n                                    deferred.promise = deferred.promise.then(function (transactionData) {\r\n                                        return webOnlyProvider.posUtils(\"vantivSignatureToPng\", transactionData.data.signature);\r\n                                    })\r\n                                    .then(function (res) {\r\n                                        transactionData.data.signatureImage = res.data;\r\n                                        var deferred3 = $q.defer();\r\n                                        deferred3.resolve(transactionData);\r\n                                        return deferred3.promise;\r\n                                    });\r\n                                }\r\n\r\n                                deferred.promise = deferred.promise.then(function (transactionData) {\r\n                                    transactionData.data.provider = 'triPOSReaderProvider';\r\n                                    var deferred4 = $q.defer();\r\n\r\n                                    deferred4.resolve({\r\n                                        result: true,\r\n                                        amount: refundSum,\r\n                                        ServerTransactionID: transactionData.data.transactionId,\r\n                                        TransactionMetaData: transactionData.data\r\n                                    });\r\n\r\n                                    return deferred4.promise;\r\n                                });\r\n\r\n                                //deferred.resolve({\r\n                                //    result: true,\r\n                                //    amount: refundSum,\r\n                                //    ServerTransactionID: transactionData.data.transactionId,\r\n                                //    TransactionMetaData: transactionData.data\r\n                                //});\r\n                            }\r\n                            else {\r\n                                deferred.resolve(\r\n                                    {\r\n                                        amount: refundSum,\r\n                                        result: false,\r\n                                        messageHide: true,\r\n                                        cardPAN: el.TransactionMetaData.accountNumber,\r\n                                        cardType: el.TransactionMetaData.cardLogo,\r\n                                        message: gettextCatalog.getString('Transaction is ') + transactionData.data.statusCode + '\\r\\n' + transactionData.data._processor.expressResponseMessage\r\n                                        //                                    message: gettextCatalog.getString('Transaction status is ') + transactionData.result\r\n                                    }); // in error case enlarge rest sum. It will be appended to user account\r\n                            }\r\n\r\n                            return deferred.promise;\r\n                        });\r\n            };\r\n        }\r\n\r\n    ]);","angular.module('services').service('tyroReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider', 'helperService', '$timeout',\r\n\r\n        function ($q, configService, gettextCatalog, webOnlyProvider, helperService, $timeout) {\r\n            this.appID = buildConfiguration.tyroApplicationId;\r\n            this.delayDone = true; // this key should be used if provider generates some intermediate events that should be processed before payment will be treated as complited\r\n\r\n            this.integrationKeys = {};\r\n            this.iclient = null;\r\n            this.parentScope = null;\r\n\r\n            this.formKey = function () {\r\n                return configService.tyroMerchantID + '_' + configService.tyroTerminalID;\r\n            };\r\n\r\n            this.init = function (force) {\r\n                var deferred = $q.defer();\r\n\r\n                var v = window.localStorage.getItem('TyroIntegrationKeys');\r\n                this.integrationKeys = JSON.parse(v);\r\n\r\n                if (this.integrationKeys == null)\r\n                    this.integrationKeys = {};\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n//                if (!!settings.tyroConnectionUrl)\r\n                //                  iframeSourceUrlExt = settings.tyroConnectionUrl;\r\n                iframeSourceUrlExt = !configService.isQAMode ?\r\n                                      \"https://iclient.tyro.com/\" :\r\n                                      \"https://iclientsimulator.test.tyro.com/\"; // debug aims only !!!\r\n\r\n                // create new instance each time\r\n                this.iclient = new TYRO.IClient(this.appID,\r\n                    {\r\n                        posProductVendor: \"DEAR Systems\",\r\n                        posProductName: \"DEAR POS\",\r\n                        posProductVersion: buildConfiguration.appVersion\r\n                    });\r\n\r\n                if (force !== true && !!this.integrationKeys[this.formKey()]) {\r\n                    deferred.resolve(this.integrationKeys[this.formKey()]);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                var THIS = this;\r\n                var prWithTimeout = this.timeout(deferred.promise, 60 * 2 * 1000, {\r\n                    result: false,\r\n                    disableAddPayment: true,\r\n                    response: {\r\n                        errorDescription: gettextCatalog.getString('Terminal connection timeout')\r\n                    }\r\n                });\r\n                this.iclient.pairTerminal(configService.tyroMerchantID, configService.tyroTerminalID,\r\n                    function (response) {\r\n                        if (response.status == 'success') {\r\n                            THIS.integrationKeys[THIS.formKey()] = response.integrationKey;\r\n                            window.localStorage.setItem('TyroIntegrationKeys', JSON.stringify(THIS.integrationKeys));\r\n\r\n                            deferred.resolve(response.integrationKey);\r\n                        }\r\n                        else if (response.status == 'failure') {\r\n                            deferred.reject({\r\n                                result: false,\r\n                                disableAddPayment: true,\r\n                                response: {\r\n                                    errorDescription: response.message\r\n                                }\r\n                            });\r\n                        }\r\n                        else\r\n                            return; // wait for next time call\r\n                    });\r\n\r\n                return prWithTimeout;\r\n            }\r\n\r\n            this.progressText = \"\";\r\n            this.isProgressShown = false;\r\n            this.hideButtons = false;\r\n            this.showProgressDialog = function () {\r\n                var THIS = this;\r\n                if (!this.isProgressShown) {\r\n\r\n                    this.parentScope.customModalDlg2Caption = 'Tyro payment system';\r\n                    this.parentScope.customModalDlg2Text = this.progressText;\r\n                    if (!this.hideButtons) {\r\n                        this.parentScope.customModalDlg2Buttons = [{\r\n                            name: gettextCatalog.getString('Cancel'),\r\n                            value: 'cancel'\r\n                        }];\r\n                    }\r\n                    else {\r\n                        this.parentScope.customModalDlg2Buttons = [];\r\n                    }\r\n\r\n                    this.parentScope.callbackModal2 = function (code) {\r\n                        console.log('callbackModal2 called');\r\n                       // THIS.hideButtons = true;\r\n                        THIS.cancelCurrentTransaction();\r\n                        return true;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        this.isProgressShown = true;\r\n                        helperService.showDialog('#customModalDlg2');\r\n                    });\r\n                }\r\n            }\r\n\r\n            this.hideProgressDialog = function (force) {\r\n                if (this.isProgressShown || force) {\r\n                    $timeout(function () {\r\n                        helperService.closeDialog('#customModalDlg2');\r\n                        this.isProgressShown = false;\r\n                    });\r\n\r\n                }\r\n            };\r\n\r\n            this.timeout = (prom, time, ex) => {\r\n                let timer;\r\n                return Promise.race([\r\n                    prom,\r\n                    new Promise((_r, rej) => timer = setTimeout(rej, time, ex))\r\n                ]).finally(() => clearTimeout(timer));\r\n            }\r\n\r\n            this.dialogCalled = false;\r\n            this.lastQuestion = null;\r\n            this.lastCallback = null;\r\n\r\n            this.makePayment = function (options) {\r\n                this.hideButtons = false;\r\n                var THIS = this;\r\n                this.dialogCalled = false;\r\n                this.isProgressShown = false;\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var d0 = $q.defer();\r\n\r\n                if (settings.printTyroReceiptOnTerminal !== true &&\r\n                    !configService.supportMerchantCustomerReceiptPrint) {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or enable 'Print EFTPOS receipts on the Tyro terminal' on the setup page.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                d0.resolve(null);\r\n\r\n                var printPromise = d0.promise;\r\n\r\n                var deferred = $q.defer();\r\n\r\n                var key = THIS.integrationKeys[THIS.formKey()];\r\n\r\n                THIS.progressText = \"\";\r\n                THIS.showProgressDialog();\r\n\r\n                THIS.iclient.initiatePurchase({\r\n                    amount: Math.round(options.amount * 100).toString(),\r\n                    integratedReceipt: settings.printTyroReceiptOnTerminal !== true,\r\n                    mid: configService.tyroMerchantID,\r\n                    tid: configService.tyroTerminalID,\r\n                    integrationKey: key\r\n                },\r\n                {\r\n                    statusMessageCallback: function (message) {\r\n                        THIS.progressText = message;\r\n                        //if (THIS.isProgressShown) {\r\n                            $timeout(function () {\r\n                                THIS.parentScope.customModalDlg2Text = message;\r\n                            });\r\n                        //}\r\n\r\n                    },\r\n                    questionCallback: function (question, answerCallback) {\r\n                        console.log(question.text);\r\n                        THIS.hideProgressDialog();\r\n                        if (!THIS.dialogCalled) { // prevent questions duplicates\r\n                            THIS.dialogCalled = true;\r\n                            console.log('enter dialog');\r\n                            THIS.lastQuestion = question;\r\n                            THIS.lastCallback = answerCallback;\r\n\r\n                            printPromise = printPromise.then(function (res) {\r\n                                var d1 = $q.defer();\r\n                                //THIS.dialogCalled = true;\r\n                                //THIS.hideProgressDialog();\r\n\r\n                                THIS.parentScope.customModalDlg2Caption = 'Tyro payment system';\r\n                                THIS.parentScope.customModalDlg2Text = THIS.lastQuestion.text;\r\n                                THIS.parentScope.customModalDlg2Buttons = [];\r\n                                THIS.parentScope.callbackModal2 = function (code) {\r\n                                    console.log('callbackModal2 for question is called');\r\n                                    if (THIS.lastQuestion.isManualCancel === true && code == 'YES') {\r\n                                        THIS.hideButtons = true;\r\n                                    }\r\n                                    THIS.showProgressDialog();\r\n                                    THIS.lastCallback(code);\r\n                                    d1.resolve(code);\r\n                                    THIS.dialogCalled = false;\r\n                                    return true;\r\n                                };\r\n\r\n                                if (!THIS.lastQuestion || !THIS.lastQuestion.options || THIS.lastQuestion.options.length === 0) {\r\n                                    THIS.parentScope.customModalDlg2Buttons = [{\r\n                                        name: gettextCatalog.getString('OK'),\r\n                                        value: 'OK'\r\n                                    }];\r\n                                }\r\n\r\n                                angular.forEach(THIS.lastQuestion.options, function (o) {\r\n                                    THIS.parentScope.customModalDlg2Buttons.push({\r\n                                        value: o,\r\n                                        name: o\r\n                                    });\r\n                                });\r\n\r\n                                $timeout(function () {\r\n                                    helperService.showDialog('#customModalDlg2'); /*$.unblockUI();*/\r\n                                });\r\n\r\n                                return d1.promise;\r\n                            });\r\n                        }\r\n                        else if (question.isError === true) {\r\n                            // redefine buttons and text if Error comes after dialog is shown\r\n                            THIS.lastQuestion = question;\r\n                            THIS.lastCallback = answerCallback;\r\n\r\n                            THIS.parentScope.customModalDlg2Text = question.text;\r\n                            THIS.parentScope.customModalDlg2Buttons = [];\r\n\r\n                            if (!THIS.lastQuestion || !THIS.lastQuestion.options || THIS.lastQuestion.options.length === 0) {\r\n                                THIS.parentScope.customModalDlg2Buttons = [{\r\n                                    name: gettextCatalog.getString('OK'),\r\n                                    value: 'OK'\r\n                                }];\r\n                            }\r\n\r\n                            angular.forEach(question.options, function (o) {\r\n                                THIS.parentScope.customModalDlg2Buttons.push({\r\n                                    value: o,\r\n                                    name: o\r\n                                });\r\n                            });\r\n                        }\r\n                    },\r\n                    receiptCallback: function (receipt) {\r\n                        //if (typeof (options.receiptCallback) == 'function') {\r\n                        //    var s = receipt.merchantReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\r\n                        //    printPromise = options.receiptCallback('merchant', '<pre not-print style=\"background-color: unset;border: none;\">' + s + '</pre>', printPromise);\r\n                        //}\r\n                        options.merchantReceipt = receipt.merchantReceipt;\r\n                    },\r\n                    transactionCompleteCallback: function (transactionData) {\r\n                        THIS.hideProgressDialog(true);\r\n                        if (THIS.dialogCalled) {\r\n                            THIS.dialogCalled = false;\r\n                            THIS.parentScope.callbackModal2(null);\r\n                        }\r\n\r\n                        if (transactionData.result == 'APPROVED') {\r\n                            //if (transactionData.customerReceipt) {\r\n                            //    if (typeof (options.receiptCallback) == 'function') {\r\n                            //        var s = transactionData.customerReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\r\n                            //        printPromise = options.receiptCallback('customer', '<pre not-print style=\"background-color: unset;border: none;\">' + s + '</pre>', printPromise);\r\n                            //    }\r\n                            //}\r\n\r\n                            if (!!options.merchantReceipt)\r\n                                transactionData.merchantReceipt = options.merchantReceipt;\r\n\r\n                            printPromise.then(function (res) {\r\n                                THIS.hideProgressDialog(true);\r\n                                deferred.resolve({\r\n                                    result: true,\r\n                                    response: {\r\n                                        ServerTransactionID: transactionData.transactionId,\r\n                                        TransactionMetaData: transactionData\r\n                                    }\r\n                                });\r\n                            });\r\n                        }\r\n                        else if (transactionData.result == 'DECLINED' || transactionData.result == 'REVERSED' ||\r\n                                transactionData.result == 'CANCELLED' || transactionData.result == 'NOT STARTED') {\r\n                                deferred.reject(\r\n                                {\r\n                                    result: false,\r\n                                    disableAddPayment: true,\r\n                                    response: {\r\n                                        errorDescription: gettextCatalog.getString('Transaction is ') + transactionData.result\r\n                                    },\r\n                                });\r\n                        }\r\n                        else {\r\n                            deferred.reject(\r\n                                {\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: gettextCatalog.getString('Transaction is ') + transactionData.result\r\n                                    },\r\n                                    //messageHide: true\r\n                                });\r\n                        }\r\n                    }\r\n                });\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.refund = function (el, refundSum, options) {\r\n                $.blockUI();\r\n                var THIS = this;\r\n                this.dialogCalled = false;\r\n                this.isProgressShown = false;\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var d0 = $q.defer();\r\n                if (settings.printTyroReceiptOnTerminal !== true &&\r\n                    !configService.supportMerchantCustomerReceiptPrint) {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or enable 'Print EFTPOS receipts on the Tyro terminal' on the setup page.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                d0.resolve(null);\r\n                var printPromise = d0.promise;\r\n\r\n                var deferred = $q.defer();\r\n\r\n                var key = THIS.integrationKeys[THIS.formKey()];\r\n\r\n                THIS.progressText = \"\";\r\n                THIS.showProgressDialog();\r\n\r\n                THIS.iclient.initiateRefund({\r\n                    amount: Math.round(refundSum * 100).toString(),\r\n                    integratedReceipt: settings.printTyroReceiptOnTerminal !== true,\r\n                    mid: configService.tyroMerchantID,\r\n                    tid: configService.tyroTerminalID,\r\n                    integrationKey: key\r\n                },\r\n                {\r\n                    statusMessageCallback: function (message) {\r\n                        THIS.progressText = message;\r\n                        THIS.parentScope.customModalDlg2Text = message;\r\n                    },\r\n                    questionCallback: function (question, answerCallback) {\r\n                        THIS.hideProgressDialog();\r\n\r\n                        if (!THIS.dialogCalled) {\r\n                            THIS.dialogCalled = true;\r\n                            THIS.lastQuestion = question;\r\n                            THIS.lastCallback = answerCallback;\r\n\r\n                            printPromise = printPromise.then(function (res) {\r\n                                var d1 = $q.defer();\r\n\r\n                                THIS.parentScope.customModalDlg2Caption = THIS.lastQuestion.isError == true ? gettextCatalog.getString('Tyro payment system error.') : gettextCatalog.getString('Tyro payment system');\r\n                                THIS.parentScope.customModalDlg2Text = THIS.lastQuestion.text;\r\n                                THIS.parentScope.customModalDlg2Buttons = [];\r\n\r\n                                if (!THIS.lastQuestion || !THIS.lastQuestion.options || THIS.lastQuestion.options.length === 0) {\r\n                                    THIS.parentScope.customModalDlg2Buttons = [{\r\n                                        name: gettextCatalog.getString('OK'),\r\n                                        value: 'OK'\r\n                                    }];\r\n                                }\r\n\r\n                                angular.forEach(THIS.lastQuestion.options, function (o) {\r\n                                    THIS.parentScope.customModalDlg2Buttons.push({\r\n                                        value: o,\r\n                                        name: o\r\n                                    });\r\n                                });\r\n\r\n                                THIS.parentScope.callbackModal2 = function (code) {\r\n                                    if (THIS.lastQuestion.isManualCancel === true && code == 'YES') {\r\n                                        THIS.hideButtons = true;\r\n                                    }\r\n                                    THIS.showProgressDialog();\r\n                                    THIS.lastCallback(code);\r\n                                    d1.resolve(code);\r\n                                    THIS.dialogCalled = false;\r\n                                    return true;\r\n                                };\r\n\r\n                                $timeout(function () { helperService.showDialog('#customModalDlg2'); /*$.unblockUI();*/ });\r\n\r\n                                return d1.promise;\r\n                            });\r\n                        } else if (question.isError === true) {\r\n                            THIS.lastQuestion = question;\r\n                            THIS.lastCallback = answerCallback;\r\n\r\n                            THIS.parentScope.customModalDlg2Caption = THIS.lastQuestion.isError == true ? gettextCatalog.getString('Tyro payment system error.') : gettextCatalog.getString('Tyro payment system');\r\n                            THIS.parentScope.customModalDlg2Text = THIS.lastQuestion.text;\r\n                            THIS.parentScope.customModalDlg2Buttons = [];\r\n\r\n                            if (!THIS.lastQuestion || !THIS.lastQuestion.options || THIS.lastQuestion.options.length === 0) {\r\n                                THIS.parentScope.customModalDlg2Buttons = [{\r\n                                    name: gettextCatalog.getString('OK'),\r\n                                    value: 'OK'\r\n                                }];\r\n                            }\r\n\r\n                            angular.forEach(THIS.lastQuestion.options, function (o) {\r\n                                THIS.parentScope.customModalDlg2Buttons.push({\r\n                                    value: o,\r\n                                    name: o\r\n                                });\r\n                            });\r\n                        }\r\n                    },\r\n                    receiptCallback: function (receipt) {\r\n                        if (!!options)\r\n                            options.merchantReceipt = receipt.merchantReceipt;\r\n\r\n                        //if (!!options && typeof (options.receiptCallback) == 'function') {\r\n                        //    var s = receipt.merchantReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\r\n                        //    printPromise = options.receiptCallback('merchant', '<pre not-print style=\"background-color: unset;border: none;\">' + s + '</pre>', printPromise);\r\n                        //}\r\n                    },\r\n                    transactionCompleteCallback: function (transactionData) {\r\n                        THIS.hideProgressDialog(true);\r\n                        if (THIS.dialogCalled) {\r\n                            THIS.dialogCalled = false;\r\n                            THIS.parentScope.callbackModal2(null);\r\n                        }\r\n\r\n                        if (transactionData.result == 'APPROVED') {\r\n\r\n                            //if (transactionData.customerReceipt) {\r\n                            //    if (!!options && typeof (options.receiptCallback) == 'function') {\r\n                            //        var s = transactionData.customerReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\r\n                            //        printPromise = options.receiptCallback('customer', '<pre not-print style=\"background-color: unset;border: none;\">' + s + '</pre>', printPromise);\r\n                            //    }\r\n                            //}\r\n\r\n                            printPromise = printPromise.then(function (res) {\r\n                                THIS.hideProgressDialog(true);\r\n                                transactionData.provider = 'tyroReaderProvider';\r\n\r\n                                deferred.resolve({\r\n                                    result: true,\r\n                                    amount: refundSum,\r\n                                    ServerTransactionID: transactionData.transactionId,\r\n                                    TransactionMetaData: transactionData\r\n                                });\r\n                            });\r\n                        }\r\n                        else if(transactionData.result == 'NOT STARTED'){\r\n                            deferred.reject(\r\n                                {\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: gettextCatalog.getString('Transaction is ') + transactionData.result\r\n                                    },\r\n                                    //messageHide: true\r\n                                });\r\n                        }\r\n                        else {\r\n                            printPromise = printPromise.then(function (res) {\r\n\r\n                                deferred.resolve(\r\n                                    {\r\n                                        amount: refundSum,\r\n                                        result: false,\r\n                                        messageHide: true,\r\n                                        cardPAN : el.TransactionMetaData.elidedPan,\r\n                                        cardType: el.TransactionMetaData.cardType\r\n                                    }); // in error case enlarge rest sum. It will be appended to user account\r\n                            });\r\n                        }\r\n                    }\r\n                });\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.cancelCurrentTransaction = function () {\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var deferred2 = $q.defer();\r\n\r\n                if (!!this.iclient) {\r\n                    this.iclient.cancelCurrentTransaction();\r\n                    this.customModalDlg2Text = \"Cancelling transaction...\";\r\n                }\r\n                deferred2.resolve(null);\r\n\r\n                return deferred2.promise;\r\n            };\r\n\r\n        }\r\n\r\n    ]);","import pako from 'pako';\r\n\r\nexport default function unpackArray(data) {\r\n    const encoded = atob(data);\r\n    // Convert binary string to character-number array\r\n    const binData = Uint8Array.from(encoded, function(x) {return x.charCodeAt(0);});\r\n\r\n    const objStr = pako.inflate(binData,\r\n        { to: 'string' });\r\n\r\n    const restored = JSON.parse(objStr);\r\n\r\n    return restored;\r\n}\r\n\r\nexport function unpackStr(data) {\r\n    const encoded = atob(data);\r\n    // Convert binary string to character-number array\r\n    const binData = Uint8Array.from(encoded, function(x) {return x.charCodeAt(0);});\r\n\r\n    const objStr = pako.inflate(binData,\r\n        { to: 'string' });\r\n\r\n    return objStr;\r\n}","angular.module(\"mainApp\").controller('userManagementController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'userManagementService', 'errorService',\r\n'$uibModal', 'outletService', 'configService', 'helperService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, userManagementService, errorService,\r\n$uibModal, outletService, configService, helperService) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constUserManagementSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constUserManagementViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        };\r\n\r\n        $scope.filters = {\r\n            OutletID: 'A',\r\n            RoleName: ''\r\n        };\r\n        $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n        $scope.selectedPage = 1;\r\n        $scope.totalPages = 1;\r\n        $scope.itemsByPage = 20;\r\n        $scope.totalRecords = null;\r\n        $scope.isLoading = false;\r\n\r\n        // array for Users\r\n        $scope.data = [];\r\n        $scope.filterSelectors = {};\r\n        $scope.filterSelectors.outlets = [];\r\n        \r\n        function initRolesFilter() {\r\n            // Get role from config service and remove \"Pos\" prefix if present\r\n            var userRole = configService.role || '';\r\n            userRole = userRole.replace(/^Pos/, '');\r\n            \r\n            var roles = [\r\n            {\r\n                RoleName: 'Cashier', RoleFullName: 'PosCashier'\r\n            }];\r\n\r\n            switch (userRole) {\r\n                case 'Administrator':\r\n                case 'Manager':\r\n                    roles.push({\r\n                        RoleName: 'Manager',\r\n                        RoleFullName: 'PosManager'\r\n                    });\r\n                    break;\r\n            }\r\n\r\n            return roles;\r\n        }\r\n\r\n        $scope.filterSelectors.roles = initRolesFilter();\r\n\r\n        $scope.userHasSelectedOutlet = configService.UserHasSelectedOutlet;\r\n\r\n        function loadFilters() {\r\n            return outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n                $scope.filterSelectors.outlets = [];\r\n                $.each(resp.Outlets, function (idx, el) {\r\n                    $scope.filterSelectors.outlets.push({ OutletName: el.OutletName, OutletID: el.PosOutletID });\r\n                });\r\n\r\n                if ($scope.filterSelectors.outlets.length == 1) {\r\n                    $scope.filters.OutletID = $scope.filterSelectors.outlets[0].OutletID;\r\n                }\r\n\r\n                $timeout(function() {\r\n                    initSelects();\r\n                });\r\n            },\r\n            function (err) {\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        const scrollReachBottomCallback = function () {\r\n            if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages) {\r\n                $.blockUI();\r\n                $scope.isLoading = true;                \r\n                $scope.selectedPage++;\r\n                \r\n                userManagementService.getPosUsers(\r\n                    $scope.selectedPage,\r\n                    $scope.itemsByPage,\r\n                    $scope.filters,\r\n                ).then(function (resp) {\r\n                    $.each(resp.Users, function (idx, el) {\r\n                        if (!$scope.data.filter(function (fEl) {\r\n                            return fEl.UserId === el.UserId;\r\n                        }).length > 0) {\r\n                            $scope.data.push(el)\r\n                        }\r\n                    });\r\n\r\n                    getPages(resp.Total);\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                },\r\n                function (err) {\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            }\r\n        }\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            loadFilters().then(function() {\r\n                userManagementService.getPosUsers($scope.selectedPage, $scope.itemsByPage, $scope.filter).then(function (resp) {\r\n                        $scope.data = resp.Users;\r\n                        getPages(resp.Total);\r\n                        $.unblockUI();\r\n\r\n                        $scope.raiseViewChanged();\r\n                    },\r\n                    function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            });\r\n\r\n            $scope.raiseViewChanged();\r\n        };\r\n\r\n        $scope.search = function () {\r\n            $.blockUI();\r\n            $scope.selectedPage = 1;\r\n            userManagementService.getPosUsers($scope.selectedPage, $scope.itemsByPage, $scope.filters).then(function (resp) {\r\n                if (resp.Total) {\r\n                    $scope.data = resp.Users;\r\n                    getPages(resp.Total);\r\n                    $.unblockUI();\r\n                }\r\n                else {\r\n                    $scope.data = [];\r\n                    getPages(0)\r\n                    $.unblockUI();\r\n                }\r\n            },\r\n            function(err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (pageNumber) {\r\n            if (pageNumber > 0 && pageNumber <= $scope.totalPages) {\r\n                $scope.selectedPage = pageNumber;\r\n                $scope.search();\r\n            }\r\n        }\r\n\r\n\r\n        $scope.addPosUser = function () {\r\n            $scope.editedUser = {};\r\n            $scope.editedUser.UserId = null;\r\n            $scope.editedUser.UserName = null;\r\n            $scope.editedUser.Name = null;\r\n            if ($scope.userHasSelectedOutlet === true) {\r\n                if($scope.filterSelectors.outlets && $scope.filterSelectors.outlets.length>0) {\r\n                    $scope.editedUser.PosOutletID = $scope.filterSelectors.outlets[0].OutletID;\r\n                    return false;\r\n                }\r\n            }\r\n            // if ($scope.userHasSelectedOutlet === true) {\r\n            //     $.each($scope.filterSelectors.outlets, function (idx, el) {\r\n            //         $scope.editedUser.PosOutletID = el.OutletID;\r\n            //         return false;\r\n            //     });\r\n            // }\r\n            $timeout(function () {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n            editPosUserDialog();\r\n        }\r\n        \r\n\r\n        $scope.editPosUser = function (user) {\r\n            $scope.editedUser = {};\r\n            angular.copy(user, $scope.editedUser);\r\n\r\n            if($scope.editedUser.OutletNames && $scope.editedUser.OutletNames.length === 1) {\r\n                var found = $scope.filterSelectors.outlets.filter(function(o){ return o.OutletName == $scope.editedUser.OutletNames[0]; });\r\n                if(found.length>0)\r\n                $scope.editedUser.PosOutletID = found[0].OutletID;\r\n            }\r\n\r\n            // if ($scope.userHasSelectedOutlet === true) {\r\n            //     $.each($scope.filterSelectors.outlets, function (idx, el) {\r\n            //         $scope.editedUser.PosOutletID = el.OutletID;\r\n            //         return false;\r\n            //     });\r\n            // }\r\n            $timeout(function () {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n            editPosUserDialog($('#name'));\r\n        }\r\n\r\n\r\n        $scope.saveUser = function () {\r\n            $.blockUI();\r\n            if ($scope.editedUser.UserId === null) {\r\n                userManagementService.createPosUser($scope.editedUser).then(function(resp) {\r\n                    $scope.search();\r\n                    $scope.cancelDialog();\r\n                }, function(err) {\r\n                    $scope.cancelDialog();\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            } else {\r\n                userManagementService.updatePosUser($scope.editedUser).then(function (resp) {\r\n                    $scope.search();\r\n                    $scope.cancelDialog();\r\n                }, function (err) {\r\n                    $scope.cancelDialog();\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            }\r\n        }\r\n\r\n\r\n        function editPosUserDialog($focusElement) {\r\n            var $windowElement = $('#editUserModal');\r\n            \r\n            helperService.showDialog($windowElement, function () {\r\n                if(!configService.isMobile){                \r\n                    if($focusElement) {\r\n                        $focusElement.focus();\r\n                    }\r\n                    else {\r\n                        $('#userName').focus();\r\n                    }\r\n                }\r\n\r\n                $scope.saveUserForm.$setPristine();\r\n            });\r\n\r\n        }\r\n\r\n        $scope.cancelDialog = function () {\r\n            var $windowElement = $('#editUserModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.deactivationModalDialog = function () {\r\n            var $windowElement = $('#deactivateUserModal');\r\n            helperService.showDialog($windowElement);\r\n        };\r\n\r\n        $scope.cancelDeactivationModal = function () {\r\n            var $windowElement = $('#deactivateUserModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n         \r\n        function showDeleteUserDialog() {\r\n            var $windowElement = $('#deleteUserModal');\r\n            helperService.showDialog($windowElement);\r\n        }\r\n        \r\n        $scope.hideDeleteUserDialog = function() {\r\n            var $windowElement = $('#deleteUserModal');\r\n            helperService.closeDialog($windowElement);\r\n        }\r\n\r\n        $scope.userToDelete = {};\r\n\r\n        $scope.deletePosUser = function (user, del) {\r\n            if (!del) {\r\n                $scope.userToDelete = user;\r\n                showDeleteUserDialog();\r\n            } else {\r\n                $scope.hideDeleteUserDialog();\r\n                $.blockUI();\r\n                userManagementService.removePosUser(user.UserId).then(function () {\r\n                    $scope.search();\r\n                }, function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            }\r\n        }\r\n\r\n        $scope.activateUser = function () {\r\n            if ($scope.editedUser.UserId != null) {\r\n                userManagementService.activateUser($scope.editedUser.UserId).then(function () {\r\n                    $scope.cancelDialog();\r\n                    $scope.cancelDeactivationModal();\r\n                    $scope.search();\r\n                }, function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            }\r\n        }\r\n\r\n        $scope.deactivateUser = function () {\r\n            if ($scope.editedUser.UserId != null) {\r\n                userManagementService.deactivateUser($scope.editedUser.UserId).then(function () {\r\n                    $scope.cancelDialog();\r\n                    $scope.cancelDeactivationModal();\r\n                    $scope.search();\r\n                }, function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            }\r\n        }\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n\r\n        $scope.showCollapse = function (event, el) {\r\n            $(\"[name='\" + el+\"']\").collapse('toggle');\r\n            return false;\r\n        };\r\n\r\n\r\n        $scope.getUserNameClass = function (form) {\r\n            if ((!form.userName.$invalid && form.userName.$dirty) || (!form.userName.$invalid && form.userName.length > 0))\r\n                return 'dp_has-success has-success';\r\n            else if (\r\n                (form.userName.$invalid || form.userName.$error.required || form.userName.$error.email) &&\r\n                (form.userName.$dirty || form.userName.length > 0)) {\r\n                if (!$('#userName').is(\":focus\"))\r\n                    return 'has-danger dp_has-danger';\r\n            } else return '';\r\n        };\r\n\r\n        $scope.cancelDialogModal = function (form) {\r\n            if (!form.$dirty) {\r\n                $scope.cancelDialog();\r\n            } else\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('header.confirmCancelDialog');\r\n            });\r\n        };\r\n\r\n        $scope.$on('header.confirmedCancelDialog', function () {\r\n            $scope.cancelDialog();\r\n        });\r\n\r\n        $scope.$watch('filters.RoleName',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    $scope.selectedPage = 1;\r\n                    $scope.search();\r\n                }\r\n            });\r\n\r\n        $scope.$watch('filters.OutletID',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    $scope.selectedPage = 1;\r\n                    $scope.search();\r\n                }\r\n            });\r\n\r\n    }]);\r\n","angular.module('services').service('userManagementService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', '$interval', 'jsStoreProvider', 'helperService', 'deviceInfo',\r\n    function ($q, configService, remoteRequestProvider, localDBProvider, $interval, jsStoreProvider, helperService, deviceInfo) {\r\n\r\n        // make search \r\n        this.getPosUsers = function (page, limit, filters) {\r\n            var currentUserName = configService.userName;\r\n            var pr = remoteRequestProvider.getPosUsers(currentUserName, page, limit, filters).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.createPosUser = function (user) {\r\n\r\n            var pr = remoteRequestProvider.createPosUser(user).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.updatePosUser = function (user) {\r\n\r\n            var pr = remoteRequestProvider.updatePosUser(user).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.removePosUser = function (ID) {\r\n\r\n            var pr = remoteRequestProvider.removePosUser(ID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.activateUser = function (ID) {\r\n\r\n            var pr = remoteRequestProvider.activateUser(ID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.deactivateUser = function (ID) {\r\n\r\n            var pr = remoteRequestProvider.deactivateUser(ID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.searchSaleRepresentatives = function (page, limit, filters) {\r\n            // var provider = configService.isOnline ? remoteRequestProvider : localDBProvider;\r\n            var provider = (configService.isSite && !window.isSupported) ? remoteRequestProvider :\r\n                configService.isOnline ? remoteRequestProvider :\r\n                    configService.isSite || deviceInfo.isSimulator ? jsStoreProvider :\r\n                        localDBProvider;\r\n\r\n            var isOnlineOnStart = (configService.isSite && !window.isSupported) ? false : configService.isOnline;\r\n\r\n            var pr = provider.searchSaleRepresentatives(page, limit, configService.lastOutletID, filters)\r\n                .then(function (res) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(res.data);\r\n                    return deferred.promise;\r\n                }).catch(function (err) {\r\n                    if (!isOnlineOnStart)\r\n                        throw err;\r\n\r\n                    if (err.status !== -1)\r\n                        throw err;\r\n                    else {\r\n                        var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                        return provider.searchSaleRepresentatives(page, limit, configService.lastOutletID, filters)\r\n                            .then(function (res) {\r\n                                var deferred = $q.defer();\r\n                                deferred.resolve(res.data);\r\n                                return deferred.promise;\r\n                            });\r\n                    }\r\n                });\r\n\r\n            return pr;\r\n        };\r\n\r\n        // critical section to escape from duplication\r\n        this.lockUpdate = false;\r\n\r\n        this.loadSaleRepresentativesAll = function (force, getHash) {\r\n            if (this.lockUpdate) {\r\n                return helperService.resolvePromise(null);\r\n            }\r\n\r\n            var THIS = this;\r\n            var pr;\r\n            var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n\r\n            if (configService.isSite || configService.isOnline) {\r\n                pr = provider.checkSaleRepresentativesOld(force).then(function (res) {\r\n                    if (res) {\r\n                        return provider.getSaleRepresentativesHash(getHash === true ? false : force)\r\n                            .then(function (hash) {\r\n                                return remoteRequestProvider.loadSaleRepresentativesAll(hash);\r\n                            })\r\n                            .then(function (resp) {\r\n                                if (!resp.data || resp.data.CompareResult)\r\n                                return helperService.resolvePromise(false);\r\n\r\n                                // var encoded = atob(resp.data.SaleRepresentatives);\r\n\r\n                                // var objStr = pako.inflate(encoded,\r\n                                //     { to: 'string' });\r\n\r\n                                // var restored = JSON.parse(objStr);\r\n\r\n                                return helperService.unpack(THIS, resp.data.SaleRepresentatives)\r\n                                .then(function(restored) {\r\n                                    var data = {\r\n                                        hash: resp.data.SaleRepresentativesHash,\r\n                                        arr: Array.isArray(restored) ? restored : []\r\n                                    };\r\n    \r\n                                    return provider.refreshSaleRepresentatives(data);\r\n                                });\r\n\r\n                                // unpack data\r\n                                // var data = {\r\n                                //     hash: resp.data.SalesRepresentativeHash,\r\n                                //     arr: Array.isArray(restored) ? restored : []\r\n                                // };\r\n\r\n                                // return provider.refreshSaleRepresentatives(data);\r\n                            });\r\n                    }\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(false);\r\n                    return deferred.promise;\r\n                });\r\n            } else {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(false);\r\n                pr = deferred.promise;\r\n            }\r\n\r\n            return pr.then(function (res) {\r\n                THIS.lockUpdate = false;\r\n                return helperService.resolvePromise(res);\r\n            }).catch(function (err) {\r\n                THIS.lockUpdate = false;\r\n                return helperService.rejectPromise(err);\r\n            });\r\n        };\r\n\r\n        this.stopLoadCheck = null;\r\n        this.startSaleRepresentativesAutoUpdate = function () {\r\n\r\n            if (!this.stopLoadCheck) {\r\n                this.stopLoadCheck = $interval(function (p) {\r\n                    if (configService.isOnline) {\r\n                        // refrech data\r\n                        var injector = angular.element('body').injector();\r\n                        var me = injector.get('userManagementService');\r\n\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(null);\r\n                        deferred.promise.then(function () { $.blockUI(); })\r\n                            .then(function () { me.loadSaleRepresentativesAll(false) })\r\n                            .finally(function () { $.unblockUI(); });\r\n                        return deferred.promise;\r\n                    }\r\n                }, 60000 * 5);\r\n            }\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        };\r\n    }]);\r\n","angular.module('services').service('webOnlyProvider', ['$q', '$http', 'configService', 'orderByFilter', function ($q, $http, configService, orderBy) {\r\n\r\n    var products = {};\r\n    products.data = [];\r\n    products.families = [];\r\n\r\n    this.search = function (barcode, text, qkeyTemplate, quickKey, productID) {\r\n        text = text !== null ? text.replace('%', '') : text;\r\n\r\n        //var limit = configService.searchProductLimit;\r\n        var limit = 10000000; // unlimit to prevent data lose\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosProductSearch2',\r\n            params: {\r\n                outletLocationMappingID: configService.lastECSMappingOutletID,\r\n                Barcode: barcode,\r\n                Limit: limit,\r\n                Name: text,\r\n                Family: text,\r\n                ProductCode: text,\r\n                QuickKeyTemplateID: qkeyTemplate,\r\n                QuickKeyID: quickKey,\r\n                ProductID: productID\r\n            }\r\n        });\r\n        req = req.then(function (resp) {\r\n            products.data = [];\r\n            products.families = [];\r\n            $.each(resp.data.Products, function (idx, item) {\r\n\r\n                item.Option1Name = item.ProductFamilyOption1Name;\r\n                item.Option2Name = item.ProductFamilyOption2Name;\r\n                item.Option3Name = item.ProductFamilyOption3Name;\r\n                item.Family = item.ProductFamilyName;\r\n                item.FamilyID = item.ProductFamilyID;\r\n                item.Discounts = item.DiscountLines;\r\n                item.BarCode = item.Barcode;\r\n                item.Sku = item.ProductCode;\r\n\r\n                if (item.Tax) {\r\n                    var tax = {\r\n                        ruleID: item.Tax.RuleID,\r\n                        effectivePercentExclusive: item.Tax.EffectivePercentExclusive,\r\n                        effectivePercentInclusive: item.Tax.EffectivePercentInclusive\r\n                    };\r\n\r\n                    item.Taxes = JSON.stringify(tax);\r\n                } else {\r\n                    item.Taxes = 'null';\r\n                }\r\n                if (item.ProductFamilyID) {\r\n\r\n                    var family = null;\r\n                    $.each(products.families, function (idx, el) {\r\n                        if (el.FamilyID === item.ProductFamilyID) {\r\n                            family = el;\r\n                            return false;\r\n                        }\r\n                    });\r\n                    if (family) {\r\n                        family.cnt++;\r\n                    } else {\r\n                        family = {\r\n                            FamilyID: item.ProductFamilyID,\r\n                            Family: item.ProductFamilyName,\r\n                            Name: item.ProductFamilyName,\r\n                            cnt: 1,\r\n                            isFamily: 1,\r\n                            ProductID: item.ProductFamilyID,\r\n                            FamilyImageID: item.FamilyImageID,\r\n                            FamilyShortName: item.FamilyShortName\r\n                        };\r\n\r\n                        if (!!item.Option1Name) {\r\n                            family.Option1Name = item.Option1Name;\r\n                        }\r\n\r\n                        if (!!item.Option2Name) {\r\n                            family.Option2Name = item.Option2Name;\r\n                        }\r\n\r\n                        if (!!item.Option3Name) {\r\n                            family.Option3Name = item.Option3Name;\r\n                        }\r\n\r\n                        products.families.push(family);\r\n                    }\r\n                }\r\n                item.isFamily = 0;\r\n                products.data.push(item);\r\n\r\n            });\r\n\r\n            products.isLimitReached = resp.data.Products.length === limit; // this is to inform user that the returned list was probably cut off\r\n        });\r\n        return req;\r\n    };\r\n\r\n    this.getSearchPage = function (page, pageSize, productID) {\r\n        var deferred = $q.defer();\r\n        var data = {};\r\n        data.page = page;\r\n        data.data = [];\r\n\r\n        if (!productID) {\r\n            var dic = {};\r\n\r\n            $.each(products.families, function (idx, item) {\r\n                if (item.cnt == 1)\r\n                    dic[item.FamilyID] = true; // do not add family with only one item in it because it should be as standalone product.\r\n                else\r\n                    data.data.push(item);\r\n            });\r\n\r\n            $.each(products.data, function (idx, item) {\r\n                if (!item.ProductFamilyID) {\r\n                    data.data.push(item);\r\n                } else if (dic[item.ProductFamilyID] === true) {\r\n                    data.data.push(item); // add family item that was found in family as alone for entire family\r\n                }\r\n            });\r\n        } else {\r\n            $.each(products.data, function (idx, item) {\r\n                data.data.push(item);\r\n            });\r\n        }\r\n\r\n        data.data = orderBy(data.data, 'Name', false);\r\n        data.data = data.data.slice(page * pageSize, pageSize * (page + 1));\r\n        deferred.resolve(data);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.familySearch = function (familyID) {\r\n        var deferred = $q.defer();\r\n        var data = [];\r\n        $.each(products.data, function (idx, item) {\r\n            if (item.ProductFamilyID === familyID) {\r\n                data.push(item);\r\n            }\r\n        });\r\n        products.familyData = data;\r\n        deferred.resolve(data);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.getFamilySearchPage = function (page, pageSize) {\r\n        var deferred = $q.defer();\r\n        var data = {};\r\n        data.page = page;\r\n        data.data = orderBy(products.familyData, 'Name', false);\r\n        data.data = data.data.slice(page * pageSize, pageSize * (page + 1));\r\n        deferred.resolve(data);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.getSearchCount = function () {\r\n        var deferred = $q.defer();\r\n        var length = products.families.length;\r\n        $.each(products.data, function (idx, item) {\r\n            if (!item.ProductFamilyID) {\r\n                length++;\r\n            }\r\n        });\r\n        deferred.resolve(length);\r\n        return deferred.promise;\r\n    }\r\n\r\n    this.getFamilySearchCount = function () {\r\n        var deferred = $q.defer();\r\n        deferred.resolve(products.familyData.length);\r\n        return deferred.promise;\r\n    }\r\n\r\n    this.getProductByID = function (productID) {\r\n        var deferred = $q.defer();\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosProductSearch2',\r\n            params: {\r\n                outletLocationMappingID: configService.lastECSMappingOutletID,\r\n                ProductID: productID\r\n            }\r\n        });\r\n        req = req.then(function (resp) {\r\n            $.each(resp.data.Products, function (idx, item) {\r\n                item.Option1Name = item.ProductFamilyOption1Name;\r\n                item.Option2Name = item.ProductFamilyOption2Name;\r\n                item.Option3Name = item.ProductFamilyOption3Name;\r\n                item.Family = item.ProductFamilyID;\r\n                item.FamilyID = item.ProductFamilyName;\r\n                item.Discounts = item.DiscountLines;\r\n                item.BarCode = item.Barcode;\r\n                item.Sku = item.ProductCode;\r\n                item.ProductType = item.ProductType;\r\n\r\n                if (item.Tax) {\r\n                    var tax = {\r\n                        ruleID: item.Tax.RuleID,\r\n                        effectivePercentExclusive: item.Tax.EffectivePercentExclusive,\r\n                        effectivePercentInclusive: item.Tax.EffectivePercentInclusive\r\n                    };\r\n\r\n                    item.Taxes = JSON.stringify(tax);\r\n                } else {\r\n                    item.Taxes = 'null';\r\n                }\r\n                var data = [item];\r\n                deferred.resolve({\r\n                    data: data\r\n                });\r\n            });\r\n\r\n        });\r\n        return deferred.promise;\r\n    }\r\n\r\n    this.openRegistry = function (ID, registryID, userName, isMobile) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosOpenRegistry',\r\n            data: {\r\n                Data: {\r\n                    ID: ID,\r\n                    RegistryID: registryID,\r\n                    SalesRepresentative: userName,\r\n                    IsMobile: isMobile\r\n                }\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    //this.updateRegistrySales = function (ID, cashExpected, creditCardExpected, giftCardExpected, loyaltyExpected, storeCreditExpected, prms) {\r\n    //    var req = $http({\r\n    //        method: 'PUT',\r\n    //        url: configService.connectionURL + '/PosCloseRegistry',\r\n    //        data: {\r\n    //            Data: {\r\n    //                ID: ID,\r\n    //                CashExpected: cashExpected,\r\n    //                CreditCardExpected: creditCardExpected,\r\n    //                GiftCardExpected: giftCardExpected,\r\n    //                LoyaltyExpected: loyaltyExpected,\r\n    //                StoreCreditExpected: storeCreditExpected,\r\n    //                AdditionalTotals: prms\r\n    //            }\r\n    //        }\r\n    //    });\r\n\r\n    //    return req;\r\n    //};\r\n\r\n    this.getActiveRegistrySales = function (registryID, userName, mode, closeRegistryID) {\r\n        var params = {\r\n            RegistryID: registryID,\r\n            UserName: userName,\r\n            IsMobile: !configService.isSite\r\n        };\r\n\r\n        if (closeRegistryID)\r\n            params.CloseRegistryID = closeRegistryID;\r\n\r\n        if (mode)\r\n            params.Mode = mode;\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosCloseRegistry',\r\n            params: params\r\n        });\r\n        req = req.then(function (resp) {\r\n            return [resp.data.Registry];\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getClosedRegistries = function (registryID, userName) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosCloseRegistry',\r\n            params: {\r\n                RegistryID: registryID,\r\n                UserName: userName,\r\n                isMobile: !configService.isSite,\r\n                IsActive: false\r\n            }\r\n        });\r\n        req = req.then(function (resp) {\r\n            return [resp.data.Registry];\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getApiUrl = function () {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: '/Pos/GetServerAddress'\r\n        });\r\n        req = req.then(function (resp) {\r\n            //                return resp.data.apiURL;\r\n            return resp.data;\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n\r\n    this.getCashMovements = function (closeRegistryID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosCashManagement',\r\n            params: {\r\n                CloseRegistryID: closeRegistryID\r\n            }\r\n        });\r\n        req = req.then(function (resp) {\r\n            return resp.data.CashMovements;\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.setPassword = function (newPassword, finalizeID) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosSetPassword',\r\n            data: {\r\n                Password: newPassword,\r\n                FinalizeID: finalizeID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.squareRefund = function (squareIntegrationID, transactionID, clientTransactionID, originalTransactionDate, reason,\r\n        refundAmount, paymentAmount, refundID) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosSquareRefund',\r\n            data: {\r\n                SquareIntegrationID: squareIntegrationID,\r\n                TransactionID: transactionID,\r\n                ClientTransactionID: clientTransactionID,\r\n                OriginalTransactionDate: originalTransactionDate,\r\n                PaymentAmount: paymentAmount,\r\n                RefundAmount: refundAmount,\r\n                RefundID: refundID,\r\n                Reason: reason\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getProductAvailability = function (searchOpts) {\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosProductAvailability',\r\n            params: searchOpts\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferList = function (searchText, page, limit, status, sorting) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransfer',\r\n            params: {\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                Status: status,\r\n                SearchString: searchText ? searchText : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferSatelliteData = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferData',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferDetails = function (taskID, page, limit, sorting) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferProcess',\r\n            params: {\r\n                TaskID: taskID,\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.saveNewStockTransfer = function (data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/StockTransferProcess',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.updateStockTransfer = function (data) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/StockTransferProcess',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.deleteStockTransfer = function (taskID) {\r\n        var req = $http({\r\n            method: 'DELETE',\r\n            url: configService.connectionURL + '/StockTransfer',\r\n            params: {\r\n                TaskID: taskID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.completeStockTransfer = function (taskID, date, putAwayData) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/StockTransfer',\r\n            params: {\r\n                TaskID: taskID,\r\n                mode: 'complete',\r\n                completionDate: date\r\n            },\r\n            data: putAwayData\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.undoStockTransfer = function (taskID) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/StockTransfer',\r\n            params: {\r\n                TaskID: taskID,\r\n                mode: 'undo'\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductList = function (familyID, page, limit, productID, text, sorting) {\r\n        text = text === '' ? text.replace('%', '') : text;\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosProductManagement',\r\n            params: {\r\n                FamilyID: familyID ? familyID : null,\r\n                Lang: \"\",\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                ProductID: productID,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null,\r\n                searchString: text,\r\n                OutletLocationMappingID: configService.lastECSMappingOutletID\r\n            }\r\n        });\r\n        console.log(req);\r\n        return req;\r\n    };\r\n\r\n    this.getProductData = function (prms) {\r\n        var deferred = $q.defer();\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ProductDataParams',\r\n            params: prms\r\n        });\r\n\r\n        deferred.resolve(req);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.saveNewProduct = function (product) {\r\n        console.log(product);\r\n\r\n        var payload = angular.extend({}, product, { LastUpdatedBy: configService.lastUserName });\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosProductManagement',\r\n            data: JSON.stringify(payload)\r\n        });\r\n        console.log(req);\r\n\r\n        return req;\r\n    };\r\n\r\n    this.updateProduct = function (product) {\r\n        console.log(product);\r\n\r\n        var payload = angular.extend({}, product, { LastUpdatedBy: configService.lastUserName });\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/PosProductManagement',\r\n            data: JSON.stringify(payload)\r\n        });\r\n        console.log(req);\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getTemplates = function (Process, Type, Name, RootProperty) {\r\n        console.log(Process, Type, Name, RootProperty);\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosTemplate',\r\n            params: {\r\n                Process: Process ? Process : null,\r\n                Type: Type ? Type : null,\r\n                Name: Name ? Name : null,\r\n                RootProperty: RootProperty ? RootProperty : null\r\n            }\r\n        });\r\n        console.log(req);\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadTriPOSLane = function (headers, laneID, useCORSProxy) {\r\n        console.log('loadTriPOSLane. requestid:' + headers['tp-request-id'] + ', laneID=' + laneID);\r\n\r\n        if (useCORSProxy) {\r\n            delete headers['Content-Type'];\r\n\r\n            req = $http({\r\n                method: 'GET',\r\n                url: configService.connectionURL + '/PosCORSProxy',\r\n                params: {\r\n                    initialUrl: encodeURIComponent(configService.getTriPOSLaneUrl() + '/lanes/' + laneID)\r\n                },\r\n                headers: {\r\n                    'packed-request-headers': encodeURIComponent(JSON.stringify(headers))\r\n                },\r\n            });\r\n        } else {\r\n            var req = $http({\r\n                method: 'GET',\r\n                url: configService.getTriPOSLaneUrl() + '/lanes/', // + laneID, // laneID should be unsigned integer only!!!\r\n                headers: headers\r\n            });\r\n        }\r\n\r\n        return req;\r\n    }\r\n\r\n    this.deleteTriPOSLane = function (headers, laneID, useCORSProxy) {\r\n        console.log('deleteTriPOSLane. requestid:' + headers['tp-request-id'] + ', laneID=' + laneID);\r\n\r\n        if (useCORSProxy) {\r\n            delete headers['Content-Type'];\r\n\r\n            req = $http({\r\n                method: 'DELETE',\r\n                url: configService.connectionURL + '/PosCORSProxy',\r\n                params: {\r\n                    initialUrl: encodeURIComponent(configService.getTriPOSLaneUrl() + '/lanes/' + laneID)\r\n                },\r\n                headers: {\r\n                    'packed-request-headers': encodeURIComponent(JSON.stringify(headers))\r\n                },\r\n            });\r\n        } else {\r\n            var req = $http({\r\n                method: 'DELETE',\r\n                url: configService.getTriPOSLaneUrl() + '/lanes/' + laneID, // laneID should be unsigned integer only!!!\r\n                headers: headers\r\n            });\r\n        }\r\n\r\n        return req;\r\n    }\r\n\r\n    this.createTriPOSLane = function (headers, laneID, terminalID, activationCode, useCORSProxy) {\r\n\r\n        console.log('createTriPOSLane. requestid:' + headers['tp-request-id'] + ', laneID=' + laneID);\r\n\r\n        if (useCORSProxy) {\r\n            delete headers['Content-Type'];\r\n\r\n            req = $http({\r\n                method: 'POST',\r\n                url: configService.connectionURL + '/PosCORSProxy',\r\n                params: {\r\n                    initialUrl: encodeURIComponent(configService.getTriPOSLaneUrl() + '/lanes/')\r\n                },\r\n                headers: {\r\n                    'packed-request-headers': encodeURIComponent(JSON.stringify(headers))\r\n                },\r\n                data: JSON.stringify({\r\n                    laneId: laneID,\r\n                    terminalId: terminalID,\r\n                    activationCode: activationCode\r\n                })\r\n            });\r\n        } else {\r\n            var req = $http({\r\n                method: 'POST',\r\n                url: configService.getTriPOSLaneUrl(),\r\n                data: JSON.stringify({\r\n                    laneId: laneID,\r\n                    terminalId: terminalID,\r\n                    activationCode: activationCode\r\n                }),\r\n                headers: headers\r\n            });\r\n        }\r\n\r\n        return req;\r\n    }\r\n\r\n    this.triPOSMakePayment = function (headers, laneID, sum, orderNumber) {\r\n        var req;\r\n        console.log('tryPOS payment. requestid:' + headers['tp-request-id'] + ' sum:' + sum + ', ');\r\n        //if (useCORSProxy) {\r\n        //    delete headers['Content-Type'];\r\n\r\n        //    req = $http({\r\n        //        method: 'POST',\r\n        //        url: configService.connectionURL + '/PosCORSProxy',\r\n        //        params: {initialUrl: encodeURIComponent(configService.triPOSUrl + '/sale')},\r\n        //        headers: {'packed-request-headers':encodeURIComponent(JSON.stringify(headers))},\r\n        //        data: JSON.stringify({ laneId: laneID, transactionAmount: sum })\r\n        //    });\r\n        //}\r\n        //else {\r\n        req = $http({\r\n            method: 'POST',\r\n            url: configService.getTriPOSUrl() + '/sale',\r\n            headers: headers,\r\n            data: JSON.stringify({\r\n                laneId: laneID,\r\n                transactionAmount: sum,\r\n                ticketNumber: orderNumber,\r\n                configuration: {\r\n                    allowDebit: true,\r\n                    allowPartialApprovals: true\r\n                }\r\n            })\r\n        });\r\n        // }\r\n\r\n        return req;\r\n    };\r\n\r\n    this.triPOSRefundPayment = function (url, headers, laneID, sum, orderNumber) {\r\n        var req;\r\n        console.log('tryPOS refund. requestid:' + headers['tp-request-id'] + ' sum:' + sum + ', ' + url);\r\n\r\n        req = $http({\r\n            method: 'POST',\r\n            url: url,\r\n            headers: headers,\r\n            data: JSON.stringify({\r\n                laneId: laneID,\r\n                transactionAmount: sum,\r\n                ticketNumber: orderNumber,\r\n                configuration: {\r\n                    allowPartialApprovals: true\r\n                }\r\n            })\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadRegistryCloseList = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportCloseRegistry',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadClosureRegistryDetails = function (registerCloseID) {\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportCloseRegistryDetails',\r\n            params: {\r\n                RegistryCloseID: registerCloseID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.posUtils = function (operationName, data) {\r\n\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosUtils',\r\n            data: JSON.stringify({\r\n                operationName: operationName,\r\n                data: data\r\n            })\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPaymentTypeSummary = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportPaymentTypeSummary',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInventoryReport = function (params) {\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportInventory',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInventoryReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportInventory',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInventoryReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportInventory',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSurchargeReport = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportSurcharge',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSurchargeReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportSurcharge',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSurchargeReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportSurcharge',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInTransitReport = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportInTransit',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInTransitReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportInTransit',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInTransitReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportInTransit',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSalesSummary = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportSalesSummary',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSalesSummaryCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportSalesSummary',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSalesSummaryEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportSalesSummary',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStoreCredit = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportStoreCredit',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStoreCreditCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportStoreCredit',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStoreCreditEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportStoreCredit',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadReportGiftCard = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportGiftCard',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadReportGiftCardCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportGiftCard',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadReportGiftCardEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportGiftCard',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductPerformanceReport = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportProdPerf',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductPerformanceReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportProdPerf',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductPerformanceReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportProdPerf',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n\r\n    this.loadPaymentTypeSummaryReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportPaymentTypeSummary',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPaymentTypeSummaryReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportPaymentTypeSummary',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.isGiftCardsRefundAvailable = function (giftCardCodes) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosGiftCard',\r\n            data: JSON.stringify({\r\n                ReturnType: 'GiftCardPaymentExists',\r\n                GiftCardCodes: giftCardCodes\r\n            })\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getGiftCardForPayment = function (giftCardCode) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosGiftCard',\r\n            data: JSON.stringify({\r\n                ReturnType: 'GetGiftCard',\r\n                GiftCardCodes: [giftCardCode]\r\n            })\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockOrderingList = function (searchText, page, limit, status, sorting, locationId) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosStockOrderingTasks',\r\n            params: {\r\n                LocationId: locationId,\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                Status: status && status !== '0' ? status : null,\r\n                SearchString: searchText ? searchText : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferOrderRelatedData = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferOrderData',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferOrderDetails = function (taskID, page, limit, sorting) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferOrderProcess',\r\n            params: {\r\n                TaskID: taskID,\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.saveNewStockTransferOrder = function (data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/StockTransferOrderProcess',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.updateStockTransferOrder = function (data) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/StockTransferOrderProcess',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.loadStockTransferReorderData = function (fromLocationID, toLocationID, onlyAvailable) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferReorder',\r\n            params: {\r\n                fromLocationID: fromLocationID,\r\n                toLocationID: toLocationID,\r\n                onlyAvailable: onlyAvailable\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPurchaseOrderRelatedData = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderData',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPurchaseTask = function (taskID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderTask',\r\n            params: {\r\n                taskID: taskID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPurchaseOrderDetails = function (taskID, locationID, page, limit, sorting) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderProcess',\r\n            params: {\r\n                TaskID: taskID,\r\n                LocationID: locationID,\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getExchangeRate = function (from, to, date) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosGetRate',\r\n            params: {\r\n                from: from,\r\n                to: to,\r\n                date: date\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.saveNewPurchase = function (data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.baseURL + '/ExternalApi/v2/advanced-purchase',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.updatePurchase = function (data) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.baseURL + '/ExternalApi/v2/advanced-purchase',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.savePurchaseOrder = function (data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.baseURL + '/ExternalApi/v2/purchase/order',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.deleteUndoPurchase = function (id, isVoid) {\r\n        var req = $http({\r\n            method: 'DELETE',\r\n            url: configService.baseURL + '/ExternalApi/v2/advanced-purchase?void=' + isVoid,\r\n            data: {\r\n                ID: id\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.printPurchaseOrder = function (id, user, templateID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderPrint',\r\n            params: {\r\n                TaskID: id,\r\n                User: user,\r\n                TemplateID: templateID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getPurchaseOrderEmail = function (id, user, templateID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderEmail',\r\n            params: {\r\n                TaskID: id,\r\n                User: user,\r\n                TemplateID: templateID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.sendPurchaseOrderEmail = function (taskId, data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosPurchaseOrderEmail?TaskID=' + taskId,\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPurchaseReorderData = function (locationID, supplierID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseReorder',\r\n            params: {\r\n                locationID: locationID,\r\n                supplierID: supplierID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSurcharges = function () {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosSurcharge'\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.scanStockTakeInventoryMode = function (taskID, locationID, searchString) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/StocktakeProcess',\r\n            data: {\r\n                TaskID: taskID,\r\n                LocationID: locationID,\r\n                SearchString: searchString\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n\r\n    this.attachFilesToOrder = function (orderID, userName, files) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosOrderAttachment',\r\n            params: {\r\n                orderID: orderID,\r\n                userName: userName\r\n            },\r\n            data: {\r\n                files: files\r\n            },\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.removeAttachment = function (attachmentId) {\r\n        var req = $http({\r\n            method: 'DELETE',\r\n            url: configService.connectionURL + '/PosOrderAttachment',\r\n            params: {\r\n                attachmentId: attachmentId\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    // delivery methods\r\n    this.loadDeliveries = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosDelivery',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadDelivery = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductsAvailableForDelivery = function (posOrderID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: {\r\n                posOrderID: posOrderID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadCalendars = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosDeliveryDetails/YearCalendarSettings?ecsLocationMappingID='+configService.lastECSMappingOutletID,\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.CreateDelivery = function (deliveryID, params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: {\r\n                deliveryID: deliveryID\r\n            },\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.UpdateDelivery = function (deliveryID, params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: {\r\n                deliveryID: deliveryID\r\n            },\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.UpdateDeliveryTaskStatus = function (deliveryTaskID, locationID, status) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: {\r\n                deliveryTaskID: deliveryTaskID,\r\n                locationID: locationID,\r\n                newStatus: status\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.checkSaleOrderExists = function (posOrderID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosOrder',\r\n            params: {\r\n                PosOrderID: posOrderID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.voidSale = function (orderID) {\r\n        var req = $http({\r\n            method: 'DELETE',\r\n            url: configService.connectionURL + '/PosOrder',\r\n            params: {\r\n                ID: orderID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.getLinklyCloudSecretKey = function (linklyCloudSecretKeyUrl, linklyPaymentPairCode, linklyUserName, linklyPassword) {\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: linklyCloudSecretKeyUrl,\r\n            data: {\r\n                username: linklyUserName,\r\n                password: linklyPassword,\r\n                paircode: linklyPaymentPairCode\r\n            },\r\n            headers: {\r\n                \"Content-Type\": \"application/json\",\r\n                Accept: \"application/json\"\r\n            },\r\n        });\r\n    }\r\n\r\n    this.linklyCloudPairTerminal = function (iframeSourceUrl, linklyCloudSecretKey, posName, posVersion, posId, posVendorId) {\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: iframeSourceUrl,\r\n            data: {\r\n                secret: linklyCloudSecretKey,\r\n                posName: posName,\r\n                posVersion: posVersion,\r\n                posId: posId,\r\n                posVendorId: posVendorId\r\n            },\r\n            headers: {\r\n                \"Content-Type\": \"application/json\",\r\n                Accept: \"application/json\"\r\n            },\r\n        });\r\n\r\n    }\r\n\r\n    this.linklyCloudMakePayment = function (linklyCloudPaymentUrl, tempSessionId, token, requestType, amount, orderNumber, isCutReceiptOn, isPaymentReceiptOn) {\r\n\r\n        const uri = `${linklyCloudPaymentUrl}${tempSessionId}${requestType}`;\r\n        const operatorReference = `${configService.lastLoginUserID}|${configService.lastUserName}`;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Merchant: \"00\",\r\n                    TxnType: \"P\",\r\n                    AmtPurchase: amount,\r\n                    TxnRef: orderNumber,\r\n                    CurrencyCode: configService.currency,\r\n                    CutReceipt: isCutReceiptOn,\r\n                    ReceiptAutoPrint: isPaymentReceiptOn,\r\n                    Application: \"00\",\r\n                    PurchaseAnalysisData:\r\n                    {\r\n                        OPR: operatorReference,\r\n                        AMT: amount\r\n                    }\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudTransactionStatus = function (linklyCloudPaymentUrl, tempSessionId, token, requestType) {\r\n\r\n        const uri = `${linklyCloudPaymentUrl}${tempSessionId}${requestType}`;\r\n\r\n        return $http({\r\n            method: 'GET',\r\n            url: uri,\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudCancelCurrentTransaction = function (linklyCloudPaymentUrl, tempSessionId, token, requestType) {\r\n\r\n        const uri = linklyCloudPaymentUrl + tempSessionId + requestType;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Key: \"0\",\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudRefundTransaction = function (linklyCloudPaymentUrl, tempSessionId, token, requestType, amount, orderNumber, isCutReceiptOn, isPaymentReceiptOn, rfn) {\r\n\r\n        const uri = linklyCloudPaymentUrl + tempSessionId + requestType;\r\n        const operatorReference = `${configService.lastLoginUserID}|${configService.lastUserName}`;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Merchant: \"00\",\r\n                    TxnType: \"R\",\r\n                    AmtPurchase: amount,\r\n                    TxnRef: orderNumber,\r\n                    CurrencyCode: configService.currency,\r\n                    CutReceipt: isCutReceiptOn,\r\n                    ReceiptAutoPrint: isPaymentReceiptOn,\r\n                    App: \"00\",\r\n                    PurchaseAnalysisData: {\r\n                        RFN: rfn,\r\n                        OPR: operatorReference,\r\n                        AMT: amount\r\n                    }\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudReprintReceipt = function (linklyCloudPaymentUrl, tempSessionId, token, requestType, isCutReceiptOn, isPaymentReceiptOn) {\r\n\r\n        const uri = linklyCloudPaymentUrl + tempSessionId + requestType;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Merchant: \"00\",\r\n                    Application: \"00\",\r\n                    CutReceipt: isCutReceiptOn,\r\n                    ReceiptAutoPrint: isPaymentReceiptOn,\r\n                    ReprintType: \"2\"\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudTerminalStatus = function (linklyCloudPaymentUrl, tempSessionId, token) {\r\n\r\n        const uri = `${linklyCloudPaymentUrl}${tempSessionId}/status?async=false`;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Merchant: \"00\",\r\n                    StatusType: \"0\"\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            }\r\n        });\r\n\r\n    };\r\n\r\n}]);","// extracted by mini-css-extract-plugin\nexport {};\n    if(module.hot) {\n      (function() {\n        var localsJsonString = undefined;\n        // 1792664250408\n        var cssReload = require(\"../../node_modules/mini-css-extract-plugin/dist/hmr/hotModuleReplacement.js\")(module.id, {});\n        // only invalidate when locals change\n        if (\n          module.hot.data &&\n          module.hot.data.value &&\n          module.hot.data.value !== localsJsonString\n        ) {\n          module.hot.invalidate();\n        } else {\n          module.hot.accept();\n        }\n        module.hot.dispose(function(data) {\n          data.value = localsJsonString;\n          cssReload();\n        });\n      })();\n    }\n  ","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"./node_modules/moment/locale sync recursive \\\\b\\\\B\";\nmodule.exports = webpackEmptyContext;","import Enumerable from \"linq\";\r\nimport { Sale } from \"./Sale\";\r\n//import angular from \"angular\";\r\nimport { convertFromOld } from \"./ConverterService\";\r\nimport { CalculatorService } from \"./CalculatorService\";\r\nimport { CheckoutItem } from \"./CheckoutItem\";\r\nimport { IConfiguration } from \"./Typings/Typings\";\r\nimport { SaleStatusType, FinancialStatusType, TaxCalculationMethod, PaymentShortNameStandardType, SaleType, CalculationType, StartCalcLevel, HistoryActionMode, CustomDiscountType, AddressType } from \"./Enums\";\r\nimport { IOutputData, IInputData, ICheckoutProcessItems } from \"./CalculatorInterfaces\";\r\nimport { ISelectedItem, IPaymentValidation, ICustomValidation, ISale, ISurcharge, ITax, ICheckoutItem, IProductDeal, IAPISale, IReceiptSaleModel, IOutletInfo, IAPIProduct, IAPIPayment, IAPISurcharge, IPaymentMethod, IGroupedSale, ProductType } from \"./Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class CalculatorHelperService {\r\n    static getSaleTotalDue(sale: Sale, selectedItem: ISelectedItem) {\r\n        let sign = 1;\r\n        const isFirstSale = !(selectedItem.Data.Refunds && selectedItem.Data.Refunds.length > 0);\r\n        // if (selectedItem.IsPartialPaid === true && selectedItem.Data.Refunds && selectedItem.Data.Refunds.length > 0)\r\n        //     return selectedItem.PartiallyPaidDue;\r\n\r\n        // if (selectedItem.IsPartialPaid === true && selectedItem.canContinueReturn === true) {\r\n        //     sign = -1;\r\n        // }\r\n\r\n        if (selectedItem.IsPartialPaid === true && selectedItem.canContinueReturn === true && isFirstSale) {\r\n            sign = -1;\r\n        }\r\n\r\n        const so = typeof (selectedItem.RawSaleObject) !== 'string' ? <any>(selectedItem.RawSaleObject) : null;\r\n\r\n        if (so) {\r\n            if ((so.OrderType === SaleStatusType.OnAccount || so.OrderType === SaleStatusType.Layby) &&\r\n                ext.helperService.DEARRound(so.Balance, 4) == 0)\r\n                return 0;\r\n        }\r\n\r\n        const v = CalculatorHelperService.sumToPayLeft(sale, 0, sign < 0);\r\n        return v;\r\n    }\r\n\r\n    static clearPaymentValidations(paymentValidations: IPaymentValidation) {\r\n        paymentValidations.cashAmount = 0;\r\n        paymentValidations.creditCardAmount = 0;\r\n        paymentValidations.storeCreditAmount = 0;\r\n        paymentValidations.loyaltyPointsAmount = 0;\r\n        paymentValidations.cashSurchargeAmount = 0;\r\n        paymentValidations.storeCreditSurchargeAmount = 0;\r\n        paymentValidations.cardPayments = {};\r\n        paymentValidations.customPayments = new Array<ICustomValidation>();\r\n    };\r\n\r\n    static getAllPartialPayment(nativeSale: Sale, selectedItem: ISelectedItem): number {\r\n        let amount = 0;\r\n\r\n        if (selectedItem.IsPartialPaid === true &&\r\n            nativeSale.Refunds && nativeSale.Refunds.length > 0) {\r\n            amount = selectedItem.PartiallyPaidDue;\r\n        }\r\n        else {\r\n            nativeSale.Payments.forEach(ref => {\r\n                amount += ref.Amount;\r\n                if (ref.Surcharge) { // we need in sum without surcharges in any case\r\n                    amount -= ref.Surcharge.CalculatedValueWithTax;\r\n                }\r\n            });\r\n        }\r\n\r\n        return ext.helperService.DEARRound(amount, 2);\r\n    };\r\n\r\n    static getSaleDiscountCoefficient(sale: ISale): number {\r\n        return this.getSaleDiscountCoefficientBasic(sale);\r\n        // if(!sale.SubTotal || !sale.DiscountValue) return 1;\r\n\r\n        // return this.zcn((sale.SubTotal - sale.DiscountValue) / sale.SubTotal);\r\n    }\r\n\r\n\r\n    static getSaleDiscountCoefficientBasic(sale: ISale): number {\r\n        if (!sale.DiscountValue || Number(sale.DiscountValue) === 0) return 1;\r\n\r\n        const sp = this.getCheckoutSum(sale, true);\r\n        if (sp <= 0) return 1;\r\n\r\n        // we need to count only positive items\r\n        return this.zcn((sp - sale.DiscountValue) / sp);\r\n    }\r\n\r\n    static saleFromRestoredString(sale: any): any {\r\n        if (sale.PayloadVersion === '3') {\r\n            return Sale.create(sale);\r\n        } else return sale;\r\n    }\r\n\r\n    static isConfigTaxInclusive() {\r\n        if (typeof (ext.configService.taxInclucive) === 'boolean') {\r\n            return <boolean>(ext.configService.taxInclucive);\r\n        } else {\r\n            const c = <string>(ext.configService.taxInclucive);\r\n            return c === 'True';\r\n        }\r\n    }\r\n\r\n    static isChainedRefundAllowed(item: ISelectedItem) {\r\n        return item.Data.FinancialStatus === FinancialStatusType.Returned || item.Data.FinancialStatus === FinancialStatusType.Closed && item.SaleType === 2;\r\n    }\r\n\r\n    // newAmount should be without rounding\r\n    static sumToPayLeft(sale: Sale, newAmount: number = 0, countPartialPayments: boolean = false) {\r\n        newAmount = this.zcn(newAmount);\r\n        let s1 = 0;\r\n\r\n        let taxModePresision = ext.configService.taxCalculationMethod === TaxCalculationMethod.RowTotal ? 2 : 4;\r\n        if (sale.TaxModePresision)\r\n            taxModePresision = sale.TaxModePresision;\r\n\r\n        if (!countPartialPayments && sale.IsRefund && sale.IsFirstChild === true)\r\n            countPartialPayments = true;\r\n\r\n        if (countPartialPayments === true) {\r\n            // in this case we have partial operation that is being refunded, so sum to refund is partial paid sum\r\n            s1 = -1 * this.getOldPartialPayments(sale);\r\n            s1 = ext.helperService.DEARRound(s1, 2);\r\n        } else {\r\n            // refund closed sale\r\n            s1 = this.getCheckoutSum(sale);\r\n\r\n            // count order level discount\r\n            // we should calc discount coefficient based on items to sold so \r\n            // actually distribute discount between all items to sale\r\n            let discountCoeff = 1;\r\n\r\n            if (sale.DiscountValue && Number(sale.DiscountValue) > 0 && s1 > 0) {\r\n\r\n                if (!sale.IsTaxInclusive) {\r\n                    discountCoeff = this.getSaleDiscountCoefficientBasic(sale);\r\n                    // // positive items\r\n                    // const sp = this.getCheckoutSum(sale, true);\r\n                    // // we should divide by positive sum only, because refunded items do not take part in any discount\r\n                    // discountCoeff = (s1 - sale.DiscountValue) / sp; \r\n                }\r\n\r\n                s1 -= Number(sale.DiscountValue); // substract order level discount\r\n            }\r\n\r\n            s1 = ext.helperService.DEARRound(s1, 2);\r\n\r\n            if (!sale.IsTaxInclusive) {\r\n                const tax = Enumerable.from(sale.CheckoutItems)\r\n                    .sum(el =>\r\n                        ext.helperService.DEARRound(\r\n                            CalculatorHelperService.calculateTax2(el, false), taxModePresision) *\r\n                        (el.Count > 0 ? discountCoeff : 1));\r\n\r\n                s1 += ext.helperService.DEARRound(tax, 2);\r\n            }\r\n        }\r\n\r\n        // get new payments/refunds\r\n        const s2 = this.getPaymentsSum(sale);\r\n\r\n        return ext.helperService.DEARRound(s1 - s2 - newAmount, 2);\r\n    }\r\n\r\n    static getOldPartialPayments(sale: ISale) {\r\n\r\n        // const sum = Enumerable.from(sale.ReturnPayments)\r\n        //     .where(p => p.ShortName !== PaymentShortNameStandardType.Discount && p.ShortName !== PaymentShortNameStandardType.Rounding)\r\n        //     .sum(p => !p.Surcharge ? p.Amount : (p.Amount - p.Surcharge.CalculatedValueWithTax));\r\n\r\n        // count rounding due to else refund with partial payment gives rounding error\r\n        const sum = Enumerable.from(sale.ReturnPayments)\r\n            .where(p => p.ShortName !== PaymentShortNameStandardType.Discount)\r\n            .sum(p => {\r\n                if (p.ShortName === PaymentShortNameStandardType.Rounding)\r\n                    return -p.Amount;\r\n                else\r\n                    return !p.Surcharge ? p.Amount : (p.Amount - p.Surcharge.CalculatedValueWithTax);\r\n            });\r\n\r\n        return sum;\r\n    }\r\n\r\n    // in case this sale is fully paid, show real paid amount else show required amount\r\n    static getHistoryOrderLineSum(sale: Sale) {\r\n        // if real paid sum is lower than required, return required\r\n        const checkSum = this.getCheckoutSum(sale);\r\n        const paysum = this.getPaymentsSum(sale);\r\n        let res = ext.helperService.DEARRound(Math.abs(checkSum), 2);\r\n        let discountCoeff = 1;\r\n\r\n        if (sale.DiscountValue && res > 0) {\r\n\r\n            if (!sale.IsTaxInclusive) {\r\n                // positive items\r\n                // const sp = this.getCheckoutSum(sale, true);\r\n                // discountCoeff = (res - sale.DiscountValue) / sp;\r\n                discountCoeff = this.getSaleDiscountCoefficientBasic(sale);\r\n            }\r\n\r\n            res -= sale.DiscountValue; // substract order level discount\r\n        }\r\n\r\n        if (!sale.IsTaxInclusive) {\r\n            let taxModePresision = ext.configService.taxCalculationMethod === TaxCalculationMethod.RowTotal ? 2 : 4;\r\n            if (sale.TaxModePresision)\r\n                taxModePresision = sale.TaxModePresision;\r\n\r\n            // make sure that in the case of exchange we apply order level discount to new items, not for refunded\r\n            const tax = Enumerable.from(sale.CheckoutItems)\r\n                .sum(el => ext.helperService.DEARRound(\r\n                    CalculatorHelperService.calculateTax2(el, false) * (el.Count > 0 ? discountCoeff : 1),\r\n                    taxModePresision));\r\n\r\n            res += ext.helperService.DEARRound(checkSum < 0 ? -tax : tax, 2);\r\n        }\r\n\r\n        let sReal = ext.helperService.DEARRound(Math.abs(paysum), 2);\r\n\r\n        if (res === sReal)\r\n            res = this.getCurrentPaymentSum(sale);\r\n\r\n        return res;\r\n    }\r\n\r\n    // returns real paid amount\r\n    // discount and rounding are substracted as they are already covered by payment rows\r\n    static getCurrentPaymentSum(sale: Sale): number {\r\n        const sum = Enumerable.from(sale.Payments)\r\n            .where(p =>\r\n                p.ShortName !== PaymentShortNameStandardType.Discount &&\r\n                p.ShortName !== PaymentShortNameStandardType.Rounding)\r\n            .select(p => {\r\n                return p.Amount;\r\n            })\r\n            .sum();\r\n\r\n        return ext.helperService.DEARRound(sum, 2);\r\n    }\r\n\r\n    // should exclude surcharges, rounding, discounts from calculation\r\n    static getPaymentsSum(sale: Sale): number {\r\n        if (!sale || !sale.Payments) return 0;\r\n\r\n        // Rounding actually already is included into payment because payment amount is real amount that has been got from client\r\n        // so we need to subtract rounding from total\r\n        let hasRounding = false;\r\n        let sum = Enumerable.from(sale.Payments)\r\n            .where(p =>\r\n                p.ShortName !== PaymentShortNameStandardType.Discount)\r\n            .select(p => {\r\n                let sm = p.Amount;\r\n                if (p.Surcharge) // remove surcharge from payment\r\n                    sm = ext.helperService.DEARRound(p.Amount - p.Surcharge.CalculatedValueWithTax, 2);\r\n                if (p.ShortName === PaymentShortNameStandardType.Rounding) {// remove rounding\r\n                    sm = -1 * sm;\r\n                    hasRounding = true;\r\n                }\r\n\r\n                return sm;\r\n            })\r\n            .sum();\r\n\r\n        if (sale.CashRounding && !hasRounding && sale.IsExchange)\r\n            sum += sale.CashRounding;\r\n\r\n        return ext.helperService.DEARRound(sum, 6);\r\n    }\r\n\r\n    static getRoundingsFromPayments(sale: Sale): number {\r\n        return sale.CashRounding;\r\n    }\r\n\r\n    static getSurchargesSum(sale: ISale): number {\r\n        const res = Enumerable.from(sale.Payments)\r\n            .where(p => !p.Surcharge ? false : true)\r\n            .sum(p => p.Surcharge.CalculatedValue);\r\n\r\n        return res;\r\n    }\r\n\r\n    static getSurchargesSumWithTax(sale: ISale): number {\r\n        const res = Enumerable.from(sale.Payments)\r\n            .where(p => !p.Surcharge ? false : true)\r\n            .sum(p => p.Surcharge.CalculatedValueWithTax);\r\n\r\n        return res;\r\n    }\r\n\r\n    static getSurcharges(sale: ISale): Array<ISurcharge> {\r\n        const res = Enumerable.from(sale.Payments)\r\n            .where(p => !p.Surcharge ? false : true)\r\n            .select(p => {\r\n                p.Surcharge.PaymentRealAmount = p.Amount;\r\n                p.Surcharge.Total = ext.helperService.DEARRound(p.Surcharge.CalculatedValueWithTax, 4);\r\n                return p.Surcharge;\r\n            })\r\n            .toArray();\r\n\r\n        return res;\r\n    }\r\n\r\n    static getSaleBalance(sale: Sale) {\r\n        // check if it's partially paid sale and we refund it\r\n        const returnPayments = this.calcAllPaymentsToRefund(sale);\r\n        const madePayments = this.calcAllPayments(sale);\r\n        const rounding = (<Sale>sale).CashRounding;\r\n        const isPartialPaidRefund = sale.IsPartialPaid;\r\n        let sm = 0;\r\n        if (!isPartialPaidRefund || sale.IsDirect)\r\n            sm = ext.helperService.DEARRound(sale.Total - this.zcn(sale.SurchargeTotal + (sale.IsTaxInclusive ? 0 : sale.SurchargeTotalTax)) - madePayments + rounding, 4);\r\n        else\r\n            sm = ext.helperService.DEARRound(-returnPayments - madePayments, 4);\r\n        return sm;\r\n    }\r\n\r\n    // static checkPartialPaidRefund(sale: ISale) {\r\n    //     const returnPayments = this.calcAllPaymentsToRefund(sale);\r\n    //     const rounding = (<Sale>sale).CashRounding;\r\n    //     const isPartialPaidRefund = returnPayments > 0 && (-(sale.Total + rounding) > returnPayments);\r\n    //     return isPartialPaidRefund;\r\n    // }\r\n\r\n    // returns total payments but without artificial ones: discount, rounding), because all of them are already included into Total\r\n    // also exclude surcharges (required to correctly claculate balanse on direct sale)\r\n    static calcAllPayments(sale: ISale): number {\r\n        const res = Enumerable.from(sale.Payments).sum(c =>\r\n            (c.ShortName !== PaymentShortNameStandardType.Discount && c.ShortName !== PaymentShortNameStandardType.Rounding) ?\r\n                c.Surcharge ? c.Amount - c.Surcharge.CalculatedValueWithTax :\r\n                    c.Amount : 0);\r\n        return res;\r\n    }\r\n\r\n    static calcAllPaymentsToRefund(sale: ISale): number {\r\n        if (Array.isArray(sale.ReturnPayments)) {\r\n            const res = Enumerable.from(sale.ReturnPayments).sum(c =>\r\n                (c.ShortName !== PaymentShortNameStandardType.Discount && c.ShortName !== PaymentShortNameStandardType.Rounding) ?\r\n                    c.Surcharge ? c.Amount - c.Surcharge.CalculatedValueWithTax :\r\n                        c.Amount : 0);\r\n            return res;\r\n        } else return 0;\r\n    }\r\n\r\n    static roundSale(sale: ISale, roundDigits: number = 2) {\r\n\r\n        sale.DiscountValue = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.DiscountValue), roundDigits);\r\n        sale.SubTotal = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.SubTotal), roundDigits);\r\n        sale.Tax = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.Tax), roundDigits);\r\n        sale.Total = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.Total), roundDigits);\r\n        sale.TotalCheckout = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.TotalCheckout), roundDigits);\r\n\r\n        sale.CheckoutItems.forEach(c => {\r\n            c.BasePrice = ext.helperService.DEARRound(CalculatorHelperService.zch(c.BasePrice), roundDigits);\r\n            c.FinalPrice = ext.helperService.DEARRound(CalculatorHelperService.zch(c.FinalPrice), roundDigits);\r\n            c.FinalAmount = ext.helperService.DEARRound(CalculatorHelperService.zch(c.FinalAmount), roundDigits);\r\n            c.FinalTaxAmount = ext.helperService.DEARRound(CalculatorHelperService.zch(c.FinalTaxAmount), roundDigits);\r\n            c.LoyaltyPointsEarning = ext.helperService.DEARRound(CalculatorHelperService.zch(c.LoyaltyPointsEarning), roundDigits);\r\n            c.Count = ext.helperService.DEARRound(CalculatorHelperService.zch(c.Count), 4);\r\n            if (c.ItemDiscount)\r\n                c.ItemDiscount = ext.helperService.DEARRound(c.ItemDiscount, roundDigits);\r\n\r\n        });\r\n\r\n        sale.Payments.forEach(p => {\r\n            p.Loyalty = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Loyalty), roundDigits);\r\n            p.Amount = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Amount), roundDigits);\r\n            if (p.Surcharge) {\r\n                p.Surcharge.CalculatedValue = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Surcharge.CalculatedValue), roundDigits);\r\n                p.Surcharge.CalculatedValueWithTax = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Surcharge.CalculatedValueWithTax), roundDigits);\r\n                p.Surcharge.Tax = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Surcharge.Tax), roundDigits);\r\n            }\r\n        });\r\n    }\r\n\r\n    static calculateTax(taxObject: ITax, total: number, isTaxInclusive: boolean): number {\r\n\r\n        const percent = isTaxInclusive !== false ? taxObject.EffectiveInclusiveTaxPercent : taxObject.EffectiveExclusiveTaxPercent;\r\n        const tax = total * percent / 100;\r\n        return tax;\r\n    }\r\n\r\n    static calculateTax2(item: ICheckoutItem, isTaxInclusive: boolean): number {\r\n        return this.calculateTax3(item, isTaxInclusive, item.FinalAmount);\r\n    }\r\n\r\n    static calculateTax3(item: ICheckoutItem, isTaxInclusive: boolean, finalAmount: number): number {\r\n        const percent = !item.TaxRuleID ? 0 :\r\n            isTaxInclusive !== false ? item.EffectiveInclusiveTaxPercent :\r\n                item.EffectiveExclusiveTaxPercent;\r\n        const tax = ext.helperService.DEARRound(finalAmount * percent / 100, 4);\r\n        return tax;\r\n    }\r\n\r\n    // function to detect sale processing method\r\n    static useNewCalculation(sale: any): boolean {\r\n        if (ext.configService.allowNewCalculations === true) return true;\r\n        if (sale && sale.PayloadVersion === '3') return true;\r\n\r\n        return false;\r\n    }\r\n\r\n    static isNewSale(sale: any) {\r\n        return sale && sale.PayloadVersion === '3';\r\n    }\r\n\r\n    static zcn(v: any): number {\r\n        if (typeof (v) === 'number')\r\n            return v;\r\n        else\r\n            return !v ? 0 : v;\r\n    }\r\n\r\n    static zch(v: any): any {\r\n        if (typeof (v) === 'number')\r\n            return !v ? 0 : v;\r\n        else\r\n            return !v ? null : v;\r\n    }\r\n\r\n    static zct(v: any): any {\r\n        return !v ? '' : v;\r\n    }\r\n\r\n    static zcb(v: any): boolean {\r\n        return !v ? false : true;\r\n    }\r\n\r\n    static convertCheckoutItem(item: any): ICheckoutItem {\r\n        const { zct, zch, zcb } = this;\r\n\r\n        const res = <ICheckoutItem>{\r\n            ID: item.ID,\r\n            Name: item.Name,\r\n            ProductID: item.ProductID,\r\n            ProductShortDescription: item.ProductShortDescription,\r\n            ProductType: <ProductType>item.ProductType,\r\n            SerialNumber: zch(item.SerialNumber),\r\n            SKU: item.Sku,\r\n            OptionLine: null,\r\n            FamilyID: zch(item.FamilyID),\r\n            SeparatedItemID: null,\r\n            ImageID: zch(item.ImageID),\r\n            BasePrice: zch(item.BasePrice),\r\n            FinalPrice: 0,\r\n            FinalAmount: 0,\r\n            FinalTaxAmount: 0,\r\n            Barcode: zch(item.BarCode),\r\n            BrandID: zch(item.BrandID),\r\n            CategoryID: zch(item.CategoryID),\r\n            Count: item.Count,\r\n            LoyaltyPointsEarning: item.LoyaltyPointsEarning,\r\n            SaleType: <SaleType>item.SaleType,\r\n\r\n            CanEdit: item.CanEdit,\r\n            CanDelete: item.CanDelete,\r\n            DefaultPrice: item.DefaultPrice,\r\n            Discount: 0,\r\n            Price1: item.Price1,\r\n            Price2: item.Price2,\r\n            Price3: item.Price3,\r\n            Price4: item.Price4,\r\n            Price5: item.Price5,\r\n            Price6: item.Price6,\r\n            Price7: item.Price7,\r\n            Price8: item.Price8,\r\n            Price9: item.Price9,\r\n            Price10: item.Price10,\r\n\r\n            ProductTaxString: item.ProductTaxString,\r\n            TaxRuleID: item.Taxes.ruleID,\r\n            EffectiveInclusiveTaxPercent: item.Taxes.effectivePercentInclusive,\r\n            EffectiveExclusiveTaxPercent: item.Taxes.effectivePercentExclusive,\r\n            GiftCardCode: zch(item.GiftCardCode),\r\n            GiftCardExpirationDate: zch(item.GiftCardExpirationDate),\r\n            Return: zcb(item.return),\r\n            CF1: zct(item.CF1),\r\n            CF2: zct(item.CF2),\r\n            CF3: zct(item.CF3),\r\n            CF4: zct(item.CF4),\r\n            CF5: zct(item.CF5),\r\n            CF6: zct(item.CF6),\r\n            CF7: zct(item.CF7),\r\n            CF8: zct(item.CF8),\r\n            CF9: zct(item.CF9),\r\n            CF10: zct(item.CF10),\r\n            Note: item.Note,\r\n            Option1: zct(item.option1),\r\n            Option2: zct(item.option2),\r\n            Option3: zct(item.option3),\r\n            Tags: zch(item.Tags),\r\n            CustomDiscountType: null,\r\n            Discounts: !item.Discounts ? [] : angular.copy(item.Discounts)\r\n        };\r\n\r\n        res.PriceBasedValue = item.PriceBasedValue;\r\n\r\n        res.OptionLine = this.createOptionLine(res);\r\n\r\n        return CheckoutItem.create(res);\r\n    }\r\n\r\n    static createOptionLine(item: ICheckoutItem): string {\r\n        if (!item) return '';\r\n\r\n        const arr = new Array<string>();\r\n        if (item.Option1) arr.push(item.Option1);\r\n        if (item.Option2) arr.push(item.Option2);\r\n        if (item.Option3) arr.push(item.Option3);\r\n\r\n        const res = arr.join(' / ');\r\n        if (!res) return '';\r\n    }\r\n\r\n    static CreateNewSale(): ISale {\r\n        return new Sale();\r\n    }\r\n\r\n    static addCheckoutItemsToSale(sale: ISale, item: any[] | any, productDeals: Array<IProductDeal>, scope: any): IOutputData {\r\n        let arr = new Array<any>();\r\n        if (Array.isArray(item))\r\n            arr = item;\r\n        else\r\n            arr.push(item);\r\n        const inputData = <IInputData>{\r\n            sale: sale,\r\n            checkoutItems: <ICheckoutProcessItems>{\r\n                itemsToAdd: arr\r\n            },\r\n            productDeals: productDeals,\r\n            scope: scope\r\n        };\r\n\r\n        const output = CalculatorService.Instance.calculate(CalculationType.Checkout, inputData);\r\n\r\n        scope?.$broadcast('sale.update');\r\n\r\n        return output;\r\n    }\r\n\r\n    static removeCheckoutItemsFromSale(sale: ISale, item: any, scope: any): IOutputData {\r\n        let arr = new Array<any>();\r\n        if (Array.isArray(item))\r\n            arr = item;\r\n        else\r\n            arr.push(item);\r\n        const inputData = <IInputData>{\r\n            sale: sale,\r\n            checkoutItems: <ICheckoutProcessItems>{\r\n                itemsToRemove: arr\r\n            },\r\n            scope: scope\r\n        };\r\n\r\n        const output = CalculatorService.Instance.calculate(CalculationType.Checkout, inputData);\r\n\r\n        scope?.$broadcast('sale.update');\r\n\r\n        return output;\r\n    }\r\n\r\n    static calculateCheckout(sale: ISale, productDeals: Array<IProductDeal>, scope: any = null, level: StartCalcLevel = StartCalcLevel.Setup, checkTaxes: boolean = false) {\r\n        const inputData = <IInputData>{\r\n            sale: sale,\r\n            productDeals: productDeals,\r\n            scope: scope,\r\n            checkTaxes: checkTaxes\r\n        };\r\n\r\n        const output = CalculatorService.Instance.calculate(CalculationType.Checkout, inputData, level);\r\n\r\n        scope?.$broadcast('sale.update');\r\n\r\n        return output;\r\n    }\r\n\r\n    static calculateRefundCheckout(sale: ISale, selectedSale: ISelectedItem, actionMode: HistoryActionMode, level: StartCalcLevel = StartCalcLevel.Setup) {\r\n        const inputData = <IInputData>{\r\n            sale: sale,\r\n            selectedItem: selectedSale,\r\n            actionMode: actionMode\r\n        };\r\n\r\n        return CalculatorService.Instance.calculate(CalculationType.RefundCheckout, inputData, level);\r\n    }\r\n\r\n    static calculatePayments(sale: ISale, level: StartCalcLevel = StartCalcLevel.Payments) {\r\n        const inputData = <IInputData>{\r\n            sale: sale\r\n        };\r\n\r\n        return CalculatorService.Instance.calculate(CalculationType.Payments, inputData, level);\r\n    }\r\n\r\n    static calculateRefundPayments(sale: ISale, checkoutOutData: IOutputData, level: StartCalcLevel = StartCalcLevel.Payments) {\r\n        let inputData = <IInputData>{\r\n            sale: sale\r\n        };\r\n\r\n        if (checkoutOutData) {\r\n            const cpy = angular.extend(inputData, checkoutOutData);\r\n            delete cpy.processResult;\r\n            delete cpy.errorMessage;\r\n\r\n            inputData = <IInputData>cpy;\r\n\r\n            // define boolean types\r\n            inputData.isContinueReturn = this.zcb(inputData.isContinueReturn) ||\r\n                ((sale.IsExchange || sale.IsRefund) && this.zcb(inputData.isContinue));\r\n            inputData.fullReturn = this.zcb(inputData.fullReturn);\r\n        }\r\n\r\n        return CalculatorService.Instance.calculate(CalculationType.RefundPayments, inputData, level);\r\n    }\r\n\r\n    // this amount does not include any taxes or order level discounts\r\n    static getCheckoutSum(sale: ISale, positiveOnly: boolean = false) {\r\n        const res = Enumerable.from(sale.CheckoutItems)\r\n            .where(c => positiveOnly === true ? c.Count > 0 : true)\r\n            .sum(c => c.FinalAmount);\r\n        return res;\r\n    }\r\n\r\n    // got total sum to pay from API sale. This include own refunds\r\n    // for external mode tax is outside\r\n    static getCheckoutSumFromAPISale(sale: IAPISale) {\r\n        // go through main sale\r\n        const sum1 = Enumerable.from(sale.Lines)\r\n            .where(l => l.Name !== PaymentShortNameStandardType.Rounding)\r\n            .sum(l => l.Name === PaymentShortNameStandardType.Discount ? l.TotalPerLine :\r\n                sale.TaxInclusive !== true ? (l.TotalPerLine + l.Tax) : l.TotalPerLine);\r\n\r\n        // go through own refund items \r\n        const sum2 = Enumerable.from(sale.Refunds)\r\n            .where(r => r.IsFromChild !== true)\r\n            .select(r => {\r\n                return Enumerable.from(r.Lines)\r\n                    .where(l =>\r\n                        l.Name !== PaymentShortNameStandardType.Rounding &&\r\n                        l.Quantity > 0)  // enum only new items\r\n                    .sum(r => {\r\n                        let sm = r.Name === PaymentShortNameStandardType.Discount ? r.TotalPerLine :\r\n                            sale.TaxInclusive !== true ? (r.TotalPerLine + r.Tax) : r.TotalPerLine;\r\n                        return sm;\r\n                    })\r\n            })\r\n            .sum();\r\n\r\n        return sum1 + sum2;\r\n    }\r\n\r\n    static getProcessedCheckoutSumFromAPISale(sale: IAPISale) {\r\n\r\n        // go through child refund items \r\n        const sum = Enumerable.from(sale.Refunds)\r\n            .where(r => r.IsFromChild === true)\r\n            .select(r => {\r\n                return Enumerable.from(r.Lines)\r\n                    .where(l =>\r\n                        l.Name !== PaymentShortNameStandardType.Discount &&\r\n                        l.Name !== PaymentShortNameStandardType.Rounding &&\r\n                        l.Quantity < 0) // only refunded items\r\n                    .sum(r => {\r\n                        let sm = sale.TaxInclusive !== true ? (r.TotalPerLine + r.Tax) : r.TotalPerLine;\r\n                        return sm;\r\n                    })\r\n            })\r\n            .sum();\r\n\r\n        return sum;\r\n    }\r\n\r\n    static getPaymentsFromAPISale(sale: IAPISale) {\r\n        // go through main sale\r\n        const sum1 = Enumerable.from(sale.Payments)\r\n            .sum(p => !p.Surcharge ? p.Amount : (p.Amount - p.Surcharge.CalculatedValueWithTax));\r\n\r\n        // roundings\r\n        const sumRnd1 = Enumerable.from(sale.Lines)\r\n            .where(l => l.Name === PaymentShortNameStandardType.Rounding)\r\n            .sum(l => sale.TaxInclusive !== true ? (l.TotalPerLine + l.Tax) : l.TotalPerLine);\r\n\r\n        // go through own refund items \r\n        const sum2 = Enumerable.from(sale.Refunds)\r\n            .where(r => r.IsFromChild !== true)\r\n            .select(r => {\r\n                return Enumerable.from(r.Payments)\r\n                    .sum(p => !p.Surcharge ? p.Amount : (p.Amount - p.Surcharge.CalculatedValueWithTax));\r\n            })\r\n            .sum();\r\n\r\n        // roundings\r\n        const sumRnd2 = Enumerable.from(sale.Refunds)\r\n            .where(r => r.IsFromChild !== true)\r\n            .select(r => {\r\n                return Enumerable.from(r.Lines)\r\n                    .where(l => l.Name === PaymentShortNameStandardType.Rounding)\r\n                    .sum(r => {\r\n                        let sm = sale.TaxInclusive !== true ? (r.TotalPerLine + r.Tax) : r.TotalPerLine;\r\n                        return sm;\r\n                    })\r\n            })\r\n            .sum();\r\n\r\n        return sum1 + sumRnd1 - (sum2 + sumRnd2);\r\n    }\r\n\r\n    static setCustomItemDiscount(sale: ISale, productDeals: Array<IProductDeal>, scope: any, itemID: string, discount: string, discountType: CustomDiscountType): void {\r\n        const items = sale.CheckoutItems.filter(el => el.ID === itemID);\r\n        const vl = ext.helperService.DEARRound(Number(discount), 2);\r\n        if (items.length > 0) {\r\n            const el = items[0];\r\n            if (discountType === CustomDiscountType.StandAloneReturn) {\r\n                el.Discount = 0;\r\n                el.BasePrice = vl;\r\n                el.DefaultPrice = vl;\r\n            } else {\r\n                el.Discount = vl;\r\n            }\r\n\r\n            el.FinalPrice = vl;\r\n            el.FinalAmount = vl * el.Count;\r\n            el.CustomDiscountType = discountType;\r\n\r\n            this.calculateCheckout(sale, productDeals, scope, StartCalcLevel.Discount);\r\n\r\n            if(sale.Discount) \r\n            {\r\n                sale.Discount = ext.helperService.DEARRound(sale.Discount, 2);\r\n            }\r\n        }\r\n    }\r\n\r\n    static updateReceipt(saleIn: ISale, receiptSaleModel: IReceiptSaleModel, currency: string, onComplete?: () => void) {\r\n        // const taxInclusive = sale.IsTaxInclusive;\r\n        // var isStandaloneReturn = sale.StandAloneReturn === true;\r\n        // var isRefund = sale.Refunds && sale.Refunds.length > 0 ? true : false;\r\n        const sale = <Sale>this.saleFromRestoredString(saleIn);\r\n        var total = sale.Total;\r\n\r\n        const configuration: IConfiguration = ext.configService;\r\n\r\n        if (sale.Customer.ID == null) {\r\n            receiptSaleModel.Customer = [];\r\n        }\r\n        else {\r\n\r\n            const lpSum = sale.CalledFromHistory === true ?\r\n                sale.calculateTotalLoyalty() : // if on history form get all loyalty\r\n                sale.calculateSessionLoyalty(); // how many loyalty points were earned by new payments\r\n            const usedL = sale.CustomerLoyaltyPointsUsed; // how many loyalty points were used to pay in this sale\r\n            const ltl = {\r\n                CustomerName: sale.Customer.Name,\r\n                SaleLoyaltyPoints: ext.helperService.applyCurrency(lpSum, currency),\r\n                CustomerLoyaltyPointsUsed: ext.helperService.applyCurrency(usedL, currency),\r\n                CustomerLoyaltyPoints: '',\r\n                TotalLoyaltyPoints: '',\r\n                LLDiscountCode: '',\r\n                TaxNumber: !sale.Customer.TaxNumber ? '' : sale.Customer.TaxNumber\r\n            };\r\n\r\n            ltl.CustomerLoyaltyPoints = ext.helperService.applyCurrency(sale.Customer.LoyaltyPoints, currency);\r\n            ltl.TotalLoyaltyPoints = ext.helperService.applyCurrency(sale.Customer.LoyaltyPoints - usedL + lpSum, currency);\r\n\r\n            if (sale.Customer.LLEmail && ext.loyaltyService.loyaltyEnabled) {\r\n                if (sale.Customer.LLCustomerID != '0' && !!sale.Customer.LLCustomerID) {\r\n                    ltl.CustomerLoyaltyPoints = sale.Customer.LLInitialBalance;\r\n                    ltl.TotalLoyaltyPoints = sale.Customer.LLInitialBalance;\r\n                    ltl.LLDiscountCode = !sale.Customer.LLDiscountCode ? '' : sale.Customer.LLDiscountCode;\r\n                } else {\r\n                    ltl.CustomerLoyaltyPoints = '';\r\n                    ltl.TotalLoyaltyPoints = '';\r\n                    ltl.LLDiscountCode = '';\r\n                }\r\n\r\n                ltl.CustomerLoyaltyPointsUsed = '';\r\n                ltl.SaleLoyaltyPoints = '';\r\n            }\r\n\r\n            receiptSaleModel.Customer = [ltl];\r\n\r\n            if (!!sale.SelectedContact) {\r\n                receiptSaleModel.Customer[0].Email = sale.SelectedContact.Email;\r\n                receiptSaleModel.Customer[0].Phone = sale.SelectedContact.Phone;\r\n                receiptSaleModel.Customer[0].MobilePhone = sale.SelectedContact.MobilePhone;\r\n            }\r\n            else {\r\n                // append email and phones\r\n                if (!!sale.Customer.Contacts && sale.Customer.Contacts.length > 0) {\r\n                    let cnts = sale.Customer.Contacts.filter(function (c) { return c.Default === true; });\r\n                    if (cnts.length === 0)\r\n                        cnts = sale.Customer.Contacts;\r\n                    const cnt = cnts[0];\r\n                    receiptSaleModel.Customer[0].Email = cnt.Email;\r\n                    receiptSaleModel.Customer[0].Phone = cnt.Phone;\r\n                    receiptSaleModel.Customer[0].MobilePhone = cnt.MobilePhone;\r\n                }\r\n            }\r\n\r\n            // append addresses\r\n            // Check if sale address available else add customer address\r\n            if (sale.CustomerShippingAddressLine1) {\r\n                receiptSaleModel.Customer[0].City = sale.CustomerShippingCity;\r\n                receiptSaleModel.Customer[0].Country = sale.CustomerShippingCountry;\r\n                receiptSaleModel.Customer[0].Line1 = sale.CustomerShippingAddressLine1;\r\n                receiptSaleModel.Customer[0].Line2 = sale.CustomerShippingAddressLine2;\r\n                receiptSaleModel.Customer[0].Postcode = sale.CustomerShippingZip;\r\n                receiptSaleModel.Customer[0].State = sale.CustomerShippingProvince;\r\n            } else if (!!sale.Customer.Addresses && sale.Customer.Addresses.length > 0) {\r\n                let caddrs = Enumerable.from(sale.Customer.Addresses).where(x => x.Type === AddressType.Shipping)\r\n                    .orderByDescending(x => x.DefaultForType).toArray();\r\n                if (caddrs.length === 0)\r\n                    caddrs = sale.Customer.Addresses;\r\n                const caddr = caddrs[0];\r\n\r\n                if (!!caddr.City || !!caddr.Country || !!caddr.Line1 || !!caddr.Line2 || !!caddr.Postcode || !!caddr.State) {\r\n\r\n                    receiptSaleModel.Customer[0].City = caddr.City;\r\n                    receiptSaleModel.Customer[0].Country = caddr.Country;\r\n                    receiptSaleModel.Customer[0].Line1 = caddr.Line1;\r\n                    receiptSaleModel.Customer[0].Line2 = caddr.Line2;\r\n                    receiptSaleModel.Customer[0].Postcode = caddr.Postcode;\r\n                    receiptSaleModel.Customer[0].State = caddr.State;\r\n                }\r\n            }\r\n\r\n            if (!!sale.Customer.PaymentTerm) {\r\n                receiptSaleModel.Customer[0].PaymentTerm = sale.Customer.PaymentTerm;\r\n            }\r\n\r\n            receiptSaleModel.CustomerAttributes = [];\r\n            if (!!sale.Customer.Attributes && sale.Customer.Attributes.length) {\r\n                receiptSaleModel.CustomerAttributes = sale.Customer.Attributes;\r\n            }\r\n        }\r\n\r\n        if (typeof (sale.SalesRepresentative) === \"undefined\" ||\r\n            sale.SalesRepresentative === null ||\r\n            sale.SalesRepresentative.ID == null) {\r\n            receiptSaleModel.SalesRepresentative = [];\r\n        } else {\r\n            receiptSaleModel.SalesRepresentative = [{\r\n                SalesRepresentativeName: sale.SalesRepresentative.Name\r\n            }];\r\n        }\r\n\r\n        if (!receiptSaleModel.SalesRepresentative.length && !!ext.configService.CanSaleRep) {\r\n            const saleRep = configuration.lastDisplayUserName ? configuration.lastDisplayUserName : configuration.lastUserName;\r\n            if (saleRep) {\r\n                receiptSaleModel.SalesRepresentative.push({\r\n                    SalesRepresentativeName: saleRep\r\n                });\r\n            }\r\n        }\r\n\r\n        const receiptNumber = sale.OrderNumber;\r\n\r\n        receiptSaleModel.ReceiptNumber = receiptNumber;\r\n        receiptSaleModel.Barcode = sale.Barcode;\r\n\r\n        receiptSaleModel.CheckoutProductCount = sale.CheckoutItems.length;\r\n        receiptSaleModel.Date = sale.Date;\r\n        receiptSaleModel.Time = '';\r\n\r\n        const lastOutlet = ext.configService.lastOutlet;\r\n        const lastOutletInfo = ext.configService.lastOutletInfo as IOutletInfo;\r\n        const lastRegistry = ext.configService.lastRegistry;\r\n        const lastRegistryID  = ext.configService.lastRegistryID;\r\n        const fetchSaleOutlet = !!sale.OutletName && sale.OutletName !== lastOutlet;\r\n        const fetchRegister = !!sale.RegistryID && sale.RegistryID !== lastRegistryID;\r\n\r\n        const applyLastOutletDetails = () => {\r\n            receiptSaleModel.OutletName = lastOutlet;\r\n            receiptSaleModel.OutletInfo = [CalculatorHelperService.assignOutletInfo(lastOutletInfo)];\r\n            receiptSaleModel.RegistryName = lastRegistry;\r\n        };\r\n\r\n        if (!fetchSaleOutlet && !fetchRegister) {\r\n            applyLastOutletDetails();\r\n            if (typeof onComplete === 'function') onComplete();\r\n        } else {\r\n            ext.outletService\r\n                .getPosOutlet(sale.OutletID)\r\n                .then((outlet: any | null) => {\r\n                    receiptSaleModel.OutletName = outlet && outlet.OutletName ? outlet.OutletName : lastOutlet;\r\n                    const infoSource = outlet && outlet.Info ? outlet.Info : lastOutletInfo\r\n                    receiptSaleModel.OutletInfo = [CalculatorHelperService.assignOutletInfo(infoSource)];\r\n                    \r\n                    let registry = lastRegistry;\r\n                    if (outlet && Array.isArray(outlet.Registries) && sale.RegistryID) {\r\n                        const matched = outlet.Registries.find((r: any) => r.PosRegistryID === sale.RegistryID);\r\n                        if (matched && matched.Code) {\r\n                            registry = matched.Code;\r\n                        }\r\n                    }\r\n                    receiptSaleModel.RegistryName = registry;\r\n                })\r\n                .catch(applyLastOutletDetails)\r\n                .finally(() => {\r\n                    if (typeof onComplete === 'function') onComplete();\r\n                });\r\n        }\r\n\r\n        receiptSaleModel.SubTotal = ext.helperService.applyCurrency(sale.SubTotal, currency);\r\n        receiptSaleModel.Discount = ext.helperService.applyCurrency(sale.DiscountValue, currency);\r\n        receiptSaleModel.Total = ext.helperService.applyCurrency(sale.Total, currency);\r\n        receiptSaleModel.DiscountPercentage = `${ext.helperService.DEARRound((sale.DiscountValue / sale.SubTotal) * 100, 2).toFixed(2)}%`;\r\n        //        receiptSaleModel.Balance = ext.helperService.applyCurrency(sale.Balance, currency);\r\n        receiptSaleModel.Balance = ext.helperService.applyCurrency(CalculatorHelperService.getSaleBalance(sale), currency);\r\n\r\n        const totalTax = sale.Tax;\r\n        //totalTax += saleService.surchargeTaxSum(currentSale, taxInclusive);\r\n\r\n        receiptSaleModel.CalculatedTax = ext.helperService.applyCurrency(totalTax, currency);\r\n\r\n        receiptSaleModel.Change = ext.helperService.applyCurrency(ext.helperService.DEARRound(sale.CashChangeAmount, 4), currency);\r\n        if (sale.Comment) {\r\n            receiptSaleModel.Notes = [\r\n                {\r\n                    SalesNote: sale.Comment\r\n                }\r\n            ];\r\n        } else {\r\n            receiptSaleModel.Notes = [];\r\n        }\r\n \r\n        receiptSaleModel.CheckoutProducts = [];\r\n        sale.CheckoutItems.forEach(el => {\r\n            const isNegative = el.Count < 0;\r\n            let price = 0;\r\n            let amount = 0;\r\n\r\n            if (isNegative == false) {\r\n                if (el.BasePrice < el.FinalPrice || el.BasePrice === 0) {\r\n                    price = el.FinalPrice;\r\n                    amount = el.FinalAmount;\r\n                } else {\r\n                    price = el.BasePrice;\r\n                    amount = ext.helperService.DEARRound(el.BasePrice * el.Count, 4);\r\n                }\r\n            }\r\n            else {\r\n                //if (sale.isStandaloneReturn !== true) {\r\n                //    price = -el.BasePriceWithDiscount;\r\n                //    amount = -el.Count * el.BasePriceWithDiscount;\r\n                //} else {\r\n                price = el.FinalPrice;\r\n                amount = el.FinalAmount;\r\n                //}\r\n            }\r\n\r\n            const sprice = ext.helperService.applyCurrency(price, currency);\r\n            const samount = ext.helperService.applyCurrency(amount, currency);\r\n\r\n            receiptSaleModel.CheckoutProducts.push({\r\n                ProductCount: el.Count,\r\n                ProductName: el.Name,\r\n                ProductAmount: samount,\r\n                ProductPrice: sprice,\r\n                ProductSku: el.SKU,\r\n                ProductID: el.ProductID,\r\n                ProductBarCode: el.Barcode,\r\n                ProductDiscount: el.FinalPrice >= el.BasePrice || isNegative ? null :\r\n                    ext.helperService.applyCurrency((el.FinalPrice - el.BasePrice) * el.Count, currency),\r\n                ProductTaxPercent: ext.helperService.DEARRound(el.FinalTaxAmount / (el.FinalAmount - (sale.IsTaxInclusive ? el.FinalTaxAmount : 0)) * 100, 2) + '%',\r\n                ProductShortDescription: el.ProductShortDescription,\r\n                ProductSerialNumber: el.SerialNumber,\r\n                AdditionalAttribute1: el.CF1,\r\n                AdditionalAttribute2: el.CF2,\r\n                AdditionalAttribute3: el.CF3,\r\n                AdditionalAttribute4: el.CF4,\r\n                AdditionalAttribute5: el.CF5,\r\n                AdditionalAttribute6: el.CF6,\r\n                AdditionalAttribute7: el.CF7,\r\n                AdditionalAttribute8: el.CF8,\r\n                AdditionalAttribute9: el.CF9,\r\n                AdditionalAttribute10: el.CF10,\r\n                ProductDiscountPercentage : (el.ItemDiscount && el.ItemDiscount > 0 && price > 0) ? `${ext.helperService.DEARRound((el.ItemDiscount / price) * 100, 2).toFixed(2)}%` : null,\r\n                ProductDiscountedPrice : ext.helperService.applyCurrency(el.FinalPrice, currency),\r\n                ProductDiscountedTotal : ext.helperService.applyCurrency(el.FinalAmount, currency)\r\n            });\r\n        });\r\n\r\n        receiptSaleModel.Payments = [];\r\n\r\n        //Rounding displays as part of payments and doesnt have special place in receipt template\r\n        //if (sale.CashRounding && sale.CashRounding !== 0) {\r\n        //    var rounding = {\r\n        //        PaymentTypeName: gettextCatalog.getString(\"Payment (Cash rounding)\"),\r\n        //        PaymentAmount: helperService.applyCurrency(currentSale.CashRounding, currency)\r\n        //    };\r\n        //    receiptSaleModel.Payments.push(rounding);\r\n        //}\r\n\r\n        var total = 0;\r\n        sale.Payments.forEach(el => {\r\n            if (el.Amount) { // skip zero payments. Zero payments are required for SIM to correctly process roundings\r\n                if (el.ShortName !== PaymentShortNameStandardType.Rounding)\r\n                    total += el.Amount;\r\n\r\n                receiptSaleModel.Payments.push({\r\n                    PaymentTypeName: el.PaymentTypeName,\r\n                    PaymentAmount: ext.helperService.applyCurrency(el.Amount, currency),\r\n                    PaymentDate: el.Date ? ext.helperService.getFormatedDate(el.Date) : ''\r\n                });\r\n            }\r\n        });\r\n\r\n        receiptSaleModel.TotalBasePrice = ext.helperService.applyCurrency(sale.TotalBasePrice, currency);\r\n        receiptSaleModel.TotalItemDiscount = `-${ext.helperService.applyCurrency(sale.TotalItemDiscount, currency)}`;\r\n\r\n        receiptSaleModel.Surcharges = [];\r\n        const surSum = this.getSurchargesSum(sale);\r\n\r\n        if (surSum) {\r\n            receiptSaleModel.Surcharges.push({\r\n                Surcharge: ext.helperService.applyCurrency(ext.helperService.DEARRound(surSum, 2), currency)\r\n            });\r\n        }\r\n\r\n        receiptSaleModel.Received = ext.helperService.applyCurrency(ext.helperService.DEARRound(sale.CashChangeAmount + total, 6), currency);\r\n        ext.barcodeService.initForReceipt(receiptSaleModel);\r\n\r\n        // common approach for terminal receipts all of them will be printed one by one and then main receipt\r\n        receiptSaleModel.VantivTerminalReceipts = [];\r\n        receiptSaleModel.TyroTerminalReceipts = [];\r\n        receiptSaleModel.LinklyTerminalReceipts = [];\r\n        receiptSaleModel.TerminalReceipts = [];\r\n\r\n        this.fillTransactionData(sale, receiptSaleModel, currency);\r\n    }\r\n\r\n    static fillTransactionData(sale: ISale, receiptSaleModel: IReceiptSaleModel, currency: string) {\r\n        const cfg = ext.configService.getCardPaymentSettings<any>();\r\n\r\n        const printMerchantCopy = !!cfg && cfg.printTriPOSMerchantReceipt === true;\r\n\r\n        // check if vaniv data exists \r\n        sale.Payments.forEach(p => {\r\n            if (!!p.TransactionMetaData) {\r\n                let v: any = null;\r\n                const key = ext.cardPayService.detectProvider(p.TransactionMetaData);\r\n                switch (key) {\r\n                    case 'triPOSReaderProvider':\r\n                        v = ext.receiptService.fillVantivTransactionData(p.TransactionMetaData, currency);\r\n                        if (!!v) {\r\n                            receiptSaleModel.VantivTerminalReceipts.push(v);\r\n                            if (printMerchantCopy === true)\r\n                                // create one more element instead of push the same twice to prevent angular error\r\n                                receiptSaleModel.VantivTerminalReceipts.push(\r\n                                    ext.receiptService.fillVantivTransactionData(p.TransactionMetaData, currency));\r\n                        }\r\n                        break;\r\n\r\n                    case 'tyroReaderProvider':\r\n                        v = ext.saleService.fillTyroTransactionData(p.TransactionMetaData, true);\r\n                        if (!!v) {\r\n                            receiptSaleModel.TyroTerminalReceipts.push(v);\r\n                        }\r\n\r\n                        v = ext.saleService.fillTyroTransactionData(p.TransactionMetaData, false);\r\n                        if (!!v) {\r\n                            receiptSaleModel.TyroTerminalReceipts.push(v);\r\n                        }\r\n\r\n                        break;\r\n\r\n                    case 'linklyPaymentReaderProvider':\r\n                        v = ext.saleService.fillLinklyPaymentTransactionData(p.TransactionMetaData, true);\r\n                        if (!!v) {\r\n                            receiptSaleModel.LinklyTerminalReceipts.push(v);\r\n                        }\r\n\r\n                        v = ext.saleService.fillLinklyPaymentTransactionData(p.TransactionMetaData, false);\r\n                        if (!!v) {\r\n                            receiptSaleModel.LinklyTerminalReceipts.push(v);\r\n                        }\r\n\r\n                        break;\r\n                    default:\r\n                        if (key) {\r\n                            const provider = ext.cardPayService.selectProvider(null, key, true);\r\n                            if (provider && typeof provider.provider?.getReceipt === 'function') {\r\n                                v = provider.provider.getReceipt(p.TransactionMetaData, true);\r\n                                if (!!v) {\r\n                                    receiptSaleModel.TerminalReceipts.push(v);\r\n                                }\r\n                                v = provider.provider.getReceipt(p.TransactionMetaData, false);\r\n                                if (!!v) {\r\n                                    receiptSaleModel.TerminalReceipts.push(v);\r\n                                }\r\n                            }\r\n                        }\r\n                }\r\n            }\r\n        });\r\n    };\r\n\r\n    // enum all sale products and call callback\r\n    // sale is from server call, i.e. formatted as API structure\r\n    // callback(item, isDirectSaleData)\r\n    static goThroughEntireSaleItems(sale: IAPISale, callback: (line: IAPIProduct, isDirectSaleData: boolean) => void): void {\r\n        if (sale.Lines)\r\n            sale.Lines.forEach(l => callback.call(this, l, true));\r\n\r\n        if (sale.Refunds)\r\n            sale.Refunds.forEach(ref => ref.Lines ?\r\n                ref.Lines.forEach(l => callback.call(this, l, false)) :\r\n                0);\r\n    }\r\n\r\n    static goThroughEntireSalePayments(sale: IAPISale, callback: (payment: IAPIPayment, isDirectSaleData: boolean) => void): void {\r\n        if (sale.Payments)\r\n            sale.Payments.forEach(p => callback.call(this, p, true));\r\n\r\n        if (sale.Refunds)\r\n            sale.Refunds.forEach(ref => ref.Payments ?\r\n                ref.Payments.forEach(p => callback.call(this, p, false)) :\r\n                0);\r\n    }\r\n\r\n    static goThroughEntireSaleSurcharges(sale: IAPISale, callback: (surcharge: IAPISurcharge, isDirectSaleData: boolean) => void): void {\r\n        if (sale.Surcharges)\r\n            sale.Surcharges.forEach(s => callback.call(this, s, true));\r\n\r\n        if (sale.Refunds)\r\n            sale.Refunds.forEach(ref => ref.Surcharges ?\r\n                ref.Surcharges.forEach(s => callback.call(this, s, false)) :\r\n                0);\r\n    };\r\n\r\n    static restoreSurcharge(sd: IAPISurcharge, taxInclusive: boolean) {\r\n        if (!sd || !sd.Total) return sd;\r\n\r\n        sd.CalculatedValue = sd.Total;\r\n        sd.CalculatedValueWithTax = taxInclusive === true ? sd.Total : (sd.Total + sd.Tax);\r\n    };\r\n\r\n    static addGhostSurcharge(sale: ISale, surcharge: ISurcharge, ptype: PaymentShortNameStandardType) {\r\n        const p = Enumerable.from(sale.Payments)\r\n            .where(p => p.ShortName === ptype)\r\n            .firstOrDefault();\r\n\r\n        if (p) {\r\n            p.Surcharge = surcharge;\r\n            surcharge.PaymentID = p.ID;\r\n        }\r\n    }\r\n\r\n    static setPaymentMethodName(el: IAPIPayment, customPaymentMethods: Array<IPaymentMethod>): void {\r\n        el.PaymentTypeName = this.getPaymentName(el.ShortName, customPaymentMethods);\r\n    }\r\n\r\n    static getPaymentName(shortName: string, customPaymentMethods: Array<IPaymentMethod>) {\r\n        let name: string = null;\r\n\r\n        switch (shortName) {\r\n            case PaymentShortNameStandardType.Cash:\r\n                name = ext.gettextCatalog.getString(\"Cash\");\r\n                break;\r\n            case PaymentShortNameStandardType.CreditCard:\r\n                name = ext.gettextCatalog.getString(\"Credit card\");\r\n                break;\r\n            case PaymentShortNameStandardType.StoreCredits:\r\n                name = ext.gettextCatalog.getString(\"Store credit\");\r\n                break;\r\n            case PaymentShortNameStandardType.LoyaltyPoints:\r\n            case PaymentShortNameStandardType.Loyalty:\r\n                name = ext.gettextCatalog.getString(\"Loyalty points\");\r\n                break;\r\n            default:\r\n                name = this.getCustomPaymentMethodName(shortName, customPaymentMethods);\r\n                break;\r\n        }\r\n\r\n        return name;\r\n    };\r\n\r\n\r\n    static getCustomPaymentMethodName(shortName: string, customPaymentMethods: Array<IPaymentMethod>): string {\r\n        var lst = customPaymentMethods.filter(function (el) { return el.loweredPaymentMethodName == shortName });\r\n        return lst.length > 0 ? lst[0].paymentMethodName : shortName;\r\n    }\r\n\r\n    static isStandardPaymentType(paymentShortName: string) {\r\n        if (!paymentShortName || typeof (paymentShortName) !== 'string') return false;\r\n\r\n        switch (paymentShortName.toLowerCase()) {\r\n            case PaymentShortNameStandardType.Cash:\r\n            case PaymentShortNameStandardType.CreditCard:\r\n            case PaymentShortNameStandardType.GiftCard:\r\n            case PaymentShortNameStandardType.Loyalty:\r\n            case PaymentShortNameStandardType.StoreCredits:\r\n            case PaymentShortNameStandardType.Rounding.toLowerCase():\r\n            case PaymentShortNameStandardType.Discount.toLowerCase():\r\n                return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    static formPaymentID(el: IAPIPayment): string {\r\n        let ptp = el.ShortName;\r\n        if (ptp.indexOf(PaymentShortNameStandardType.BackofficePayment) === 0) {\r\n            ptp = PaymentShortNameStandardType.BackofficePayment;\r\n        }\r\n\r\n        let res: string = null;\r\n\r\n        switch (ptp) {\r\n            case PaymentShortNameStandardType.Loyalty:\r\n            case PaymentShortNameStandardType.GiftCard:\r\n            case PaymentShortNameStandardType.BackofficePayment:\r\n            case PaymentShortNameStandardType.StoreCredits:\r\n            case PaymentShortNameStandardType.Cash:\r\n                res = ptp + '@@1@@';\r\n                break;\r\n            case PaymentShortNameStandardType.CreditCard:\r\n                res = 'credit card@@1@@' + el.ServerTransactionID + '@@2@@' + el.ClientTransactionID + '@@3@@';\r\n                if (el.Surcharge)\r\n                    res += el.Surcharge.SurchargeID + '@@4@@';\r\n                break;\r\n            default:\r\n                if (!this.isStandardPaymentType(ptp)) {\r\n                    res = ptp + '@@1@@';\r\n                    if (el.Surcharge) {\r\n                        res += '@@2@@@@3@@' + el.Surcharge.SurchargeID + '@@4@@';\r\n                    }\r\n                }\r\n                break;\r\n        }\r\n\r\n        return res;\r\n    }\r\n\r\n    static negateSurcharge(el: IAPISurcharge) {\r\n        el.CalculatedValue *= -1;\r\n        el.CalculatedValueWithTax *= -1;\r\n        el.Tax *= -1;\r\n        if (el.AmountToRefund)\r\n            el.AmountToRefund *= -1;\r\n        if (el.TaxToRefund)\r\n            el.TaxToRefund *= -1;\r\n        if (el.Total)\r\n            el.Total *= -1;\r\n    };\r\n\r\n    // s2 surcharge will be added into s1\r\n    static sumSurcharges(s1: IAPISurcharge, s2: IAPISurcharge, isNegative?: boolean) {\r\n        if (!s1 || !s2) return;\r\n        var sign = isNegative === true ? -1 : 1;\r\n        s1.CalculatedValue = ext.helperService.addValues(s1.CalculatedValue, sign * s2.CalculatedValue);\r\n        s1.CalculatedValueWithTax = ext.helperService.addValues(s1.CalculatedValueWithTax, sign * s2.CalculatedValueWithTax);\r\n        s1.Tax = ext.helperService.addValues(s1.Tax, sign * s2.Tax);\r\n        s1.AmountToRefund = ext.helperService.addValues(s1.AmountToRefund, sign * s2.AmountToRefund);\r\n        s1.TaxToRefund = ext.helperService.addValues(s1.TaxToRefund, sign * s2.TaxToRefund);\r\n        if (s1.Total && s2.Total)\r\n            s1.Total = ext.helperService.addValues(s1.Total, sign * s2.Total);\r\n    }\r\n\r\n    static groupSalesTree(sale: IAPISale, surcharges: any, customPaymentMethods: Array<IPaymentMethod>): IGroupedSale {\r\n        const nativeSale = convertFromOld(sale.RawSaleObject);\r\n        const paymap = new Map<string, IAPIPayment>();\r\n        const surmap = new Map<string, IAPISurcharge>();\r\n        const ghostsurlist = new Array<IAPISurcharge>();\r\n\r\n        const groupedSale = <IGroupedSale>\r\n            {\r\n                TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n                GhostSurcharge: 0,\r\n                TotalSale: 0,\r\n                TotalToRefund: 0,\r\n                ExchangeAmount: 0,\r\n                PaymentsMap: {},\r\n                PaymentsMap2: {},\r\n                LoyaltyRefundCoeff: 1 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n            };\r\n\r\n        this.goThroughEntireSaleItems(sale, (line, _isDirectSaleData) => {\r\n            if (!line.MissingInInvoice) {\r\n                if (line.IsProduct || line.ProductID) {\r\n                    let sm = Math.abs(line.TotalPerLine + (nativeSale.IsTaxInclusive !== true ? line.Tax : 0));\r\n                    if (line.Quantity < 0) sm *= -1; // actually API sales are composed so that only quantity sign defines amount sign\r\n                    groupedSale.TotalSale += ext.helperService.DEARRound(sm, 2);\r\n                } else if (!line.IsProduct && !line.IsGiftCard && !line.ProductID && line.Name === PaymentShortNameStandardType.Discount) {\r\n                    groupedSale.TotalSale += ext.helperService.DEARRound(line.TotalPerLine, 2); // count order level discount\r\n                }\r\n            }\r\n        });\r\n\r\n        this.goThroughEntireSaleSurcharges(sale, (item, isDirectSaleData) => {\r\n            const srch = <IAPISurcharge>angular.copy(item);\r\n\r\n            this.restoreSurcharge(srch, nativeSale.IsTaxInclusive);\r\n\r\n            // set refundable flag from global surcharge list\r\n            if (surcharges[srch.SurchargeID]) {\r\n                srch.RefundSurcharge = surcharges[srch.SurchargeID].RefundSurcharge;\r\n            }\r\n\r\n            if (item.PaymentShortName) {\r\n                // this is surcharge that was created as separation of cash surcharge refund\r\n                // but we still need to count it \r\n                srch.RefundSurcharge = true;\r\n                ghostsurlist.push(srch);\r\n            } else if (item.PaymentID) {\r\n                surmap.set(item.PaymentID, srch);\r\n                if (srch.RefundSurcharge === true)\r\n                    groupedSale.TotalSurcharge += (!isDirectSaleData ? -1 : 1) * srch.CalculatedValueWithTax;\r\n            }\r\n        });\r\n\r\n        this.goThroughEntireSalePayments(sale, (item, _isDirectSaleData) => {\r\n            this.setPaymentMethodName(item, customPaymentMethods);\r\n\r\n            //restore surcharges to payments\r\n            const srch = surmap.get(item.ID);\r\n            if (srch)\r\n                item.Surcharge = srch;\r\n        });\r\n\r\n        // group all surcharges\r\n        // also group payments\r\n        var paymentSum = 0;\r\n        var loyaltyPaymentSum = 0;\r\n        this.goThroughEntireSalePayments(sale, (item, isDirectSaleData) => {\r\n            var id = this.formPaymentID(item);\r\n\r\n            // collect only payments but not returns\r\n            if (isDirectSaleData) {\r\n                if (item.ShortName === PaymentShortNameStandardType.Loyalty)\r\n                    loyaltyPaymentSum += item.Amount;\r\n                else\r\n                    paymentSum += item.Amount;\r\n            } else if (item.Amount < 0) {\r\n                if (item.ShortName === PaymentShortNameStandardType.Loyalty)\r\n                    loyaltyPaymentSum -= item.Amount;\r\n                else\r\n                    paymentSum -= item.Amount;\r\n            }\r\n\r\n            var p = paymap.get(id);\r\n            if (!p) {\r\n                item = <IAPIPayment>angular.copy(item);\r\n                if (!isDirectSaleData) {\r\n                    item.Amount *= -1;\r\n                    if (item.Surcharge)\r\n                        this.negateSurcharge(item.Surcharge);\r\n                }\r\n                paymap.set(id, item);\r\n            } else {\r\n                p.Amount += (!isDirectSaleData ? -1 : 1) * item.Amount;\r\n                if (item.Surcharge)\r\n                    this.sumSurcharges(p.Surcharge, item.Surcharge, !isDirectSaleData); // add to p.Surcharge\r\n            }\r\n        });\r\n\r\n        if ((paymentSum + loyaltyPaymentSum) > 0)\r\n            groupedSale.LoyaltyRefundCoeff = paymentSum / (paymentSum + loyaltyPaymentSum);\r\n        else\r\n            groupedSale.LoyaltyRefundCoeff = 1;\r\n\r\n        // go through ghost list\r\n        ghostsurlist.forEach(srch => groupedSale.GhostSurcharge -= srch.CalculatedValueWithTax);\r\n        groupedSale.GhostSurcharge = ext.helperService.DEARRound(groupedSale.GhostSurcharge, 2);\r\n\r\n        // create initial surcharge copy for next calculations\r\n        groupedSale.PaymentsMap = {}; // all payments map for initial sale\r\n        Array.from(paymap.values()).forEach(p => {\r\n            p.ID = ext.uuid2Service.newguid();\r\n            if (p.Surcharge) {\r\n                p.Surcharge.PaymentID = p.ID;\r\n                p.InitialSurcharge = <IAPISurcharge>angular.copy(p.Surcharge);\r\n            }\r\n\r\n            groupedSale.PaymentsMap[p.ID] = p;\r\n        });\r\n\r\n        ext.cardPayService.createCardPaymentMap(groupedSale);\r\n        return groupedSale;\r\n    }\r\n\r\n    /*\r\n     Collect refunded amounts in relation to main sale.\r\n     */\r\n    static groupMainSaleRefunds(selectedItem: ISelectedItem, customPaymentMethods: Array<IPaymentMethod>) {\r\n        if (selectedItem.Data.FinancialStatus === FinancialStatusType.Closed && selectedItem.Data.Refunds) {\r\n            // if it's main sale, to correctly show refunded amounts, setup surcharges to them\r\n            selectedItem.RefundPayments = [];\r\n            let ps = new Array<IAPIPayment>();\r\n\r\n            Enumerable.from(selectedItem.Data.Refunds).forEach(ref =>\r\n                Enumerable.from(ref.Payments).forEach(p => {\r\n                    var pc = <IAPIPayment>angular.copy(p);\r\n                    this.setPaymentMethodName(pc, customPaymentMethods);\r\n                    ps.push(pc);\r\n                })\r\n            );\r\n\r\n            selectedItem.RefundPayments = Enumerable.from(ps)\r\n                .groupBy(p => p.ShortName)\r\n                .select(g => {\r\n                    return {\r\n                        ShortName: g.key(),\r\n                        PaymentTypeName: this.getPaymentName(g.key(), customPaymentMethods),\r\n                        Amount: g.sum(e => e.Amount)\r\n                    }\r\n                })\r\n                .where(s => s.Amount > 0)\r\n                .select(p => p)\r\n                .toArray();\r\n\r\n        }\r\n    }\r\n\r\n    static isSaleInNewFormat(sale: any): boolean {\r\n        return sale && sale.PayloadVersion === '3';\r\n    }\r\n\r\n    // see saleService.js getTaxObject\r\n    static getTaxObject(currentSale: ISale, el: ICheckoutItem) {\r\n        const tenantTax = ext.configService.tenantTaxRule;\r\n        const outletTax = ext.configService.lastOutletTax;\r\n        let customerTaxObject: ITax = null;\r\n\r\n        if (!ext.configService.ignoreCustomerTaxRule && currentSale.Customer && !!currentSale.Customer.TaxRuleID) {\r\n            customerTaxObject = <ITax>{\r\n                TaxRuleID: currentSale.Customer.TaxRuleID,\r\n                EffectiveInclusiveTaxPercent: currentSale.Customer.EffectivePercentInclusive,\r\n                EffectiveExclusiveTaxPercent: currentSale.Customer.EffectivePercentExclusive\r\n            };\r\n        }\r\n\r\n        var taxObject = this.getTaxObjectFromOldFormat(\r\n            (!!el && el.ProductTaxString) ? JSON.parse(el.ProductTaxString) :\r\n                customerTaxObject ? customerTaxObject :\r\n                    outletTax !== 'null' ? JSON.parse(outletTax) :\r\n                        JSON.parse(tenantTax));\r\n\r\n        return taxObject;\r\n    };\r\n\r\n    static getTaxObjectFromOldFormat(parsedTax: any): ITax {\r\n        return <ITax>{\r\n            TaxRuleID: parsedTax.TaxRuleID ? parsedTax.TaxRuleID : parsedTax.ruleID,\r\n            EffectiveInclusiveTaxPercent: parsedTax.TaxRuleID ? parsedTax.EffectiveInclusiveTaxPercent : parsedTax.effectivePercentInclusive,\r\n            EffectiveExclusiveTaxPercent: parsedTax.TaxRuleID ? parsedTax.EffectiveExclusiveTaxPercent : parsedTax.effectivePercentExclusive\r\n        };\r\n    }\r\n\r\n    static assignOutletInfo(info: IOutletInfo | null): IOutletInfo {\r\n        const rec = {} as IOutletInfo;\r\n\r\n        if (info && typeof info === 'object') {\r\n            if (info.Description) {\r\n                rec.Description = info.Description;\r\n            }\r\n            if (!!info.City || !!info.Country || !!info.Line1 || !!info.Line2 || !!info.Postcode || !!info.State) {\r\n                rec.City     = info.City;\r\n                rec.Country  = info.Country;\r\n                rec.Line1    = info.Line1;\r\n                rec.Line2    = info.Line2;\r\n                rec.Postcode = info.Postcode;\r\n                rec.State    = info.State;\r\n            }\r\n        }\r\n\r\n        return rec;\r\n    }\r\n\r\n}","import { IAngularStatic } from \"angular\";\r\nimport Enumerable from \"linq\";\r\nimport { IInputData, IOutputData, IPartialCalculator, IPartialExecutor } from \"./CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"./Enums\";\r\nimport PARTIAL_CALCULATORS from './PartialCalculators';\r\n\r\n\r\n\r\ndeclare const angular: IAngularStatic;\r\n// main service. Should be acessed via accessor CalculatorService.Instance\r\nexport class CalculatorService {\r\n    private static instance: CalculatorService = null;\r\n    private calculators: Enumerable.IDictionary<CalculationType, Array<IPartialExecutor>> = null;\r\n\r\n    static get Instance(): CalculatorService {\r\n        if (this.instance === null) {\r\n            this.instance = new CalculatorService();\r\n        }\r\n\r\n        return this.instance;\r\n    }\r\n\r\n    // lelel - minimal order number from which calculation will be started\r\n    calculate(type: CalculationType, inputData: IInputData, level: StartCalcLevel = StartCalcLevel.Setup): IOutputData {\r\n        const processors = this.calculators.get(type);\r\n        let out = <IOutputData>{\r\n            processResult: true,\r\n            errorMessage: null\r\n        };\r\n\r\n        processors.filter(p => p.order >= level).forEach(proc => {\r\n            if (out.processResult) {\r\n                out = angular.extend(out, proc.executor.calculate(type, inputData));\r\n            }\r\n        });\r\n\r\n        return out;\r\n    }\r\n\r\n    // constructor. Find and intinialize all partial calculators\r\n    private constructor() {\r\n        // enum all window objects and init partial calculator instances\r\n        const names = Object.getOwnPropertyNames(PARTIAL_CALCULATORS).filter(n => this.isPartialCalculator(PARTIAL_CALCULATORS[n]) === true);\r\n        const lst = new Array<IPartialExecutor>();\r\n\r\n        // fill all calculators\r\n        names.forEach(n => {\r\n            const p = this.getInstance(n);\r\n            p.getOptions().executionOptions.forEach(o => {\r\n                lst.push(<IPartialExecutor>{\r\n                    type: o.type,\r\n                    order: o.order,\r\n                    executor: p\r\n                });\r\n            })\r\n        });\r\n\r\n        // group and sort\r\n        this.calculators = Enumerable.from(lst)\r\n                            .groupBy(item => item.type)\r\n                            .select(r => {\r\n                                return {\r\n                                    type: <CalculationType><any>r.key(),\r\n                                    executors: Enumerable.from(r.getSource()).orderBy(k=>k.order).toArray()\r\n                                };\r\n                            }).toDictionary(k=>k.type, v=>v.executors);\r\n    }\r\n\r\n    private isPartialCalculator(_obj: any): _obj is IPartialCalculator {\r\n        return true;\r\n    }\r\n\r\n    private getInstance(name: string): IPartialCalculator {\r\n        var t = Object.create(PARTIAL_CALCULATORS[name].prototype);\r\n        t.constructor.apply(t);\r\n        return <IPartialCalculator>t;\r\n    }\r\n\r\n    getNumberOfCalculators(): number {\r\n        return this.calculators.count();\r\n    }\r\n}","import { CalculatorHelperService } from \"./CalculatorHelperService\";\r\nimport { SaleType, CustomDiscountType } from \"./Enums\";\r\nimport { ICheckoutItem, IProductDeal, ILineDiscountResult, ProductType } from \"./Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class CheckoutItem implements ICheckoutItem {\r\n    ID: string;\r\n    Name: string;\r\n    ProductID?: string;\r\n    ProductShortDescription: string;\r\n    ProductType: ProductType;\r\n    SerialNumber?: string;\r\n    SKU: string;\r\n    OptionLine: string;\r\n    FamilyID?: string;\r\n    SeparatedItemID?: string;\r\n    ComplexSeparatedItemID?: string;\r\n    ImageID?: string;\r\n    BasePrice: number;\r\n    FinalPrice: number;\r\n    FinalAmount: number;\r\n    FinalTaxAmount: number;\r\n    Barcode?: string;\r\n    BrandID?: string;\r\n    CategoryID: string;\r\n    Count: number;\r\n    Discounts: IProductDeal[];\r\n    LoyaltyPointsEarning: number;\r\n    SaleType?: SaleType;\r\n    CanDelete?: boolean;\r\n    CanEdit?: boolean;\r\n    Discount?: number;\r\n    ItemDiscount?: number;\r\n    DefaultPrice?: number;\r\n    Price1?: number;\r\n    Price2?: number;\r\n    Price3?: number;\r\n    Price4?: number;\r\n    Price5?: number;\r\n    Price6?: number;\r\n    Price7?: number;\r\n    Price8?: number;\r\n    Price9?: number;\r\n    Price10?: number;\r\n    Deals?: ILineDiscountResult[];\r\n    ExtraInfo?: string;\r\n    GiftCardCode?: string;\r\n    GiftCardExpirationDate?: string;\r\n    CF1?: string;\r\n    CF2?: string;\r\n    CF3?: string;\r\n    CF4?: string;\r\n    CF5?: string;\r\n    CF6?: string;\r\n    CF7?: string;\r\n    CF8?: string;\r\n    CF9?: string;\r\n    CF10?: string;\r\n    Note?: string;\r\n    Option1?: string;\r\n    Option2?: string;\r\n    Option3?: string;\r\n    Tags?: string;\r\n    CustomDiscountType?: CustomDiscountType;\r\n    TaxRuleID: string;\r\n    EffectiveInclusiveTaxPercent: number;\r\n    EffectiveExclusiveTaxPercent: number;\r\n    LoyaltyRatio?: number;\r\n    ProductTaxString: string;\r\n\r\n    BaseCount?: number; // for refund form stores initial number of items in sale\r\n    MaxCount?: number;\r\n    MinCount?: number;\r\n    Return?: boolean;\r\n    Sign?: number;\r\n    BaseTax?: number;\r\n    PriceBasedValue?: number;\r\n\r\n    constructor() {\r\n\r\n    }\r\n\r\n    isValid() {\r\n        return true;\r\n    }\r\n\r\n    static create(item: ICheckoutItem): ICheckoutItem {\r\n        if (!item) return new CheckoutItem();\r\n\r\n        if (typeof ((<any>item).isValid) !== 'function') {\r\n            // remove possible artefacts from old style sales (related to custom sale checkout items)\r\n            delete (<any>item).Price;\r\n            delete (<any>item).PriceWithTax;\r\n            delete (<any>item).Amount;\r\n\r\n            return angular.extend(new CheckoutItem(), item);\r\n        }\r\n        else\r\n            return <ICheckoutItem>item;\r\n    }\r\n\r\n    static copy(item: ICheckoutItem): ICheckoutItem {\r\n        let newItem = <ICheckoutItem>angular.copy(item);\r\n        return this.create(newItem);\r\n    }\r\n\r\n    /* we need to separate rounding of Order Lines and Addtitional Charges lines same as done in web\r\n        So Total will be ROUND(Lines) + Round(Additional Lines) and tax will be ROUND(Tax Lines) + ROUND(Tax Additional Lines)\r\n    */\r\n    static isAdditionalCharge(item: ICheckoutItem) {\r\n        // Quick Sale products\r\n        return item.SaleType === 'customsale';\r\n    }\r\n\r\n    // ********************************* old style support ***************\r\n    get Amount(): number {\r\n        return this.FinalAmount;\r\n    }\r\n\r\n    set Amount(v: number) {\r\n        throw new TypeError('Amout property does not exist. Use FinalAmount instead.');\r\n    }\r\n\r\n    get minCount(): number {\r\n        return CalculatorHelperService.zcn(this.MinCount);\r\n    }\r\n\r\n    get maxCount(): number {\r\n        return CalculatorHelperService.zcn(this.MaxCount);\r\n    }\r\n\r\n    get return(): boolean {\r\n        return CalculatorHelperService.zcb(this.Return);\r\n    }\r\n    set return(v: boolean) {\r\n        this.Return = v;\r\n    }\r\n\r\n    set sign(v: number) {\r\n        this.Sign = v;\r\n    }\r\n    get sign(): number {\r\n        return this.Sign;\r\n    }\r\n\r\n    get PriceWithDiscount(): number {\r\n        return this.FinalPrice;\r\n    }\r\n\r\n    get Price(): number {\r\n        return this.FinalPrice;\r\n    }\r\n\r\n    get Sku(): string {\r\n        return this.SKU;\r\n    }\r\n\r\n    get priceBasedValue(): number {\r\n        return this.PriceBasedValue;\r\n    }\r\n}","import { IAngularStatic } from \"angular\";\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class CertificateErrorComponent {\r\n    static $inject = ['$scope', 'helperService', CertificateErrorComponent];\r\n\r\n    constructor(private $scope: any, private helperService: any) {\r\n        this.$scope.$on('$viewContentLoaded', this.contentLoaded.bind(this));\r\n    }\r\n\r\n    contentLoaded() {\r\n        this.helperService.closeDialog($('#enterModal'));\r\n    }\r\n\r\n    openLink() {\r\n        cordova.InAppBrowser.open('https://support.dearsystems.com/support/solutions/articles/11000125998-cin7-core-applications-server-connection-error-update-certificate', '_system');\r\n    }\r\n   \r\n}\r\n\r\n\r\nangular.module(\"mainApp\").controller('certificateErrorComponent', CertificateErrorComponent.$inject);\r\n\r\nexport default 'certificateErrorComponent'","import { SecondScreenStates, SecondTerminalServiceWeb } from \"../Services/second-terminal.service\";\r\nimport { IContact, IReceiptSaleModel, ISale } from \"../Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\ndeclare var $: any;\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport interface ISecondScreenControllerScope {\r\n    backgroundColor: string;\r\n    logoUrl: any;\r\n    customerContact: IContact;\r\n    customizedUI: boolean;\r\n    receiptSaleModel: IReceiptSaleModel;\r\n    random: number;\r\n    currentSale: ISale;\r\n    secondScreenState: string;\r\n    finishLoading: Function;\r\n    currencyCulture: string;\r\n    $on: (s: string, f: Function) => void;\r\n    $apply(f: () => void): unknown;\r\n    currency_symbol: string;\r\n}\r\n\r\nexport interface IMessageData {\r\n    scope: ISecondScreenControllerScope;\r\n    secondScreenState: string;\r\n}\r\n\r\nexport class SecondScreenController {\r\n    static $inject = ['$scope', 'tmhDynamicLocale', 'helperService', '$locale', SecondScreenController];\r\n\r\n    private  = SecondScreenStates.Sale;\r\n    // @ts-ignore\r\n    private channel = new BroadcastChannel(SecondTerminalServiceWeb.ChannelName);\r\n\r\n    constructor(private $scope: ISecondScreenControllerScope, private tmhDynamicLocale: any, private helperService: any, private $locale: any) {\r\n        this.$scope.secondScreenState = SecondScreenStates.Off;\r\n        this.$scope.$on('$viewContentLoaded', this.contentLoaded.bind(this));\r\n        this.$scope.$on('$destroy', this.destroy.bind(this))\r\n        this.$scope.finishLoading = this.finishLoading.bind(this);\r\n        this.channel.onmessage = this.onMessage.bind(this);\r\n    }\r\n    \r\n    contentLoaded() {\r\n        $('.container-fluid.main-content').addClass('second-screen');\r\n    }\r\n\r\n\r\n    finishLoading() {\r\n        $('#secondScreen #backScreenTemplates').css('display', 'unset');\r\n    }\r\n\r\n    onMessage(event) {\r\n        const data: IMessageData = event.data;\r\n\r\n        this.$scope.$apply(() => {\r\n            console.log(event);\r\n            if (typeof data == 'object' && data.scope) {\r\n                // copy items to controllers scope\r\n                for (const key in data.scope) {\r\n                    this.$scope[key] = data.scope[key];\r\n                }\r\n\r\n                if (!this.$scope.customizedUI) {\r\n                    this.$scope.backgroundColor = '#EEF1F5';\r\n                }\r\n\r\n                if (this.$scope.currencyCulture) {\r\n                    this.tmhDynamicLocale.set(this.$scope.currencyCulture.toLowerCase());\r\n                    this.helperService.setSpecialCurrencySymbols();\r\n                }\r\n\r\n                if(this.$scope.currency_symbol) {\r\n                    this.$locale.NUMBER_FORMATS.CURRENCY_SYM = this.$scope.currency_symbol;\r\n                }\r\n                \r\n                this.$scope.secondScreenState = data.secondScreenState;\r\n                if (this.$scope.currentSale.Customer?.ID) {\r\n                    const sale = this.$scope.currentSale;\r\n                    if (sale.SelectedContact && sale.SelectedContact.ID) {\r\n                        this.$scope.customerContact = sale.SelectedContact;\r\n                    } else if (!!sale.Customer.Contacts && sale.Customer.Contacts.length > 0) {\r\n                        let cnts = sale.Customer.Contacts.filter(function (c) { return c.Default === true; });\r\n                        if (cnts.length === 0)\r\n                            cnts = sale.Customer.Contacts;\r\n                        const cnt = cnts[0];\r\n                        this.$scope.customerContact = cnt;\r\n                    }\r\n                }\r\n            }\r\n        })\r\n    }\r\n\r\n    destroy() {\r\n        this.channel.close();\r\n        this.channel = null;\r\n    }\r\n}\r\n\r\n\r\n(<any>angular).module('mainApp').controller('secondScreenController', SecondScreenController.$inject);","//import angular from \"angular\";\r\nimport { Sale } from \"./Sale\";\r\nimport Enumerable from \"linq\";\r\nimport { CheckoutItem } from \"./CheckoutItem\";\r\nimport { CalculatorHelperService } from \"./CalculatorHelperService\";\r\nimport { Moment } from \"moment\";\r\nimport { StartCalcLevel, SaleType, AddressType, DiscountType, DiscountLineType, SurchargeType, SaleStatusType, FinancialStatusType, PaymentShortNameStandardType } from \"./Enums\";\r\nimport { IInputData } from \"./CalculatorInterfaces\";\r\nimport { ISale, IAPISale, ICustomer, ISalesRepresentative, ITax, ICheckoutItem, IPayment, IRefundBase, IAddress, IContact, ICustomerDeal, IDiscount, ISurcharge, IAPIConvertConfig, IAPIProduct, IAPIPayment, IAPISurcharge, IAPIRefund, ProductType } from \"./Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const moment: Moment;\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class ConverterService {\r\n\r\n    // convert from old style sale to new style\r\n    // also it checks that sale object is new but constructed via JSON.parse\r\n    static convertFromOld(inputData: IInputData): ISale {\r\n        if (inputData.oldSale.PayloadVersion && inputData.oldSale.PayloadVersion === '3') { // already new one\r\n            inputData.sale = <ISale>CalculatorHelperService.saleFromRestoredString(inputData.oldSale);\r\n            return inputData.sale;\r\n        }\r\n        // make conversion\r\n        inputData.sale = new Sale();\r\n\r\n        this.setCheckoutsFromOldFormat(inputData);\r\n        this.setPaymentsFromOldFormat(inputData);\r\n        this.setCustomer(inputData);\r\n        this.setSalesRepresentative(inputData);\r\n        this.setSaleInfoFromOld(inputData);\r\n        return inputData.sale;\r\n    }\r\n\r\n    static convertToAPI(inputData: IInputData): IAPISale {\r\n        const currentSale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        this.setConversionData(inputData);\r\n        this.setFinancialStatus(inputData);\r\n        this.setConsolidationFlag(inputData.convertData);\r\n\r\n        let apiSale = this.createAPISale(inputData);\r\n\r\n        this.checkNFillStandaloneRefund(inputData, apiSale);\r\n\r\n        if (currentSale.ReturnID || cfg.isStandaloneReturn || cfg.isStandaloneExchange) {\r\n            // process refund items\r\n            const refund = this.setRefundSale(inputData, apiSale);\r\n            this.setRefundCheckoutItems(inputData, refund);\r\n            this.setSaleDiscount(inputData, apiSale);\r\n            this.setRefundPayments(inputData, refund);\r\n            this.setRounding(inputData, refund.Payments, true);\r\n            this.setSurcharges(inputData.sale.Payments, refund.Surcharges, true);\r\n        } else {\r\n            this.setSaleCheckoutItems(inputData, apiSale);\r\n            this.setSaleDiscount(inputData, apiSale);\r\n            this.setSalePayments(inputData, apiSale);\r\n            this.setRounding(inputData, apiSale.Payments);\r\n            this.setSurcharges(inputData.sale.Payments, apiSale.Surcharges);\r\n        }\r\n\r\n        // this.filterPayments(apiSale);\r\n\r\n        return apiSale;\r\n    }\r\n\r\n    //static preparePayloadForSave(sale: ISale): string {\r\n    //    if (sale.RawSaleObject)\r\n    //        delete sale.RawSaleObject; // leave only one current level\r\n\r\n    //    return JSON.stringify(sale);\r\n    //}\r\n\r\n    static convertAPIToSale(inputData: IInputData): ISale {\r\n\r\n        const dearSale = inputData.oldSale; // it's here API format sale from Cin7 Core\r\n        const sale = new Sale();\r\n        inputData.sale = sale;\r\n\r\n        sale.ID = dearSale.TaskID;\r\n        // sale.tempFields.isDiscountPercent = false;\r\n        sale.Comment = dearSale.CustomerNote;\r\n        sale.Customer = <ICustomer>{\r\n            ID: dearSale.CustomerID,\r\n            Name: dearSale.CustomerName,\r\n            StoreCredits: dearSale.CustomerStoreCredits,\r\n            EnableLoyaltyPoints: dearSale.CustomerEnableLoyaltyPoints,\r\n            LoyaltyPoints: dearSale.CustomerLoyaltyPoints\r\n        };\r\n        sale.OrderNumber = dearSale.InvoiceNumber;\r\n        sale.OrderType = '';\r\n        sale.IsTaxInclusive = dearSale.TaxInclusive;\r\n        if (dearSale.SalesRepresentative) {\r\n            sale.SalesRepresentative = <ISalesRepresentative>{\r\n                Name: dearSale.SalesRepresentative\r\n            };\r\n        }\r\n\r\n        this.setCheckoutItemsFromAPISale(inputData);\r\n        this.setPaymentsFromAPISale(inputData);\r\n        CalculatorHelperService.calculateCheckout(sale, null, StartCalcLevel.Tax);\r\n\r\n        return sale;\r\n\r\n    }\r\n\r\n    // helper functions\r\n    private static setCheckoutItemsFromAPISale(inputData: IInputData) {\r\n        const dearSale = inputData.oldSale; // it's here API format sale from Cin7 Core\r\n        const sale = inputData.sale;\r\n\r\n        <Array<any>>(dearSale.SaleLines).forEach(el => {\r\n            const taxObject = <ITax>{\r\n                EffectiveExclusiveTaxPercent: el.Tax,\r\n                EffectiveInclusiveTaxPercent: el.Tax,\r\n                TaxRuleID: el.TaxRule,\r\n            };\r\n\r\n            const price = typeof (el.Price) !== 'number' ? parseFloat(el.Price) : el.Price;\r\n            const itemDiscount = price / 100 * el.Discount;\r\n            const priceWithDiscount = price - itemDiscount;\r\n            const loyaltyEarning = typeof (el.LoyaltyEarning) != 'number' ? parseFloat(el.LoyaltyEarning) : el.LoyaltyEarning;\r\n            const pl = CheckoutItem.create(<ICheckoutItem>{\r\n                ID: ext.uuid2Service.newguid(),\r\n                TaxRuleID: taxObject.TaxRuleID,\r\n                EffectiveInclusiveTaxPercent: taxObject.EffectiveInclusiveTaxPercent,\r\n                EffectiveExclusiveTaxPercent: taxObject.EffectiveExclusiveTaxPercent,\r\n                LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                Name: el.Name,\r\n                Count: el.Quantity,\r\n                BasePrice: price,\r\n                FinalPrice: priceWithDiscount,\r\n                FinalAmount: priceWithDiscount * el.Quantity,\r\n                FinalTaxAmount: CalculatorHelperService.calculateTax(taxObject, priceWithDiscount * el.Quantity, sale.IsTaxInclusive),\r\n                Discounts: null,\r\n                Note: '',\r\n                SerialNumber: null,\r\n                ProductTaxString: el.ProductTaxString\r\n            });\r\n\r\n            if (el.ProductID !== \"00000000-0000-0000-0000-000000000000\") {\r\n\r\n                pl.ProductID = el.ProductID;\r\n                pl.Tags = el.Tags;\r\n                pl.BrandID = el.BrandID;\r\n                pl.CategoryID = el.CategoryID;\r\n                pl.FamilyID = el.FamilyID;\r\n                pl.CanEdit = false;\r\n                pl.CanDelete = false;\r\n                pl.DefaultPrice = el.Price;\r\n                pl.SaleType = SaleType.Sale;\r\n                pl.Barcode = el.Barcode;\r\n                pl.ImageID = el.ImageID;\r\n                pl.Option1 = el.Option1;\r\n                pl.Option2 = el.Option2;\r\n                pl.Option3 = el.Option3;\r\n                pl.ProductShortDescription = el.ProductShortDescription;\r\n                pl.ProductType = <ProductType>el.ProductType;\r\n                pl.CF1 = el.CF1;\r\n                pl.CF2 = el.CF2;\r\n                pl.CF3 = el.CF3;\r\n                pl.CF4 = el.CF4;\r\n                pl.CF5 = el.CF5;\r\n                pl.CF6 = el.CF6;\r\n                pl.CF7 = el.CF7;\r\n                pl.CF8 = el.CF8;\r\n                pl.CF9 = el.CF9;\r\n                pl.CF10 = el.CF10;\r\n                pl.ProductTaxString = el.ProductTaxString;\r\n\r\n                sale.CheckoutItems.push(pl);\r\n            } else if (el.Price >= 0) {\r\n                // custom sale\r\n                pl.ProductID = ext.uuid2Service.newguid();\r\n                pl.SaleType = SaleType.CustomSale;\r\n\r\n                sale.CheckoutItems.push(pl);\r\n            } else {\r\n                // actual discount line\r\n                sale.Discount += Math.abs(price * el.Quantity);\r\n            }\r\n        });\r\n    }\r\n\r\n    private static setPaymentsFromAPISale(inputData: IInputData) {\r\n        const dearSale = inputData.oldSale; // it's here API format sale from Cin7 Core\r\n        const sale = inputData.sale;\r\n\r\n        <Array<any>>(dearSale.Payments).forEach(el => {\r\n\r\n            var payment = <IPayment>{\r\n                ID: el.ID,\r\n                PaymentProcessorID: \"BackofficePayment\",\r\n                Amount: el.Amount,\r\n                Date: el.DatePaid,\r\n                ShortName: 'BackofficePayment_',\r\n                PaymentTypeName: \"Non-POS\",\r\n                Loyalty: 0,\r\n                Reference: null,\r\n                Surcharge: null\r\n            };\r\n\r\n            sale.Payments.push(payment);\r\n        });\r\n    }\r\n\r\n    private static setSaleInfoFromOld(inputData: IInputData) {\r\n        const { zct, zch, zcb } = CalculatorHelperService;\r\n\r\n        const os = inputData.oldSale;\r\n        const s = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        s.ID = os.ID;\r\n        s.ParentOrderID = !os.parentOrderID ? null : os.parentOrderID;\r\n        s.IsFirstChild = !os.IsFirstChild ? null : os.IsFirstChild;\r\n        s.NewRefundOrder = !os.newRefundOrder ? null : os.newRefundOrder;\r\n        s.PosOrderID = !os.PosOrderID ? null : os.PosOrderID;\r\n        s.ReturnID = !os.ReturnID ? null : os.ReturnID;\r\n        s.OperationID = !os.OperationID ? null : os.OperationID;\r\n        s.OrderNumber = os.OrderNumber;\r\n        s.OrderType = os.OrderType;\r\n        s.Barcode = !os.Barcode ? null : os.Barcode;\r\n        s.DateNative = !os.DateNative ? new Date() : os.DateNative;\r\n        s.Date = !os.Date ? null : os.Date;\r\n        s.SaleType = !os.SaleType ? SaleType.Sale : <SaleType>os.SaleType;\r\n        s.OperationName = !os.OperationName ? null : os.OperationName;\r\n        s.StandAloneReturn = !os.StandAloneReturn ? false : os.StandAloneReturn;\r\n        s.ClearOrderNumber = os.ClearOrderNumber;\r\n        s.SubTotal = !os.SubTotal ? 0 : os.SubTotal;// !os.Total ? (!os.BaseTotal ? 0 : os.BaseTotal) : os.Total;\r\n        s.Tax = !os.Tax ? (!os.CalculatedTax ? 0 : os.CalculatedTax) : os.Tax;\r\n        s.Discount = !os.Discount ? 0 : os.Discount;\r\n        s.IsDiscountPercent = os.IsDiscountPercent === true || os.isDiscountPercent === true;\r\n        s.LaybyDate = os.LaybyDate;\r\n\r\n        if (s.Discount) {\r\n            s.DiscountValue = os.discountValue;\r\n            // if (s.IsDiscountPercent)\r\n            //     s.DiscountValue = s.SubTotal * Math.min(Math.abs(s.Discount), 100) / 100;\r\n            // else\r\n            //     s.DiscountValue = Math.min(Math.abs(s.Discount), s.SubTotal);\r\n        }\r\n\r\n        s.Comment = !os.comment ? null : os.comment;\r\n        s.IsTaxInclusive = (cfg.taxInclusive === true || cfg.taxInclusive === false) ?\r\n            cfg.taxInclusive : CalculatorHelperService.isConfigTaxInclusive();\r\n        s.Total = !os.Total ? (s.SubTotal - s.DiscountValue + (s.IsTaxInclusive ? 0 : s.Tax)) : os.Total;\r\n        s.TotalCheckout = s.Total;\r\n        s.CashChangeAmount = ext.helperService.DEARRound(!os.CashChangeAmount ? 0 : os.CashChangeAmount, 6);\r\n        s.SelectedCouponID = !os.selectedCouponID ? null : os.selectedCouponID;\r\n        s.SelectedCouponDealID = !os.selectedCouponDealID ? null : os.selectedCouponDealID;\r\n        s.SelectedCoupon = !os.selectedCoupon ? null : os.selectedCoupon;\r\n        s.ReturnSelectedCouponID = !os.returnSelectedCouponID ? null : os.returnSelectedCouponID;\r\n        s.ReturnSelectedCouponDealID = !os.returnSelectedCouponDealID ? null : os.returnSelectedCouponDealID;\r\n        s.ReturnSelectedCoupon = !os.returnSelectedCoupon ? null : os.returnSelectedCoupon;\r\n        s.IsParked = !os.isParked ? false : os.isParked;\r\n        s.LoyaltyPoints = zch(os.LoyaltyPoints);\r\n        s.IsFromDearSale = !os.IsFromDearSale ? false : true;\r\n\r\n        if (os.isDiscountPercent !== null && os.isDiscountPercent !== undefined) {\r\n            s.IsDiscountPercent = os.isDiscountPercent;\r\n        }\r\n\r\n        if (os.note)\r\n            s.Comment = os.note;\r\n\r\n        if (os.Refunds) {\r\n            s.Refunds = new Array<IRefundBase>();\r\n            <Array<any>>(os.Refunds).forEach(r => {\r\n                s.Refunds.push(<IRefundBase>{\r\n                    RefundID: r.RefundID\r\n                })\r\n            });\r\n        }\r\n    }\r\n\r\n    private static setSalesRepresentative(inputData: IInputData) {\r\n        const oldSale = inputData.oldSale;\r\n        const sale = inputData.sale;\r\n        const reps = oldSale.salesRepresentative;\r\n        if (reps && typeof (reps) === 'string') {\r\n            sale.SalesRepresentative = <ISalesRepresentative>{\r\n                Name: reps\r\n            };\r\n        } else if (reps) {\r\n            sale.SalesRepresentative = <ISalesRepresentative>{\r\n                ID: reps.ID,\r\n                Name: reps.Name,\r\n                PosOutletID: !reps.PosOutletID ? null : reps.PosOutletID\r\n            };\r\n        }\r\n    }\r\n\r\n    private static setCustomer(inputData: IInputData) {\r\n        const oldSale = inputData.oldSale;\r\n        const sale = inputData.sale;\r\n\r\n        if (oldSale.customer) {\r\n            const c = oldSale.customer;\r\n            sale.Customer = <ICustomer>{\r\n                ID: c.ID,\r\n                Name: c.Name,\r\n                Account: c.Account,\r\n                AccountReceivable: c.AccountReceivable,\r\n                Addresses: new Array<IAddress>(),\r\n                Contacts: new Array<IContact>(),\r\n                CreditLimit: c.CreditLimit,\r\n                Currency: c.Currency,\r\n                Discount: c.Discount,\r\n                Discounts: new Array<ICustomerDeal>(),\r\n                MatrixDiscounts: new Array<IDiscount>(),\r\n                PriceTier: c.PriceTier,\r\n                RevenueAccount: c.RevenueAccount,\r\n                StoreCredits: c.StoreCredits,\r\n                Tags: c.Tags,\r\n                TaxNumber: c.TaxNumber,\r\n                TaxRule: c.TaxRule,\r\n                TaxRuleID: c.TaxRuleID,\r\n                EffectivePercentExclusive: c.EffectivePercentExclusive,\r\n                EffectivePercentInclusive: c.EffectivePercentInclusive,\r\n                EnableLoyaltyPoints: c.EnableLoyaltyPoints,\r\n                LoyaltyPoints: c.LoyaltyPoints,\r\n                DontReloadAddresses: c.DontReloadAddresses,\r\n                DontReloadContacts: c.DontReloadContacts\r\n            };\r\n\r\n            if (c.LoadedFromLocalDb === true || c.LoadedFromLocalDb === false)\r\n                sale.Customer.LoadedFromLocalDb = c.LoadedFromLocalDb;\r\n\r\n            if (c.Addresses) {\r\n                let ad: Array<any>;\r\n\r\n                if (typeof (c.Addresses) === 'string') {\r\n                    ad = JSON.parse(c.Addresses);\r\n                } else if (Array.isArray(c.Addresses)) {\r\n                    ad = c.Addresses;\r\n                } else ad = [];\r\n\r\n                ad.forEach(a => {\r\n                    const adr = <IAddress>{\r\n                        ID: a.ID,\r\n                        City: !a.City ? a.city : a.City,\r\n                        Country: !a.Country ? a.country : a.Country,\r\n                        DefaultForType: a.DefaultForType,\r\n                        Line1: !a.Line1 ? a.line1 : a.Line1,\r\n                        Postcode: !a.Postcode ? a.postcode : a.Postcode,\r\n                        Type: <AddressType>(!a.Type ? a.type : a.Type)\r\n                    };\r\n\r\n                    if (a.Line2 || a.line2) {\r\n                        adr.Line2 = !a.Line2 ? a.line2 : a.Line2;\r\n                    }\r\n\r\n                    if (a.state || a.State) {\r\n                        adr.State = !a.State ? a.state : a.State;\r\n                    }\r\n\r\n                    sale.Customer.Addresses.push(adr);\r\n                });\r\n            }\r\n\r\n            if (c.Contacts) {\r\n                <Array<any>>(c.Contacts).forEach(c => {\r\n                    const cnt = <IContact>{\r\n                        ID: c.ID,\r\n                        Default: c.Default,\r\n                        Email: c.Email,\r\n                        Fax: c.Fax,\r\n                        IncludeInEmail: c.IncludeInEmail,\r\n                        JobTitle: c.JobTitle,\r\n                        MobilePhone: c.MobilePhone,\r\n                        Name: c.Name,\r\n                        Phone: c.Phone,\r\n                        Website: c.Website\r\n                    };\r\n\r\n                    sale.Customer.Contacts.push(cnt);\r\n                });\r\n            }\r\n\r\n            if (c.Discounts) {\r\n                <Array<any>>(c.Discounts).forEach(d => {\r\n                    const cd = <ICustomerDeal>{\r\n                        CustomerID: d.CustomerID,\r\n                        DealID: d.DealID\r\n                    };\r\n\r\n                    sale.Customer.Discounts.push(cd);\r\n                });\r\n            }\r\n\r\n            if (c.MatrixDiscounts) {\r\n                <Array<any>>(c.MatrixDiscounts).forEach(m => {\r\n                    const mtx = <IDiscount>{\r\n                        Type: <DiscountType>m.Type,\r\n                        DiscountLineType: <DiscountLineType>m.DiscountLineType,\r\n                        ProductID: m.ProductID,\r\n                        CustomerID: m.CustomerID,\r\n                        ByTag: m.ByTag,\r\n                        MaxValue: m.MaxValue,\r\n                        MinValue: m.MinValue,\r\n                        Amount: m.Amount\r\n                    };\r\n\r\n                    sale.Customer.MatrixDiscounts.push(mtx);\r\n                });\r\n            }\r\n        } else {\r\n            sale.Customer = <ICustomer>{\r\n                ID: null\r\n            };\r\n        }\r\n    }\r\n\r\n    private static setPaymentsFromOldFormat(inputData: IInputData) {\r\n        const oldSale = inputData.oldSale;\r\n        const sale = inputData.sale;\r\n\r\n        if (Array.isArray(oldSale.Payments)) {\r\n            <Array<any>>(oldSale.Payments).forEach(p => {\r\n                const el = <IPayment>{\r\n                    Amount: p.Amount,\r\n                    Date: p.Date,\r\n                    ID: p.ID,\r\n                    Loyalty: !p.Loyalty ? 0 : p.Loyalty,\r\n                    PaymentProcessorID: p.PaymentProcessorID,\r\n                    PaymentTypeName: p.PaymentTypeName,\r\n                    ShortName: p.ShortName,\r\n                    Reference: !p.Reference ? null : p.Reference,\r\n                    ServerTransactionID: !p.ServerTransactionID ? null : p.ServerTransactionID,\r\n                    ClientTransactionID: !p.ClientTransactionID ? null : p.ClientTransactionID,\r\n                    SaleServerTransactionID: !p.SaleServerTransactionID ? null : p.SaleServerTransactionID,\r\n                    TransactionMetaData: !p.TransactionMetaData ? null : p.TransactionMetaData,\r\n                    GiftCardID: !p.GiftCardID ? null : p.GiftCardID,\r\n                    Surcharge: null\r\n                };\r\n\r\n                if (p.Surcharge) {\r\n                    const s = p.Surcharge;\r\n                    el.Surcharge = <ISurcharge>{\r\n                        SurchargeID: s.SurchargeID,\r\n                        Type: <SurchargeType>s.Type,\r\n                        Name: s.Name,\r\n                        CalculatedValue: s.CalculatedValue,\r\n                        CalculatedValueWithTax: s.CalculatedValueWithTax,\r\n                        PaymentID: s.PaymentID,\r\n                        RefundSurcharge: s.RefundSurcharge,\r\n                        Tax: s.Tax,\r\n                        TaxRuleID: s.TaxRuleID,\r\n                        Value: s.Value\r\n                    };\r\n                }\r\n\r\n                sale.Payments.push(el);\r\n            });\r\n        }\r\n    }\r\n\r\n    public static convertFromOldCheckoutItem(oel: any): ICheckoutItem {\r\n        const el = CheckoutItem.create(<ICheckoutItem>{\r\n            ID: oel.ID,\r\n            FinalAmount: oel.Amount,\r\n            Barcode: !oel.BarCode ? null : oel.BarCode,\r\n            BasePrice: Math.abs(oel.BasePrice),\r\n            FinalPrice: Math.abs(oel.BasePriceWithDiscount),\r\n            BrandID: oel.BrandID,\r\n            ImageID: oel.ImageID,\r\n            CF1: oel.CF1,\r\n            CF2: oel.CF2,\r\n            CF3: oel.CF3,\r\n            CF4: oel.CF4,\r\n            CF5: oel.CF5,\r\n            CF6: oel.CF6,\r\n            CF7: oel.CF7,\r\n            CF8: oel.CF8,\r\n            CF9: oel.CF9,\r\n            CF10: oel.CF10,\r\n            CanDelete: oel.CanDelete,\r\n            CanEdit: oel.CanEdit,\r\n            DefaultPrice: oel.DefaultPrice,\r\n            ItemDiscount: CalculatorHelperService.zch(oel.itemDiscount),\r\n            Discount: CalculatorHelperService.zch(oel.Discount),\r\n            Price1: oel.Price1,\r\n            Price2: oel.Price2,\r\n            Price3: oel.Price3,\r\n            Price4: oel.Price4,\r\n            Price5: oel.Price5,\r\n            Price6: oel.Price6,\r\n            Price7: oel.Price7,\r\n            Price8: oel.Price8,\r\n            Price9: oel.Price9,\r\n            Price10: oel.Price10,\r\n            FamilyID: oel.FamilyID,\r\n            CategoryID: oel.CategoryID,\r\n            Count: oel.Count * (oel.Amount < 0 ? -1 : 1),\r\n            OptionLine: oel.OptionLine,\r\n            Name: oel.Name,\r\n            Note: oel.Note,\r\n            Option1: oel.Option1,\r\n            Option2: oel.Option2,\r\n            Option3: oel.Option3,\r\n            FinalTaxAmount: oel.Tax,\r\n            ProductID: oel.ProductID,\r\n            ProductShortDescription: oel.ProductShortDescription,\r\n            ProductType: <ProductType>oel.ProductType,\r\n            SaleType: <SaleType>oel.SaleType,\r\n            SerialNumber: oel.SerialNumber,\r\n            SKU: oel.Sku,\r\n            TaxRuleID: oel.TaxRuleID,\r\n            Tags: oel.Tags,\r\n            LoyaltyPointsEarning: oel.LoyaltyPointsEarning,\r\n            GiftCardCode: !oel.GiftCardCode ? null : oel.GiftCardCode,\r\n            GiftCardExpirationDate: !oel.GiftCardExpirationDate ? null : oel.GiftCardExpirationDate,\r\n            Discounts: oel.Discounts\r\n        });\r\n\r\n        if (oel.Taxes) {\r\n            el.EffectiveInclusiveTaxPercent = oel.Taxes.effectivePercentInclusive;\r\n            el.EffectiveExclusiveTaxPercent = oel.Taxes.effectivePercentExclusive;\r\n        }\r\n\r\n        if (oel.CustomDiscountType)\r\n            el.CustomDiscountType = oel.CustomDiscountType;\r\n\r\n        if (oel.ExtraInfo)\r\n            el.ExtraInfo = oel.ExtraInfo;\r\n\r\n        if (oel.SeparatedItemID)\r\n            el.SeparatedItemID = oel.SeparatedItemID;\r\n\r\n        if (oel.ComplexSeparatedItemID)\r\n            el.ComplexSeparatedItemID = oel.ComplexSeparatedItemID;\r\n\r\n        if (oel.deals && oel.deals.length > 0) {\r\n            el.Deals = angular.copy(oel.deals);\r\n            if (el.Deals) {\r\n                el.Deals.forEach(d => {\r\n                    d.applyPriority = (<any>d).applyProirity;\r\n                    delete (<any>d).applyProirity;\r\n                    delete d.itemsToSeparate;\r\n                })\r\n            }\r\n        } else el.Deals = [];\r\n\r\n        return el;\r\n    }\r\n\r\n    private static setCheckoutsFromOldFormat(inputData: IInputData) {\r\n        const oldSale = inputData.oldSale;\r\n        const sale = inputData.sale;\r\n\r\n        if (oldSale.CheckoutItems) {\r\n            <Array<any>>(oldSale.CheckoutItems).forEach(oel => {\r\n                const el = ConverterService.convertFromOldCheckoutItem(oel);\r\n                sale.CheckoutItems.push(el);\r\n            });\r\n        }\r\n    }\r\n\r\n    private static setConversionData(inputData: IInputData) {\r\n        const cfg = inputData.convertData;\r\n        const sale = inputData.sale;\r\n        cfg.taxInclusive = sale.IsTaxInclusive; // should be set in sale controller\r\n        cfg.isStandaloneReturn = sale.StandAloneReturn === true; // standalone refund is special case\r\n        cfg.isStandaloneExchange = sale.StandAloneExchange === true; // standalone exchange is special case\r\n        cfg.taxPrecision = (ext.configService.taxCalculationMethod == 'Row Total' ? 2 : 4);\r\n    }\r\n\r\n    static convertSaleStatusToFinancialStatus(st: SaleStatusType) {\r\n        let res: FinancialStatusType;\r\n\r\n        switch (st) {\r\n            case SaleStatusType.Closed:\r\n                res = FinancialStatusType.Closed;\r\n                break;\r\n            case SaleStatusType.Layby:\r\n                res = FinancialStatusType.Layby;\r\n                break;\r\n            case SaleStatusType.LaybyClosed:\r\n                res = FinancialStatusType.LaybyClosed;\r\n                break;\r\n            case SaleStatusType.OnAccount:\r\n                res = FinancialStatusType.OnAccount;\r\n                break;\r\n            case SaleStatusType.OnAccountClosed:\r\n                res = FinancialStatusType.OnAccountClosed;\r\n                break;\r\n            case SaleStatusType.Parked:\r\n                res = FinancialStatusType.Parked;\r\n                break;\r\n            default:\r\n                throw new TypeError('Sale status cannot be converted to financial status!');\r\n        }\r\n\r\n        return res;\r\n    }\r\n\r\n    private static filterPayments(currentSaleObject: IAPISale) {\r\n        currentSaleObject.Payments = currentSaleObject.Payments.filter(el => el.ShortName !== 'Discount');\r\n    }\r\n\r\n    // Return real sale status\r\n    private static setFinancialStatus(inputData: IInputData) {\r\n        const cfg = inputData.convertData;\r\n        const sale = inputData.sale;\r\n        let retStatus = this.convertSaleStatusToFinancialStatus(cfg.status);\r\n\r\n        if (cfg.status === SaleStatusType.Closed) {\r\n            if (sale.OrderType === FinancialStatusType.OnAccount) {\r\n                if (cfg.isPartiallyPaid) {\r\n                    retStatus = FinancialStatusType.OnAccount;\r\n                } else {\r\n                    retStatus = FinancialStatusType.OnAccountClosed;\r\n                }\r\n            }\r\n\r\n            if (sale.OrderType === SaleStatusType.Layby) {\r\n                if (cfg.isPartiallyPaid) {\r\n                    retStatus = FinancialStatusType.Layby;\r\n                } else {\r\n                    retStatus = FinancialStatusType.LaybyClosed;\r\n                }\r\n            }\r\n        }\r\n\r\n        cfg.finStatus = retStatus;\r\n    }\r\n\r\n    private static setConsolidationFlag(cfg: IAPIConvertConfig) {\r\n        let doNotConsolidate = false;\r\n\r\n        switch (cfg.finStatus) {\r\n            case FinancialStatusType.Layby:\r\n            case FinancialStatusType.LaybyClosed:\r\n            case FinancialStatusType.OnAccount:\r\n            case FinancialStatusType.OnAccountClosed:\r\n                doNotConsolidate = true;\r\n                break;\r\n        }\r\n\r\n        if (cfg.isStandaloneReturn)\r\n            doNotConsolidate = true;\r\n\r\n        cfg.doNotConsolidate = doNotConsolidate;\r\n    }\r\n\r\n    private static getOrderNumber(sale: ISale): string {\r\n        if (((sale.IsParked === true && !!sale.RegistryID) || sale.IsFromDearSale) && sale.OrderNumber) {\r\n            return sale.OrderNumber;\r\n        }\r\n        const prefix = ext.configService.registryPrefix || '';\r\n        const suffix = ext.configService.registrySuffix || '';\r\n        const clearOrderNumber = (sale.ClearOrderNumber && String(sale.ClearOrderNumber).trim()) || '000000';\r\n        return `${prefix}${clearOrderNumber}${suffix}`;\r\n    }\r\n\r\n    // create partially filled API sale\r\n    private static createAPISale(inputData: IInputData): IAPISale {\r\n        const sale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n        const isParked = sale.IsParked === true && !!sale.RegistryID;\r\n\r\n        // @ts-ignore TODO\r\n        const apiSale = <IAPISale>{\r\n            OrderID: sale.ID,\r\n            OperationID: !sale.OperationID ? ext.uuid2Service.newguid() : sale.OperationID,\r\n            Date: moment.utc(),\r\n            LaybyDate: sale.LaybyDate,\r\n            RegistryID: isParked ? sale.RegistryID : ext.configService.lastRegistryID,\r\n            Currency: ext.configService.currency,\r\n            TaxInclusive: sale.IsTaxInclusive,\r\n            DoNotConsolidate: cfg.doNotConsolidate,\r\n            FinancialStatus: cfg.finStatus,\r\n            SalesRepresentative: !sale.SalesRepresentative ? '' : sale.SalesRepresentative.Name,\r\n            UserName: isParked ? sale.UserName || '' : ext.configService.userName,\r\n            CustomerID: !sale.Customer ? null : sale.Customer.ID,\r\n            CustomerName: !sale.Customer ? '' : sale.Customer.Name,\r\n            Lines: new Array<IAPIProduct>(),\r\n            Payments: new Array<IAPIPayment>(),\r\n            Surcharges: new Array<IAPISurcharge>(),\r\n            OrderNumber: this.getOrderNumber(sale),\r\n            ClearOrderNumber: !sale.ClearOrderNumber ? '000000' : sale.ClearOrderNumber,\r\n            CustomerNote: !sale.Comment ? '' : sale.Comment,\r\n            Total: sale.Total, // should be number, not string\r\n            RegistryCloseID: ext.configService.registrySalesID,\r\n            SequenceGeneration: 'client',\r\n            standaloneRefund: cfg.isStandaloneReturn,\r\n            standaloneExchange: cfg.isStandaloneExchange,\r\n            ParentOrderID: sale.ParentOrderID,\r\n            LoyaltyUpdate: null,// lets controller to determine itself the loyalty update. sale.calculateTotalLoyalty()\r\n            IsFromDearSale: sale.IsFromDearSale,\r\n            CustomerEmail: !sale.SelectedContact ? null : sale.SelectedContact.Email,\r\n            CustomerMobilePhone: !sale.SelectedContact ? null : sale.SelectedContact.MobilePhone,\r\n            Discount: sale.DiscountValueRaw,\r\n            MarketingConsent: !sale.SelectedContact ? null : sale.SelectedContact.MarketingConsent,\r\n            CustomerContactID: !sale.SelectedContact ? null : sale.SelectedContact.ID,\r\n            CustomerShippingAddressLine1: sale.CustomerShippingAddressLine1 || '',\r\n            CustomerShippingAddressLine2: sale.CustomerShippingAddressLine2 || '',\r\n            CustomerShippingCity: sale.CustomerShippingCity || '',\r\n            CustomerShippingCountry: sale.CustomerShippingCountry || '',\r\n            CustomerShippingProvince: sale.CustomerShippingProvince || '',\r\n            CustomerShippingZip: sale.CustomerShippingZip || '',\r\n            UpdateReceiptView: false,\r\n            UpdateRegistrySequenceIfDuplicate: !isParked,\r\n            SendReceiptViaEmail: !sale.Customer ? null : sale.Customer.SendReceiptViaEmail,\r\n            OutletName: ext.configService.lastOutlet,\r\n            OutletID: ext.configService.lastECSMappingOutletID\r\n        };\r\n\r\n        return apiSale;\r\n    }\r\n\r\n    private static checkNFillStandaloneRefund(inputData: IInputData, currentSaleObject: IAPISale) {\r\n        const cfg = inputData.convertData;\r\n        const sale = inputData.sale;\r\n        if (cfg.isStandaloneReturn) {\r\n            currentSaleObject.OrderNumber = sale.ClearOrderNumber;\r\n            currentSaleObject.ClearOrderNumber = sale.ClearOrderNumber;\r\n            currentSaleObject.AdjustRefunds = !sale.AdjustRefunds ? false : true;\r\n            var line = <IAPIProduct>{\r\n                ProductID: null,\r\n                ProductName: 'Standalone Refund',\r\n                SKU: 'Standalone Refund',\r\n                Quantity: 1,\r\n                Price: 0,\r\n                TotalPerLine: 0,\r\n                Tax: 0,\r\n                TaxRuleID: null,\r\n                CalculateTax: false,\r\n                ImageID: null,\r\n                ProductType: null\r\n            };\r\n\r\n            currentSaleObject.Lines.push(line);\r\n        }\r\n\r\n    }\r\n\r\n    private static setSaleCheckoutItems(inputData: IInputData, currentSaleObject: IAPISale) {\r\n        const sale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        if (sale.ReturnID || sale.StandAloneReturn === true) return; // we do not process refunds here\r\n\r\n        this.setCheckoutItems(cfg, sale.CheckoutItems, currentSaleObject.Lines, false);\r\n    }\r\n\r\n    private static setRefundCheckoutItems(inputData: IInputData, refund: IAPIRefund) {\r\n        const sale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        this.setCheckoutItems(cfg, sale.CheckoutItems, refund.Lines, true);\r\n    }\r\n\r\n    private static setCheckoutItems(cfg: IAPIConvertConfig, items: Array<ICheckoutItem>, linesContainer: Array<IAPIProduct>, isRefund: boolean) {\r\n\r\n        items.forEach(el => {\r\n            const line = <IAPIProduct>{\r\n                ProductID: el.SaleType === SaleType.CustomSale ? null : el.ProductID,\r\n                Quantity: ext.helperService.DEARRound(isRefund === true ? -1 * el.Count : el.Count, 4),\r\n                Discount: isRefund ? -el.ItemDiscount : el.ItemDiscount,\r\n                // OverriddenPrice: null, // try to escape from this price.\r\n                Price: ext.helperService.DEARRound(Math.abs(el.FinalPrice), 4),\r\n                //                    TotalPerLine: ext.helperService.DEARRound(isRefund === true ? -1 * el.FinalAmount : el.FinalAmount, cfg.taxPrecision),\r\n                TotalPerLine: ext.helperService.DEARRound(Math.abs(el.FinalAmount), cfg.taxPrecision), // Cin7 Core sim accepts only positive amount always\r\n                //                Tax: ext.helperService.DEARRound(isRefund === true ? -1 * el.FinalTaxAmount : el.FinalTaxAmount, cfg.taxPrecision),\r\n                Tax: ext.helperService.DEARRound(Math.abs(el.FinalTaxAmount), cfg.taxPrecision),\r\n                TaxRuleID: el.TaxRuleID,\r\n                CalculateTax: false,\r\n                ImageID: el.ImageID,\r\n                ProductType: el.ProductType,\r\n                SerialNumber: el.SerialNumber,\r\n                MissingInInvoice: el.MissingInInvoice\r\n            };\r\n\r\n            if (el.SaleType === SaleType.CustomSale) line.ProductName = el.Name;\r\n            if (el.GiftCardCode) line.GiftCardCode = el.GiftCardCode;\r\n\r\n            if (el.GiftCardExpirationDate)\r\n                line.GiftCardExpirationDate = ext.helperService.toDateFromDatepickerParameter(el.GiftCardExpirationDate);\r\n\r\n            linesContainer.push(line);\r\n        });\r\n    }\r\n\r\n    private static setSurcharges(payments: Array<IPayment>, surcharges: Array<IAPISurcharge>, changeSign?: boolean) {\r\n\r\n        if (payments) {\r\n            payments.forEach(payment => {\r\n                if (payment.Surcharge) {\r\n                    const srch = payment.Surcharge;\r\n                    const line = <IAPISurcharge>{\r\n                        Total: srch.CalculatedValue * (changeSign === true ? -1 : 1),\r\n                        Tax: srch.Tax * (changeSign === true ? -1 : 1),\r\n                        Name: srch.Name,\r\n                        Type: srch.Type,\r\n                        Value: srch.Value,\r\n                        SurchargeID: srch.SurchargeID,\r\n                        TaxRuleID: srch.TaxRuleID,\r\n                        PaymentRealAmount: srch.CalculatedValueWithTax * (changeSign === true ? -1 : 1),\r\n                        RefundSurcharge: srch.RefundSurcharge,\r\n                        PaymentID: payment.ID\r\n                    };\r\n\r\n                    if (srch.PaymentShortName)\r\n                        line.PaymentShortName = srch.PaymentShortName;\r\n\r\n                    surcharges.push(line);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    private static setSaleDiscount(inputData: IInputData, currentSaleObject: IAPISale) {\r\n        const sale = inputData.sale;\r\n\r\n        if (sale.DiscountValue) {\r\n            var discountPaymentLine = <IAPIPayment>{\r\n                ID: ext.uuid2Service.newguid(),\r\n                PaymentProcessorID: null,\r\n                Amount: sale.DiscountValue,\r\n                Date: moment.utc(),\r\n                ShortName: \"Discount\"\r\n            };\r\n            currentSaleObject.Payments.push(discountPaymentLine);\r\n        }\r\n    }\r\n\r\n    private static setSalePayments(inputData: IInputData, currentSaleObject: IAPISale) {\r\n        const sale = inputData.sale;\r\n\r\n        if (!sale.ReturnID) {\r\n            sale.Payments.forEach(el => {\r\n                if (el.Amount >= 0 || (el.ShortName === PaymentShortNameStandardType.Rounding && el.Amount != 0)) {\r\n                    var p = <IAPIPayment>{\r\n                        ID: el.ID,\r\n                        PaymentProcessorID: el.PaymentProcessorID,\r\n                        Amount: el.Amount,\r\n                        Date: el.Date,\r\n                        ShortName: el.ShortName,\r\n                        Loyalty: (sale.Customer && sale.Customer.ID) ? el.Loyalty : 0,\r\n                        Reference: el.Reference\r\n                    };\r\n\r\n                    if (el.ClientTransactionID)\r\n                        p.ClientTransactionID = el.ClientTransactionID;\r\n\r\n                    if (el.ServerTransactionID) {\r\n                        p.ServerTransactionID = el.ServerTransactionID;\r\n                        p.ClientTransactionID = !p.ClientTransactionID ? null : p.ClientTransactionID;\r\n                    }\r\n\r\n                    if (el.SaleServerTransactionID)\r\n                        p.SaleServerTransactionID = el.SaleServerTransactionID;\r\n\r\n                    if (el.TransactionMetaData)\r\n                        p.TransactionMetaData = el.TransactionMetaData;\r\n\r\n                    if (el.GiftCardID) p.GiftCardID = el.GiftCardID;\r\n\r\n                    currentSaleObject.Payments.push(p);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    private static setRefundPayments(inputData: IInputData, refund: IAPIRefund) {\r\n        const sale = inputData.sale;\r\n\r\n        sale.Payments.forEach(el => {\r\n            var p = <IAPIPayment>{\r\n                ID: el.ID,\r\n                PaymentProcessorID: el.PaymentProcessorID,\r\n                Amount: el.ShortName === 'Discount' ? Math.abs(el.Amount) : el.Amount * -1,\r\n                Loyalty: Math.abs(el.Loyalty),\r\n                Date: el.Date,\r\n                ShortName: el.ShortName,\r\n                Reference: el.Reference\r\n            };\r\n\r\n            if (el.ClientTransactionID)\r\n                p.ClientTransactionID = el.ClientTransactionID;\r\n\r\n            if (el.ServerTransactionID) {\r\n                p.ServerTransactionID = el.ServerTransactionID;\r\n                p.ClientTransactionID = !p.ClientTransactionID ? null : p.ClientTransactionID;\r\n            }\r\n\r\n            if (el.SaleServerTransactionID)\r\n                p.SaleServerTransactionID = el.SaleServerTransactionID;\r\n\r\n            if (el.TransactionMetaData)\r\n                p.TransactionMetaData = el.TransactionMetaData;\r\n\r\n            if (el.GiftCardID) p.GiftCardID = el.GiftCardID;\r\n\r\n            refund.Payments.push(p);\r\n        });\r\n    }\r\n\r\n    private static setRounding(inputData: IInputData, payments: Array<IAPIPayment>, changeSign?: boolean) {\r\n        // check and remove zero rounding\r\n        payments = Enumerable.from(payments)\r\n            .where(p => p.ShortName !== PaymentShortNameStandardType.Rounding)\r\n            .select(p => p).toArray();\r\n\r\n        // commented as rounding is already in payments only\r\n        //const sale = inputData.sale;\r\n\r\n        //if (!sale.ReturnID) {\r\n        //    sale.Payments.forEach(el => {\r\n        //        if (el.ShortName === 'Rounding') {\r\n        //            var roundingPaymentLine = <IAPIPayment>{\r\n        //                ID: el.ID,\r\n        //                Amount: changeSign !== true ? el.Amount : (el.Amount* -1),\r\n        //                Date: el.Date,\r\n        //                ShortName: el.ShortName,\r\n        //                Loyalty: 0\r\n        //            };\r\n        //            payments.push(roundingPaymentLine);\r\n        //        }\r\n        //    });\r\n        //}\r\n    }\r\n\r\n    private static setRefundSale(inputData: IInputData, currentSaleObject: IAPISale): IAPIRefund {\r\n        const sale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        currentSaleObject.RefundForOrderID = sale.ID;\r\n        currentSaleObject.FinancialStatus = FinancialStatusType.Returned;\r\n        currentSaleObject.OperationID = ext.uuid2Service.newguid();\r\n\r\n        if (cfg.isContinue !== true) {\r\n            // orderid below will be used as posorderid as well\r\n            currentSaleObject.OrderID = sale.NewRefundOrder ? sale.NewRefundOrder : ext.uuid2Service.newguid();\r\n        }\r\n        else {\r\n            const order = !sale.PosOrderID ? sale.NewRefundOrder : sale.PosOrderID;\r\n\r\n            currentSaleObject.OrderID = order; // in the case of refund continue set order id as pos order id\r\n            if (cfg.isStandaloneReturn)\r\n                currentSaleObject.RefundForOrderID = order;\r\n        }\r\n\r\n        let existRefund = sale.Refunds && sale.Refunds.length > 0 ? sale.Refunds[0].RefundID : null;\r\n        if (!existRefund) {\r\n            if (sale.IsExchange === true || sale.IsRefund === true)\r\n                existRefund = sale.ReturnID;\r\n        }\r\n\r\n        var refundID = (sale.IsFirstRefundDone === true || cfg.isContinue === true) && existRefund ? existRefund :\r\n            (!cfg.newGuidValue ? ext.uuid2Service.newguid() :\r\n                cfg.newGuidValue);\r\n\r\n        if (cfg.isContinue !== true)\r\n            sale.ReturnID = refundID;\r\n\r\n        const refund = <IAPIRefund>{\r\n            RefundID: refundID,\r\n            Date: moment.utc(),\r\n            Note: sale.Comment,\r\n            Lines: new Array<IAPIProduct>(),\r\n            Payments: new Array<IAPIPayment>(),\r\n            Surcharges: new Array<IAPISurcharge>()\r\n        };\r\n\r\n        if (cfg.isStandaloneReturn) {\r\n            refund.Note = 'Refund without receipt.';\r\n        }\r\n\r\n        if (cfg.isStandaloneExchange) {\r\n            refund.Note = 'Exchange without receipt.';\r\n        }\r\n\r\n        // this is to not duplicate refunds on next payment refund operation\r\n        //if (cfg.isContinue !== true || !sale.refunds || sale.refunds.length == 0) {\r\n        //    sale.refunds = [<IAPIRefund>{\r\n        //        RefundID: refund.RefundID\r\n        //    }]; // fake record\r\n        //}\r\n        currentSaleObject.Refunds = [refund];\r\n        sale.IsFirstRefundDone = true;\r\n\r\n        return refund;\r\n    }\r\n}\r\n\r\n// helper function for js\r\n// checks before that new sale mode is enabled. If not - return sale as is\r\n// if new mode is enabled, call converter that checks is sale is already correctly\r\n// converted. If not - convert, or fix\r\nexport function convertFromOld(oldSale: any, isTaxInclusive?: boolean): ISale {\r\n    // if string is on input, convert it into object\r\n    if (!oldSale) return oldSale;\r\n    if (typeof (oldSale) === 'string')\r\n        oldSale = JSON.parse(oldSale);\r\n\r\n    const canUseNewSales = CalculatorHelperService.useNewCalculation(oldSale);\r\n    if (!canUseNewSales) return oldSale;\r\n\r\n    const res = ConverterService.convertFromOld(<IInputData>{\r\n        oldSale: oldSale,\r\n        convertData: <IAPIConvertConfig>{\r\n            taxInclusive: isTaxInclusive\r\n        }\r\n    });\r\n\r\n    // res.NewRefundOrder = null; // to prevent use stored guid as newely generated\r\n\r\n    return res;\r\n}\r\n\r\nexport function restoreTransactionMetadata(sale: ISale, nativeSale: ISale) {\r\n    if (!sale || !nativeSale) return;\r\n    const map = new Map<string, IPayment>();\r\n    if (nativeSale.Payments)\r\n        nativeSale.Payments.forEach(p => map.set(p.ID, p));\r\n    if (nativeSale.ReturnPayments)\r\n        nativeSale.ReturnPayments.forEach(p => map.set(p.ID, p));\r\n\r\n    if (sale.Payments)\r\n        sale.Payments.forEach(p => {\r\n            if (map.has(p.ID)) {\r\n                const np = map.get(p.ID);\r\n                if (np.TransactionMetaData && !p.TransactionMetaData)\r\n                    p.TransactionMetaData = np.TransactionMetaData;\r\n            }\r\n        });\r\n\r\n    if (sale.Refunds)\r\n        sale.Refunds.forEach(r => {\r\n            if ((<IAPIRefund>r).Payments)\r\n                (<IAPIRefund>r).Payments.forEach(p => {\r\n                    if (map.has(p.ID)) {\r\n                        const np = map.get(p.ID);\r\n                        if (np.TransactionMetaData && !p.TransactionMetaData)\r\n                            p.TransactionMetaData = np.TransactionMetaData;\r\n                    }\r\n                })\r\n        });\r\n}\r\n\r\nexport function convertToAPI(sale: ISale, status: SaleStatusType, isContinue: boolean, newGuidValue?: string, isPartiallyPaid?: boolean): IAPISale {\r\n    sale = convertFromOld(sale);\r\n\r\n    return ConverterService.convertToAPI(<IInputData>{\r\n        sale: sale,\r\n        convertData: <IAPIConvertConfig>{\r\n            status: status,\r\n            isContinue: !isContinue ? false : true,\r\n            newGuidValue: newGuidValue,\r\n            isPartiallyPaid: !isPartiallyPaid ? false : true\r\n        }\r\n    });\r\n}\r\n\r\nexport function convertFromAPI(oldSale: any): ISale {\r\n    return ConverterService.convertAPIToSale(<IInputData>{\r\n        oldSale: oldSale,\r\n        convertData: <IAPIConvertConfig>{}\r\n    });\r\n}\r\n// remove all temporary properties from payload. Also remove payload from payload to reduce object and remove mess\r\n//function preparePayloadForSave(sale: ISale) {\r\n//    return ConverterService.preparePayloadForSave(sale);\r\n//}","export enum DeliverySourceType {\r\n    POS = 'POS'\r\n}\r\n\r\nexport class DayGap {\r\n    startTime: number; // in mins\r\n    endTime: number; // in mins\r\n\r\n    constructor(start: number, end: number) {\r\n        this.startTime = start;\r\n        this.endTime = end;\r\n    }\r\n\r\n    isInGap(tm: number) {\r\n        return tm >= this.startTime && tm <= this.endTime;\r\n    }\r\n}\r\n\r\nexport class DeliveryContact {\r\n    ContactID: string;\r\n    Name: string;\r\n    Email: string;\r\n    Phone: string;\r\n    MobilePhone: string;\r\n}\r\n\r\nexport class DeliveryAddress {\r\n    AddressID: string;\r\n    Line1: string;\r\n    Line2: string;\r\n    CitySuburb: string;\r\n    StateProvince: string;\r\n    ZipPostCode: string;\r\n    Country: string;\r\n}\r\n\r\nexport class DeliveryItem {\r\n    DeliveryItemID: string;\r\n    TaskID?: string;\r\n    TaskStatus?: string;\r\n    DeliveryNumber?: string;\r\n    ProductID: string;\r\n    ProductName: string;\r\n    ProductCode: string;\r\n    Quantity: number;\r\n    DeliveryDateStr?: string; // this is real datetime to pass in/out\r\n    DeliveryTime?: number;\r\n    DeliveryTimeDisplay?: string;\r\n    DeliveryDate?: string;\r\n\r\n    splitDateTime() {\r\n        if (!this.DeliveryDateStr) {\r\n            this.DeliveryDate = null;\r\n            this.DeliveryTime = null;\r\n            this.DeliveryTimeDisplay = null;\r\n        } else {\r\n            const rtm = ext.helperService.getFormatedLocalDateTime(this.DeliveryDateStr);\r\n            this.DeliveryDate = rtm.date;\r\n            this.DeliveryTime = rtm.time;\r\n            this.DeliveryTimeDisplay = ext.helperService.formatTime(rtm.time);\r\n        }\r\n    }\r\n}\r\n\r\nexport class Delivery {\r\n    DeliveryID: string;\r\n    CustomerID: string;\r\n    CustomerName: string;\r\n    ConfigurationID: string; // POS ID\r\n    LocationID?: string; // Sale outlet location ID\r\n    ECSMappingOutletID?: string; // Sale outlet mapping ID\r\n    OrderID: string;    // POS order ID\r\n    OrderNumber?: string; // POS order  number\r\n    DeliverySource: string; // source of this delivery (POS, WMS, Cin7 Core)\r\n    ContactDetails: DeliveryContact;\r\n    ShipAddressDetails: DeliveryAddress;\r\n    DeliveryItems: Array<DeliveryItem>;\r\n    IsNew: boolean;\r\n    DeliveryInterval: number;\r\n\r\n    constructor() {\r\n        this.DeliveryItems = new Array<DeliveryItem>();\r\n        this.IsNew = true;\r\n        this.DeliverySource = DeliverySourceType.POS;\r\n        this.ContactDetails = new DeliveryContact();\r\n        this.ShipAddressDetails = new DeliveryAddress();\r\n        this.DeliveryInterval = ext.configService.deliveryTimeInterval;\r\n    }\r\n}","import Enumerable from \"linq\";\r\nimport { ISale } from \"../Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\nimport { DayGap, Delivery, DeliveryAddress, DeliveryContact, DeliveryItem } from './Delivery';\r\nimport { ProductionCalendar, ProductionCalendarDay, ProductionCalendarSpecialDay } from './ProductionCalendar';\r\nimport { DeliveryListItem, DeliveryListResult } from './DeliveryList';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class DeliveryHelper {\r\n    currentDelivery: Delivery = null;\r\n    calendarMap: Map<number, ProductionCalendar> = null;\r\n    availableDeliveryItems = new Array<DeliveryItem>();\r\n    dayMap: Map<string, Array<DeliveryListItem>> = null;\r\n\r\n    constructor() {\r\n        this.calendarMap = new Map<number, ProductionCalendar>();\r\n    }\r\n\r\n    public static CreateDeliveryHelper() {\r\n        return new DeliveryHelper();\r\n    }\r\n\r\n    public CreateDeliveryObject(obj: Delivery): Delivery { // in reality input object is not real Delivery instance. It's used only as interface\r\n        const delivery = new Delivery();\r\n\r\n        if (obj)\r\n            Object.assign(delivery, obj);\r\n\r\n        if (obj.ContactDetails) {\r\n            const dc = new DeliveryContact();\r\n            Object.assign(dc, obj.ContactDetails);\r\n            delivery.ContactDetails = dc;\r\n        }\r\n\r\n        if (obj.ShipAddressDetails) {\r\n            const ds = new DeliveryAddress();\r\n            Object.assign(ds, obj.ShipAddressDetails);\r\n            delivery.ShipAddressDetails = ds;\r\n        }\r\n\r\n        if (obj.DeliveryItems) {\r\n            delivery.DeliveryItems = new Array<DeliveryItem>();\r\n            obj.DeliveryItems.forEach(item => {\r\n                const di = this.CreateDeliveryItemObject(item);\r\n                delivery.DeliveryItems.push(di);\r\n            });\r\n        }\r\n\r\n        delivery.DeliveryItems = delivery.DeliveryItems.sort((a, b) => {\r\n            if (a.DeliveryDate && !b.DeliveryDate) return -1;\r\n            if (!a.DeliveryDate && b.DeliveryDate) return 1;\r\n            if (!a.DeliveryDate && !b.DeliveryDate) {\r\n                return 0;\r\n            }\r\n\r\n            const dc = a.DeliveryDate.localeCompare(b.DeliveryDate);\r\n\r\n            if (dc === 0) {\r\n                const dc2 = a.DeliveryTime < b.DeliveryTime ? -1 : a.DeliveryTime > b.DeliveryTime ? 1 : 0;\r\n\r\n                if (dc2 === 0)\r\n                    return a.DeliveryNumber.localeCompare(b.DeliveryNumber);\r\n                else return dc2;\r\n            }\r\n\r\n            return dc;\r\n        });\r\n\r\n        this.currentDelivery = delivery;\r\n        return delivery;\r\n    }\r\n\r\n    public CreateDeliveryItemObject(item: DeliveryItem): DeliveryItem {\r\n        const di = new DeliveryItem();\r\n        Object.assign(di, item);\r\n        // shift datetime to local datetime and split\r\n        di.splitDateTime();\r\n        return di;\r\n    }\r\n\r\n    public ModifyCalendarObjectMap(lst: Array<ProductionCalendar>) {\r\n        const { calendarMap } = this;\r\n\r\n        // lst - does not have real calendar objects - it's interfaces\r\n        if (lst) {\r\n            lst.forEach(l => calendarMap.set(l.Year, l));\r\n        }\r\n\r\n        return calendarMap;\r\n    }\r\n\r\n    public CreateCalendarObject(obj: ProductionCalendar): ProductionCalendar {\r\n        const calendar = new ProductionCalendar();\r\n        Object.assign(calendar, obj);\r\n\r\n        calendar.vProductionCalendarDays = new Array<ProductionCalendarDay>();\r\n        if (obj.vProductionCalendarDays) {\r\n            obj.vProductionCalendarDays.forEach(day => {\r\n                const proDay = new ProductionCalendarDay();\r\n                Object.assign(proDay, day);\r\n                calendar.vProductionCalendarDays.push(proDay);\r\n            });\r\n        }\r\n\r\n        calendar.vProductionCalendarSpecialDays = new Array<ProductionCalendarSpecialDay>();\r\n        if (obj.vProductionCalendarSpecialDays) {\r\n            obj.vProductionCalendarSpecialDays.forEach(day => {\r\n                const proDay = new ProductionCalendarSpecialDay();\r\n                Object.assign(proDay, day);\r\n                calendar.vProductionCalendarSpecialDays.push(proDay);\r\n            });\r\n        }\r\n\r\n        return calendar;\r\n    }\r\n\r\n    async loadDeliveryByDeliveryID(deliveryID: string) {\r\n        const res = await ext.webOnlyProvider.loadDelivery({\r\n            objectID: deliveryID,\r\n            objectType: 'DeliveryID'\r\n        });\r\n\r\n        return this.CreateDeliveryObject(res.data as Delivery);\r\n    }\r\n\r\n    async loadDeliveryBySaleOrder(sale: ISale) {\r\n        const res = await ext.webOnlyProvider.loadDelivery({\r\n            objectID: sale.ID,\r\n            objectType: 'POSOrderID'\r\n        });\r\n\r\n        if (!res.data) { // there is no delivery yet\r\n            res.data = {\r\n                ConfigurationID: ext.configService.applicationID,\r\n                ECSMappingOutletID: ext.configService.lastECSMappingOutletID,\r\n                OrderID: sale.ID,\r\n                OrderNumber: sale.OrderNumber\r\n            };\r\n\r\n            res.data.DeliveryItems = await this.LoadProductsAvailableForDeliveryBySale(sale);\r\n            res.data.IsNew = true;\r\n        } else {\r\n            res.data.IsNew = false;\r\n            // add product lines that are not in delivery, i.e. they were removed before\r\n            const availableItems = await this.LoadProductsAvailableForDeliveryBySale(sale);\r\n\r\n            const map = new Map<string, any>();\r\n\r\n            res.data.DeliveryItems.forEach(di => map.set(di.ProductID, di));\r\n\r\n            availableItems.forEach(ai => {\r\n                if (!map.has(ai.ProductID)) {\r\n                    res.data.DeliveryItems.push(ai);\r\n                }\r\n            });\r\n        }\r\n\r\n        const delivery = this.CreateDeliveryObject(res.data as Delivery);\r\n        await this.CheckAndLoadCalendars(delivery);\r\n\r\n        return delivery;\r\n    }\r\n\r\n    async loadDeliveries(page: number, limit: number, filters: any) {\r\n        const flt = angular.copy(filters);\r\n        flt.fromDate = ext.helperService.toDateFromDatepickerParameter(flt.fromDate);\r\n        flt.toDate = ext.helperService.toDateFromDatepickerParameter(flt.toDate);\r\n\r\n        const res = await ext.webOnlyProvider.loadDeliveries(angular.extend(flt, {\r\n            limit: limit ? limit : null,\r\n            page: page ? page : 0\r\n        }));\r\n\r\n        return res.data as DeliveryListResult;\r\n    };\r\n\r\n    async printDeliveries(filters: any) {\r\n        const flt = angular.copy(filters);\r\n        flt.fromDate = ext.helperService.toDateFromDatepickerParameter(flt.fromDate);\r\n        flt.toDate = ext.helperService.toDateFromDatepickerParameter(flt.toDate);\r\n        // flt.toDate = flt.fromDate;\r\n\r\n        const res = await ext.webOnlyProvider.loadDeliveries(angular.extend(flt, {\r\n            templateID: ext.configService.deliveryTemplateID\r\n        }));\r\n\r\n        return res.data as string;\r\n    }\r\n\r\n    async loadDeliveryCalendars(years: Array<number>) {\r\n        const res = await ext.webOnlyProvider.loadCalendars(years);\r\n        return res.data as Array<ProductionCalendar>;\r\n    };\r\n\r\n    async CheckAndLoadCalendars(delivery: Delivery) {\r\n        // get all years used\r\n        const res = new Array<ProductionCalendar>();\r\n\r\n        let yearsLst = new Array();\r\n\r\n        const curYear = new Date().getFullYear();\r\n        yearsLst = [curYear - 1, curYear, curYear + 1];\r\n\r\n        const yearsRes = await this.loadDeliveryCalendars(yearsLst);\r\n        yearsRes.forEach(y => res.push(this.CreateCalendarObject(y)));\r\n        this.ModifyCalendarObjectMap(res);\r\n    }\r\n\r\n    async LoadProductsAvailableForDeliveryBySale(sale: ISale) {\r\n        return this.LoadProductsAvailableForDelivery(sale.ID);\r\n    }\r\n\r\n    async LoadProductsAvailableForDelivery(posOrderID: string) {\r\n        const res = new Array<DeliveryItem>();\r\n\r\n        const lst = await ext.webOnlyProvider.loadProductsAvailableForDelivery(posOrderID);\r\n        lst.data.forEach(p => res.push(this.CreateDeliveryItemObject(p)));\r\n\r\n        this.availableDeliveryItems = res;\r\n        return res;\r\n    }\r\n\r\n    async SaveDelivery() {\r\n        if (this.currentDelivery.IsNew)\r\n            await ext.webOnlyProvider.CreateDelivery(this.currentDelivery.DeliveryID, this.currentDelivery);\r\n        else\r\n            await ext.webOnlyProvider.UpdateDelivery(this.currentDelivery.DeliveryID, this.currentDelivery);\r\n    }\r\n\r\n    async UpdateDeliveryTaskStatus(taskID: string, locationID: string, status: string) {\r\n        await ext.webOnlyProvider.UpdateDeliveryTaskStatus(taskID, locationID, status);\r\n    }\r\n\r\n    pushGap(dayWorkGaps: Array<DayGap>, day: ProductionCalendarDay) {\r\n        if (day.BreakStartTime && day.BreakEndTime) {\r\n            dayWorkGaps.push(new DayGap(day.StartTime, day.BreakStartTime - 1)); // to exclude lunch\r\n            dayWorkGaps.push(new DayGap(day.BreakEndTime + 1, day.EndTime)); // +1 to exclude lunch end time\r\n        } else {\r\n            dayWorkGaps.push(new DayGap(day.StartTime, day.EndTime));\r\n        }\r\n    }\r\n\r\n    getStartTime(gaps: Array<DayGap>) {\r\n        let start = 24 * 60;\r\n        gaps.forEach((g) => start = Math.min(start, g.startTime));\r\n        return start;\r\n    }\r\n\r\n    generateTime(dtStr) {\r\n        let dayWorkGaps = new Array<DayGap>(); // intervals where delivery is disabled\r\n\r\n        if (dtStr) {\r\n            const dt = ext.helperService.convertToDateFromDatepicker(dtStr);\r\n            const dtNoZone = ext.helperService.toDateFromDatepickerDirectNoZone(dtStr);\r\n            const year = dt.year();\r\n            const month = dt.month() + 1;\r\n            const dayOfWeek = dt.isoWeekday(); // dt.day() + 1;\r\n            const calendar = this.calendarMap.get(year);\r\n\r\n            // fill day work gaps\r\n            if (calendar) {\r\n                const dspec = calendar.vProductionCalendarSpecialDays.filter(d => d.Date === dtNoZone);\r\n                if (dspec.length > 0) {\r\n                    if (!dspec[0].IsHoliday) {\r\n                        this.pushGap(dayWorkGaps, dspec[0]);\r\n                    }\r\n                } else {\r\n                    const dw = calendar.vProductionCalendarDays.filter(d => d.DayOfWeek === dayOfWeek);\r\n                    if (dw.length > 0) {\r\n                        this.pushGap(dayWorkGaps, dw[0]);\r\n                    }\r\n                }\r\n\r\n            } else dayWorkGaps = null;\r\n\r\n        }\r\n\r\n        let x = ext.configService.deliveryTimeInterval;\r\n        let times = [];\r\n\r\n        if (dayWorkGaps) {\r\n            const start = this.getStartTime(dayWorkGaps);\r\n            for (let tt = start; tt <= 24 * 60; tt += x) {\r\n                const flt = dayWorkGaps ? dayWorkGaps.filter(g => g.isInGap(tt)) : null;\r\n                if (flt == null || flt.length > 0) {\r\n                    times.push({\r\n                        display: ext.helperService.formatTime(tt),\r\n                        value: tt\r\n                    });\r\n                }\r\n            }\r\n        } else {\r\n            throw ext.gettextCatalog.getString(\"To setup time, please setup delivery calendar for current location.\");\r\n        }\r\n\r\n        return times;\r\n    };\r\n\r\n    getMinimalPendingDate() {\r\n\r\n        let d = Enumerable.from(this.currentDelivery.DeliveryItems)\r\n            .where(d => d.DeliveryDate && d.DeliveryTime && (!d.TaskStatus || d.TaskStatus == 'In progress'))\r\n            .select(d => ext.helperService.convertToDateFromDatepicker(d.DeliveryDate).toDate())\r\n            .orderBy(d => d)\r\n            .firstOrDefault();\r\n\r\n        if (!d) { // if there is no items in delivery, get current date\r\n            d = new Date();\r\n        }\r\n\r\n        return d;\r\n    }\r\n\r\n    async prepareCalendarData(items: Array<DeliveryListItem>) {\r\n        const data = Array<any>();\r\n        this.dayMap = new Map<string, Array<DeliveryListItem>>();\r\n\r\n        items.forEach(d => {\r\n            const rtm = ext.helperService.getFormatedLocalDateTime(d.StatusDate);\r\n            const date = rtm.date;\r\n            const time = ext.helperService.formatTime(rtm.time);\r\n            const time2 = ext.helperService.formatTime(rtm.time + ext.configService.deliveryTimeInterval);\r\n            const fromDate = ext.helperService.toDateFromDatepickerParameter(rtm.date, time + ':00', true);\r\n            const toDate = ext.helperService.toDateFromDatepickerParameter(rtm.date, time2 + ':00', true);\r\n\r\n            const ln = {\r\n                id: d.TaskID,\r\n                title: `${d.DeliveryTaskNumber} (${time})`,\r\n                start: fromDate,\r\n                end: toDate,\r\n                className: d.TaskStatus === 'In progress' ? 'task-in-progress' :\r\n                    d.TaskStatus === 'Completed' ? 'task-completed' :\r\n                        d.TaskStatus === 'Void' ? 'task-cancelled' : ''\r\n            };\r\n\r\n            data.push(ln);\r\n\r\n            let di = this.dayMap.get(date);\r\n            if (!di) {\r\n                di = new Array<DeliveryListItem>();\r\n                this.dayMap.set(date, di);\r\n            }\r\n\r\n            di.push(d);\r\n\r\n        });\r\n\r\n        // add background events to colorize day cells\r\n        Array.from(this.dayMap.keys()).forEach(k => {\r\n            const di = this.dayMap.get(k);\r\n            if (di && di.length > 0 && di[0].DayTasks >= ext.configService.deliveryNumberPerDay) {\r\n                data.push({\r\n                    start: ext.helperService.convertToDateFromDatepicker(k).toDate(),\r\n                    allDay: true,\r\n                    className: 'delivery-no-more-room',\r\n                    display: 'background'\r\n                });\r\n            }\r\n            //  else if (di.filter(d => d.TaskStatus === 'In progress').length > 0) {\r\n            //     data.push({\r\n            //         start: ext.helperService.convertToDateFromDatepicker(k).toDate(),\r\n            //         allDay: true,\r\n            //         className: 'delivery-has-in-progress',\r\n            //         display: 'background'\r\n            //     });\r\n            // }\r\n        });\r\n\r\n        return data;\r\n    }\r\n}","export class ProductionCalendarDay {\r\n    DayID: string;\r\n    DayOfWeek: number;\r\n    IsWeekend: boolean;\r\n    StartTime: number;\r\n    EndTime: number;\r\n    BreakStartTime?: number;\r\n    BreakEndTime?: number;\r\n}\r\n\r\nexport class ProductionCalendarSpecialDay extends ProductionCalendarDay {\r\n    Date: string;\r\n    IsHoliday: boolean;\r\n    Comment?: string;\r\n}\r\n\r\nexport class ProductionCalendar {\r\n    CalendarID: string;\r\n    Year: number;\r\n    WeekStart: number;\r\n    vProductionCalendarDays: Array<ProductionCalendarDay>;\r\n    vProductionCalendarSpecialDays: Array<ProductionCalendarSpecialDay>;\r\n\r\n    constructor() {\r\n        this.vProductionCalendarDays = new Array<ProductionCalendarDay>();\r\n        this.vProductionCalendarSpecialDays = new Array<ProductionCalendarSpecialDay>();\r\n    }\r\n}","\r\n// defines calculation types. In each case only partial calculators that defines itself for target type will be executed\r\nexport enum CalculationType {\r\n    Checkout,\r\n    Payments,\r\n    RefundCheckout,\r\n    RefundPayments // when on sales history page and sale details calculations are required\r\n}\r\n\r\nexport enum StartCalcLevel {\r\n    Setup = 0,\r\n    Discount = 50,\r\n    Tax = 100,\r\n    RefundSubmit = 150,\r\n    Total = 200,\r\n    Payments = 400,     // start point to include all payment layers in calculations. \r\n    RefundLimits = 450,\r\n    Loyalty = 500,      // loyalty shouldn't include surcharges as loyalty only applies to purchase but not to additional external fee\r\n    Surcharge = 550,\r\n    TotalPayments = 600,\r\n    Final = 1000\r\n}\r\n\r\nexport enum AddressType {\r\n    Shipping = 'Shipping',\r\n    Business = 'Business',\r\n    Billing = 'Billing'\r\n}\r\n\r\nexport enum CustomDiscountType {\r\n    Price = 'price',\r\n    Percent = 'percent',\r\n    StandAloneReturn = 'standaloneReturn'\r\n}\r\n\r\nexport enum DiscountLineType {\r\n    DiscountAmount = 'Discount Amount',\r\n    DiscountPercent = '% Discount',\r\n    MarkupAmount = 'Markup Amount',\r\n    MarkupPercent = '% Markup',\r\n    PriceOverride = 'Price Override',\r\n    FlatAmount = 'Flat Amount'\r\n}\r\n\r\nexport enum DiscountType {\r\n    Simple = 'Simple',\r\n    QuantityBased = 'Quantity Based'\r\n}\r\n\r\nexport enum PaymentShortNameStandardType {\r\n    Cash = 'cash',\r\n    CreditCard = 'credit card',\r\n    GiftCard = 'gift card',\r\n    Loyalty = 'loyalty',\r\n    LoyaltyPoints = 'loyalty points',\r\n    StoreCredits = 'store credits',\r\n    Rounding = 'Rounding',\r\n    BackofficePayment = 'BackofficePayment_',\r\n    Discount = 'Discount'\r\n}\r\n\r\nexport enum SurchargeType {\r\n    Percent = 'percentage',\r\n    Fixed = 'fixed'\r\n}\r\n\r\nexport enum FinancialStatusType {\r\n    Closed = 'CLOSED',\r\n    Returned = 'RETURN',\r\n    LaybyClosed = 'LAYBY_CLOSED',\r\n    Layby = 'LAYBY',\r\n    OnAccountClosed = 'ONACCOUNT_CLOSED',\r\n    OnAccount = 'ONACCOUNT',\r\n    Parked = 'PARKED'\r\n}\r\n\r\nexport enum SaleStatusType {\r\n    Opened = 'OPEN',\r\n    Parked = 'PARKED',\r\n    Closed = 'CLOSED',\r\n    Saved = 'SAVED',\r\n    Layby = 'LAYBY',\r\n    LaybyClosed = 'LAYBY_CLOSED',\r\n    OnAccount = 'ONACCOUNT',\r\n    OnAccountClosed = 'ONACCOUNT_CLOSED'\r\n}\r\n\r\nexport enum SaleType {\r\n    Sale = 'sale',\r\n    /** Quick Sale product (Additional Charges in Cin7 Core) */\r\n    CustomSale = 'customsale'\r\n}\r\n\r\nexport enum TaxCalculationMethod {\r\n    RowTotal = 'Row Total',\r\n    OrderTotal = 'Document Total'\r\n}\r\n\r\nexport enum HistoryActionMode {\r\n    SaleDetails = 'details',\r\n    SaleRefund = 'refund',\r\n    RefundAmounts = 'refundsum'\r\n}","import { SurchargeType, DiscountType, DiscountLineType, AddressType, SaleType, CustomDiscountType, FinancialStatusType, SaleStatusType } from \"./Enums\";\r\n\r\nexport interface ICustomer {\r\n    ID: string;\r\n    Name: string;\r\n    Account: number;\r\n    AccountReceivable: string;\r\n    Addresses: Array<IAddress>;\r\n    Contacts: Array<IContact>;\r\n    CreditLimit: number;\r\n    Currency: string;\r\n    Discount: number; // current customer discount value\r\n    Discounts: Array<ICustomerDeal>; // array of deals that exists for customer  \r\n    MatrixDiscounts: Array<IDiscount>;\r\n    PriceTier: string;\r\n    RevenueAccount: string;\r\n    StoreCredits: number;\r\n    Tags: string;\r\n    TaxNumber: string;\r\n    TaxRule: string;\r\n    TaxRuleID: string;\r\n    EffectivePercentExclusive: number;\r\n    EffectivePercentInclusive: number;\r\n    EnableLoyaltyPoints: boolean;\r\n    LoyaltyPoints: number;\r\n    LoadedFromLocalDb?: boolean;\r\n    DontReloadContacts?: boolean;\r\n    DontReloadAddresses?: boolean;\r\n    PaymentTerm?: string;\r\n    Attributes?: ICustomerAttribute[];\r\n\r\n    LLExternalType?: string;\r\n    LLCustomerID?: string;\r\n    LLMerchantID?: string;\r\n    LLEmail?: string;\r\n    LLDiscountCode?: string;  // external loyalty discount code\r\n    LLInitialBalance?: string; // externa loyalty balance for the customer before any operation\r\n    SendReceiptViaEmail?: boolean;\r\n}\r\n\r\nexport interface ICustomerAttribute {\r\n    Name: string;\r\n    Value: string;\r\n}\r\n\r\nexport interface ISurcharge {\r\n    SurchargeID: string;    // surcharge id\r\n    Type: SurchargeType;\r\n    Name: string; // surcharge name\r\n    PaymentShortName?: string; // short name of payment method. Only for ghost surcharges, i.e. fake like cash and store credit\r\n    CalculatedValue: number; // calculated surcharge value for referenced payment\r\n    CalculatedValueWithTax: number; // calculated surcharge value including tax. In case of inclusive tax, this value will  be equal to CalculatedValue\r\n    PaymentID?: string; // reference to payment\r\n    RefundSurcharge: boolean; // true if surcharge is refundable\r\n    Tax: number;            // tax value applied to this surcharge value\r\n    TaxRuleID: string;      // reference to tax rule id\r\n    Value: number;      // surcharge value. if type is 'percentage' this is percents else fixed value\r\n\r\n    // legacy fields\r\n    PaymentRealAmount?: number; // actually total from payment. For old style sale processing\r\n    Total?: number; // for compatibility with analytics functions\r\n}\r\n\r\nexport interface IDiscount {\r\n    Type: DiscountType;\r\n    DiscountLineType: DiscountLineType;\r\n    CustomerID: string;\r\n    ProductID: string;\r\n    ByTag: boolean;\r\n    MaxValue: number;\r\n    MinValue: number;\r\n    Amount: number;\r\n}\r\n\r\nexport interface ICustomerDeal {\r\n    CustomerID: string;\r\n    DealID: string;\r\n}\r\n\r\nexport interface IDealTarget {\r\n    productID: string;\r\n    isFamily: boolean;\r\n    categoryID: string;\r\n    brandID: string;\r\n    tagName: string;\r\n}\r\n\r\nexport interface ICoupon {\r\n    ID: string;\r\n    Code: string;\r\n}\r\n\r\nexport interface ITrigger {\r\n    brandID: string;\r\n    categoryID: string;\r\n    productID: string;\r\n    isFamily: boolean;\r\n    tagName: string;\r\n    maxValue?: number;\r\n    minValue?: number;\r\n    amount: number;\r\n    discountLineType: DiscountLineType;\r\n}\r\n\r\nexport interface IProductDeal {\r\n    amount: number;\r\n    buyMore: boolean;\r\n    buyValue: number;\r\n    customersGroup: string;\r\n    dateFrom: any;\r\n    dateTo: any;\r\n    dealDiscountID: string;\r\n    dealID: string;\r\n    discountID: string;\r\n    discountLineType: DiscountLineType;\r\n    getValue: number;\r\n    tenantID: string;\r\n    type: DiscountType;\r\n    maxValue?: number;\r\n    minValue?: number;\r\n    targets: Array<IDealTarget>;\r\n    allowCoupons: boolean;\r\n    singleCouponCodeUsage: boolean;\r\n    coupons: Array<ICoupon>;\r\n    triggers: Array<ITrigger>;\r\n    affectedProducts?: Array<IAffectedProduct>;\r\n}\r\n\r\nexport interface IAffectedProduct {\r\n    productID: string;\r\n    price: number;\r\n}\r\n\r\nexport interface IContact {\r\n    ID: string;\r\n    Default: boolean;\r\n    Email: string;\r\n    Fax: string;\r\n    IncludeInEmail: boolean;\r\n    JobTitle: string;\r\n    MobilePhone: string;\r\n    Name: string;\r\n    Phone: string;\r\n    Website: string;\r\n    MarketingConsent: string; \r\n}\r\n\r\nexport interface IAddress {\r\n    ID: string;\r\n    City: string;\r\n    Country: string;\r\n    DefaultForType: boolean;\r\n    Line1: string;\r\n    Line2: string;\r\n    Postcode: string;\r\n    State: string;\r\n    Type: AddressType;\r\n}\r\n\r\nexport enum ProductType {\r\n    Stock = \"Stock\",\r\n    Service = \"Service\",\r\n    NonInventory = \"Non Inventory\",\r\n    GiftCard = \"GiftCard\"\r\n}\r\n\r\nexport interface ICheckoutItem extends ITax {\r\n    ID: string; // checkout id - unique value, not equal to productID\r\n    Name: string;   // product name\r\n    ProductID?: string; // product id\r\n    ProductShortDescription: string;\r\n    ProductType: ProductType;    // produc type\r\n    SerialNumber?: string; // serial number if exists\r\n    SKU: string;    // product SKU\r\n    OptionLine: string; // options concated to line\r\n    FamilyID?: string;  // product family id\r\n    SeparatedItemID?: string; // parentid if this item is result of deal applied like 'buy one and get one for free'\r\n    ComplexSeparatedItemID?: string; // id including parent and this item id\r\n    ImageID?: string;   // product image id\r\n    BasePrice: number; // base price before any discounts applied\r\n    FinalPrice: number; // final price with product level discount as it should be shown in checkout\r\n    FinalAmount: number; // total count * finalPrice as it should be shown in checkout area\r\n    FinalTaxAmount: number;   // final tax value for total row, i.e. count * finalPrice * effectiveTaxPercent\r\n    BaseTax?: number;   // tax per single product, Required only for refund\r\n    Barcode?: string;     // product barcode\r\n    BrandID?: string;    // brand id\r\n    CategoryID: string; // category id\r\n    Count: number;      // number of products in this line. Can be decimal\r\n    Discounts: Array<IProductDeal>; // array of dealID's that is currently applied.  \r\n    LoyaltyPointsEarning: number; // loyalty points amount that will be earned for entire amount field.\r\n    SaleType?: SaleType;              // for custom sale is CustomSale\r\n\r\n    // temporary fields. Will be removed before save payload\r\n    CanDelete?: boolean;         // define UI behavior\r\n    CanEdit?: boolean;           // define UI behavior\r\n    Discount?: number;           // if CustomDiscountType not null should be used to calculate final price with discount\r\n    ItemDiscount?: number;       // calculated discount value for auto discount\r\n    DefaultPrice?: number;\r\n    Price1?: number;\r\n    Price2?: number;\r\n    Price3?: number;\r\n    Price4?: number;\r\n    Price5?: number;\r\n    Price6?: number;\r\n    Price7?: number;\r\n    Price8?: number;\r\n    Price9?: number;\r\n    Price10?: number;\r\n    Deals?: Array<ILineDiscountResult>;\r\n    LoyaltyRatio?: number; // temporary for loyalty calculations\r\n    ExtraInfo?: string; // packed extra info about prices and so on.\r\n    ProductTaxString: string; // initial tax string for product\r\n    // ***************************************\r\n\r\n    GiftCardCode?: string;           // if this is gift card sale, gift card code will be here\r\n    GiftCardExpirationDate?: string; // gift card expiration date if required\r\n    CF1?: string;\r\n    CF2?: string;\r\n    CF3?: string;\r\n    CF4?: string;\r\n    CF5?: string;\r\n    CF6?: string;\r\n    CF7?: string;\r\n    CF8?: string;\r\n    CF9?: string;\r\n    CF10?: string;\r\n    Note?: string;\r\n    Option1?: string;\r\n    Option2?: string;\r\n    Option3?: string;\r\n    Tags?: string;\r\n    CustomDiscountType?: CustomDiscountType; // not null if manual discount is applied\r\n\r\n    BaseCount?: number; // for refund form stores initial number of items in sale\r\n    MaxCount?: number;\r\n    MinCount?: number;\r\n    Return?: boolean;                // can be used in history details\r\n    Sign?: number;             // for refund only\r\n    PriceBasedValue?: number; // is set when  amount was received from price based barcode.\r\n    MissingInInvoice?: boolean;\r\n}\r\n\r\nexport interface ISalesRepresentative {\r\n    ID: string;\r\n    Name: string;\r\n    PosOutletID?: string;\r\n}\r\n\r\n//interface ICoupon {\r\n//    Name: string;\r\n//    DealID: string;\r\n//    CouponID: string;\r\n//}\r\n\r\nexport interface IPayment {\r\n    Amount: number;\r\n    Date: Date;\r\n    ID: string;\r\n    Loyalty: number; // loyalty points earned by this payment\r\n    PaymentProcessorID?: string;\r\n    PaymentTypeName?: string;\r\n    Reference?: string;\r\n    ServerTransactionID?: string; // card payment transaction id\r\n    ClientTransactionID?: string; // card payment client side transaction id. Does not exist in each provider\r\n    // the field below will contain the reference to sale card payment that is returned by this refund. \r\n    // Should be used in return continue process to reduce payment limit for specific card refund payment line   \r\n    SaleServerTransactionID?: string;\r\n    ShortName?: string; // short name of payment method. Only for ghost surcharges, i.e. fake like cash and store credit\r\n    Surcharge?: ISurcharge; // surcharge that was applied to this payment\r\n    TransactionMetaData?: string; // additional satellite info for card payment\r\n    GiftCardID?: string;          // if this payment is done by gift card\r\n    FromHistory?: boolean;         // true if this is a payment from history. It means that it shouldn't be couned when calculate current session payment loyalty\r\n    InitialSurcharge?: ISurcharge;\r\n}\r\n\r\nexport interface ISale {\r\n    PayloadVersion: string; // sale structure version. Also in replace of conversionVersion\r\n    ID: string;\r\n    ParentOrderID?: string;  // is set for exchange/refund sale\r\n    IsFirstChild?: boolean;\r\n    NewRefundOrder?: string; // used to switch between existing order id and new one. For continued sales order should not be changed\r\n    PosOrderID?: string;     // only used for refunds\r\n    ReturnID?: string;\r\n    OperationID?: string;\r\n    OrderNumber: string;\r\n    OrderType: string;\r\n    Barcode: string;\r\n    DateNative: Date;\r\n    Date: string;\r\n    SaleType: SaleType;\r\n    OperationName: string;\r\n    StandAloneReturn: boolean;\r\n    StandAloneExchange: boolean;    \r\n    ClearOrderNumber: string;\r\n    SubTotal: number;\r\n    Total: number;\r\n    TotalCheckout: number;\r\n    Balance?: number;\r\n    Tax: number;\r\n    Discount: number;\r\n    DiscountValue: number;\r\n    Comment?: string;\r\n    IsTaxInclusive: boolean;    // tax mode. I's the same for all checkout items\r\n    CashChangeAmount: number;   // change for this sale if payment was done with usage of cash payment method \r\n    SurchargeTotal?: number;    // total amount of surcharge for sale\r\n    SurchargeTotalTax?: number;    // total tax amount of surcharge for sale\r\n    NonRefundableSurcharge?: number;\r\n    LaybyDate: string;\r\n\r\n    // temporary fields that will be deleted before save payload\r\n    IsDiscountPercent?: boolean; // is manual order level discount of percent type \r\n    AdjustRefunds?: boolean;\r\n    ManuallyAppliedDiscount?: boolean;\r\n    keepTotalDiscount?: boolean;\r\n\r\n    ReturnLoyaltyPoints?: boolean; // used in sales history\r\n    DiscountTax?: number;\r\n    CantProcessOffline?: boolean;\r\n    LoyaltyPoints?: number;         // current session loyalty points calculated based on payments\r\n    LoyaltyPointsTotal?: number;    // total loyalty points calculated based on payments\r\n    CustomerLoyaltyPoints?: number;         // customer current loyalty points  \r\n    CustomerLoyaltyPointsUsed?: number;     // customer loyalty points used for payment in this sale\r\n    SurchargeToRefund?: number;\r\n    SurchargeTaxToRefund?: number;\r\n    FullReturnRounding?: number;\r\n    EstimateTotal?: number;\r\n    BaseTotal?: number;\r\n    RemainingToRefund?: number;\r\n    DiscountValueRaw?: number\r\n    CustomerLoyaltyPointsRemaining?: number; // remaining customer loyalty points that can be used in sale\r\n    // **************************************************\r\n\r\n    SalesRepresentative: ISalesRepresentative;\r\n    Customer: ICustomer;\r\n    CheckoutItems: Array<ICheckoutItem>;\r\n    SelectedCoupon?: string;\r\n    SelectedCouponID?: string;\r\n    SelectedCouponDealID?: string;\r\n    ReturnSelectedCoupon?: string;\r\n    ReturnSelectedCouponID?: string;\r\n    ReturnSelectedCouponDealID?: string;\r\n    Payments: Array<IPayment>;\r\n    Refunds?: Array<IRefundBase>; // actually only to detect, that this current sale is refund/exchange.\r\n    GroupedSale?: IGroupedSale;\r\n    // RawSaleObject?: ISale; // previous native sale in case of refund/exchage\r\n    IsParked?: boolean;\r\n    CalledFromHistory?: boolean;\r\n    Status?: FinancialStatusType;   // in refund mode only\r\n    ReturnItems?: Array<ICheckoutItem>; // for refunds\r\n    ReturnPayments?: Array<IPayment>;\r\n\r\n    IsFromDearSale?: boolean; /// this field will be used to keep OrderNumber for refunds of sale converted from Cin7 Core (cause they dont have clear order number)\r\n\r\n    IsExchange?: boolean;\r\n    IsRefund?: boolean;\r\n    IsFastRefund: boolean;\r\n    IsFirstRefundDone: boolean;\r\n\r\n    // helper methods\r\n    calculateTotalLoyalty(): number;\r\n    calculateSessionLoyalty(): number;\r\n\r\n    SelectedContact: IContact;\r\n    TotalBasePrice: number;\r\n    TotalItemDiscount: number;\r\n\r\n    CustomerShippingAddressLine1?: string;\r\n    CustomerShippingAddressLine2?: string;\r\n    CustomerShippingCity?: string;\r\n    CustomerShippingCountry?: string;\r\n    CustomerShippingProvince?: string;\r\n    CustomerShippingZip?: string;\r\n    UpdateReceiptView?: boolean;\r\n    UpdateRegistrySequenceIfDuplicate?: boolean;\r\n    SendReceiptViaEmail?: boolean;\r\n    OutletName?: string;\r\n    OutletID?: string;\r\n    RegistryID?: string;\r\n    UserName?: string;\r\n}\r\n\r\nexport interface IAPISale {\r\n    ClearOrderNumber: string,\r\n    Currency: string,\r\n    CustomerID?: string,\r\n    CustomerName?: string,\r\n    CustomerNote?: string,\r\n    Date: string,\r\n    LaybyDate: string,\r\n    DoNotConsolidate: boolean,\r\n    FinancialStatus: FinancialStatusType,\r\n    LoyaltyUpdate?: number,\r\n    OperationID: string,\r\n    OrderID: string,\r\n    OrderNumber: string,\r\n    ParentOrderID?: string,\r\n    RefundForOrderID?: string,\r\n    RegistryCloseID: string,\r\n    RegistryID: string,\r\n    SalesRepresentative?: string,\r\n    SequenceGeneration: string,\r\n    TaxInclusive: boolean,\r\n    Total: number,\r\n    UserName: string,\r\n    standaloneRefund: boolean,\r\n    standaloneExchange: boolean,\r\n    AdjustRefunds: boolean,\r\n    Lines: Array<IAPIProduct>,\r\n    Payments: Array<IAPIPayment>,\r\n    Refunds: Array<IAPIRefund>,\r\n    Surcharges: Array<IAPISurcharge>,\r\n    RawSaleObject?: string; // previous native sale in case of refund/exchange serialized in string format\r\n    InitialRefunds?: Array<IAPIRefund>;\r\n    IsFromDearSale?: boolean;\r\n    CustomerEmail?: string,\r\n    CustomerMobilePhone?: string,\r\n    Discount?: number,\r\n    MarketingConsent?: string,\r\n    CustomerContactID?: string\r\n    CustomerShippingAddressLine1?: string;\r\n    CustomerShippingAddressLine2?: string;\r\n    CustomerShippingCity?: string;\r\n    CustomerShippingCountry?: string;\r\n    CustomerShippingProvince?: string;\r\n    CustomerShippingZip?: string;\r\n    UpdateReceiptView?: boolean;\r\n    UpdateRegistrySequenceIfDuplicate?: boolean;\r\n    SendReceiptViaEmail?: boolean;\r\n    OutletName?: string;\r\n    OutletID?: string;\r\n}\r\n\r\nexport interface IAPIProduct {\r\n    ProductID: string;\r\n    Name?: string;\r\n    ProductName?: string;   // for custom sale due to product id will be null\r\n    ProductType: ProductType;\r\n    ImageID: string;\r\n    Price: number; // price without any discount\r\n    OverriddenPrice?: number; // means price without order level discount. Required for server to create discount payment lines\r\n    Quantity: number;\r\n    CalculateTax: boolean;\r\n    SerialNumber?: string;\r\n    TaxRuleID: string;\r\n    Tax: number;\r\n    TotalPerLine: number;\r\n    Discount?: number;\r\n    GiftCardCode?: string;\r\n    GiftCardExpirationDate?: string;\r\n\r\n    // fields that were set when sale is loaded from web api\r\n    IsProduct?: boolean;\r\n    IsGiftCard?: boolean;\r\n    refundQuantity?: number;\r\n\r\n    MissingInInvoice?: boolean;\r\n}\r\n\r\nexport interface IAPIPayment {\r\n    ID: string,\r\n    ShortName: string,\r\n    PaymentProcessorID: string,\r\n    Amount: number,\r\n    Date: any,\r\n    Loyalty?: number,\r\n    Reference?: string,\r\n    ServerTransactionID?: string,\r\n    SaleServerTransactionID?: string,\r\n    ClientTransactionID?: string,\r\n    TransactionMetaData?: string,\r\n    GiftCardID?: string,\r\n    // temp fields\r\n    Surcharge?: IAPISurcharge;\r\n    PaymentTypeName?: string;\r\n    InitialSurcharge?: IAPISurcharge;\r\n}\r\n\r\nexport interface IAPISurcharge {\r\n    SurchargeID: string,\r\n    TaxRuleID: string,\r\n    Total: number,\r\n    Tax: number,\r\n    Name: string,\r\n    Type: SurchargeType,\r\n    Value: number,\r\n    PaymentRealAmount: number,\r\n    RefundSurcharge?: boolean,\r\n    PaymentID: string,              // reference to payment for which this surcharge was done. So in API sale it can be a number of the same surcharges.\r\n    PaymentShortName?: string,\r\n\r\n    // temp fields\r\n    CalculatedValue?: number; // calculated surcharge value for referenced payment\r\n    CalculatedValueWithTax?: number; // calculated surcharge value including tax. In case of inclusive tax, this value will  be equal to CalculatedValue\r\n    AmountToRefund?: number;\r\n    TaxToRefund?: number;\r\n}\r\n\r\nexport interface IRefundBase {\r\n    RefundID: string;\r\n}\r\n\r\nexport interface IAPIRefund {\r\n    RefundID: string,\r\n    Date?: any,\r\n    Note?: string,\r\n    Lines?: Array<IAPIProduct>,\r\n    Payments?: Array<IAPIPayment>,\r\n    Surcharges?: Array<IAPISurcharge>,\r\n    IsFromChild?: boolean\r\n}\r\n\r\nexport interface IAPIConvertConfig {\r\n    status: SaleStatusType,\r\n    isContinue: boolean,\r\n    newGuidValue: string,\r\n    isPartiallyPaid: boolean,\r\n    finStatus?: FinancialStatusType,\r\n    isStandaloneReturn?: boolean,\r\n    isStandaloneExchange?: boolean,    \r\n    doNotConsolidate?: boolean,\r\n    taxInclusive: boolean,\r\n    taxPrecision: number,\r\n}\r\n\r\nexport interface IGroupedSale {\r\n    TotalSurcharge?: number;     // including refunded surcharges via cash/store credits\r\n    GhostSurcharge?: number;\r\n    TotalSale: number;\r\n    TotalToRefund: number;\r\n    ExchangeAmount?: number;\r\n    LoyaltyRefundCoeff?: number; // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n    PaymentsMap?: any; // Map<string, IPayment2>;\r\n    PaymentsMap2?: any; // Map<string, IPayment2>;\r\n}\r\n\r\nexport interface ITax {\r\n    TaxRuleID: string; // tax rule id used\r\n    EffectiveInclusiveTaxPercent: number; // effective means that it sufficient to multiply final price to this value/100 to get real tax value\r\n    EffectiveExclusiveTaxPercent: number; // effective means that it sufficient to multiply final price to this value/100 to get real tax value\r\n}\r\n\r\nexport interface IDealResult {\r\n    disc: IProductDeal;\r\n    discount: number;\r\n    affectedValue: number;\r\n}\r\n\r\nexport interface ILineDiscountResult {\r\n    applyPriority: number;\r\n    discount?: IProductDeal;\r\n    totalDiscount: number;\r\n    itemsToSeparate?: number;\r\n    itemDiscount?: number;\r\n    dealDiscountID?: string;\r\n    isCustomerDiscount?: boolean;\r\n}\r\n\r\nexport interface ICalcDiscount {\r\n    discount: number;\r\n    totalDiscount: number;\r\n    applyPriority: number;\r\n    itemsToSeparate?: number;\r\n}\r\n\r\nexport interface IDeaDiscountResult {\r\n    dealDiscountID: string;\r\n    discount: number;\r\n}\r\n\r\nexport interface IReceiptCheckoutItem {\r\n    AdditionalAttribute1: string;\r\n    AdditionalAttribute2: string;\r\n    AdditionalAttribute3: string;\r\n    AdditionalAttribute4: string;\r\n    AdditionalAttribute5: string;\r\n    AdditionalAttribute6: string;\r\n    AdditionalAttribute7: string;\r\n    AdditionalAttribute8: string;\r\n    AdditionalAttribute9: string;\r\n    AdditionalAttribute10: string;\r\n    ProductAmount: string;\r\n    ProductBarCode: string;\r\n    ProductCount: number;\r\n    ProductDiscount: string;\r\n    ProductID: string;\r\n    ProductName: string;\r\n    ProductPrice: string;\r\n    ProductTaxPercent: string;\r\n    ProductSerialNumber: string;\r\n    ProductShortDescription: string;\r\n    ProductSku: string;\r\n    ProductDiscountPercentage: string;\r\n    ProductDiscountedPrice: string;\r\n    ProductDiscountedTotal: string;\r\n}\r\n\r\nexport interface IReceiptNote {\r\n    SalesNote: string;\r\n}\r\n\r\nexport interface IReceiptPayment {\r\n    PaymentAmount: string;\r\n    PaymentDate: string;\r\n    PaymentTypeName: string;\r\n}\r\n\r\nexport interface IReceiptSalesRepresentative {\r\n    SalesRepresentativeName: string;\r\n}\r\n\r\nexport interface IReceiptSurcharge {\r\n    Surcharge: string;\r\n}\r\n\r\nexport interface IEntityWithAddress {\r\n    City?: string;\r\n    Country?: string;\r\n    Line1?: string;\r\n    Line2?: string;\r\n    Postcode?: string;\r\n    State?: string;\r\n}\r\n\r\nexport interface IReceiptCustomer extends IEntityWithAddress {\r\n    CustomerLoyaltyPoints?: string;\r\n    CustomerLoyaltyPointsUsed?: string;\r\n    CustomerName: string;\r\n    Email?: string;\r\n    MobilePhone?: string;\r\n    Phone?: string;\r\n   \r\n    SaleLoyaltyPoints: string;\r\n    TotalLoyaltyPoints: string;\r\n    TaxNumber?: string;\r\n    PaymentTerm?: string;\r\n}\r\n\r\nexport interface IReceiptSaleModel {\r\n    TerminalReceipts: any[];\r\n    Balance: string;\r\n    Barcode: string;\r\n    CalculatedTax: string;\r\n    Change: string;\r\n    CheckoutProductCount: number;\r\n    CheckoutProducts: Array<IReceiptCheckoutItem>;\r\n    Customer: Array<IReceiptCustomer>;\r\n    CustomerAttributes: ICustomerAttribute[];\r\n    CustomerReceipt: string;\r\n    Date: string;\r\n    Discount: string;\r\n    MerchantReceipt: string;\r\n    Notes: Array<IReceiptNote>;\r\n    OutletName: string;\r\n    OutletInfo: Array<IOutletInfo>;\r\n    Payments: Array<IReceiptPayment>;\r\n    ReceiptNumber: string;\r\n    Received: string;\r\n    RegistryName: string;\r\n    SalesRepresentative: Array<IReceiptSalesRepresentative>;\r\n    SubTotal: string;\r\n    Surcharges: Array<IReceiptSurcharge>;\r\n    Time: string;\r\n    Total: string;\r\n    TyroTerminalReceipts: Array<any>;\r\n    VantivTerminalReceipts: Array<any>;\r\n    LinklyTerminalReceipts: Array<any>;\r\n    DiscountPercentage: string;\r\n    TotalBasePrice: string;\r\n    TotalItemDiscount: string;\r\n}\r\n\r\nexport interface IPaymentMethod {\r\n    isCustom?: boolean;                 // true if it's custom payment\r\n    loweredPaymentMethodName: string;   // unique payment lower case name\r\n    paymentMethodName?: string;         // human readable payment method name\r\n    paymentProcessorID: string;         // payment processor ID\r\n    surcharges: Array<string>;          // array of surcharge ID's available for use\r\n}\r\n\r\nexport interface ISelectedItem {\r\n    Data: IAPISale;\r\n    canContinue?: boolean;\r\n    IsPartialPaid?: boolean;\r\n    PartiallyPaidDue?: number;\r\n    RawSaleObject?: string;\r\n    RefundPayments?: Array<any>;\r\n    canContinueReturn?: boolean;\r\n    shouldPayExtra?: boolean;\r\n    SaleType?: number;\r\n}\r\n\r\nexport interface IPaymentValidation {\r\n    cashAmount: number,\r\n    creditCardAmount: number,\r\n    storeCreditAmount: number,\r\n    loyaltyPointsAmount: number,\r\n    cashSurchargeAmount: number,\r\n    storeCreditSurchargeAmount: number,\r\n    cardPayments: any;\r\n    customPayments: Array<ICustomValidation>;\r\n    hasSurchargeRest?: boolean;\r\n}\r\n\r\nexport interface ICustomValidation {\r\n    shortName: string,\r\n    customPaymentName: string,\r\n    validationAmount: number,\r\n    amount: number,\r\n    id: string,\r\n    Surcharge?: IAPISurcharge\r\n}\r\n\r\nexport interface ICardValidation {\r\n    validationAmount: number,\r\n    amount: number,\r\n    id: string,\r\n    Surcharge?: IAPISurcharge\r\n}\r\n\r\nexport interface IRefundPayments {\r\n    cash: number;\r\n    cashSurcharge: number;\r\n    cashRounded: number;\r\n    storeCredit: number;\r\n    storeCreditSurcharge: number;\r\n    loyaltyPoints: number;\r\n    creditCard: number;\r\n}\r\n\r\n\r\nexport interface IOutletInfo extends IEntityWithAddress {\r\n    Description: string;\r\n}","import Enumerable from \"linq\";\r\nimport { omit } from 'lodash';\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { CheckoutItem } from \"../CheckoutItem\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, DiscountType, DiscountLineType, CustomDiscountType } from \"../Enums\";\r\nimport { ISale, ICheckoutItem, ILineDiscountResult, ICustomerDeal, IProductDeal, ICalcDiscount, ITrigger, IDealTarget, IDealResult, IAffectedProduct, IDeaDiscountResult } from \"../Interfaces\";\r\n\r\n\r\nexport class AutoDiscountCalculator implements IPartialCalculator {\r\n\r\n    getOptions(): IPartialCalculatorOptions {\r\n        return <IPartialCalculatorOptions>{\r\n            executionOptions: [\r\n                <IPartialCalculatorExecutionOptions>{\r\n                    type: CalculationType.Checkout,\r\n                    order: StartCalcLevel.Discount + 10\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    /*\r\n     */\r\n    calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n        this.getSaleDiscounts(inputData);\r\n        this.clearDealsFields(inputData.sale);\r\n        return <IOutputData>{processResult: true};\r\n    }\r\n\r\n    private clearDealsFields(sale: ISale) {\r\n        sale.CheckoutItems.forEach(el => {\r\n            if (el.Deals) {\r\n                el.Deals.forEach(d => delete d.itemsToSeparate);\r\n            }\r\n        })\r\n    }\r\n\r\n    private tryToFindOtherCheckoutItemByProductID(items: Array<ICheckoutItem>, productID: string, dealDiscountID: string): ICheckoutItem {\r\n        let item: ICheckoutItem = null;\r\n        for (let v in items) {\r\n            const el = <ICheckoutItem>items[v];\r\n            if (el.ProductID === productID && !this.hasThisDeal(el.Deals, dealDiscountID)) {\r\n                item = el;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return item;\r\n    }\r\n\r\n    private checkDifferentConditions(inputData: IInputData, dealDiscountID: string): boolean {\r\n        let diffConditions = false;\r\n        const productDeals = inputData.productDeals;\r\n        let found = false;\r\n\r\n        productDeals.forEach(disc => {\r\n            if (disc.dealDiscountID === dealDiscountID) {\r\n                disc.triggers.forEach(tEl => {\r\n                    found = false;\r\n                    disc.targets.forEach(targetDisc => {\r\n                        if (((tEl.productID && tEl.productID === targetDisc.productID) ||\r\n                            (tEl.categoryID && tEl.categoryID === targetDisc.categoryID) ||\r\n                            (tEl.brandID && tEl.brandID === targetDisc.brandID) ||\r\n                            (tEl.tagName && tEl.tagName === targetDisc.tagName))) {\r\n                            found = true;\r\n                        }\r\n\r\n                    });\r\n\r\n                    if (found === false) {\r\n                        diffConditions = true;\r\n                    }\r\n                });\r\n\r\n                disc.targets.forEach(tEl => {\r\n                    found = false;\r\n                    disc.triggers.forEach(targetDisc => {\r\n                        if (((tEl.productID && tEl.productID === targetDisc.productID) ||\r\n                            (tEl.categoryID && tEl.categoryID === targetDisc.categoryID) ||\r\n                            (tEl.brandID && tEl.brandID === targetDisc.brandID) ||\r\n                            (tEl.tagName && tEl.tagName === targetDisc.tagName))) {\r\n                            found = true;\r\n                        }\r\n\r\n                    });\r\n\r\n                    if (found === false) {\r\n                        diffConditions = true;\r\n                    }\r\n                });\r\n            }\r\n        });\r\n\r\n        return diffConditions;\r\n    }\r\n\r\n\r\n    /**\r\n     * check if product is affected by deal\r\n     * @param {} deals\r\n     * @param {} dealDiscountID\r\n     * @returns {}\r\n     */\r\n    private hasThisDeal(deals: Array<ILineDiscountResult>, dealDiscountID: string): boolean {\r\n        var result = deals.filter(deal => deal.dealDiscountID === dealDiscountID);\r\n        return result.length > 0;\r\n    }\r\n\r\n    /*\r\n     * check if customer has current deal\r\n     * @param {} customerDeals\r\n     * @param {} dealID\r\n     * @returns {}\r\n     */\r\n    private customerHasThatDeal(customerDeals: Array<ICustomerDeal>, dealID: string): boolean {\r\n        const has = customerDeals.filter(el => el.DealID === dealID).length > 0;\r\n        return has;\r\n    }\r\n\r\n    /**\r\n     * check if tags string contaons tagName\r\n     * @param {} tags\r\n     * @param {} tag\r\n     * @returns {}\r\n     */\r\n    private checkTag(tags: any, tag: string): boolean {\r\n        let hasTag = false;\r\n        if (tag && tags && typeof (tags) === 'string') {\r\n            const result = <Array<string>>tags.split(',');\r\n            hasTag = result.filter(el => el === tag).length > 0;\r\n        }\r\n\r\n        return hasTag;\r\n    }\r\n\r\n    //calculate posible discount\r\n    private calculateDiscountLine(discount: IProductDeal, item: ICheckoutItem, value: number): ICalcDiscount {\r\n        var result = <ICalcDiscount>{\r\n            discount: 0,\r\n            totalDiscount: 0,\r\n            applyPriority: 0\r\n        };\r\n\r\n        var affectedValue = value === null ? item.Count : value;\r\n\r\n        if (discount.type === DiscountType.QuantityBased) {\r\n            discount.triggers.forEach(t => {\r\n                if (t.minValue <= item.Count && item.Count <= t.maxValue) {\r\n                    discount.amount = t.amount;\r\n                    return false;\r\n                }\r\n            });\r\n        }\r\n\r\n        switch (discount.discountLineType) {\r\n            case DiscountLineType.DiscountAmount:\r\n                result.discount = discount.amount > item.BasePrice ? 0 : item.BasePrice - discount.amount;\r\n                break;\r\n            case DiscountLineType.DiscountPercent:\r\n                result.discount = item.BasePrice * (100 - discount.amount) / 100;\r\n                break;\r\n            case DiscountLineType.MarkupAmount:\r\n                result.discount = item.BasePrice + discount.amount;\r\n                break;\r\n            case DiscountLineType.MarkupPercent:\r\n                result.discount = item.BasePrice + (item.BasePrice * discount.amount / 100);\r\n                break;\r\n            case DiscountLineType.FlatAmount:\r\n                result.discount = discount.amount / affectedValue;\r\n                break;\r\n            default:\r\n                result.discount = 0;\r\n                break;\r\n        }\r\n\r\n        result.discount = item.BasePrice - result.discount;\r\n        result.totalDiscount = result.discount * affectedValue;\r\n\r\n        if (value !== null)\r\n            result.itemsToSeparate = affectedValue;\r\n\r\n        if (discount.discountLineType === DiscountLineType.PriceOverride) {\r\n            result.applyPriority = 1;\r\n            result.discount = item.BasePrice - discount.amount;\r\n            result.totalDiscount = result.discount * affectedValue;\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    private static isOrderTotal(item: ITrigger | IDealTarget) {\r\n        return (!item.productID || item.productID === ext.constantService.newGuid)\r\n            && !item.categoryID && !item.brandID && !item.tagName;\r\n    }\r\n\r\n    private calculateOrderDiscount(discount: IProductDeal, total: number, checkoutItems: Array<ICheckoutItem>): IDealResult {\r\n        const newGuid = ext.constantService.newGuid;\r\n        const result = <IDealResult>{\r\n            disc: discount,\r\n            discount: 0,\r\n            affectedValue: 0\r\n        };\r\n\r\n        let totalMultiplier = discount.buyValue > 0 ? Math.floor(total / discount.buyValue) : 0;\r\n        let affectedValue = discount.getValue;\r\n        let productBuyCount = 0;\r\n        let applyTotalDiscount = false;\r\n\r\n        discount.triggers.forEach(tEl => {\r\n            checkoutItems.forEach(el => {\r\n                if ((((el.ProductID === tEl.productID && tEl.productID && !tEl.isFamily) ||\r\n                        (el.FamilyID === tEl.productID && tEl.productID && tEl.isFamily) ||\r\n                        (!tEl.productID || tEl.productID == newGuid))\r\n                    && ((el.CategoryID === tEl.categoryID && tEl.categoryID) || !tEl.categoryID)\r\n                    && ((el.BrandID === tEl.brandID && tEl.brandID) || !tEl.brandID)\r\n                    && (this.checkTag(el.Tags, tEl.tagName) || !tEl.tagName))) {\r\n                    productBuyCount += el.Count;\r\n                }\r\n            });\r\n        });\r\n\r\n        if (Math.floor(productBuyCount / discount.buyValue) >= 1) {\r\n            totalMultiplier = Math.floor(productBuyCount / discount.buyValue);\r\n            applyTotalDiscount = true;\r\n        }\r\n\r\n        totalMultiplier = totalMultiplier > 0 ? discount.buyMore === false ? totalMultiplier : 1 : 0;\r\n        affectedValue *= totalMultiplier;\r\n\r\n        if ((AutoDiscountCalculator.isOrderTotal(discount.triggers[0]) || applyTotalDiscount === true) &&\r\n            discount.targets.length > 0 && AutoDiscountCalculator.isOrderTotal(discount.targets[0])) {\r\n            switch (discount.discountLineType) {\r\n                case DiscountLineType.DiscountAmount:\r\n                    result.discount = total - discount.amount;\r\n                    break;\r\n                case DiscountLineType.DiscountPercent:\r\n                    result.discount = total * (100 - discount.amount) / 100;\r\n                    break;\r\n                case DiscountLineType.MarkupAmount:\r\n                    result.discount = total + discount.amount;\r\n                    break;\r\n                case DiscountLineType.MarkupPercent:\r\n                    result.discount = total + (total * discount.amount / 100);\r\n                    break;\r\n                case DiscountLineType.PriceOverride:\r\n                    result.discount = discount.amount;\r\n                    break;\r\n                case DiscountLineType.FlatAmount:\r\n                    result.discount = discount.amount;\r\n                    break;\r\n                default:\r\n                    result.discount = 0;\r\n                    break;\r\n            }\r\n\r\n            result.discount = total - result.discount;\r\n            if (discount.discountLineType === DiscountLineType.DiscountPercent && totalMultiplier === 0) {\r\n                result.discount *= totalMultiplier;\r\n            } else if (discount.discountLineType !== DiscountLineType.DiscountPercent) {\r\n                result.discount *= totalMultiplier;\r\n            }\r\n\r\n        }\r\n\r\n        /// Looks like we dont need this part\r\n        /*else if (discount.targets.length > 0 && discount.targets[0].productID !== newGuid) {\r\n\r\n            discount.targets.forEach(targetDisc => {\r\n                checkoutItems.forEach(targetItem => {\r\n                    if ((((targetItem.ProductID === targetDisc.productID && targetDisc.productID && !targetDisc.isFamily) || (targetItem.FamilyID === targetDisc.productID && targetDisc.productID && targetDisc.isFamily) || !targetDisc.productID) &&\r\n                        ((targetItem.CategoryID === targetDisc.categoryID && targetDisc.categoryID) || !targetDisc.categoryID) &&\r\n                        ((targetItem.BrandID === targetDisc.brandID && targetDisc.brandID) || !targetDisc.brandID) &&\r\n                        (this.checkTag(targetItem.Tags, targetDisc.tagName) || !targetDisc.tagName)) && targetItem.CanEdit) {\r\n                        discount.affectedProducts.push(<IAffectedProduct>{\r\n                            productID: targetItem.ProductID,\r\n                            price: targetItem.BasePrice\r\n                        });\r\n                    }\r\n                });\r\n            });\r\n\r\n            // orderBy(discount.affectedProducts, ['price'], false)\r\n            Enumerable.from(discount.affectedProducts)\r\n                .orderBy(k => k.price)\r\n                .forEach(affectedProduct => {\r\n                    for (let v in checkoutItems) {\r\n                        const targetItem = <ICheckoutItem>checkoutItems[v];\r\n                        if (targetItem.ProductID === affectedProduct.productID &&\r\n                            (affectedValue > 0)) {\r\n                            var value = affectedValue > targetItem.Count ? targetItem.Count : affectedValue ? affectedValue : null;\r\n                            var itemDiscount = this.calculateDiscountLine(discount, targetItem, value);\r\n                            result.discount = itemDiscount.totalDiscount;\r\n                            affectedValue -= targetItem.Count;\r\n                            break;\r\n                        }\r\n                    }\r\n                });\r\n\r\n            result.affectedValue = affectedValue;\r\n        }*/\r\n\r\n        return result;\r\n    }\r\n\r\n    // filter deals in according to selectedCoupon\r\n    private filterProductDeals(inputData: IInputData) {\r\n        const currentSale = inputData.sale;\r\n        const productDeals = inputData.productDeals;\r\n\r\n        if (!productDeals)\r\n            return new Array<IProductDeal>();\r\n\r\n        const couponID = currentSale.SelectedCouponID;\r\n\r\n        const filteredProductDeals = productDeals.filter(d => {\r\n            if (d.allowCoupons !== true) return true; // if deal is not coupon, get it\r\n            if (!d.coupons) return false;\r\n            if (!!d.coupons && !couponID) return false;\r\n\r\n            const coups = d.coupons.filter(function (c) {\r\n                return c.ID === couponID;\r\n            });\r\n            return coups.length > 0;\r\n        });\r\n\r\n        return filteredProductDeals;\r\n    }\r\n\r\n    private getSaleDiscounts(inputData: IInputData) {\r\n        const currentSale = inputData.sale;\r\n        const productDeals = !inputData.productDeals ? new Array<IProductDeal>() : inputData.productDeals;\r\n        const newGuid = ext.constantService.newGuid;\r\n\r\n        if (currentSale.StandAloneReturn) return; // for standalone there is no discounts, exit.\r\n\r\n        let customerDeals = !currentSale.Customer ? [] : currentSale.Customer.Discounts;\r\n        if (!customerDeals)\r\n            customerDeals = [];\r\n\r\n        const removedItemsMap = new Map<string, ICheckoutItem>(); // assume that saparated items can have only one split, i.e. with the same SeparatedItemID can be only one item\r\n\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            el.Deals = new Array<ILineDiscountResult>();\r\n            el.ItemDiscount = 0;\r\n\r\n            if (el.SeparatedItemID && el.CanEdit) {\r\n                for (let v in currentSale.CheckoutItems) {\r\n                    const parentEl = <ICheckoutItem>currentSale.CheckoutItems[v];\r\n                    if (parentEl.ID === el.SeparatedItemID) {\r\n                        parentEl.Count = parentEl.Count + el.Count;\r\n                        removedItemsMap.set(el.ComplexSeparatedItemID, el);\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n        // check and remove cleared manual discounts\r\n        // check here custom discount\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            if (el.CanEdit) {\r\n                if (el.CustomDiscountType === CustomDiscountType.Percent && el.Discount == 0)\r\n                    el.CustomDiscountType = null;\r\n            }\r\n        });\r\n\r\n        // clean temporary data\r\n        if (productDeals)\r\n            productDeals.forEach(el => el.affectedProducts = new Array<IAffectedProduct>());\r\n\r\n        // cause product deals can have coupon deals and coupon deal can be disabled\r\n        // we need to filter productDeals and remove all coupon deals that don't work for the moment\r\n        // coupon deal starts to work when it contains coupon number that is selected. Only one coupon can be set for current sale.\r\n        const filteredProductDeals = this.filterProductDeals(inputData);\r\n\r\n        currentSale.CheckoutItems = currentSale.CheckoutItems\r\n            .filter(c => !c.ComplexSeparatedItemID || !removedItemsMap.has(c.ComplexSeparatedItemID));\r\n\r\n        const currentDate = new Date();\r\n\r\n        // calculate order level discount\r\n        var total = CalculatorHelperService.getCheckoutSum(currentSale);\r\n        var totalDiscounts = new Array<IDealResult>();\r\n\r\n        filteredProductDeals.forEach(disc => {\r\n            if ((disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n                (disc.triggers[0].productID === newGuid || (disc.targets[0] && disc.targets[0].productID === newGuid)) &&\r\n                (this.customerHasThatDeal(customerDeals, disc.dealID) || disc.customersGroup === 'All' || disc.customersGroup === 'POS')) {\r\n                const result = this.calculateOrderDiscount(disc, total, currentSale.CheckoutItems);\r\n                if (result.discount)\r\n                    totalDiscounts.push(result);\r\n            }\r\n        });\r\n\r\n        var results = new Array<IDeaDiscountResult>();\r\n        totalDiscounts.forEach(el => {\r\n            let addNewResult = true;\r\n            for (let v in results) {\r\n                const r = <IDeaDiscountResult>results[v];\r\n                if (r.dealDiscountID === el.disc.dealDiscountID) {\r\n                    r.discount += el.discount;\r\n                    addNewResult = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addNewResult) {\r\n                results.push(\r\n                    <IDeaDiscountResult>{\r\n                        dealDiscountID: el.disc.dealDiscountID,\r\n                        discount: el.discount\r\n                    });\r\n            }\r\n        });\r\n\r\n        // search discounts for products\r\n        // Customers discount, discount matrix, product discount\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            if (!el.Deals)\r\n                el.Deals = new Array<ILineDiscountResult>();\r\n\r\n            if (currentSale.Customer &&\r\n                currentSale.Customer.Discount &&\r\n                currentSale.Customer.Discount > 0 &&\r\n                ext.configService.applyCustomerDiscountAfterOtherDiscounts !== true) {\r\n                var customerDiscount = currentSale.Customer.Discount;\r\n\r\n                var disc = <IProductDeal>{\r\n                    discountLineType: DiscountLineType.DiscountPercent,\r\n                    amount: customerDiscount\r\n                };\r\n\r\n                var result = this.calculateDiscountLine(disc, el, null);\r\n                var discount = <ILineDiscountResult>{\r\n                    applyPriority: result.applyPriority,\r\n                    discount: disc,\r\n                    totalDiscount: result.totalDiscount,\r\n                    itemDiscount: result.discount,\r\n                    itemsToSeparate: result.itemsToSeparate,\r\n                    dealDiscountID: null,\r\n                    isCustomerDiscount: true\r\n                };\r\n\r\n                el.Deals.push(discount);\r\n            }\r\n\r\n            var appliedDiscount = false;\r\n            var appliedByTag = false;\r\n            var appliedById = false;\r\n            if (currentSale.Customer.MatrixDiscounts) {\r\n                currentSale.Customer.MatrixDiscounts.forEach(martrixItem => {\r\n                    if ((el.ProductID === martrixItem.ProductID &&\r\n                            (martrixItem.Type === DiscountType.Simple\r\n                                || (martrixItem.Type === DiscountType.QuantityBased &&\r\n                                    martrixItem.MinValue <= el.Count &&\r\n                                    martrixItem.MaxValue >= el.Count))) &&\r\n                        ((appliedById === true && martrixItem.ByTag === false) ||\r\n                            (appliedByTag === true && martrixItem.ByTag === true) ||\r\n                            appliedDiscount === false)\r\n                    ) {\r\n\r\n                        appliedDiscount = true;\r\n\r\n                        if (martrixItem.ByTag) {\r\n                            appliedByTag = true;\r\n                        } else {\r\n                            appliedById = true;\r\n                        }\r\n\r\n                        var disc = <IProductDeal>{\r\n                            discountLineType: martrixItem.DiscountLineType,\r\n                            amount: martrixItem.Amount\r\n                        };\r\n\r\n                        var result = this.calculateDiscountLine(disc, el, null);\r\n                        var discount = <ILineDiscountResult>{\r\n                            applyPriority: result.applyPriority,\r\n                            discount: disc,\r\n                            totalDiscount: result.totalDiscount,\r\n                            itemDiscount: result.discount,\r\n                            itemsToSeparate: result.itemsToSeparate,\r\n                            dealDiscountID: null\r\n                        };\r\n\r\n                        el.Deals.push(discount);\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (el.Discounts && appliedDiscount === false) {\r\n                el.Discounts.forEach(prDisc => {\r\n                    if ((prDisc.type === DiscountType.Simple\r\n                        || (prDisc.type === DiscountType.QuantityBased &&\r\n                            prDisc.minValue <= el.Count &&\r\n                            prDisc.maxValue >= el.Count))) {\r\n\r\n                        var disc = <IProductDeal>{\r\n                            discountLineType: prDisc.discountLineType,\r\n                            amount: prDisc.amount\r\n                        };\r\n\r\n                        var result = this.calculateDiscountLine(disc, el, null);\r\n                        var discount = <ILineDiscountResult>{\r\n                            applyPriority: result.applyPriority,\r\n                            discount: disc,\r\n                            totalDiscount: result.totalDiscount,\r\n                            itemDiscount: result.discount,\r\n                            itemsToSeparate: result.itemsToSeparate,\r\n                            dealDiscountID: null\r\n                        };\r\n\r\n                        el.Deals.push(discount);\r\n                    }\r\n                });\r\n            }\r\n        });\r\n\r\n        //deals discounts\r\n        Enumerable.from(filteredProductDeals)\r\n            .orderBy(k => k.dealDiscountID)\r\n            .forEach(disc => {\r\n                if (this.customerHasThatDeal(customerDeals, disc.dealID) ||\r\n                    disc.customersGroup === 'All' ||\r\n                    disc.customersGroup === 'POS') {\r\n\r\n                    var productBuyCount = 0;\r\n                    var triggerItemIds = new Array<string>();\r\n\r\n                    disc.triggers.forEach(tElement => {\r\n                        currentSale.CheckoutItems.forEach(el => {\r\n                            const isOrderTotal = AutoDiscountCalculator.isOrderTotal(tElement);\r\n\r\n                            if (el.CanEdit &&\r\n                                (((el.ProductID === tElement.productID &&\r\n                                            tElement.productID &&\r\n                                            !tElement.isFamily) ||\r\n                                        (tElement.productID &&\r\n                                            tElement.isFamily &&\r\n                                            el.FamilyID === tElement.productID) || !tElement.productID || tElement.productID === newGuid) &&\r\n                                    ((el.CategoryID === tElement.categoryID && tElement.categoryID) ||\r\n                                        !tElement.categoryID) &&\r\n                                    ((el.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                    (this.checkTag(el.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate)) {\r\n                                if (disc.type === DiscountType.QuantityBased) {\r\n                                    const qv = isOrderTotal ? el.FinalAmount : el.Count;\r\n                                    if (tElement.minValue <= qv && (qv <= tElement.maxValue)) {\r\n                                        productBuyCount += qv;\r\n                                        triggerItemIds.push(el.ProductID);\r\n                                    }\r\n\r\n                                } else {\r\n                                    productBuyCount += isOrderTotal ? el.FinalAmount : el.Count;\r\n                                    triggerItemIds.push(el.ProductID);\r\n                                }\r\n                            }\r\n                        });\r\n                    });\r\n\r\n\r\n                    if (productBuyCount >= disc.buyValue || disc.buyValue == null) {\r\n\r\n                        disc.targets.forEach(targetDisc => {\r\n                            currentSale.CheckoutItems.forEach(targetItem => {\r\n                                if (targetItem.CanEdit &&\r\n                                    (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                    (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n                                    (((targetItem.ProductID === targetDisc.productID &&\r\n                                                targetDisc.productID && !targetDisc.isFamily) ||\r\n                                            (targetDisc.productID && targetDisc.isFamily &&\r\n                                                targetItem.FamilyID === targetDisc.productID) || !targetDisc.productID) &&\r\n                                        ((targetItem.CategoryID === targetDisc.categoryID && targetDisc.categoryID) ||\r\n                                            !targetDisc.categoryID) &&\r\n                                        ((targetItem.BrandID === targetDisc.brandID && targetDisc.brandID) || !targetDisc.brandID) &&\r\n                                        (this.checkTag(targetItem.Tags, targetDisc.tagName) || !targetDisc.tagName)) &&\r\n                                    (disc.type === DiscountType.Simple\r\n                                        || (disc.type === DiscountType.QuantityBased && disc.minValue <= targetItem.Count &&\r\n                                            disc.maxValue >= targetItem.Count)) && targetItem.CanEdit &&\r\n                                    (!this.hasThisDeal(targetItem.Deals, disc.dealDiscountID) /*||  // it seems the error checkout item does not have itemsToSeparate\r\n                                      (targetItem.itemsToSeparate > 0 && targetItem.itemsToSeparate !== targetItem.Count)*/)) {\r\n                                    disc.affectedProducts.push(\r\n                                        <IAffectedProduct>{\r\n                                            productID: targetItem.ProductID,\r\n                                            price: targetItem.BasePrice\r\n                                        });\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                        if (disc.targets.length === 0) {\r\n                            disc.triggers.forEach(tElement => {\r\n                                currentSale.CheckoutItems.forEach(targetItem => {\r\n                                    if (targetItem.CanEdit &&\r\n                                        (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                        (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n                                        (((targetItem.ProductID === tElement.productID && tElement.productID && !tElement.isFamily) ||\r\n                                                (targetItem.FamilyID === tElement.productID && tElement.productID && tElement.isFamily) ||\r\n                                                !tElement.productID || tElement.productID === newGuid) &&\r\n                                            ((targetItem.CategoryID === tElement.categoryID && tElement.categoryID) || !tElement.categoryID) &&\r\n                                            ((targetItem.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                            (this.checkTag(targetItem.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                        (disc.type === DiscountType.Simple\r\n                                            || (disc.type === DiscountType.QuantityBased &&\r\n                                                tElement.minValue <= targetItem.Count && tElement.maxValue >= targetItem.Count)) &&\r\n                                        targetItem.CanEdit &&\r\n                                        (!this.hasThisDeal(targetItem.Deals, disc.dealDiscountID)\r\n                                            // || (targetItem.itemsToSeparate > 0 && targetItem.itemsToSeparate !== targetItem.Count) // it seems the bug\r\n                                        )) {\r\n\r\n                                        if (disc.type === DiscountType.QuantityBased) {\r\n\r\n                                            if (tElement.minValue <= targetItem.Count &&\r\n                                                tElement.maxValue >= targetItem.Count) {\r\n                                                disc.amount = tElement.amount;\r\n                                                disc.discountLineType = tElement.discountLineType;\r\n                                                disc.affectedProducts.push(\r\n                                                    <IAffectedProduct>{\r\n                                                        productID: targetItem.ProductID,\r\n                                                        price: targetItem.BasePrice\r\n                                                    });\r\n                                            }\r\n                                        } else {\r\n\r\n                                            disc.affectedProducts.push(\r\n                                                <IAffectedProduct>{\r\n                                                    productID: targetItem.ProductID,\r\n                                                    price: targetItem.BasePrice\r\n                                                });\r\n                                        }\r\n                                    }\r\n                                });\r\n                            });\r\n                        }\r\n\r\n                        var affectedValue = 0;\r\n\r\n                        if (this.checkDifferentConditions(inputData, disc.dealDiscountID) === true) {\r\n                            affectedValue = disc.buyMore === false ? disc.getValue * Math.floor(productBuyCount / disc.buyValue) : disc.getValue;\r\n                        } else {\r\n                            affectedValue = disc.getValue * Math.floor(productBuyCount / (disc.buyValue + disc.getValue));\r\n                            affectedValue = (affectedValue > disc.getValue && disc.buyMore === true) ? disc.getValue : affectedValue;\r\n                        }\r\n\r\n                        Enumerable.from(disc.affectedProducts)\r\n                            .orderBy(k => k.price)\r\n                            .forEach(affectedProduct => {\r\n                                currentSale.CheckoutItems.forEach(targetItem => {\r\n                                    if (targetItem.CanEdit &&\r\n                                        targetItem.ProductID === affectedProduct.productID &&\r\n                                        (affectedValue > 0 || (!affectedValue && affectedValue !== 0))) {\r\n\r\n                                        if (this.hasThisDeal(targetItem.Deals, disc.dealDiscountID)) {\r\n                                            var otherItem = this.tryToFindOtherCheckoutItemByProductID(currentSale.CheckoutItems, targetItem.ProductID, disc.dealDiscountID);\r\n                                            if (otherItem != null) {\r\n                                                var value = affectedValue > otherItem.Count ? otherItem.Count : affectedValue ? affectedValue : null;\r\n                                                var result = this.calculateDiscountLine(disc, otherItem, value);\r\n                                                var discount =\r\n                                                    <ILineDiscountResult>{\r\n                                                        applyPriority: result.applyPriority,\r\n                                                        discount: omit(disc, ['coupons']),\r\n                                                        totalDiscount: result.totalDiscount,\r\n                                                        itemDiscount: result.discount,\r\n                                                        itemsToSeparate: result.itemsToSeparate,\r\n                                                        dealDiscountID: disc.dealDiscountID\r\n                                                    };\r\n                                                otherItem.Deals.push(discount);\r\n                                                affectedValue -= value;\r\n                                                return false;\r\n                                            } else {\r\n                                                for (let v in targetItem.Deals) {\r\n                                                    const d = <ILineDiscountResult>targetItem.Deals[v];\r\n                                                    if (d.dealDiscountID === disc.dealDiscountID) {\r\n\r\n                                                        var value = affectedValue + d.itemsToSeparate > targetItem.Count ?\r\n                                                            targetItem.Count : affectedValue + d.itemsToSeparate;\r\n                                                        var result = this.calculateDiscountLine(disc, targetItem, value);\r\n                                                        d.itemsToSeparate = result.itemsToSeparate;\r\n                                                        d.totalDiscount = result.totalDiscount;\r\n                                                        affectedValue -= value;\r\n                                                        break;\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        } else {\r\n                                            const value = affectedValue > targetItem.Count ?\r\n                                                targetItem.Count : affectedValue ?\r\n                                                    affectedValue : null;\r\n                                            const result = this.calculateDiscountLine(disc, targetItem, value);\r\n                                            const discount = <ILineDiscountResult>{\r\n                                                applyPriority: result.applyPriority,\r\n                                                discount: omit(disc, ['coupons']),\r\n                                                totalDiscount: result.totalDiscount,\r\n                                                itemDiscount: result.discount,\r\n                                                itemsToSeparate: result.itemsToSeparate,\r\n                                                dealDiscountID: disc.dealDiscountID\r\n                                            };\r\n\r\n                                            targetItem.Deals.push(discount);\r\n                                            affectedValue -= value;\r\n                                            return false;\r\n                                        }\r\n                                    }\r\n                                });\r\n                            });\r\n                    }\r\n                }\r\n            });\r\n\r\n        //choose best discount\r\n        const itemsToAdd = new Array<ICheckoutItem>();\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            let itemsWithOutDiscount = el.CanEdit ? el.Count : 0;\r\n            let dlst = Enumerable.from(el.Deals);\r\n\r\n            if (el.Deals.filter(d => d.applyPriority > 0).length > 0) {\r\n                dlst = dlst.where(d => d.applyPriority > 0);\r\n            } else dlst = dlst.orderByDescending(k => k.applyPriority);\r\n\r\n            const deals = dlst\r\n                // .thenByDescending(k => k.totalDiscount)\r\n                // IMZ. sorting is replaced by the following due to in the case of 5 items for instance with\r\n                // deal that acts on 1 item, tha total discount will be always greater.\r\n                // also the best discount has the best priority. But if PriceOverride discount exists on this product\r\n                // it will be the best always\r\n                .orderByDescending(k => k.itemDiscount)\r\n                .toArray();\r\n\r\n            // const deals = orderBy(el.deals, ['applyPriority', 'totalDiscount'], true);\r\n\r\n            for (let i = 0; i < deals.length && itemsWithOutDiscount > 0; i++) {\r\n                let bestDiscount = deals[i];\r\n\r\n                if (bestDiscount && el.CanEdit) {\r\n                    if (bestDiscount.itemsToSeparate && bestDiscount.itemsToSeparate < el.Count) {\r\n                        let newItem = CheckoutItem.copy(el);\r\n\r\n                        newItem.Count = bestDiscount.itemsToSeparate;\r\n                        newItem.ID = ext.uuid2Service.newguid();\r\n                        //                            newItem.itemDiscount = helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n                        newItem.FinalPrice = ext.helperService.DEARRound(newItem.BasePrice - bestDiscount.itemDiscount, 2);\r\n                        newItem.ItemDiscount = ext.helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n                        newItem.SeparatedItemID = el.ID;\r\n                        newItem.ComplexSeparatedItemID = el.ID + \"__\" + bestDiscount.dealDiscountID;\r\n                        newItem.FinalAmount = ext.helperService.DEARRound(newItem.FinalPrice * newItem.Count, 2);\r\n\r\n                        el.Count -= bestDiscount.itemsToSeparate;\r\n                        el.FinalAmount = el.BasePrice * el.Count;\r\n                        el.FinalPrice = el.BasePrice;\r\n\r\n                        itemsWithOutDiscount -= bestDiscount.itemsToSeparate;\r\n\r\n                        itemsToAdd.push(newItem);\r\n                    } else {\r\n\r\n                        //                            el.itemDiscount = helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n                        //                            el.FinalPrice = ext.helperService.DEARRound(el.BasePrice - bestDiscount.itemDiscount, 2);\r\n                        el.FinalPrice = ext.helperService.DEARRound(el.BasePrice - bestDiscount.itemDiscount, 4);\r\n                        el.FinalAmount = ext.helperService.DEARRound(el.FinalPrice * el.Count, 2);\r\n                        el.ItemDiscount = ext.helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n                        itemsWithOutDiscount = 0;\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n        itemsToAdd.forEach(el => {\r\n            if (!!el.ComplexSeparatedItemID && removedItemsMap.has(el.ComplexSeparatedItemID)) {\r\n                var oldEl = removedItemsMap.get(el.ComplexSeparatedItemID);\r\n                el.Discount = oldEl.Discount;\r\n                if (oldEl.CustomDiscountType !== null && oldEl.CustomDiscountType !== undefined)\r\n                    el.CustomDiscountType = oldEl.CustomDiscountType;\r\n            }\r\n            currentSale.CheckoutItems.push(el);\r\n        });\r\n\r\n        //apply customersDiscount after all discounts if needed\r\n        if (currentSale.Customer && currentSale.Customer.Discount && currentSale.Customer.Discount > 0 &&\r\n            ext.configService.applyCustomerDiscountAfterOtherDiscounts === true) {\r\n\r\n            currentSale.CheckoutItems.forEach(el => {\r\n                const discountPercentage = currentSale.Customer.Discount / 100;\r\n\r\n                if (el.CanEdit) {\r\n                    // apply customer discount on final price with all other discounts and update both prices\r\n                    el.ItemDiscount = el.ItemDiscount + el.FinalPrice * discountPercentage;\r\n                    el.FinalPrice = ext.helperService.DEARRound(el.BasePrice - el.ItemDiscount, 2);\r\n                    el.FinalAmount = ext.helperService.DEARRound(el.FinalPrice * el.Count, 2);\r\n                    el.ItemDiscount = ext.helperService.DEARRound(el.ItemDiscount, 2);\r\n                }\r\n            });\r\n        }\r\n\r\n        // check here custom discount\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            if (el.CanEdit) {\r\n                if (el.CustomDiscountType === CustomDiscountType.Price &&\r\n                    el.Discount >= 0) {\r\n                    el.ItemDiscount = ext.helperService.DEARRound(el.BasePrice - el.Discount, 2);\r\n\r\n                    if (el.ItemDiscount === 0) {\r\n                        el.FinalPrice = el.BasePrice;\r\n                        // el.CustomDiscountType = null; // this will disable custom setting at all.\r\n                    } else\r\n                        el.FinalPrice = el.Discount;\r\n                } else if (el.CustomDiscountType === CustomDiscountType.Percent &&\r\n                    el.Discount >= 0) {\r\n                    if (el.Discount > 100)\r\n                        el.Discount = 100;\r\n\r\n                    el.ItemDiscount = el.Discount * el.BasePrice / 100;\r\n\r\n                    if (el.ItemDiscount === 0) {\r\n                        el.FinalPrice = el.BasePrice;\r\n                        // el.CustomDiscountType = null;\r\n                    } else\r\n                        el.FinalPrice = ext.helperService.DEARRound(el.BasePrice - el.ItemDiscount, 2);\r\n                }\r\n\r\n                el.FinalAmount = ext.helperService.DEARRound(el.FinalPrice * el.Count, 2);\r\n                el.ItemDiscount = ext.helperService.DEARRound(el.ItemDiscount, 2);\r\n            }\r\n        });\r\n\r\n        // reprocess here price based barcode products\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            if (el.CanEdit && el.PriceBasedValue) {\r\n                if (el.FinalPrice > 0) {\r\n                    el.Count = ext.helperService.DEARRound(el.PriceBasedValue / el.FinalPrice, 4);\r\n                } else {\r\n                    el.FinalAmount = 1;\r\n                }\r\n\r\n                el.FinalAmount = ext.helperService.DEARRound(el.FinalPrice * el.Count, 2);\r\n            }\r\n        });\r\n\r\n        total = CalculatorHelperService.getCheckoutSum(currentSale);\r\n        //const prevDiscountValue = currentSale.Discount;\r\n\r\n        //            var bestTotalDiscount = orderBy(results, 'discount', true)[0];\r\n        const bestTotalDiscount = Enumerable.from(results).orderByDescending(k => k.discount).firstOrDefault();\r\n\r\n        if (currentSale.keepTotalDiscount !== true && currentSale.ManuallyAppliedDiscount !== true) {\r\n            if (bestTotalDiscount && bestTotalDiscount.discount > 0) {\r\n                currentSale.Discount = ext.helperService.DEARRound(bestTotalDiscount.discount > total ? total : bestTotalDiscount.discount, 2);\r\n                currentSale.IsDiscountPercent = false;\r\n            } else {\r\n                currentSale.Discount = 0;\r\n            }\r\n        }\r\n\r\n        if (currentSale.ManuallyAppliedDiscount === true && currentSale.keepTotalDiscount !== true) {\r\n            currentSale.keepTotalDiscount = false;\r\n\r\n            var message = ext.gettextCatalog.getString(\"Please note that the total discount has been updated.\");\r\n            var skipwarn = localStorage.getItem('SkipDiscountSaleWarnMessage') === 'true';\r\n            if (!skipwarn) {\r\n                ext.helperService.showCustomDialog3(ext.gettextCatalog.getString('Warning'), message,\r\n                    ext.gettextCatalog.getString('OK'), '', false, true, skipwarn, function (val) {\r\n                        localStorage.setItem('SkipDiscountSaleWarnMessage', val);\r\n                    });\r\n            }\r\n        }\r\n    }\r\n}","import {\r\n    IPartialCalculator,\r\n    IPartialCalculatorOptions,\r\n    IPartialCalculatorExecutionOptions,\r\n    IInputData,\r\n    IOutputData\r\n} from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\nimport { Sale } from \"../Sale\";\r\n\r\n\r\nexport class FinalCalculator implements IPartialCalculator {\r\n\r\n    getOptions(): IPartialCalculatorOptions {\r\n        return <IPartialCalculatorOptions>{\r\n            executionOptions: [\r\n                <IPartialCalculatorExecutionOptions>{\r\n                    type: CalculationType.Checkout,\r\n                    order: StartCalcLevel.Final + 10\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n        // go through all checkout items and calculate taxes and sum them\r\n        const sale = Sale.create(inputData.sale); // in case if it's not sale object - create it\r\n        const scope = inputData.scope;\r\n\r\n        if (scope) {\r\n            // save sale should be at the end of all calculations\r\n            ext.helperService.storeCurrentSale(sale, scope);\r\n        }\r\n\r\n        return <IOutputData>{processResult: true};\r\n    }\r\n}","import { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, PaymentShortNameStandardType } from \"../Enums\";\r\nimport { ISale } from \"../Interfaces\";\r\n\r\n\r\n    export class LoyaltyCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Payments,\r\n                        order: StartCalcLevel.Loyalty + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.Loyalty + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n\r\n            if (sale.Payments && !ext.configService.loyaltyLionToken && sale.Customer.EnableLoyaltyPoints) {\r\n                const pm = new Map<string, number>();\r\n                sale.Payments.forEach(p => {\r\n                    if (p.ShortName !== PaymentShortNameStandardType.Discount &&\r\n                        p.ShortName !== PaymentShortNameStandardType.Rounding &&\r\n                        p.ShortName !== PaymentShortNameStandardType.Loyalty) {\r\n                        // take into account that we should substract surcharges\r\n                        // because surcharge is outside fee and do not relate to merchant business\r\n                        // so client can not get points for this amount\r\n                        const samount = (p.Surcharge && p.Surcharge.CalculatedValueWithTax) ? p.Surcharge.CalculatedValueWithTax : 0;\r\n                        pm.set(p.ID, p.Amount - samount);\r\n                    }\r\n                });\r\n\r\n                const res = this.calculateLoyalty(sale, pm);\r\n                // set loyalty into payments\r\n                sale.Payments.forEach(p => {\r\n                    if (res.has(p.ID)) {\r\n                        p.Loyalty = res.get(p.ID);\r\n                    }\r\n                });\r\n\r\n                sale.LoyaltyPointsTotal = sale.calculateTotalLoyalty();\r\n                sale.LoyaltyPoints = sale.calculateSessionLoyalty();\r\n            }\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n\r\n        /*\r\n         Calculates proposed loyalty based on loyalty ratio for each\r\n         item in the checkout. So checkout items should contain loyalty ratio\r\n         result sign automatically depends on the total payments sign\r\n         sale - current sale with correct checkout items\r\n\r\n         Take into account that in new sale design we will have prices always positive but count can be negative in case of refund\r\n         this is for our internal sale presentation\r\n         amounts - is map of amounts and keys\r\n        */\r\n        private calculateLoyalty(sale: ISale, amounts: Map<string, number>): Map<string, number> {\r\n            const res = new Map<string, number>();\r\n\r\n            if (ext.configService.enableLoyalty !== true) return res;\r\n\r\n            const checkoutItems = sale.CheckoutItems;\r\n\r\n            // calculate all payments sum that client should really pay\r\n            // for current sale state. Sum can be <0 if system should return\r\n            // money to customer.\r\n            // Also each product can hase its own layalty ratio\r\n            // it means that even if there is no money to return/pay == 0,\r\n            // loylaty change can be != 0\r\n            //const total = amount;\r\n\r\n            // now calculate ratio of each product in checkout\r\n            // positive amount - earn loyalty\r\n            // negative amount - return loyalty\r\n\r\n            let sumRefund = 0;\r\n            let sumSale = 0;\r\n\r\n            // get total sum for new items\r\n            // do the same for refund items\r\n            checkoutItems.forEach(el => {\r\n                if (el.FinalAmount > 0) sumSale += el.FinalAmount;\r\n                else if (el.FinalAmount < 0) sumRefund += el.FinalAmount;\r\n            });\r\n\r\n            // set items layout ratio per single unit (this is why it's divided by Count)\r\n            checkoutItems.forEach(el => {\r\n                if (el.FinalAmount > 0 && sumSale != 0)\r\n                    el.LoyaltyRatio = Math.abs(el.LoyaltyPointsEarning * el.FinalAmount / el.Count / sumSale); // absolute loyalty ratio\r\n                else if (el.FinalAmount < 0 && sumRefund != 0)\r\n                    el.LoyaltyRatio = Math.abs(el.LoyaltyPointsEarning * el.FinalAmount / el.Count / sumRefund); // absolute loyalty ratio\r\n                else el.LoyaltyRatio = 0;\r\n            });\r\n\r\n            // current refund|pay amount\r\n            let separatePaySum = 0;\r\n            let separateReturnSum = 0;\r\n            checkoutItems.forEach(el => {\r\n                if (el.FinalAmount > 0) separatePaySum += Math.abs(el.FinalAmount);\r\n                else if (el.FinalAmount < 0) {\r\n                    separateReturnSum += Math.abs(el.FinalAmount);\r\n                }\r\n            });\r\n\r\n            const isRefund = separateReturnSum > 0 && separatePaySum === 0;\r\n\r\n            Array.from(amounts.keys()).forEach(k => {\r\n\r\n                let currentLoyaltySum = 0;\r\n                const total = amounts.get(k);\r\n\r\n                // if total sum >0 it means we have direct sale or exchange with extra pay\r\n                // so total sum to use in loyalty is: full refund + total\r\n                if (total > 0 || (total === 0 && !isRefund)) {\r\n\r\n                    // calc loyalty earning\r\n                    checkoutItems.forEach(el => {\r\n                        if (el.FinalAmount > 0) // earning\r\n                            currentLoyaltySum += el.LoyaltyRatio * Math.abs(el.Count) * (separateReturnSum + total);\r\n                        else if (el.FinalAmount < 0) // returning /// separateReturnSum should be negative otherwise we will receive loyalty for exchanged amount twice\r\n                            currentLoyaltySum -= el.LoyaltyRatio * Math.abs(el.Count) * separateReturnSum;\r\n                    });\r\n                } else {\r\n                    // in this case we refund difference\r\n                    // calc loyalty earning\r\n                    checkoutItems.forEach(el => {\r\n                        if (el.FinalAmount > 0) // earning\r\n                            currentLoyaltySum += el.LoyaltyRatio * Math.abs(el.Count) * separatePaySum;\r\n                        else if (el.FinalAmount < 0) // returning\r\n                            currentLoyaltySum -= Math.abs(el.LoyaltyRatio * Math.abs(el.Count) * (separatePaySum + Math.abs(total)));\r\n                    });\r\n                }\r\n\r\n                res.set(k, currentLoyaltySum);\r\n            });\r\n\r\n            checkoutItems.forEach(el => delete el.LoyaltyRatio);\r\n\r\n            return res;\r\n        };\r\n\r\n    }","import Enumerable from \"linq\";\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { CheckoutItem } from \"../CheckoutItem\";\r\nimport { Sale } from \"../Sale\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, SaleType, CustomDiscountType } from \"../Enums\";\r\nimport { ISale, ICheckoutItem, ProductType } from \"../Interfaces\";\r\n\r\n\r\n    export class NativePricesCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Checkout,\r\n                        order: StartCalcLevel.Setup + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        chooseProductTierPrice(s: ISale, pc: ICheckoutItem): number {\r\n            const sale = <Sale>s;\r\n            const p = <CheckoutItem>pc;\r\n\r\n            if (p && ext.configService.useCustomerPriceTier === true &&\r\n                sale.customer &&\r\n                sale.customer.PriceTier &&\r\n                p.SaleType !== SaleType.CustomSale &&\r\n                p.ProductType !== ProductType.GiftCard &&\r\n                pc.CustomDiscountType !== CustomDiscountType.StandAloneReturn\r\n            ) {\r\n                const tier = Number(sale.customer.PriceTier.substr('Tier '.length));\r\n                if (tier >= 1 && tier <= 10) {\r\n                    let extra: any = p;\r\n                    // input product object can contain parsed prices or packed into ExtraInfo\r\n                    if (p.ExtraInfo)\r\n                        extra = JSON.parse(p.ExtraInfo);\r\n\r\n                    var val = extra['Price' + tier];\r\n                    if (!val) val = 0;\r\n\r\n                    return val;\r\n                }\r\n            }\r\n\r\n            return !p.DefaultPrice ? p.BasePrice : p.DefaultPrice;\r\n        }\r\n\r\n        /*\r\n          If new items are specified, they will be added\r\n          If remove items are specified they will be deleted\r\n          After that all will be recalculated\r\n         */\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n\r\n            if (!sale.CheckoutItems)\r\n                sale.CheckoutItems = new Array<ICheckoutItem>();\r\n\r\n            if (inputData.checkoutItems) {\r\n                if (inputData.checkoutItems.itemsToDelete) {\r\n                    const dic = Enumerable.from(inputData.checkoutItems.itemsToDelete).toDictionary(k => k, v => true);\r\n\r\n                    sale.CheckoutItems =\r\n                        Enumerable.from(sale.CheckoutItems).where(k => !dic.contains(k.ID)).toArray();\r\n                }\r\n\r\n                if (inputData.checkoutItems.itemsToAdd) {\r\n                    inputData.checkoutItems.itemsToAdd.forEach(c => {\r\n                        const item = CalculatorHelperService.convertCheckoutItem(c);\r\n                        sale.CheckoutItems.push(item);\r\n                    });\r\n                }\r\n            }\r\n\r\n            const m = new Map<string, ICheckoutItem>();\r\n            const checkTaxes = inputData.checkTaxes === true;\r\n\r\n            Enumerable.from(sale.CheckoutItems)\r\n                .where(c => c.CanEdit !== false) // if item is fixed, do not change it\r\n                .forEach(c => {\r\n                    // fill some fields\r\n                    const price = this.chooseProductTierPrice(sale, c);\r\n                    if (checkTaxes) {\r\n                        const taxObject = CalculatorHelperService.getTaxObject(sale, c);\r\n\r\n                        if (taxObject && c.TaxRuleID !== taxObject.TaxRuleID) {\r\n                            c.TaxRuleID = taxObject.TaxRuleID;\r\n                            c.EffectiveInclusiveTaxPercent = taxObject.EffectiveInclusiveTaxPercent;\r\n                            c.EffectiveExclusiveTaxPercent = taxObject.EffectiveExclusiveTaxPercent;\r\n                        }\r\n                    }\r\n                    c.BasePrice = ext.helperService.DEARRound(price, 2);\r\n                    c.FinalPrice = c.BasePrice; // for the moment we don't know about any discounts\r\n                    c.FinalTaxAmount = 0;\r\n                    c.ItemDiscount = 0;\r\n                    c.FinalAmount = ext.helperService.DEARRound(c.FinalPrice * c.Count, 2); // amount per line\r\n                    // due to discount calculations might split some items we need to group them back for correct\r\n                    // repeated discount calculations\r\n                    const key = this.checkoutItemKey(c, inputData.scope && inputData.scope.saleType === 'standaloneExchange' ? c.Return : undefined);\r\n\r\n                    if (m.has(key)) {\r\n                        const itm = m.get(key);\r\n                        itm.Count += c.Count;\r\n                        itm.FinalAmount += c.FinalAmount;\r\n                        itm.FinalAmount = ext.helperService.DEARRound(itm.FinalAmount, 6); // to exclude roundong error\r\n                    } else {\r\n                        m.set(key, c);\r\n                    }\r\n                });\r\n\r\n            // update sale checkout\r\n            sale.CheckoutItems = Array.from(m.values()).concat(sale.CheckoutItems.filter(c => c.CanEdit !== true));\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n\r\n        checkoutItemKey(item: ICheckoutItem, isReturn?: boolean): string {\r\n            if (!item) return '';\r\n            let key = `@@1@@${item.ProductID}@@2@@${item.SerialNumber}@@3@@`;\r\n\r\n            if(isReturn !== undefined)\r\n            {\r\n                key += isReturn;\r\n            }\r\n\r\n            if (item.ProductType == ProductType.GiftCard) key += item.GiftCardCode; // Do not merge gift cards\r\n\r\n            return key;\r\n        }\r\n    }","//import angular from \"angular\";\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, HistoryActionMode, SaleType } from \"../Enums\";\r\nimport { ICheckoutItem, ISale, IAPIProduct } from \"../Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\n\r\n    export class RefundCheckoutSetupCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundCheckout,\r\n                        order: StartCalcLevel.Setup + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n            const isChainedRefundAllowed = CalculatorHelperService.isChainedRefundAllowed(inputData.selectedItem);\r\n            const actionMode = inputData.actionMode;\r\n            const discountCoeff = CalculatorHelperService.getSaleDiscountCoefficient(sale);\r\n\r\n            // const refundsCopy = <Array<IAPIRefund>>angular.copy(sale.Refunds);\r\n            const refundsCopy = angular.copy(inputData.selectedItem.Data.Refunds);\r\n\r\n            inputData.refundsCopy = refundsCopy;\r\n            \r\n            // in chained refund we start refund as for non refunded sale\r\n            // for only sold items\r\n            if (isChainedRefundAllowed === true) {\r\n                // refundsCopy =  null;\r\n                // leave only newly sold items\r\n                sale.CheckoutItems = this.getSoldOnlyItems(sale);\r\n            }\r\n\r\n            // collect all items from sale and refunds for this sale\r\n            this.collectItems(inputData);\r\n            this.appendRefundedItems(inputData);\r\n\r\n            //sale.ReturnItems = sale.CheckoutItems;\r\n            sale.ReturnItems = angular.copy(sale.CheckoutItems);\r\n\r\n            const cmap = new Map<string, ICheckoutItem>();\r\n\r\n            sale.CheckoutItems.forEach(c => cmap.set(c.ID, c));\r\n\r\n            sale.ReturnPayments = sale.Payments;\r\n\r\n            if (sale.ReturnItems) {\r\n                sale.ReturnItems.forEach(el => {\r\n                    el.MaxCount = el.Count;\r\n                    if (inputData.selectedItem.canContinue == true || inputData.selectedItem.IsPartialPaid == true) {\r\n                        el.MinCount = el.Count;\r\n                        el.Return = true;\r\n                    }\r\n                    else {\r\n                        el.Return = false; \r\n                        el.MinCount = el.Count === 0 ? 0 : 1;\r\n                    }\r\n                    \r\n                    // not yet refunded so reduce prices by order discount value\r\n                    if (actionMode === HistoryActionMode.SaleRefund) {\r\n                        const cel = cmap.get(el.ID);\r\n\r\n                        el.FinalPrice = cel.FinalPrice * discountCoeff;\r\n                        el.FinalAmount = cel.FinalAmount * discountCoeff;\r\n                        el.FinalTaxAmount = cel.FinalTaxAmount * discountCoeff;\r\n                    }\r\n                    \r\n                    if (el.BaseCount === undefined || el.BaseCount == null)\r\n                        el.BaseCount = el.Count; // initial item count for which Tax and Amount were calculated\r\n                });\r\n            }\r\n\r\n            sale.CheckoutItems = [];\r\n            sale.Payments = [];\r\n\r\n            sale.ReturnLoyaltyPoints = (sale.Customer && sale.Customer.ID) ? true : false;\r\n\r\n            return <IOutputData>{\r\n                processResult: true,\r\n                refundsCopy: refundsCopy\r\n            };\r\n        }\r\n\r\n        getSoldOnlyItems(sale: ISale) {\r\n            var items = sale.CheckoutItems;\r\n            var soldItems = items.filter(function (itm) { return itm.Return !== true && itm.FinalAmount >= 0; });\r\n            return soldItems;\r\n        }\r\n\r\n        /*\r\n         Collect all items for this sale. Sale can contain a list of refund sales, so we need to collect them as well\r\n         Collect will take place based on product id and item price.\r\n         */ \r\n        private collectItems(inputData: IInputData): void {\r\n            const sale = inputData.sale;\r\n            const refundsCopy = inputData.refundsCopy;\r\n\r\n            const discountCoeff = CalculatorHelperService.getSaleDiscountCoefficient(sale);\r\n\r\n            if (refundsCopy && refundsCopy.length > 0 && sale.CheckoutItems &&\r\n                sale.CheckoutItems.length > 0) {\r\n                sale.CheckoutItems.forEach(item => {\r\n                    refundsCopy.forEach(refItem => {\r\n                        if (refItem.Lines) {\r\n                            refItem.Lines.forEach(refLine => {\r\n                                //if (item.BaseCount === undefined || item.BaseCount == null)\r\n                                //    item.BaseCount = item.Count; // initial item count for which Tax and Amount were calculated\r\n\r\n                                if (refLine.Quantity < 0) {\r\n                                    // price comparing\r\n                                    if (this.itemComparator(item, refLine, sale.IsTaxInclusive, discountCoeff)) {\r\n                                        item.Count += refLine.Quantity;\r\n                                        refLine.Quantity = 0;\r\n                                    }\r\n                                }\r\n                            });\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n        }\r\n\r\n        private appendRefundedItems(inputData: IInputData): void {\r\n            const sale = inputData.sale;\r\n            const selectedSale = inputData.selectedItem.Data;\r\n            const discountCoeff = 1;//CalculatorHelperService.getSaleDiscountCoefficient(sale);\r\n\r\n            if (sale.CheckoutItems && sale.CheckoutItems.length > 0 &&\r\n                selectedSale && selectedSale.Lines) {\r\n                sale.CheckoutItems.forEach(item => {\r\n                    selectedSale.Lines.forEach(refLine => {\r\n                        // price comparing\r\n                        if (this.itemComparator(item, refLine, sale.IsTaxInclusive, discountCoeff)) {\r\n                            item.Count = refLine.Quantity - refLine.refundQuantity;// | 0;\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n        }\r\n\r\n        private itemComparator(item: ICheckoutItem, refLine: IAPIProduct, isTaxInclusive: boolean, discountCoeff: number): boolean {\r\n            // price comparing\r\n            // take into account that on exclusive tax OverriddenPrice contains tax but line.Price - does not.\r\n            //const isPricesEqual = ext.helperService.DEARRound(\r\n            //    item.FinalAmount + (isTaxInclusive !== true ? item.FinalTaxAmount : 0), 2) ===\r\n            //    ext.helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Count, 2);\r\n            const isPricesEqual = ext.helperService.DEARRound(item.FinalAmount * discountCoeff, 4) ===\r\n                ext.helperService.DEARRound(refLine.TotalPerLine, 4);\r\n\r\n            if (item.Name.indexOf('(Surcharge)') == -1 && isPricesEqual &&\r\n                ((item.SaleType === SaleType.Sale &&\r\n                    (refLine.IsProduct == true || refLine.IsGiftCard == true) &&\r\n                    refLine.ProductID === item.ProductID &&\r\n                    refLine.GiftCardCode === (item.GiftCardCode === undefined ? null : item.GiftCardCode) &&\r\n                    (!item.SerialNumber || item.SerialNumber === refLine.SerialNumber))\r\n                    ||\r\n                    (item.SaleType === SaleType.CustomSale &&\r\n                        refLine.IsProduct == false &&\r\n                        item.Name == refLine.Name))\r\n            ) {\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n    }","import { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\nimport { ICheckoutItem } from \"../Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\n\r\n    export class RefundCheckoutSubmitCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundCheckout,\r\n                        order: StartCalcLevel.RefundSubmit + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n\r\n            sale.ReturnItems.forEach(el => {\r\n                let returnItem = <ICheckoutItem>angular.copy(el);\r\n                //const discountCoeff = CalculatorHelperService.getSaleDiscountCoefficient(sale);\r\n\r\n                returnItem.Count = -1 * el.Count;\r\n                // we need to reduce price by order discount value to refund correctly\r\n                // in refund we include in product price all discounts thet were took place\r\n                //returnItem.FinalPrice = el.FinalPrice * discountCoeff;\r\n                //returnItem.FinalAmount = -1 * el.FinalAmount * discountCoeff;\r\n                //returnItem.FinalTaxAmount = -1 * el.FinalTaxAmount * discountCoeff;\r\n                //returnItem.BaseTax = -1 * el.FinalTaxAmount * Math.abs(el.Count) * discountCoeff / Math.abs(el.BaseCount); // final tax per single item in line\r\n                //returnItem.ItemDiscount = -1 * el.ItemDiscount * discountCoeff;\r\n                returnItem.FinalAmount = -1 * el.Count * el.FinalPrice;\r\n                returnItem.FinalTaxAmount = -1 * CalculatorHelperService.calculateTax3(el, sale.IsTaxInclusive, el.Count * el.FinalPrice);\r\n                returnItem.BaseTax = el.FinalTaxAmount / Math.abs(el.Count); // final tax per single item in line\r\n                returnItem.ItemDiscount = -1 * el.ItemDiscount;\r\n                returnItem.BasePrice = el.BasePrice;\r\n                returnItem.Discount = -1 * el.Discount;\r\n                returnItem.LoyaltyPointsEarning *= -1;\r\n                returnItem.CanEdit = false;\r\n                returnItem.Sign = -1;\r\n\r\n                // remove item from checkout\r\n                sale.CheckoutItems = sale.CheckoutItems.filter(el => el.ID !== returnItem.ID);\r\n\r\n                if (el.Return === true) {\r\n                    sale.CheckoutItems.push(returnItem);\r\n                }\r\n            });\r\n\r\n            return <IOutputData>{\r\n                processResult: true\r\n            };\r\n        }\r\n    }","import Enumerable from \"linq\";\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { convertFromOld } from \"../ConverterService\";\r\nimport { Sale } from \"../Sale\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, TaxCalculationMethod, PaymentShortNameStandardType, FinancialStatusType } from \"../Enums\";\r\nimport { ICardValidation, IPaymentValidation, IGroupedSale, IPayment, IAPIPayment, ICustomValidation } from \"../Interfaces\";\r\n\r\n    export class RefundLimitsCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.RefundLimits + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            // go through all checkout items and calculate taxes and sum them\r\n            const sale = <Sale>inputData.sale;\r\n            const paymentValidation = inputData.paymentValidation;\r\n\r\n            if (!paymentValidation) return;\r\n\r\n            // get total sum to refund via checkout items. order level discount should be already applied to checkout items\r\n            let total = Enumerable.from(sale.CheckoutItems)\r\n                .select(s => ext.helperService.DEARRound(-1 * s.FinalAmount, 2))\r\n                .sum();\r\n\r\n            let taxModePresision = ext.configService.taxCalculationMethod === TaxCalculationMethod.RowTotal ? 2 : 4;\r\n            if (!sale.TaxModePresision)\r\n                sale.TaxModePresision = taxModePresision;\r\n            else\r\n                taxModePresision = sale.TaxModePresision;\r\n\r\n            if (!sale.IsTaxInclusive) {\r\n                const tax = Enumerable.from(sale.CheckoutItems)\r\n                    .sum(el => ext.helperService.DEARRound(CalculatorHelperService.calculateTax2(el, false), taxModePresision));\r\n\r\n                total += -tax;\r\n            }\r\n\r\n            const nativeSale = inputData.selectedItem ? <Sale>convertFromOld(inputData.selectedItem.RawSaleObject) : null;\r\n\r\n            // collect sums from previous refunds and reduce\r\n            // available amounts in future\r\n            this.collectValidatorSums(paymentValidation, sale.GroupedSale, inputData.operationSubName === 'continue' && nativeSale ? nativeSale.Payments : [], inputData.operationSubName === 'continue' ? total : null);\r\n            if (nativeSale) {\r\n                this.collectRoundingNDetectExchange(inputData);\r\n            }\r\n\r\n            const newCardTotalSum = ext.cardPayService.removeFullyUsedCards(paymentValidation.cardPayments);\r\n            // correct card validation amount\r\n            paymentValidation.creditCardAmount = newCardTotalSum;\r\n\r\n            if (nativeSale && inputData.fullReturn && nativeSale.CashRounding && nativeSale.CashRounding !== 0) {\r\n\r\n                // first return and return whole sale\r\n                total += ext.helperService.DEARRound(nativeSale.CashRounding, 2);\r\n            } else {\r\n                sale.CashRounding = 0;\r\n            }\r\n\r\n            sale.FullReturnRounding = 0;\r\n\r\n            if (inputData.lastItemReturn && !inputData.fullReturn) {\r\n\r\n                // when not all cash refunded\r\n\r\n                if (inputData.hasExchange == false) {\r\n                    // available to refund by all payment types\r\n                    const totalRemaining = sale.GroupedSale.TotalSale;\r\n\r\n                    if (total != totalRemaining) {\r\n                        total = totalRemaining;\r\n                    }\r\n                }\r\n                else {\r\n                    let estimatedRounding = ext.helperService.DEARRound(inputData.additionalEstimateTotal, 2);\r\n                    if (nativeSale.CashRounding && nativeSale.CashRounding !== 0) {\r\n                        estimatedRounding += ext.helperService.DEARRound(nativeSale.CashRounding, 2);\r\n                        estimatedRounding = ext.helperService.DEARRound(estimatedRounding, 2);\r\n                    }\r\n\r\n                    total += estimatedRounding;\r\n                }\r\n            }\r\n\r\n            let orderTotal = 0;\r\n\r\n            if (nativeSale && !sale.IsExchange) {\r\n                if (inputData.selectedItem.IsPartialPaid === true) {\r\n                    orderTotal = Math.abs(CalculatorHelperService.getOldPartialPayments(nativeSale));\r\n                    total = ext.helperService.DEARRound(orderTotal, 2);\r\n                }\r\n                else\r\n                    orderTotal = Math.abs(CalculatorHelperService.getCheckoutSum(nativeSale) + nativeSale.CashRounding);\r\n            } else\r\n                orderTotal = total;\r\n\r\n            orderTotal = ext.helperService.DEARRound(orderTotal, 2);\r\n\r\n            const oldReturnPayments = nativeSale ? this.oldReturnPayments(inputData) : 0;\r\n            const oldLoyaltyPayments = nativeSale ? this.oldReturnPayments(inputData, 'loyalty') : 0;\r\n\r\n            const allPartialPayment = nativeSale && inputData.selectedItem ? -1 * CalculatorHelperService.getAllPartialPayment(nativeSale, inputData.selectedItem) : 0;\r\n            var totalWithOldReturnPayments = total + oldReturnPayments;\r\n\r\n            if (nativeSale && nativeSale.IsDirect && this.canReturnPartiallyPaid(nativeSale) === true) {\r\n                // this takes place for continue refund. Amount can be zero\r\n                if (allPartialPayment >= 0 && orderTotal > allPartialPayment)\r\n                    this.adjustLimits(paymentValidation, orderTotal, -allPartialPayment, totalWithOldReturnPayments);\r\n                // this takes place on refund of partial paid sale. allPartialPayment always less than zero.\r\n                else if (allPartialPayment < 0 && orderTotal > -allPartialPayment)\r\n                    this.adjustLimits(paymentValidation, -allPartialPayment, 0, totalWithOldReturnPayments);\r\n\r\n                // if first refund of direct sale, allPartialPayment<0, orderTotal == 0\r\n                if (Math.abs(paymentValidation.cashAmount) > Math.abs(paymentValidation.storeCreditAmount))\r\n                    paymentValidation.storeCreditAmount = paymentValidation.cashAmount;\r\n                if (Math.abs(paymentValidation.cashAmount) > Math.abs(paymentValidation.loyaltyPointsAmount))\r\n                    paymentValidation.loyaltyPointsAmount = paymentValidation.cashAmount;\r\n            }\r\n            else {\r\n                paymentValidation.loyaltyPointsAmount += oldLoyaltyPayments;\r\n                if (paymentValidation.loyaltyPointsAmount < 0) paymentValidation.loyaltyPointsAmount = 0;\r\n                this.adjustLimits(paymentValidation, total, oldReturnPayments, totalWithOldReturnPayments);\r\n            }\r\n\r\n            if (sale.GroupedSale)\r\n                sale.GroupedSale.TotalToRefund = ext.helperService.DEARRound(totalWithOldReturnPayments, 2);\r\n\r\n            paymentValidation.cashAmount = ext.helperService.DEARRound(paymentValidation.cashAmount, 2);\r\n            paymentValidation.creditCardAmount = ext.helperService.DEARRound(paymentValidation.creditCardAmount, 2);\r\n            paymentValidation.storeCreditAmount = ext.helperService.DEARRound(paymentValidation.storeCreditAmount, 2);\r\n            paymentValidation.loyaltyPointsAmount = ext.helperService.DEARRound(paymentValidation.loyaltyPointsAmount, 2);\r\n\r\n            this.prepareSurchargeLimits(inputData);\r\n\r\n            paymentValidation.customPayments.forEach(p => p.validationAmount = ext.helperService.DEARRound(p.validationAmount, 6));\r\n            const map = <Array<ICardValidation>>ext.helperService.mapToList(paymentValidation.cardPayments);\r\n            map.forEach(p => p.validationAmount = ext.helperService.DEARRound(p.validationAmount, 6));\r\n\r\n            return <IOutputData>{\r\n                processResult: true\r\n            };\r\n        }\r\n\r\n        private oldReturnPayments(inputData: IInputData, typeFilter: string = null): number {\r\n            let sum = 0;\r\n            if (inputData.operationSubName === 'continue' && inputData.sale.Payments) {\r\n                // calc sum without any surcharges\r\n                if (!typeFilter) {\r\n                    sum = Enumerable.from(inputData.sale.Payments)\r\n                        .sum(p => this.getAmountWithoutSurcharge(p));\r\n                } else {\r\n                    sum = Enumerable.from(inputData.sale.Payments)\r\n                        .where(p => p.ShortName === typeFilter)\r\n                        .sum(p => this.getAmountWithoutSurcharge(p));\r\n                }\r\n            }\r\n\r\n            return sum;\r\n        }\r\n\r\n        private collectRoundingNDetectExchange(inputData: IInputData): void {\r\n            inputData.hasExchange = false;\r\n            inputData.additionalEstimateTotal = 0;\r\n\r\n            if (!inputData.isContinueReturn) {\r\n                const refunds = !inputData.selectedItem.Data.InitialRefunds ?\r\n                    inputData.selectedItem.Data.Refunds : inputData.selectedItem.Data.InitialRefunds;\r\n\r\n                if (refunds && refunds.length > 0) {\r\n                    if (inputData.fullReturn)\r\n                        inputData.lastItemReturn = true;\r\n                    else\r\n                        inputData.lastItemReturn = false;\r\n\r\n                    inputData.fullReturn = false;\r\n                    refunds.forEach(ref => {\r\n\r\n                        if (ref.Lines.filter(l => l.Quantity > 0).length > 0)\r\n                            inputData.hasExchange = true;\r\n\r\n                        inputData.additionalEstimateTotal += Enumerable.from(ref.Payments)\r\n                            .where(p => p.ShortName === PaymentShortNameStandardType.Rounding)\r\n                            .sum(p => p.Amount);\r\n\r\n                        //// TODO ? looks like never executed code\r\n                        //inputData.additionalEstimateTotal += Enumerable.from(ref.Lines)\r\n                        //    .where(l => l.ProductName === 'Rounding')\r\n                        //    .sum(l => ext.helperService.DEARRound(l.Quantity * l.TotalPerLine, 2));\r\n                    });\r\n                }\r\n            }\r\n\r\n        }\r\n\r\n        /*\r\n         adjust limits with already done partial payments\r\n         */\r\n        private adjustLimits(paymentValidation: IPaymentValidation, total: number, correctionAmount: number, limit: number): void {\r\n            if (total > 0 && paymentValidation.loyaltyPointsAmount > 0) { // loyalty cannot be refunded to any cash channels\r\n                total -= paymentValidation.loyaltyPointsAmount;\r\n            }\r\n\r\n            paymentValidation.cashAmount = total + correctionAmount;\r\n            if (paymentValidation.cashAmount < 0)\r\n                paymentValidation.cashAmount = 0;\r\n\r\n            paymentValidation.storeCreditAmount = total + correctionAmount;\r\n            if (paymentValidation.storeCreditAmount < 0)\r\n                paymentValidation.storeCreditAmount = 0;\r\n            //            paymentValidation.loyaltyPointsAmount = total + correctionAmount;\r\n            // paymentValidation.creditCardAmount = total + correctionAmount;\r\n\r\n            if (paymentValidation.cashAmount > limit) paymentValidation.cashAmount = limit;\r\n            if (paymentValidation.storeCreditAmount > limit) paymentValidation.storeCreditAmount = limit;\r\n            if (paymentValidation.loyaltyPointsAmount > limit) paymentValidation.loyaltyPointsAmount = limit;\r\n            if (paymentValidation.creditCardAmount > limit) paymentValidation.creditCardAmount = limit;\r\n\r\n            Object.getOwnPropertyNames(paymentValidation.cardPayments).forEach(n => {\r\n                const p = paymentValidation.cardPayments[n];\r\n                p.validationAmount = p.validationAmount > limit ? limit : p.validationAmount;\r\n            });\r\n\r\n            paymentValidation.customPayments.forEach(p =>\r\n                p.validationAmount = p.validationAmount > limit ? limit : p.validationAmount);\r\n\r\n            // rounding all\r\n            paymentValidation.cashAmount = ext.helperService.DEARRound(paymentValidation.cashAmount, 2);\r\n            paymentValidation.storeCreditAmount = ext.helperService.DEARRound(paymentValidation.storeCreditAmount, 2);\r\n            paymentValidation.loyaltyPointsAmount = ext.helperService.DEARRound(paymentValidation.loyaltyPointsAmount, 2);\r\n            paymentValidation.creditCardAmount = ext.helperService.DEARRound(paymentValidation.creditCardAmount, 2);\r\n\r\n            paymentValidation.customPayments.forEach(p => {\r\n                p.validationAmount = ext.helperService.DEARRound(p.validationAmount, 2);\r\n            });\r\n        }\r\n\r\n        private collectValidatorSums(paymentValidation: IPaymentValidation, groupedSale: IGroupedSale, currentPayments: Array<IPayment>, limitValue: number = null): void {\r\n            if (!groupedSale) return;\r\n\r\n            const plist = <Array<IAPIPayment>>ext.helperService.mapToList(groupedSale.PaymentsMap);\r\n            CalculatorHelperService.clearPaymentValidations(paymentValidation);\r\n\r\n            // refund payment has SaleServerTransactionID if it's card refund\r\n            // by this id we can find initial payment and its limit\r\n            // build map object from SaleServerTransactionID to native payment\r\n            const srvRemap = new Map<string, IAPIPayment>();\r\n\r\n            plist.forEach(el => {\r\n                var ptp = el.ShortName;\r\n                if (ptp.indexOf(PaymentShortNameStandardType.BackofficePayment) === 0)\r\n                    ptp = PaymentShortNameStandardType.BackofficePayment;\r\n\r\n                switch (ptp) {\r\n                    case PaymentShortNameStandardType.Loyalty:\r\n                        paymentValidation.loyaltyPointsAmount += el.Amount;\r\n                        if (limitValue != null && paymentValidation.loyaltyPointsAmount > limitValue)\r\n                            paymentValidation.loyaltyPointsAmount = limitValue;\r\n                        break;\r\n                    case PaymentShortNameStandardType.GiftCard:\r\n                    case PaymentShortNameStandardType.BackofficePayment:\r\n                    case PaymentShortNameStandardType.Cash:\r\n                        paymentValidation.cashAmount += el.Amount;\r\n                        if (limitValue != null && paymentValidation.cashAmount > limitValue)\r\n                            paymentValidation.cashAmount = limitValue;\r\n                        break;\r\n                    case PaymentShortNameStandardType.StoreCredits:\r\n                        paymentValidation.storeCreditAmount += el.Amount;\r\n                        if (limitValue != null && paymentValidation.storeCreditAmount > limitValue)\r\n                            paymentValidation.storeCreditAmount = limitValue;\r\n                        break;\r\n                    case PaymentShortNameStandardType.CreditCard:\r\n                        srvRemap.set(el.ServerTransactionID, el);\r\n                        const ccAmount = this.getAmountWithoutSurcharge(el);\r\n                        paymentValidation.creditCardAmount += ccAmount;\r\n                        if (limitValue != null && paymentValidation.creditCardAmount > limitValue)\r\n                            paymentValidation.creditCardAmount = limitValue;\r\n                        paymentValidation.creditCardAmount = ext.helperService.DEARRound(paymentValidation.creditCardAmount, 2);\r\n\r\n                        ext.cardPayService.addSumToCardPayment(paymentValidation.cardPayments, el.ServerTransactionID, el.ClientTransactionID,\r\n                            ccAmount, el.TransactionMetaData);\r\n\r\n                        if (el.Surcharge && el.Surcharge.RefundSurcharge === true) {\r\n                            paymentValidation.cardPayments[ext.cardPayService.combineKey(el.ServerTransactionID, el.ClientTransactionID)]\r\n                                .Surcharge = el.Surcharge;\r\n                            el.Surcharge.AmountToRefund = 0;\r\n                        }\r\n\r\n                        break;\r\n\r\n                    default:\r\n                        if (!CalculatorHelperService.isStandardPaymentType(el.ShortName)) {\r\n\r\n                            if (el.PaymentProcessorID === \"BackofficePayment\" &&\r\n                                el.ShortName.indexOf(PaymentShortNameStandardType.BackofficePayment) === 0) {\r\n                                el.PaymentProcessorID = el.ShortName.substr(PaymentShortNameStandardType.BackofficePayment.length);\r\n                            }\r\n\r\n                            let ptl = paymentValidation.customPayments.filter(p => p.id === el.ID);\r\n                            let pt: ICustomValidation = null;\r\n\r\n                            if (ptl.length === 0) {\r\n                                // add payment type to return possible list\r\n                                pt = <ICustomValidation>{\r\n                                    shortName: el.ShortName,\r\n                                    customPaymentName: el.PaymentTypeName,\r\n                                    validationAmount: 0,\r\n                                    amount: 0,\r\n                                    id: el.ID\r\n                                };\r\n\r\n                                if (el.Surcharge && el.Surcharge.RefundSurcharge === true) {\r\n                                    pt.Surcharge = el.Surcharge;\r\n                                    pt.Surcharge.AmountToRefund = 0;\r\n                                }\r\n\r\n                                paymentValidation.customPayments.push(pt);\r\n\r\n                            } else {\r\n                                pt = ptl[0];\r\n                                if (pt.Surcharge)\r\n                                    pt.Surcharge.AmountToRefund = 0;\r\n                                pt.amount = 0;\r\n                            }\r\n\r\n                            pt.validationAmount = ext.helperService.DEARRound(this.getAmountWithoutSurcharge(el), 2);\r\n                        }\r\n                        break;\r\n                }\r\n            });\r\n\r\n            currentPayments.forEach(el => {\r\n                if (!CalculatorHelperService.isStandardPaymentType(el.ShortName)) {\r\n\r\n                    if (el.PaymentProcessorID === \"BackofficePayment\" &&\r\n                        el.ShortName.indexOf(PaymentShortNameStandardType.BackofficePayment) === 0) {\r\n                        el.PaymentProcessorID = el.ShortName.substr(PaymentShortNameStandardType.BackofficePayment.length);\r\n                    }\r\n\r\n                    const cp = paymentValidation.customPayments.filter(p => p.shortName === el.ShortName);\r\n                    if (cp.length > 0) {\r\n                        const ccAmount = this.getAmountWithoutSurcharge(el);\r\n                        cp[0].validationAmount += ccAmount;\r\n                        cp[0].validationAmount = ext.helperService.DEARRound(cp[0].validationAmount, 2);\r\n                    }\r\n                } else if (el.ShortName === PaymentShortNameStandardType.CreditCard) {\r\n                    if (srvRemap.has(el.SaleServerTransactionID)) {\r\n                        const iel = srvRemap.get(el.SaleServerTransactionID);\r\n\r\n                        const ccAmount = this.getAmountWithoutSurcharge(el);\r\n                        ext.cardPayService.addSumToCardPayment(paymentValidation.cardPayments,\r\n                            iel.ServerTransactionID, iel.ClientTransactionID, ccAmount);\r\n                    }\r\n                }\r\n            });\r\n\r\n        }\r\n\r\n        private getAmountWithoutSurcharge(payment: IAPIPayment | IPayment): number {\r\n            if (!payment.Surcharge) return payment.Amount;\r\n            return payment.Amount -\r\n                (payment.InitialSurcharge ?\r\n                    payment.InitialSurcharge.CalculatedValueWithTax :\r\n                    payment.Surcharge.CalculatedValueWithTax);\r\n        }\r\n\r\n        private canReturnPartiallyPaid(nativeSale: Sale) {\r\n            if (nativeSale) {\r\n\r\n                var isPartialPaid = false;\r\n                if (typeof nativeSale.IsPartialPaid !== 'undefined') {\r\n                    isPartialPaid = nativeSale.IsPartialPaid;\r\n                }\r\n\r\n                var result = isPartialPaid ||\r\n                    (nativeSale.Status === FinancialStatusType.LaybyClosed ||\r\n                        nativeSale.Status === FinancialStatusType.OnAccountClosed ||\r\n                        nativeSale.Status === FinancialStatusType.OnAccount ||\r\n                        nativeSale.Status === FinancialStatusType.Layby ||\r\n                        nativeSale.Status === FinancialStatusType.Closed);\r\n\r\n                return result;\r\n            }\r\n            else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        private surchargeSetup(p: ICustomValidation | ICardValidation, groupedSale: IGroupedSale,\r\n            totalToRefund: number, surchargeRestToRefund: number) {\r\n            let src = <IAPIPayment>groupedSale.PaymentsMap[p.id];\r\n            if (!src) src = <IAPIPayment>groupedSale.PaymentsMap2[p.id];\r\n\r\n            const amountToRefund = Math.min(surchargeRestToRefund, src.InitialSurcharge.CalculatedValueWithTax);\r\n            let sm = src.Amount - (!src.InitialSurcharge ? 0 : src.InitialSurcharge.CalculatedValueWithTax);\r\n            if (sm < 0) sm = 0;\r\n            sm = ext.helperService.DEARRound(sm, 6);\r\n            // the maximum for surcharge refund by this custom method is defined by rest of surcharge for this method\r\n            p.validationAmount = ext.helperService.DEARRound(Math.min(totalToRefund, sm), 2);\r\n            let coeff = 0;\r\n            if (sm > 0)\r\n                coeff = Math.min(totalToRefund, sm) / sm;\r\n\r\n            if (p.Surcharge.RefundSurcharge === true && coeff > 0 && src.InitialSurcharge.CalculatedValueWithTax > 0) {\r\n                if (Math.abs(coeff * src.InitialSurcharge.CalculatedValueWithTax) > Math.abs(amountToRefund))\r\n                    coeff = amountToRefund / src.InitialSurcharge.CalculatedValueWithTax;\r\n\r\n                p.Surcharge.CalculatedValueWithTax = ext.helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValueWithTax, 2);\r\n                p.Surcharge.CalculatedValue = ext.helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValue, 2);\r\n                p.Surcharge.Tax = ext.helperService.DEARRound(coeff * src.InitialSurcharge.Tax, 4);\r\n            } else {\r\n                p.Surcharge.CalculatedValueWithTax = 0;\r\n                p.Surcharge.CalculatedValue = 0;\r\n                p.Surcharge.Tax = 0;\r\n            }\r\n\r\n            p.Surcharge.AmountToRefund = 0;\r\n            p.Surcharge.TaxToRefund = 0;\r\n        }\r\n\r\n        // we know surcharges, refunded by cash/storecredit, so we need to reduce limits for all payment surcharge related\r\n        // methods\r\n        private prepareSurchargeLimits(inputData: IInputData) {\r\n            const groupedSale = inputData.sale.GroupedSale;\r\n            const paymentValidation = inputData.paymentValidation;\r\n            paymentValidation.hasSurchargeRest = false;\r\n\r\n            if (!groupedSale) return;\r\n\r\n            ext.cardPayService.createCardPaymentMap(groupedSale);\r\n\r\n            const surchargeRestToRefund = groupedSale.TotalSurcharge <= 0 ? 0 : groupedSale.TotalSurcharge + groupedSale.GhostSurcharge;\r\n            const totalToRefund = groupedSale.TotalToRefund;// - groupedSale.ExchangeAmount;\r\n\r\n            paymentValidation.customPayments.forEach(p => {\r\n                if (p.Surcharge) {\r\n                    this.surchargeSetup(p, groupedSale, totalToRefund, surchargeRestToRefund);\r\n                }\r\n            });\r\n\r\n            const map = <Array<ICardValidation>>ext.helperService.mapToList(paymentValidation.cardPayments);\r\n            map.forEach(p => {\r\n                if (p.Surcharge) {\r\n                    this.surchargeSetup(p, groupedSale, totalToRefund, surchargeRestToRefund);\r\n                }\r\n            });\r\n        }\r\n\r\n    }","import { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\nimport { Sale } from \"../Sale\";\r\n\r\n    export class RefundPaymentsSetupCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.Payments + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            // go through all checkout items and calculate taxes and sum them\r\n            const sale = <Sale>inputData.sale;\r\n            const refundsCopy = inputData.refundsCopy;\r\n\r\n            sale.DiscountTax = 0;\r\n            sale.Tax = 0;\r\n            sale.Total = 0;\r\n            sale.Balance = 0;\r\n            sale.SurchargeTotal = 0;\r\n            sale.SurchargeTotalTax = 0;\r\n            sale.SurchargeToRefund = 0;\r\n            sale.SurchargeTaxToRefund = 0;\r\n            sale.NonRefundableSurcharge = 0;\r\n            sale.SelectedCoupon = null;\r\n            sale.SelectedCouponID = null;\r\n            sale.SelectedCouponDealID = null;\r\n\r\n            const pmap = new Map<string, boolean>();\r\n            const surcharges = sale.Surcharges;\r\n\r\n            if (surcharges) {\r\n                surcharges.forEach(el => {\r\n                    if (!pmap.has(el.PaymentID)) {\r\n                        pmap.set(el.PaymentID, true);\r\n                        if (el.RefundSurcharge === true) {\r\n                            sale.SurchargeToRefund += el.CalculatedValue;\r\n                            sale.SurchargeTaxToRefund += el.Tax;\r\n                        }\r\n                        else {\r\n                            sale.NonRefundableSurcharge += el.CalculatedValue;\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (refundsCopy) {\r\n                refundsCopy.forEach(ref => {\r\n                    if (ref.Surcharges)\r\n                        ref.Surcharges.forEach(el =>  {\r\n                        if (!pmap.has(el.PaymentID)) {\r\n                            pmap.set(el.PaymentID, true);\r\n                            CalculatorHelperService.restoreSurcharge(el, sale.IsTaxInclusive);\r\n                            sale.SurchargeToRefund -= el.Total;\r\n                            sale.SurchargeTaxToRefund -= el.Tax;\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n\r\n            sale.SurchargeTaxToRefund = ext.helperService.DEARRound(sale.SurchargeTaxToRefund, 2);\r\n            sale.SurchargeToRefund = ext.helperService.DEARRound(sale.SurchargeToRefund, 2) +\r\n                (sale.IsTaxInclusive ? 0 : sale.SurchargeTaxToRefund);\r\n            sale.NonRefundableSurcharge = ext.helperService.DEARRound(sale.NonRefundableSurcharge, 2);\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n\r\n    }","import Enumerable from \"linq\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\n\r\n    export class SurchargesPaymentsCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Payments,\r\n                        order: StartCalcLevel.Surcharge + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.Surcharge + 15 // after refund surcharge\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n\r\n            const res = Enumerable.from(sale.Payments)\r\n                .where(p => p.Surcharge && p.Surcharge.CalculatedValue !== 0)\r\n                .sum(p => p.Surcharge.CalculatedValue);\r\n\r\n            const resTax = Enumerable.from(sale.Payments)\r\n                .where(p => p.Surcharge && p.Surcharge.Tax !== 0)\r\n                .sum(p => p.Surcharge.Tax);\r\n\r\n            sale.SurchargeTotal = ext.helperService.DEARRound(res, 2);\r\n            sale.SurchargeTotalTax = ext.helperService.DEARRound(resTax, 4); \r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n    }","import { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\n\r\n    export class TaxCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Checkout,\r\n                        order: StartCalcLevel.Tax + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            // go through all checkout items and calculate taxes and sum them\r\n            const sale = inputData.sale;\r\n            const isTaxInclusive = sale.IsTaxInclusive === true;\r\n\r\n            sale.CheckoutItems.forEach(s => {\r\n\r\n                s.FinalTaxAmount =\r\n                    ext.helperService.DEARRound(\r\n                        s.FinalAmount *\r\n                        (isTaxInclusive ? s.EffectiveInclusiveTaxPercent : s.EffectiveExclusiveTaxPercent) / 100,\r\n                        4);\r\n            });\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n    }","import Enumerable from \"linq\";\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { Sale } from \"../Sale\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, TaxCalculationMethod, HistoryActionMode } from \"../Enums\";\r\nimport { ISale } from \"../Interfaces\";\r\nimport { CheckoutItem } from \"../CheckoutItem\";\r\n\r\n    export class TotalCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Checkout,\r\n                        order: StartCalcLevel.Total + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Payments,\r\n                        order: StartCalcLevel.Payments + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.TotalPayments + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            // go through all checkout items and calculate taxes and sum them\r\n            const sale = Sale.create(inputData.sale); // in case if it's not sale object - create it\r\n            const isTaxInclusive = sale.IsTaxInclusive === true;\r\n            const actionMode = inputData.actionMode;\r\n\r\n            let taxModePresision = ext.configService.taxCalculationMethod === TaxCalculationMethod.RowTotal ? 2 : 4;\r\n            if (!sale.TaxModePresision)\r\n                sale.TaxModePresision = taxModePresision;\r\n            else\r\n                taxModePresision = sale.TaxModePresision;\r\n\r\n            const subSum = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .where(s => !CheckoutItem.isAdditionalCharge(s))\r\n                .select(s => ext.helperService.DEARRound(s.FinalAmount, 2))\r\n                .sum(), 2);\r\n\r\n            sale.SubTotal = subSum;\r\n            const subAdditionalLinesSum = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .where(s => CheckoutItem.isAdditionalCharge(s))\r\n                .select(s => ext.helperService.DEARRound(s.FinalAmount, 2))\r\n                .sum(), 2);\r\n    \r\n            sale.SubTotal = ext.helperService.DEARRound(subSum + subAdditionalLinesSum, 2);\r\n\r\n            let discountTaxReduceCoefficient = 1;\r\n            sale.DiscountValue = 0;\r\n            sale.DiscountValueRaw = 0;\r\n            let newSaleOrderDiscount: number = null;\r\n\r\n            if (this.hasSoldItems(sale)) {\r\n                // this should be counted for sale but not for refunds.\r\n                // on refunds all discounts are already counted in item final prices\r\n                // order level discount reduces total amount as result reduces each checkout item final price\r\n                let itemSubTotal = sale.SubTotal;\r\n                if (sale.Discount && CalculatorHelperService.zcn(sale.Discount) && (itemSubTotal > 0)) {\r\n                    // keep not rounded discount, it is needed in backend for correct calculation\r\n                    // when spliting discount by tax groups (items with same tax rule), it will be rounded in backend\r\n                    if (sale.IsDiscountPercent) {\r\n                        sale.DiscountValueRaw = itemSubTotal * Math.min(Math.abs(sale.Discount), 100) / 100;\r\n                        sale.DiscountValue = ext.helperService.DEARRound(sale.DiscountValueRaw, 2);\r\n                        if (Math.abs(sale.Discount) > 100)\r\n                            newSaleOrderDiscount = 100;\r\n                    }\r\n                    else {\r\n                        sale.DiscountValueRaw = Math.min(Math.abs(sale.Discount), itemSubTotal);\r\n                        sale.DiscountValue = ext.helperService.DEARRound(sale.DiscountValueRaw, 2);\r\n                        if (Math.abs(sale.Discount) > itemSubTotal)\r\n                            newSaleOrderDiscount = itemSubTotal;\r\n                    }\r\n\r\n                    discountTaxReduceCoefficient = CalculatorHelperService.getSaleDiscountCoefficientBasic(sale);\r\n                    // we should count only positive items\r\n                    // const sp = CalculatorHelperService.getCheckoutSum(sale, true);\r\n                    // discountTaxReduceCoefficient = !subSum ? 1 : (subSum - sale.DiscountValue) / sp;\r\n                }\r\n            }\r\n\r\n            // tax total\r\n            // const taxSum = Enumerable.from(sale.CheckoutItems)\r\n            //     //            .select(s => ext.helperService.DEARRound(s.FinalTaxAmount * (s.Count > 0 ? discountTaxReduceCoefficient : 1), taxModePresision))\r\n            //     .select(s => ext.helperService.DEARRound(s.FinalTaxAmount, taxModePresision) * (s.Count > 0 ? discountTaxReduceCoefficient : 1))\r\n            //     .sum();\r\n            // const taxDiscountSum = Enumerable.from(sale.CheckoutItems)\r\n            //     //            .select(s => ext.helperService.DEARRound(s.FinalTaxAmount * (1 - (s.Count > 0 ? discountTaxReduceCoefficient : 1)), taxModePresision))\r\n            //     .select(s => ext.helperService.DEARRound(s.FinalTaxAmount, taxModePresision) * (1 - (s.Count > 0 ? discountTaxReduceCoefficient : 1)))\r\n            //     .sum();\r\n            const taxSumLines = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .where(s => !CheckoutItem.isAdditionalCharge(s))\r\n                .select(s => ext.helperService.DEARRound(s.FinalTaxAmount, taxModePresision))\r\n                .sum(), 2);\r\n            const taxSumAdditional = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .where(s => CheckoutItem.isAdditionalCharge(s))\r\n                .select(s => ext.helperService.DEARRound(s.FinalTaxAmount, taxModePresision))\r\n                .sum(), 2);\r\n        \r\n            const taxSum0 = taxSumLines + taxSumAdditional;\r\n            const taxDiscountSum = ext.helperService.DEARRound(taxSum0 * (1 - discountTaxReduceCoefficient), 2);\r\n            const taxSum = ext.helperService.DEARRound(taxSum0 * discountTaxReduceCoefficient, 2);\r\n\r\n            sale.DiscountTax = ext.helperService.DEARRound(taxDiscountSum, 2);\r\n            sale.Tax = ext.helperService.DEARRound(taxSum, 2);\r\n            sale.Total = ext.helperService.DEARRound(sale.SubTotal + (isTaxInclusive ? 0 : sale.Tax) - sale.DiscountValue, 2);\r\n            sale.Balance = ext.helperService.DEARRound(CalculatorHelperService.getSaleBalance(sale), 2);\r\n\r\n            if (calculationType === CalculationType.RefundPayments) {\r\n                sale.BaseTotal = sale.Total; // + (isTaxInclusive ? 0 : sale.Tax); // without order level discount\r\n                sale.EstimateTotal = this.estimateTotalSum(sale);\r\n                if (inputData.selectedItem && actionMode === HistoryActionMode.SaleRefund) {\r\n                    sale.RemainingToRefund = this.getRemainingToRefund(inputData); // show globally for this sale how much can be refunded\r\n                } else {\r\n                    sale.RemainingToRefund = -1 * CalculatorHelperService.sumToPayLeft(<Sale>sale,\r\n                        -1 * Math.abs(this.amountSums(inputData)),\r\n                        // we trying to refund partially paid sale. So count only paid sum\r\n                        inputData.selectedItem &&\r\n                        inputData.selectedItem.shouldPayExtra === true &&\r\n                        inputData.selectedItem.IsPartialPaid === true); // for continue refund show rest of sum\r\n                }\r\n            } else {\r\n                sale.SurchargeTotal = 0;\r\n                sale.SurchargeTotalTax = 0;\r\n            }\r\n\r\n            const totalBasePrice = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .select(s => ext.helperService.DEARRound(s.BasePrice * s.Count, 2))\r\n                .sum(), 2);\r\n\r\n            sale.TotalBasePrice = totalBasePrice;\r\n\r\n            const totalItemDiscount = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .select(s => ext.helperService.DEARRound(s.ItemDiscount * s.Count, 2))\r\n                .sum(), 2);\r\n\r\n            sale.TotalItemDiscount = totalItemDiscount;\r\n\r\n            sale.TotalCheckout = sale.Total;\r\n\r\n            const outd = <IOutputData>{ processResult: true };\r\n            outd.updateSaleOrderDiscount = newSaleOrderDiscount;\r\n\r\n            return outd;\r\n        }\r\n\r\n        // for refund calcucations\r\n        private estimateTotalSum = function (sale: ISale) {\r\n\r\n            let sum = Enumerable.from(sale.ReturnItems)\r\n                .where(el => el.MaxCount > 0)\r\n                .sum(el => ext.helperService.DEARRound(el.MaxCount * el.FinalPrice, 2));\r\n\r\n            if (!sale.IsTaxInclusive) {\r\n                const tax = Enumerable.from(sale.ReturnItems)\r\n                    .where(el => el.MaxCount > 0)\r\n                    .sum(el => CalculatorHelperService.calculateTax2(el, false));\r\n\r\n                sum += tax;\r\n            }\r\n\r\n            return sum;\r\n        }\r\n\r\n        private amountSums(inputData: IInputData) {\r\n            let sum = 0;\r\n            const payments = inputData.payments;\r\n            const paymentValidation = inputData.paymentValidation;\r\n\r\n            if (payments) {\r\n                if (payments.cash)\r\n                    sum += payments.cash;\r\n\r\n                if (paymentValidation.cardPayments)\r\n                    sum += ext.cardPayService.sumAllCardPayments(paymentValidation.cardPayments, false);\r\n\r\n                if (payments.storeCredit)\r\n                    sum += payments.storeCredit;\r\n\r\n                if (payments.loyaltyPoints)\r\n                    sum += payments.loyaltyPoints;\r\n            }\r\n\r\n            if (paymentValidation && paymentValidation.customPayments)\r\n                sum += Enumerable.from(paymentValidation.customPayments).sum(p => p.amount);\r\n\r\n            return ext.helperService.DEARRound(sum, 2);\r\n        };\r\n\r\n        private hasSoldItems(sale: ISale): boolean {\r\n            return Enumerable.from(sale.CheckoutItems)\r\n                .where(c => c.Count > 0)\r\n                .any();\r\n        }\r\n\r\n        // return amount that is the maximum amount that still can be refunded\r\n        // for this sale. It means that we need to count all already refunded items\r\n        private getRemainingToRefund(inputData: IInputData): number {\r\n            const sale = inputData.sale;\r\n\r\n            const sum1 = CalculatorHelperService.getCheckoutSumFromAPISale(inputData.selectedItem.Data);\r\n            const sum2 = CalculatorHelperService.getProcessedCheckoutSumFromAPISale(inputData.selectedItem.Data);\r\n\r\n            // get current payments from UI\r\n            const amountSums = this.amountSums(inputData);\r\n\r\n            return sum1 - sum2 - amountSums;\r\n        }\r\n\r\n    }","import { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\nimport { Sale } from \"../Sale\";\r\n\r\n    export class TotalPaymentsCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Payments,\r\n                        order: StartCalcLevel.TotalPayments + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.TotalPayments + 15\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = Sale.create(inputData.sale);\r\n\r\n            // add surcharges to required totals\r\n            sale.Tax = ext.helperService.DEARRound(sale.Tax + sale.SurchargeTotalTax, 2);\r\n            sale.Total = ext.helperService.DEARRound(sale.SubTotal + sale.SurchargeTotal +\r\n                (sale.IsTaxInclusive ? 0 : sale.Tax) - sale.DiscountValue, 2);\r\n            sale.Balance = ext.helperService.DEARRound(CalculatorHelperService.getSaleBalance(sale), 2);\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n    }","import { AutoDiscountCalculator } from './AutoDiscountCalculator';\r\nimport { NativePricesCalculator } from './NativePricesCalculator';\r\nimport { SurchargesPaymentsCalculator } from './SurchargesPaymentsCalculator';\r\nimport { RefundCheckoutSetupCalculator } from './RefundCheckoutSetupCalculator';\r\nimport { RefundPaymentsSetupCalculator } from './RefundPaymentsSetupCalculator';\r\nimport { LoyaltyCalculator } from './LoyaltyCalculator';\r\nimport { TotalPaymentsCalculator } from './TotalPaymentsCalculator';\r\nimport { RefundCheckoutSubmitCalculator } from './RefundCheckoutSubmitCalculator';\r\nimport { FinalCalculator } from './FinalCalculator';\r\nimport { TaxCalculator } from './TaxCalculator';\r\nimport { RefundLimitsCalculator } from './RefundLimitsCalculator';\r\nimport { TotalCalculator } from './TotalCalculator';\r\n\r\nconst obj = {\r\n    'AutoDiscountCalculator': AutoDiscountCalculator,\r\n    'LoyaltyCalculator': LoyaltyCalculator,\r\n    'FinalCalculator': FinalCalculator,\r\n    'NativePricesCalculator': NativePricesCalculator,\r\n    'RefundCheckoutSubmitCalculator': RefundCheckoutSubmitCalculator,\r\n    'RefundCheckoutSetupCalculator': RefundCheckoutSetupCalculator,\r\n    'RefundLimitsCalculator': RefundLimitsCalculator,\r\n    'RefundPaymentsSetupCalculator': RefundPaymentsSetupCalculator,\r\n    'SurchargesPaymentsCalculator': SurchargesPaymentsCalculator,\r\n    'TaxCalculator': TaxCalculator,\r\n    'TotalCalculator': TotalCalculator,\r\n    'TotalPaymentsCalculator': TotalPaymentsCalculator\r\n};\r\n\r\nconst PARTIAL_CALCULATORS = obj;\r\n\r\nexport default PARTIAL_CALCULATORS;","import Enumerable from 'linq';\r\nimport { CheckoutItem } from './CheckoutItem';\r\nimport { CalculatorHelperService } from './CalculatorHelperService';\r\nimport { Moment } from 'moment';\r\nimport { FinancialStatusType, PaymentShortNameStandardType, SaleType } from './Enums';\r\nimport { ISale, ISalesRepresentative, ICustomer, ICheckoutItem, IPayment, IGroupedSale, IRefundBase, IContact, ISurcharge } from './Interfaces';\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const moment: Moment;\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class Sale implements ISale {\r\n    ID: string;\r\n    ParentOrderID?: string;\r\n    IsFirstChild?: boolean;\r\n    NewRefundOrder?: string;\r\n    PosOrderID?: string;\r\n    ReturnID?: string;\r\n    OperationID?: string;\r\n    OrderNumber: string;\r\n    OrderType: string;\r\n    Barcode: string;\r\n    DateNative: Date;\r\n    Date: string;\r\n    SaleType: SaleType;\r\n    OperationName: string;\r\n    StandAloneReturn: boolean;\r\n    StandAloneExchange: boolean;\r\n    ClearOrderNumber: string;\r\n    SubTotal: number;\r\n    Total: number;\r\n    Tax: number;\r\n    Discount: number; // value set on UI. May be percent or absolute value\r\n    DiscountValue: number; // real calculated value\r\n    DiscountValueRaw: number; // real calculated value\r\n    Comment: string;\r\n    IsTaxInclusive: boolean;\r\n    CashChangeAmount: number;\r\n\r\n    IsDiscountPercent?: boolean; // is manual order level discount of percent type \r\n    AdjustRefunds?: boolean;\r\n    ManuallyAppliedDiscount?: boolean;\r\n    WarnAboutDiscount?: boolean;\r\n    ReturnLoyaltyPoints?: boolean; // used in sales history\r\n    DiscountTax?: number;\r\n    CantProcessOffline?: boolean;\r\n    SalesRepresentative: ISalesRepresentative;\r\n\r\n    Customer: ICustomer;\r\n    CheckoutItems: ICheckoutItem[];\r\n    SelectedCoupon: string;\r\n    SelectedCouponID: string;\r\n    SelectedCouponDealID: string;\r\n    ReturnSelectedCoupon: string;\r\n    ReturnSelectedCouponID: string;\r\n    ReturnSelectedCouponDealID: string;\r\n    Payments: IPayment[];\r\n\r\n    //    refunds?: IAPIRefund[];\r\n    GroupedSale?: IGroupedSale;\r\n    //    RawSaleObject?: ISale; // previous native sale in case of refund/exchage\r\n    Refunds: Array<IRefundBase>;\r\n    //fields \r\n    PayloadVersion: string;\r\n    IsParked: boolean;\r\n    LoyaltyPoints?: number;\r\n    Balance?: number;\r\n    SurchargeTotal?: number;\r\n    SurchargeTotalTax?: number;\r\n    NonRefundableSurcharge?: number;\r\n    CalledFromHistory?: boolean;\r\n    TotalCheckout: number;\r\n    SurchargeToRefund?: number;\r\n    SurchargeTaxToRefund?: number;\r\n    Status?: FinancialStatusType;\r\n    ReturnItems?: Array<ICheckoutItem>; // for refunds\r\n    ReturnPayments?: Array<IPayment>;   // for refunds\r\n    FullReturnRounding?: number;\r\n    EstimateTotal?: number;             // refund only\r\n    BaseTotal?: number;\r\n    RemainingToRefund?: number;\r\n    LaybyDate: string;\r\n    TaxModePresision?: number;\r\n    IsFastRefund: boolean;\r\n\r\n    IsFirstRefundDone: boolean;\r\n    isFromDearSale: boolean;\r\n    SelectedContact: IContact;\r\n    TotalBasePrice: number;\r\n    TotalItemDiscount: number;\r\n\r\n    CustomerShippingAddressLine1?: string;\r\n    CustomerShippingAddressLine2?: string;\r\n    CustomerShippingCity?: string;\r\n    CustomerShippingCountry?: string;\r\n    CustomerShippingProvince?: string;\r\n    CustomerShippingZip?: string;\r\n    OutletName?: string;\r\n    OutletID?: string;\r\n    RegistryID?: string;\r\n    UserName?: string;\r\n\r\n    /*\r\n     * Helpers for old style properties. Wrap them.\r\n     */\r\n    get payloadVersion(): string {\r\n        return this.PayloadVersion;\r\n    }\r\n    set payloadVersion(v: string) {\r\n        // fake. In old mode we can not modify payload version.\r\n    }\r\n\r\n    get isParked(): boolean {\r\n        return this.IsParked;\r\n    }\r\n    set isParked(v: boolean) {\r\n        this.IsParked = v;\r\n    }\r\n\r\n    get selectedCoupon(): string {\r\n        return this.SelectedCoupon;\r\n    }\r\n    set selectedCoupon(v: string) {\r\n        this.SelectedCoupon = v;\r\n    }\r\n\r\n    get selectedCouponID(): string {\r\n        return this.SelectedCouponID;\r\n    }\r\n    set selectedCouponID(v: string) {\r\n        this.SelectedCouponID = v;\r\n    }\r\n\r\n    get selectedCouponDealID(): string {\r\n        return this.SelectedCouponDealID;\r\n    }\r\n    set selectedCouponDealID(v: string) {\r\n        this.SelectedCouponDealID = v;\r\n    }\r\n\r\n    get returnSelectedCoupon(): string {\r\n        return this.ReturnSelectedCoupon;\r\n    }\r\n    set returnSelectedCoupon(v: string) {\r\n        this.ReturnSelectedCoupon = v;\r\n    }\r\n\r\n    get returnSelectedCouponID(): string {\r\n        return this.ReturnSelectedCouponID;\r\n    }\r\n    set returnSelectedCouponID(v: string) {\r\n        this.ReturnSelectedCouponID = v;\r\n    }\r\n\r\n    get returnSelectedCouponDealID(): string {\r\n        return this.ReturnSelectedCouponDealID;\r\n    }\r\n    set returnSelectedCouponDealID(v: string) {\r\n        this.ReturnSelectedCouponDealID = v;\r\n    }\r\n\r\n    set itemAppliedDiscount(v: any) {\r\n        // fake\r\n    }\r\n\r\n    set isDiscountPercent(v: boolean) {\r\n        this.IsDiscountPercent = v;\r\n    }\r\n    get isDiscountPercent(): boolean {\r\n        return this.IsDiscountPercent;\r\n    }\r\n\r\n    set customer(v: ICustomer) {\r\n        this.Customer = v;\r\n    }\r\n    get customer(): ICustomer {\r\n        return this.Customer;\r\n    }\r\n\r\n    set processZero(v: boolean) {\r\n        // fake, do nothing\r\n    }\r\n\r\n    // support of backside monitor\r\n    get TotalForBackSide(): number {\r\n        return this.Total;\r\n    }\r\n    set TotalForBackSide(v: number) {\r\n        // fake\r\n    }\r\n\r\n    get CashRounding(): number {\r\n        if (!this.Payments || this.Payments.length === 0) return 0;\r\n\r\n        const v = Enumerable.from(this.Payments)\r\n            .where(p => p.ShortName === PaymentShortNameStandardType.Rounding)\r\n            .select(p => p.Amount)\r\n            .sum();\r\n\r\n        return CalculatorHelperService.zch(v);\r\n    }\r\n\r\n    set CashRounding(v: number) {\r\n        let rnd: IPayment = null;\r\n        v = ext.helperService.DEARRound(v, 4);\r\n\r\n        if (!this.Payments || this.Payments.length === 0)\r\n            rnd = null;\r\n        else\r\n            rnd = Enumerable.from(this.Payments)\r\n                .where(p => p.ShortName === PaymentShortNameStandardType.Rounding && p.FromHistory !== true)\r\n                .select(p => p).firstOrDefault();\r\n\r\n        if (!rnd && v) {\r\n            // create rounding\r\n            rnd = <IPayment><unknown>{\r\n                ID: ext.uuid2Service.newguid(),\r\n                PaymentProcessorID: null,\r\n                Amount: v,\r\n                Date: moment.utc(),\r\n                ShortName: PaymentShortNameStandardType.Rounding,\r\n                PaymentTypeName: ext.gettextCatalog.getString(\"Payment (cash rounding)\"),\r\n                Loyalty: 0\r\n            };\r\n\r\n            this.Payments.push(rnd);\r\n\r\n        } else {\r\n            if (!v) {\r\n                // remove zero record\r\n                this.Payments = this.Payments.filter(p => p.ShortName !== PaymentShortNameStandardType.Rounding || p.FromHistory === true);\r\n            } else {\r\n                rnd.Amount = v;\r\n                // @ts-ignore\r\n                rnd.Date = moment.utc();\r\n            }\r\n        }\r\n    }\r\n\r\n    // current remaining customer loyalty points\r\n    get CustomerLoyaltyPointsRemaining(): number {\r\n        return this.CustomerLoyaltyPoints - this.CustomerLoyaltyPointsUsed;\r\n    }\r\n    set CustomerLoyaltyPointsRemaining(v: number) {\r\n        // do nothing\r\n    }\r\n\r\n    // current total customer loyalty points\r\n    get CustomerLoyaltyPoints(): number {\r\n        let res = 0;\r\n\r\n        if (this.Customer && this.Customer.LoyaltyPoints)\r\n            res = CalculatorHelperService.zcn(this.Customer.LoyaltyPoints);\r\n\r\n        return ext.helperService.DEARRound(res, 2);\r\n    }\r\n    set CustomerLoyaltyPoints(v: number) {\r\n        // do nothing\r\n    }\r\n\r\n    // enum payments of type loyalty\r\n    set CustomerLoyaltyPointsUsed(n: number) {\r\n        // do nothing\r\n    }\r\n\r\n    get CustomerLoyaltyPointsUsed(): number {\r\n        if (!this.Payments) return 0;\r\n\r\n        // get only current session data\r\n        const res = Enumerable.from(this.Payments)\r\n            //        .where(p => p.ShortName === PaymentShortNameStandardType.Loyalty && p.FromHistory !== true)\r\n            .where(p => p.ShortName === PaymentShortNameStandardType.Loyalty)\r\n            .select(p => p.Amount)\r\n            .sum();\r\n\r\n        return ext.helperService.DEARRound(res, 2);\r\n    }\r\n\r\n    set Surcharges(v: Array<ISurcharge>) {\r\n        // do nothing\r\n    }\r\n\r\n    get Surcharges(): Array<ISurcharge> {\r\n        const res = Enumerable.from(this.Payments)\r\n            .where(p => p.Surcharge ? true : false)\r\n            .select(p => p.Surcharge).toArray();\r\n\r\n        return res;\r\n    }\r\n\r\n    // here we compare Total for sale with paid part\r\n    // taking into account fake payment like rounding/discount\r\n    get IsPartialPaid(): boolean {\r\n        return !CalculatorHelperService.sumToPayLeft(this) ? false : true;\r\n    }\r\n    set IsPartialPaid(v: boolean) {\r\n        // fake\r\n    }\r\n\r\n    get CalculatedTax(): number {\r\n        return CalculatorHelperService.zcn(this.Tax);\r\n    }\r\n    set CalculatedTax(v: number) {\r\n        // fake\r\n    }\r\n\r\n    get discountValue(): number {\r\n        return CalculatorHelperService.zcn(this.DiscountValue);\r\n    }\r\n    set discountValue(v: number) {\r\n        // fake\r\n    }\r\n\r\n    set calledFromHistory(v: boolean) {\r\n        this.CalledFromHistory = v;\r\n    }\r\n\r\n    get Surcharge(): number {\r\n        return Enumerable.from(this.Surcharges).sum(s => this.IsTaxInclusive ? s.CalculatedValueWithTax : s.CalculatedValue);\r\n        // return CalculatorHelperService.zcn(this.SurchargeTotal);\r\n    }\r\n    set Surcharge(v: number) {\r\n        // fake\r\n    }\r\n\r\n    set manuallyAppliedDiscount(v: boolean) {\r\n        if (v != this.ManuallyAppliedDiscount) {\r\n            this.WarnAboutDiscount = false;\r\n        }\r\n        this.ManuallyAppliedDiscount = v;\r\n    }\r\n    get manuallyAppliedDiscount(): boolean {\r\n        return this.ManuallyAppliedDiscount;\r\n    }\r\n\r\n    get cantProcessOffline(): boolean {\r\n        return this.CantProcessOffline;\r\n    }\r\n    set cantProcessOffline(v: boolean) {\r\n        this.CantProcessOffline = v;\r\n    }\r\n\r\n    set parentOrderID(v: string) {\r\n        this.ParentOrderID = v;\r\n    }\r\n    get parentOrderID(): string {\r\n        return this.ParentOrderID;\r\n    }\r\n\r\n    set newRefundOrder(v: string) {\r\n        this.NewRefundOrder = v;\r\n    }\r\n    get newRefundOrder(): string {\r\n        return this.NewRefundOrder;\r\n    }\r\n\r\n    set standAloneReturn(v: boolean) {\r\n        this.StandAloneReturn = v;\r\n    }\r\n    get standAloneReturn(): boolean {\r\n        return this.StandAloneReturn;\r\n    }\r\n\r\n    set standAloneExchange(v: boolean) {\r\n        this.StandAloneExchange = v;\r\n    }\r\n    get standAloneExchange(): boolean {\r\n        return this.StandAloneExchange;\r\n    }\r\n    \r\n    set IsFromDearSale(v: boolean) {\r\n        this.isFromDearSale = v;\r\n    }\r\n    get IsFromDearSale(): boolean {\r\n        return this.isFromDearSale;\r\n    }\r\n    // ********************************************\r\n\r\n    //constructor \r\n    constructor() {\r\n        this.PayloadVersion = '3';\r\n        this.ID = ext.uuid2Service.newguid();\r\n        this.ParentOrderID = null;\r\n        this.IsFirstChild = false;\r\n        this.NewRefundOrder = null;\r\n        this.PosOrderID = null;\r\n        this.ReturnID = null;\r\n        this.OperationID = null;\r\n        this.OrderNumber = null;\r\n        this.OrderType = null;\r\n        this.Barcode = null;\r\n        this.DateNative = new Date();\r\n        this.Date = this.DateNative.toDateString();\r\n        this.SaleType = SaleType.Sale;\r\n        this.OperationName = null;\r\n        this.StandAloneReturn = false;\r\n        this.StandAloneExchange = false;        \r\n        this.ClearOrderNumber = null;\r\n        this.SubTotal = 0;\r\n        this.Total = 0;\r\n        this.Tax = 0;\r\n        this.Discount = 0;\r\n        this.DiscountValue = 0;\r\n        this.Comment = null;\r\n        this.IsTaxInclusive = CalculatorHelperService.isConfigTaxInclusive();\r\n        this.CashChangeAmount = 0;\r\n        this.SalesRepresentative = null;\r\n        this.Customer = <ICustomer>{\r\n            ID: null\r\n        };\r\n        this.CustomerShippingAddressLine1 = '';\r\n        this.CustomerShippingAddressLine2 = '';\r\n        this.CustomerShippingCity = '';\r\n        this.CustomerShippingCountry = '';\r\n        this.CustomerShippingProvince = '';\r\n        this.CustomerShippingZip = '';\r\n        this.CheckoutItems = new Array<ICheckoutItem>();\r\n        this.SelectedCoupon = null;\r\n        this.SelectedCouponID = null;\r\n        this.SelectedCouponDealID = null;\r\n        this.ReturnSelectedCoupon = null;\r\n        this.ReturnSelectedCouponID = null;\r\n        this.ReturnSelectedCouponDealID = null;\r\n        this.Payments = new Array<IPayment>();\r\n        this.Refunds = null;\r\n        this.IsParked = false;\r\n        this.IsDiscountPercent = false;\r\n        this.LoyaltyPoints = 0;\r\n        this.SurchargeTotal = 0;\r\n        this.SurchargeTotalTax = 0;\r\n        this.TotalCheckout = 0;\r\n        this.NonRefundableSurcharge = 0;\r\n        this.WarnAboutDiscount = false;\r\n        this.IsFastRefund = false;\r\n        this.IsFirstRefundDone = false;\r\n        this.isFromDearSale = false;\r\n        this.SelectedContact = null;\r\n        this.TotalBasePrice = 0;\r\n        this.TotalItemDiscount = 0;\r\n    }\r\n\r\n    isValid() {\r\n        return true;\r\n    }\r\n\r\n    static create(sale: ISale): Sale {\r\n        if (!sale) return null;\r\n\r\n        if (typeof ((<any>sale).isValid) !== 'function') {\r\n            sale = angular.extend(new Sale(), sale);\r\n            for (let i = 0; i < sale.CheckoutItems.length; i++) {\r\n                sale.CheckoutItems[i] = CheckoutItem.create(sale.CheckoutItems[i]);\r\n            }\r\n        }\r\n\r\n        return <Sale>sale;\r\n    }\r\n\r\n    // helpers\r\n    calculateTotalLoyalty(): number {\r\n        const res = Enumerable.from(this.Payments)\r\n            .where(p => p.ShortName !== PaymentShortNameStandardType.Loyalty) // exclude loyalty payments\r\n            .sum(p => !p.Loyalty ? 0 : p.Loyalty);\r\n        return ext.helperService.DEARRound(res, 2);\r\n    }\r\n\r\n    // exclude here payments that were done before. They should be marked by FromHistory === true flag\r\n    calculateSessionLoyalty(): number {\r\n        const res = Enumerable.from(this.Payments)\r\n            .where(p => p.FromHistory !== true && p.ShortName !== PaymentShortNameStandardType.Loyalty)\r\n            .sum(p => !p.Loyalty ? 0 : p.Loyalty);\r\n\r\n        return ext.helperService.DEARRound(res, 2);\r\n    }\r\n\r\n    private countSaleItems(): number {\r\n        return Enumerable.from(this.CheckoutItems)\r\n            .where(i => i.Count > 0)\r\n            .count();\r\n    }\r\n\r\n    private countReturnItems(): number {\r\n        return Enumerable.from(this.CheckoutItems)\r\n            .where(i => i.Count < 0)\r\n            .count();\r\n    }\r\n\r\n    get IsDirect(): boolean {\r\n        return this.countSaleItems() > 0 && this.countReturnItems() === 0;\r\n    }\r\n    set IsDirect(v: boolean) {\r\n    }\r\n\r\n    get IsRefund(): boolean {\r\n        return this.countSaleItems() === 0 && this.countReturnItems() > 0;\r\n    }\r\n    set IsRefund(v: boolean) {\r\n    }\r\n\r\n    get IsExchange(): boolean {\r\n        return this.countSaleItems() > 0 && this.countReturnItems() > 0;\r\n    }\r\n    set IsExchange(v: boolean) {\r\n    }\r\n}\r\n\r\nfunction initializeTSSale(): ISale {\r\n    return new Sale();\r\n}","import { IAngularStatic } from \"angular\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare const Fingerprint: any;\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class BiometricsAuthService {\r\n    static $inject = [BiometricsAuthService];\r\n\r\n    private static Key = 'App Biometric Auth';\r\n    private static LocalStorageKey = 'bioAuth';\r\n\r\n    constructor() {\r\n    }\r\n\r\n    isAvailable(): Promise<boolean> {\r\n        return new Promise((res, rej) => {\r\n            if (window.isSite) {\r\n                return res(false);\r\n            }\r\n            const isAvailableSuccess = (result) => {\r\n                res(!!result);\r\n            };\r\n\r\n            const isAvailableError = (error) => {\r\n                console.log(error);\r\n                res(false);\r\n            };\r\n            Fingerprint.isAvailable(isAvailableSuccess, isAvailableError);\r\n        });\r\n    }\r\n\r\n    registerSecret(value: string) {\r\n        return new Promise<void>((res, rej) => {\r\n            Fingerprint.registerBiometricSecret({\r\n                description: BiometricsAuthService.Key,\r\n                secret: value,\r\n                invalidateOnEnrollment: true,\r\n                disableBackup: true, // always disabled on Android\r\n            }, (result) => res(), (err) => rej(err));\r\n        });\r\n    }\r\n\r\n    loadSecret(): Promise<string> {\r\n        return new Promise<string>((res, rej) => {\r\n            Fingerprint.loadBiometricSecret({\r\n                description: BiometricsAuthService.Key,\r\n            }, (result) => res(result), (err) => rej(err));\r\n        });\r\n    }\r\n\r\n    isBioAuthEnabled(tenantID?: string, userID?: string) {\r\n        const auth = localStorage.getItem(BiometricsAuthService.LocalStorageKey);\r\n        return tenantID && userID ? !!auth && auth === `${tenantID}@${userID}` : !!auth;\r\n    }\r\n\r\n    getBioAuthKey() {\r\n        const auth = localStorage.getItem(BiometricsAuthService.LocalStorageKey);\r\n        return auth ? auth : null;\r\n    }\r\n\r\n    saveBioAuthKey(tenantID: string, userID: string) {\r\n        localStorage.setItem(BiometricsAuthService.LocalStorageKey, `${tenantID}@${userID}`);\r\n    }\r\n\r\n    reset() {\r\n        localStorage.removeItem(BiometricsAuthService.LocalStorageKey);\r\n    }\r\n}\r\n\r\n\r\n(<any>angular).module('services')\r\n    .service('bioAuthService', BiometricsAuthService.$inject);\r\n\r\nexport default 'bioAuthService';","import { IAngularStatic } from \"angular\";\r\nimport buildConfiguration from '../../src/PosScripts/configEnvironment';\r\n\r\ndeclare const device: any;\r\ndeclare const cordova: Cordova;\r\ndeclare const angular: IAngularStatic;\r\n// @ts-ignore\r\ndeclare const IRoot: any;\r\ninterface DeviceInfo {\r\n    model: string;\r\n    deviceID: string;\r\n    platform: 'iOS' | 'Android';\r\n    appVersion: string;\r\n    version: string;\r\n}\r\n\r\nexport class DeviceInfoService {\r\n    static $inject = [DeviceInfoService] as unknown[] as Function[];\r\n\r\n    private _deviceInfo: DeviceInfo = <DeviceInfo>{};\r\n    private isRootedDevice: boolean;\r\n    private isVirtual: boolean;\r\n\r\n    get deviceInfo(): Readonly<DeviceInfo> {\r\n        return this._deviceInfo;\r\n    }\r\n\r\n    public get isDeviceRooted() {\r\n        return !this.isVirtual && !this.isAndroid && this.isRootedDevice;\r\n    }\r\n\r\n    public get isSimulator() {\r\n        return (this.cordovaDevice ? this.cordovaDevice.isVirtual : (<any>window).isSimulator) === true;\r\n    }\r\n\r\n    public get isBrowser() {\r\n        return typeof cordova === 'undefined' || (<any>window).isSimulator;\r\n    }\r\n\r\n    public get isAndroid() {\r\n        return this.deviceInfo.platform?.toLowerCase() === 'android';\r\n    }\r\n\r\n    public get isIOS() {\r\n        return !this.isAndroid;\r\n    }\r\n\r\n    public get isDeviceVirtual() {\r\n        return this.isVirtual;\r\n    }\r\n\r\n    constructor() {\r\n        if (typeof cordova !== 'undefined' && typeof(cordova.exec) === 'function') {\r\n            // @ts-ignore\r\n            cordova.exec(() => {\r\n                (<any>window).isSimulator = true;\r\n            }, () => {}, 'cordova-simulate', 'isSimulator', []);\r\n        }\r\n\r\n        if (typeof device !== 'undefined') {\r\n        // service should be initialized when root injector is constructed, so this would be before creating any components\r\n            device.getInfo((data) => {\r\n                if (data) {\r\n                    let deviceModel = data.model;\r\n                    if (data.manufacturer && data.manufacturer !== 'unknown') {\r\n                        deviceModel = data.manufacturer + ': ' + data.model;\r\n                    }\r\n\r\n                    this._deviceInfo = {\r\n                        model: deviceModel,\r\n                        deviceID: data.uuid,\r\n                        platform: buildConfiguration.platform,\r\n                        appVersion: buildConfiguration.appVersion,\r\n                        version: data.version\r\n                    };\r\n\r\n                    this.isVirtual = data.isVirtual;\r\n                } else {\r\n                    console.log('no device getInfo data');\r\n                }\r\n            });\r\n        }\r\n\r\n        if (typeof IRoot !== 'undefined') { \r\n            IRoot.isRooted((value: boolean) => {\r\n                this.isRootedDevice = value;\r\n                console.log(\"rooted device\", value);\r\n            }, (error) => {\r\n                console.error(error);\r\n                this.isRootedDevice = false;\r\n            });\r\n        }\r\n    }\r\n\r\n    get cordovaDevice() {\r\n        return (<any>window).device;\r\n    }\r\n}\r\n\r\nangular.module('services')\r\n    .service('deviceInfo', DeviceInfoService.$inject);\r\n\r\nexport default 'deviceInfo';","import { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\ndeclare const window: any;\r\ndeclare const buildConfiguration: any;\r\n\r\ninterface CredentialResponse {\r\n  credential: string;\r\n}\r\n\r\nclass GoogleHelperService {\r\n    static $inject = ['$q', 'configService', GoogleHelperService];\r\n\r\n    private loginDeferred: any;\r\n\r\n    constructor(\r\n        private $q: any,\r\n        private configService: any\r\n    ) {\r\n    }\r\n\r\n    init() {\r\n        if (this.configService.isSite && window.google?.accounts?.id) {\r\n            window.google.accounts.id.initialize({\r\n              client_id: buildConfiguration.GSuites_ClientID,\r\n              callback: this.handleCredentialResponse.bind(this),\r\n              ux_mode: 'popup'\r\n          });\r\n        }\r\n    }\r\n\r\n    login() {\r\n        const deferred = this.$q.defer();\r\n        if (this.configService.isSite && window.google?.accounts?.id) {\r\n            window.google.accounts.id.cancel();\r\n            this.loginDeferred = deferred;\r\n            window.google.accounts.id.prompt();\r\n        }\r\n        else if (!this.configService.isSite && window && window.plugins && window.plugins.googleplus) {\r\n            window.plugins.googleplus.login(\r\n                {\r\n                    'scopes': 'profile email',\r\n                    'webClientId': buildConfiguration.GSuites_ClientID\r\n                },\r\n                function (googleUser) {\r\n                    deferred.resolve(googleUser);\r\n                },\r\n                function (error) {\r\n                    deferred.reject(error);\r\n                }\r\n            );\r\n        }\r\n        return deferred.promise;\r\n    }\r\n\r\n    logout() {\r\n        if (this.configService.isSite && window.google?.accounts?.id) {\r\n          window.google.accounts.id.disableAutoSelect();\r\n        }\r\n        else if (!this.configService.isSite && window && window.plugins && window.plugins.googleplus) {\r\n            window.plugins.googleplus.logout();\r\n        }\r\n    }\r\n\r\n    private handleCredentialResponse(resp: CredentialResponse) {\r\n        if (!this.loginDeferred) {\r\n          console.warn('No pending login - ignoring credential.'); \r\n          return; \r\n        }\r\n        try {\r\n          const jwt = resp.credential;\r\n          const payload = JSON.parse(atob(jwt.split('.')[1]));\r\n          this.loginDeferred.resolve({ idToken: jwt, email: payload.email });\r\n        } catch (e) {\r\n          this.loginDeferred.reject(e);\r\n        } finally {\r\n          this.loginDeferred = null;\r\n        }\r\n      }\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('googleHelperService', GoogleHelperService.$inject);","/// <reference types=\"cordova-plugin-inappbrowser\" />\r\nimport { IAngularStatic } from 'angular';\r\nimport buildConfiguration from '../../src/PosScripts/configEnvironment';\r\nimport { IConfigService } from '../Typings/Typings';\r\nimport { DeviceInfoService } from './device-info.service';\r\n//import deviceInfo from './device-info.service';\r\n\r\ndeclare var $: any;\r\n//declare const cordova: Cordova;\r\ndeclare const angular: IAngularStatic;\r\n\r\nangular.module('mainApp')\r\n    .constant('MSClientID', buildConfiguration.MS_ClientID);\r\n\r\n// const REDIRECT_URL = 'http://localhost/msauth';\r\n\r\ninterface IPopupImplementation {\r\n    open(url): WindowProxy;\r\n    getRedirectedUrl(popup: WindowProxy, url: string): Promise<string>;\r\n}\r\n\r\n\r\nclass PopupCordova implements IPopupImplementation {\r\n    open(url: any): WindowProxy {\r\n        return cordova.InAppBrowser.open(url, '_blank') as unknown as WindowProxy;\r\n    }\r\n\r\n    getRedirectedUrl(popup: WindowProxy, url: string): Promise<string> {\r\n        return new Promise((res, _) => {\r\n            // @ts-ignore\r\n            popup.addEventListener('loadstart', (e: Event & {url: string}) => {\r\n                console.log('loadstart');\r\n                console.log(JSON.stringify(e));\r\n                if (e.url.startsWith(url)) {\r\n\r\n                    popup.close();\r\n                    res(e.url);\r\n                }\r\n            });\r\n\r\n            popup.addEventListener('exit', () => {\r\n                res(null);\r\n            });\r\n        });\r\n    }\r\n\r\n}\r\n\r\nclass PopupBrowser implements IPopupImplementation {\r\n\r\n    private ticks = 0;\r\n    private readonly timeout = 60 * 1000 * 5;\r\n    private readonly interval = 100;\r\n    popupRef: Window;\r\n\r\n    open(url: any): WindowProxy {\r\n        return window.open(url, 'msal', this.getPopupSettings())\r\n    }\r\n\r\n    getRedirectedUrl(popup: WindowProxy, url: string): Promise<string> {\r\n        this.ticks = 0;\r\n        this.popupRef = popup;\r\n        return new Promise((resolve, reject) => {\r\n            const intervalId = setInterval(() => {\r\n                this.ticks++;\r\n                const maxTicks = this.timeout / this.interval;\r\n                if (this.ticks > maxTicks) {\r\n                    this.popupRef.close();\r\n                    reject('Login not completed');\r\n                }\r\n                if (this.popupRef.closed) {\r\n                    \r\n                    clearInterval(intervalId);\r\n                    resolve(null);\r\n                    return;\r\n                }\r\n\r\n                let href = '';\r\n                try {\r\n                    href = this.popupRef.location.href;\r\n                } catch {\r\n\r\n                }\r\n                if (!href) return;\r\n                if (href.startsWith(url)) {\r\n                    clearInterval(intervalId);\r\n                    this.popupRef.close();\r\n                    resolve(href);\r\n                }\r\n            }, 100);\r\n        });\r\n    }\r\n\r\n    private getPopupSettings() {\r\n        const winLeft = window.screenLeft ? window.screenLeft : window.screenX;\r\n        const winTop = window.screenTop ? window.screenTop : window.screenY;\r\n       \r\n        const winWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n        const winHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n\r\n        const POPUP_WIDTH = 483;\r\n        const POPUP_HEIGHT = 600;\r\n\r\n        const left = Math.max(0, winWidth / 2 - POPUP_WIDTH / 2 + winLeft);\r\n        const top = Math.max(0, winHeight / 2 - POPUP_HEIGHT / 2 + winTop);\r\n        return `popup=yes, width=${POPUP_WIDTH}, height=${POPUP_HEIGHT}, top=${top}, left=${left}`;\r\n    }\r\n\r\n}\r\n\r\nclass PopupImplementationFactory {\r\n    create(isSite: boolean) {\r\n        if (isSite) {\r\n            return new PopupBrowser();\r\n        }\r\n\r\n        return new PopupCordova();\r\n    }\r\n}\r\n\r\n\r\nexport class MSALService {\r\n    static $inject = ['MSClientID', 'configService', 'deviceInfo', MSALService];\r\n\r\n    constructor(private MSClientID: string, private configService: IConfigService, private deviceInfo: DeviceInfoService) {\r\n    }\r\n    private _isAvailable = true;\r\n\r\n    get isAvailable() {\r\n        return this._isAvailable;\r\n    }\r\n\r\n    login(): Promise<{username: string; token: string; id: string}> {\r\n        if (!this._isAvailable) return Promise.resolve(null);\r\n\r\n        const scope = encodeURIComponent('openid profile email user.read');\r\n\r\n        const redirectUrl = encodeURI(this.getRedirectUrl());\r\n        let loginUrl = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?scope=${scope}&response_type=id_token&response_mode=fragment&prompt=select_account`;\r\n        loginUrl += `&client_id=${this.MSClientID}`;\r\n        loginUrl += `&redirect_uri=${redirectUrl}`;\r\n        loginUrl += `&nonce=${Math.floor(Math.random() * 10000000)}`;\r\n\r\n        const popupImpl = new PopupImplementationFactory().create(this.configService.isSite || this.deviceInfo.isBrowser);\r\n\r\n        const popup =  popupImpl.open(loginUrl);\r\n\r\n\r\n\r\n        return popupImpl.getRedirectedUrl(popup, this.getRedirectUrl()).then(url => {\r\n            if (!url) return null;\r\n            const params =  new URLSearchParams(url.replace(this.getRedirectUrl() + '#', ''));\r\n            const token = params.get('id_token');\r\n            const claims = this.parseJwt(token);\r\n            const userID = claims.oid;\r\n            const email = claims.preferred_username;\r\n\r\n            return {id: userID, token: token, username: email};\r\n        });\r\n    }\r\n\r\n    private parseJwt(token: string) {\r\n        const base64Url = token.split('.')[1];\r\n        const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\r\n        const jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) {\r\n            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n        }).join(''));\r\n\r\n        return JSON.parse(jsonPayload);\r\n    }\r\n\r\n    private getRedirectUrl() {\r\n        if (this.configService.isSite || this.deviceInfo.isBrowser) {\r\n            // in debug ms will only accept localhost:8000\r\n            return location.origin + '/redirect.html'\r\n        }\r\n\r\n        return location.origin + '/redirect.html'\r\n    }\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('msalService', MSALService.$inject);\r\n\r\nexport default 'msalService'","import { convertFromOld } from \"../ConverterService\";\r\nimport { HelperService, JsStoreProvider, LocalDBProvider } from \"../Typings/Typings\";\r\nimport { IAngularStatic } from 'angular';\r\nimport { DeviceInfoService } from \"./device-info.service\";\r\n\r\ndeclare var $: any;\r\ndeclare const angular: IAngularStatic;\r\n\r\nclass OfflineSaleService {\r\n    static $inject = ['$q', 'helperService', 'configService', 'localDBProvider', 'jsStoreProvider', 'deviceInfo', OfflineSaleService];\r\n\r\n    constructor(\r\n        private $q: any,\r\n        private helperService: HelperService,\r\n        private configService: any,\r\n        private localDBProvider: LocalDBProvider,\r\n        private jsStoreProvider: JsStoreProvider,\r\n        private deviceInfo: DeviceInfoService\r\n    ) {\r\n    }\r\n\r\n    clearOfflineSales(): PromiseLike<any> {\r\n        if (this.configService.isSite) {\r\n            const deferred = this.$q.defer();\r\n            this.helperService.storeSaleQueue([]);\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        } else {\r\n            return this.localDBProvider.removeSales(this.configService.posName, null, 'parked');\r\n        }\r\n    }\r\n\r\n    getCount(): PromiseLike<number> {\r\n        if (this.configService.isSite) {\r\n            const deferred = this.$q.defer();\r\n            const queueSales = this.helperService.getSaleQueue();\r\n            const countQueue = queueSales && Array.isArray(queueSales) ? queueSales.length : 0;\r\n            deferred.resolve(countQueue);\r\n            return deferred.promise;\r\n        } else {\r\n            return this.localDBProvider.loadOfflineSalesCount(this.configService.posName, null, null, 'parked');\r\n        }\r\n    }\r\n\r\n    loadOfflineSalesErrorHistory(): PromiseLike<Array<any>> {\r\n        let deferred = this.$q.defer();\r\n        if (!this.configService.isSite || (<any>window).isSupported) {\r\n            const provider = this.configService.isSite || this.deviceInfo.isSimulator ? this.jsStoreProvider : this.localDBProvider;\r\n            const THIS = this;\r\n            const pr = provider.loadOfflineSalesErrorHistory(this.configService.lastDearPosName)\r\n                .then((data) => {\r\n                    deferred = THIS.$q.defer();\r\n                    let result = data.map(function(el) {\r\n                        el.sale = JSON.parse(el.Packed);\r\n                        el.sale = convertFromOld(el.sale);\r\n                        el.info = JSON.parse(el.InfoPacked); \r\n                        el.Status = el.StatusID;\r\n                        delete el.Packed;\r\n                        delete el.InfoPacked;\r\n                        return el;\r\n                    });\r\n                    result.push(...this.loadOfflineSalesFromQueue());\r\n\r\n                    deferred.resolve(result);\r\n                    return deferred.promise;\r\n                });\r\n            return pr;\r\n        } else {\r\n            deferred.resolve(this.loadOfflineSalesFromQueue());\r\n            return deferred.promise;\r\n        }\r\n\r\n    };\r\n\r\n    loadOfflineSalesFromQueue() {\r\n        const queue = this.helperService.getSaleQueue();\r\n        return queue && Array.isArray(queue)\r\n        ? queue.map(el => {\r\n            return el;\r\n        })\r\n        : [];\r\n    }\r\n\r\n    removeFromHistory(saleID: string, operationID: string): PromiseLike<void> {\r\n        const provider = this.configService.isSite || this.deviceInfo.isSimulator ? this.jsStoreProvider : this.localDBProvider;\r\n        return provider.removeSale(saleID, null, operationID);\r\n    }\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('offlineSaleService', OfflineSaleService.$inject);","import { Observable, Subject } from \"rxjs\";\r\nimport { HelperService, IGetTextCatalog } from \"../../Typings/Typings\";\r\nimport { IScope } from \"angular\";\r\n\r\nexport interface IOption {\r\n    name: string, value: string\r\n}\r\nexport interface IDialogQuestion {\r\n    Text: string;\r\n    Options: IOption[];\r\n    IsError?: boolean;\r\n}\r\n\r\n\r\nexport class ProgressDialog {\r\n    private progressText = \"\";\r\n    private isProgressShown = false;\r\n    private hideButtons = false;\r\n    private parentScope: IScope;\r\n\r\n    get parentScopeAny() {\r\n        return this.parentScope as any;\r\n    }\r\n\r\n    private dialogCalled = false;\r\n    private lastQuestion: IDialogQuestion;\r\n    private caption: string;\r\n\r\n    private _cancelSubject = new Subject<void>();\r\n    get onCancel() {\r\n        return this._cancelSubject as Observable<void>;\r\n    }\r\n\r\n    private _answerSubject = new Subject<string>();\r\n    get onAnswer() {\r\n        return this._answerSubject as Observable<string>;\r\n    }\r\n\r\n    constructor(private gettextCatalog: IGetTextCatalog, private $timeout: ng.ITimeoutService, private helperService: HelperService,\r\n        scope: any, caption: string) {\r\n        this.parentScope = scope;\r\n        this.caption = caption;\r\n    }\r\n\r\n\r\n    showProgressDialog() {\r\n        if (this.isProgressShown) {\r\n            return;\r\n        }\r\n        this.$timeout(() => {\r\n            this.parentScopeAny.customModalDlg2Caption = this.caption;;\r\n            this.parentScopeAny.customModalDlg2Text = this.progressText;\r\n\r\n            if (!this.hideButtons) {\r\n                this.parentScopeAny.customModalDlg2Buttons = [{\r\n                    name: this.gettextCatalog.getString('Cancel'),\r\n                    value: 'CANCEL'\r\n                }];\r\n            }\r\n            else {\r\n                this.parentScopeAny.customModalDlg2Buttons = [];\r\n            }\r\n\r\n            this.parentScopeAny.callbackModal2 = (code) => {\r\n                this.showProgressDialog();\r\n\r\n                this.isProgressShown = false;\r\n                //d1.resolve(code);\r\n                this._answerSubject.next(code);\r\n                this.dialogCalled = false;\r\n                return true;\r\n            };\r\n        });\r\n\r\n        this.isProgressShown = true;\r\n        this.$timeout(() => {\r\n            this.helperService.showDialog('#customModalDlg2');\r\n        });\r\n    }\r\n\r\n    hideProgressDialog(force = false) {\r\n        if (this.isProgressShown || force) {\r\n            this.$timeout(() => {\r\n                this.helperService.closeDialog('#customModalDlg2');\r\n                this.isProgressShown = false;\r\n            });\r\n\r\n        }\r\n    };\r\n\r\n    updateText(text: string) {\r\n        this.$timeout(() => {\r\n            this.progressText = text;\r\n            if (this.isProgressShown) {\r\n                this.parentScopeAny.customModalDlg2Text = this.progressText;\r\n            }\r\n        });\r\n    }\r\n\r\n    updateButtonsAndText(text: string, buttons: IOption[]) {\r\n        this.$timeout(() => {\r\n            this.setButtonsAndText({ Text: text, Options: buttons })\r\n        });\r\n    }\r\n\r\n    askQuestion(q: IDialogQuestion) {\r\n        this.hideProgressDialog();\r\n        if (!this.dialogCalled) {\r\n            this.lastQuestion = q;\r\n            this.dialogCalled = true;\r\n\r\n            this.$timeout(() => {\r\n                this.setButtonsAndText(q);\r\n            });\r\n\r\n            this.hideProgressDialog();\r\n        }\r\n        else if (q.IsError === true) {\r\n            this.lastQuestion = q;\r\n            this.dialogCalled = true;\r\n            this.$timeout(() => this.setButtonsAndText(q));\r\n\r\n        }\r\n    }\r\n\r\n    destroy() {\r\n        this.hideProgressDialog(true);\r\n        if (this.dialogCalled) {\r\n            this.dialogCalled = false;\r\n            this.parentScopeAny.callbackModal2(null);\r\n            this.parentScopeAny.callbackModal2 = () => { };\r\n            this._answerSubject.complete();\r\n            this._cancelSubject.complete();\r\n            this.parentScope = null;\r\n        }\r\n\r\n    }\r\n\r\n    private setButtonsAndText(q: IDialogQuestion): void {\r\n        this.updateText(q.Text);\r\n        let buttons = [];\r\n        if (!q || !q.Options || q.Options.length === 0) {\r\n            buttons = [{\r\n                name: this.gettextCatalog.getString('Cancel'),\r\n                value: 'CANCEL'\r\n            }];\r\n        }\r\n\r\n        for (const o of q.Options) {\r\n            buttons.push({\r\n                value: o.value,\r\n                name: o.name\r\n            });\r\n        }\r\n        this.parentScopeAny.customModalDlg2Buttons = buttons;\r\n    }\r\n}","export interface BaseTransactionData {\r\n    Station: string;\r\n    DeviceId: string;\r\n    PosName: string;\r\n    PosVersion?: string;\r\n    VendorId: string;\r\n}\r\n\r\nexport interface TransactionData extends BaseTransactionData {\r\n\r\n    Amount: number;\r\n    AmountCash?: number;\r\n    Cur: string;\r\n    TxnType: 'Purchase' | 'Validate' | 'Auth ' | 'Refund' | 'Status' | 'UI';\r\n    TxnRef: string;\r\n\r\n    MRef?: string;\r\n    UrlSuccess?: string;\r\n    UrlFail?: string;\r\n}\r\n\r\nexport interface InitialTransactionResponse {\r\n    TxnType: 'Purchase' | 'Validate' | 'Auth ' | 'Refund' | 'Status' | 'UI';\r\n    StatusId: StatusId;\r\n    TxnStatusId: TxnStatusId;\r\n    Complete: number;\r\n    ReCo: string;\r\n    Tmo: number;\r\n    TxnRef: string;\r\n    DL1: string;\r\n    DL2: string;\r\n    B1: string;\r\n    B2: string;\r\n}\r\n\r\nexport interface TransactionResult {\r\n    AC?: string;\r\n    AP?: string;\r\n    CN?: string;\r\n    CT?: string;\r\n    DS?: string;\r\n    DS_TZ?: string;\r\n    DT?: string;\r\n    DT_TZ?: string;\r\n    PIX?: string;\r\n    RID?: string;\r\n    RRN?: string;\r\n    ST?: string;\r\n    TR?: string;\r\n    DBID?: string;\r\n    RC?: string;\r\n    RT?: string;\r\n    RTT?: number;\r\n    AmtA?: number;\r\n    AmtS?: number;\r\n    AmtT?: number;\r\n    AmtC?: number;\r\n    MID?: string;\r\n    TID?: string;\r\n    AutoSig?: any;\r\n    CaStan?: any;\r\n}\r\n\r\nexport interface TransactionResponse extends InitialTransactionResponse {\r\n    RcptW: number;\r\n    Rcpt: string;\r\n    Result: TransactionResult;\r\n\r\n    MerchantReceipt?: string;\r\n    MerchantReceiptWidth?: number\r\n}\r\n\r\n\r\nexport enum TxnStatusId {\r\n\r\n    Idle = 1,\r\n    PresentOrInsertCard = 2,\r\n    SelectAccount = 3,\r\n    SelectApp = 4,\r\n    EnterPin = 5,\r\n    Processing = 6,\r\n    VerifyingSignature = 7,\r\n    DisplayResult = 8\r\n}\r\n\r\n\r\nexport enum StatusId {\r\n    Initiating = 1,\r\n    TransactionStarted = 2,\r\n    TransactionStarted2 = 3,\r\n    Processing = 4,\r\n    Authenticating = 5,\r\n    TransactionCompleted = 6,\r\n}\r\n\r\n\r\nexport interface WindcaveSettings {\r\n    printWindcaveReceipts: boolean;\r\n}","import { IAngularStatic, IHttpResponse } from \"angular\";\r\nimport { IMakePaymentOptions, IPaymentProvider, IRefundOptions, IResponse } from \"../Interfaces\";\r\nimport { IPayment } from \"../../../Interfaces\";\r\nimport { HelperService, IConfigService, IGetTextCatalog } from \"../../../Typings/Typings\";\r\nimport { Builder, Parser } from 'xml2js';\r\n\r\nimport buildConfiguration from \"../../../../src/PosScripts/configEnvironment\";\r\nimport { Observable, Subject, Subscription, TimeoutError, catchError, concatMap, delay, from, map, repeat, switchMap, take, takeUntil, tap, throwError, timeout, timer } from \"rxjs\";\r\nimport { IOption, ProgressDialog } from \"../progress-dialog\";\r\nimport { BaseTransactionData, InitialTransactionResponse, StatusId, TransactionData, TransactionResponse, TransactionResult, WindcaveSettings } from \"./interfaces\";\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\n\r\nconst parseNumbers = (str: string) => {\r\n    if (!isNaN(<number><unknown>str)) {\r\n        // 00000123 like strings\r\n        if (str && typeof str === 'string' && str != '0' && str[0] === '0') {\r\n            return str;\r\n        }\r\n        return <any>str % 1 === 0 ? parseInt(str, 10) : parseFloat(str);\r\n      }\r\n      return str;\r\n};\r\n\r\n\r\nexport class WindcaveProviderService implements IPaymentProvider<TransactionResponse> {\r\n    static $inject = ['configService', '$http', 'gettextCatalog', '$timeout', 'helperService', '$q', 'printService', '$sce', WindcaveProviderService];\r\n\r\n    cancelPolling: Subject<void> = new Subject<void>();\r\n    progressDialog: ProgressDialog;\r\n    isPolling: boolean;\r\n    polling: Subscription;\r\n\r\n    responseObservable: Subject<InitialTransactionResponse> = new Subject<InitialTransactionResponse>();\r\n    responseSubscription: Subscription;\r\n    merchantReceipt: string;\r\n    merchantReceiptWidth: any;\r\n    lastResult: IResponse;\r\n    settings: WindcaveSettings;\r\n\r\n    get subscribeObject() {\r\n        return { next: (v) => this.responseObservable.next(v), error: err => this.responseObservable.error(err) };\r\n    }\r\n\r\n    get url(): string {\r\n        return this.configService.isQAMode ? 'https://uat.windcave.com/pxmi3/pos.aspx' : 'https://sec.windcave.com/pxmi3/pos.aspx';\r\n    }\r\n\r\n    readonly POSName = 'Cin7 Core POS';\r\n    readonly POSVersion = buildConfiguration.appVersion;\r\n    readonly POSVendorId = '5745F5888DC641A39DFB';\r\n\r\n    public parentScope: any;\r\n\r\n    private deferred: ng.IDeferred<IResponse>;\r\n    private currentRef: string;\r\n    private lastStatus: StatusId;\r\n    private mode: 'transaction' | 'refund';\r\n\r\n    constructor(private configService: IConfigService,\r\n        private $http: ng.IHttpService,\r\n        private gettextCatalog: IGetTextCatalog,\r\n        private $timeout: ng.ITimeoutService,\r\n        private helperService: HelperService,\r\n        private $q: ng.IQService,\r\n        private printService: any,\r\n        private $sce: ng.ISCEService) {\r\n    }\r\n   \r\n    get disablePaymentOnFailed(): boolean {\r\n        return true;\r\n    }\r\n\r\n    get timeout(): number {\r\n        return this.configService.isQAMode ? 180_000 : 90_000;\r\n    }\r\n\r\n\r\n    getCardInfo(metadata: TransactionResponse): { catdPAN: string; cardType: string; } {\r\n        return { catdPAN: metadata.Result?.CN, cardType: metadata.Result?.CT };\r\n    }\r\n\r\n    private process(callback: () => Observable<InitialTransactionResponse>, type: 'refund' | 'transaction') {\r\n        this.initState();\r\n        this.validate()\r\n        this.mode = type;\r\n\r\n        this.settings = this.configService.getCardPaymentSettings<WindcaveSettings>();\r\n\r\n        this.progressDialog.showProgressDialog();\r\n        this.progressDialog.updateText(this.gettextCatalog.getString('Initiating {{type}}...', { type: type}));\r\n        this.progressDialog.onCancel.subscribe(() => this.returnError(this.gettextCatalog.getString('{{type}} cancelled', { type: type })));\r\n        this.progressDialog.onAnswer.subscribe((answer) => this.answer(answer));\r\n\r\n        this.responseObservable.pipe(timeout({ each: this.timeout })).subscribe({\r\n            next: this.checkStatus.bind(this),\r\n            error: this.returnError.bind(this),\r\n            complete: () => console.log('complete observable')\r\n        })\r\n        \r\n        callback().subscribe(this.subscribeObject);\r\n\r\n        return (this.deferred.promise as Promise<any>).finally(this.destroy.bind(this));\r\n    }\r\n\r\n\r\n    makePayment(options: IMakePaymentOptions): Promise<any> {\r\n        return this.process(() => this.postTransaction(options), 'transaction');\r\n    }\r\n\r\n    refund(payment: IPayment, amount: number, options: IRefundOptions): Promise<any> {\r\n        if (!payment.TransactionMetaData) throw new Error('Transaction metadata not found.');\r\n        return this.process(() =>  {\r\n            const response = (typeof payment.TransactionMetaData === 'string' ? JSON.parse(payment.TransactionMetaData) : payment.TransactionMetaData) as TransactionResponse;\r\n            return this.postRefund(amount, response.TxnRef, response.Result.TR, options.currency)\r\n        }, 'refund');\r\n    }\r\n\r\n    init(_, __): Promise<void> {\r\n        return Promise.resolve();\r\n    }\r\n\r\n    closeConnection(): void {\r\n        this.destroy();\r\n    }\r\n\r\n    startPolling() {\r\n        this.cancelPolling = new Subject<void>();\r\n        this.cancelPolling.pipe(take(1)).subscribe(x => {\r\n            this.isPolling = false;\r\n            this.polling?.unsubscribe();\r\n        });\r\n        if (this.polling && !this.polling.closed) {\r\n            this.polling.unsubscribe();\r\n        }\r\n        this.isPolling = true;\r\n        const poll = timer(0, 500).pipe(\r\n            concatMap(_ => this.statusCall(this.currentRef)),\r\n            tap((res) => console.log(res)),\r\n            delay(1000),\r\n            repeat(),\r\n            takeUntil(this.cancelPolling)\r\n        );\r\n        this.polling = poll.subscribe(this.subscribeObject);\r\n\r\n    }\r\n\r\n    getReceiptAsHtml(receipt: string, width: number): string {\r\n        const regex = new RegExp(`(.{${width}})`, 'g');\r\n\r\n        const lines = receipt.split('\\n');\r\n\r\n        const str = lines.map(line => line.replace(regex, '$1<br />')).join('<br />');\r\n\r\n        return `<pre style=\"background-color: unset;border: none;\">${str}</pre>`\r\n    }\r\n\r\n    private returnError(err: any) {\r\n        let text = typeof err === 'string' ? err : err.message;\r\n        if (err instanceof TimeoutError) {\r\n            text = this.gettextCatalog.getString('Transaction timeout: please try again');\r\n        }\r\n        this.deferred.reject(<IResponse>{\r\n            result: false,\r\n            disableAddPayment: err instanceof TimeoutError && this.lastStatus !== null ? false : undefined,\r\n            response: {\r\n                errorDescription: text\r\n            }\r\n        })\r\n    }\r\n\r\n    private initState() {\r\n        this.lastResult = null;\r\n        this.settings = <WindcaveSettings>{};\r\n        this.merchantReceipt = null;\r\n        this.merchantReceiptWidth = null;\r\n        this.lastStatus = null;\r\n        this.isPolling = false;\r\n        this.currentRef = '';\r\n        if (!(this.responseObservable?.closed ?? true)) this.responseObservable.complete();\r\n        this.responseObservable = new Subject<InitialTransactionResponse>();\r\n        this.progressDialog = new ProgressDialog(this.gettextCatalog, this.$timeout, this.helperService, this.parentScope, this.gettextCatalog.getString('Windcave payment'));\r\n        this.deferred = this.$q.defer<IResponse>();\r\n    }\r\n\r\n    private destroy() {\r\n        this.settings = <WindcaveSettings>{};\r\n        this.progressDialog?.destroy();\r\n        if (!(this.polling?.closed ?? true)) this.polling?.unsubscribe();\r\n        this.cancelPolling?.complete();\r\n        this.responseObservable?.complete();\r\n        this.responseObservable = null;\r\n        this.deferred = null;\r\n        this.merchantReceipt = null;\r\n        this.merchantReceiptWidth = null;\r\n    }\r\n\r\n    private checkStatus(response: InitialTransactionResponse): InitialTransactionResponse {\r\n        \r\n        const isStatusDefined = typeof response.StatusId !== 'undefined';\r\n\r\n        if (response.TxnType === 'UI') {\r\n            if (!this.isPolling) this.startPolling();\r\n            return null;\r\n        }\r\n\r\n        this.progressDialog?.showProgressDialog();\r\n\r\n        if (response.Complete != 1) {\r\n            this.updateTextAndButtons(response);\r\n            if (!this.isPolling) this.startPolling();\r\n            return null;\r\n        }\r\n\r\n        if (this.isPolling) {\r\n            this.cancelPolling.next();\r\n        }\r\n        if (response.Complete == 1 || isStatusDefined && response.StatusId === StatusId.TransactionCompleted) {\r\n            response.Complete = 1;\r\n            const res = this.processCompletedResponse(response as TransactionResponse);\r\n            if (res.result) {\r\n                this.lastResult = res;\r\n                if (!this.merchantReceipt && (response as TransactionResponse).Result?.AP == '1' && res.response.TransactionMetaData) {\r\n                    this.requestReceipt().subscribe( { complete: () => {\r\n                            res.response.TransactionMetaData.MerchantReceipt = this.merchantReceipt;\r\n                            res.response.TransactionMetaData.MerchantReceiptWidth = Number(this.merchantReceiptWidth);\r\n                            this.deferred.resolve(res);\r\n                        }});\r\n                } else {\r\n                    if (res.response.TransactionMetaData) {\r\n                        res.response.TransactionMetaData.MerchantReceipt = this.merchantReceipt;\r\n                        res.response.TransactionMetaData.MerchantReceiptWidth = this.merchantReceiptWidth;\r\n                    }\r\n                    this.deferred.resolve(res);\r\n                }\r\n                \r\n            } else {\r\n                this.deferred.reject(res);\r\n            }\r\n            \r\n            return response\r\n        }\r\n        else {\r\n            const receipt = (response as TransactionResponse).Rcpt;\r\n            if (receipt && typeof receipt === 'string' && receipt.indexOf('MERCHANT COPY') !== -1) { \r\n                this.merchantReceipt = receipt;\r\n                this.merchantReceiptWidth = Number((response as TransactionResponse).RcptW);\r\n                if (this.settings.printWindcaveReceipts) {\r\n                    this.printReceipt();\r\n                }\r\n            }\r\n            this.progressDialog.askQuestion({\r\n                Text: response.DL2 ? response.DL1 + '\\n' + response.DL2 : response.DL1,\r\n                Options: [\r\n                    { name: response.B1, value: response.B1 },\r\n                    { name: response.B2, value: response.B2 },\r\n                ]\r\n            });\r\n        }\r\n\r\n        return response;\r\n    }\r\n    \r\n    updateTextAndButtons(response: InitialTransactionResponse) {\r\n        const buttons = [];\r\n        if (response.B1) {\r\n            buttons.push({ name: response.B1, value: response.B1 });\r\n        }\r\n        if (response.B2) {\r\n            buttons.push({ name: response.B2 === 'CANCEL' ? this.gettextCatalog.getString('Cancel') : response.B2, value: response.B2 });\r\n        }\r\n        \r\n        if (response.DL1 || response.DL2 || buttons.length > 0) \r\n            this.progressDialog?.updateButtonsAndText(response.DL2 ? response.DL1 + '\\n' + response.DL2 : response.DL1, buttons);\r\n    }\r\n\r\n    getReceipt(transactionData: TransactionResponse, isMerchant: boolean) {\r\n        if (!this.configService.getCardPaymentSettings<WindcaveSettings>()?.printWindcaveReceipts) {\r\n            return null;\r\n        }\r\n        if (isMerchant) {\r\n            if (!transactionData.MerchantReceipt) return null;\r\n            const s = this.getReceiptAsHtml(transactionData.MerchantReceipt, transactionData.MerchantReceiptWidth);\r\n            return {\r\n                \r\n                MerchantReceipt: this.$sce.trustAsHtml(s)\r\n            };\r\n        }\r\n        else\r\n        {\r\n            if (!transactionData.Rcpt) return null;\r\n            const s = this.getReceiptAsHtml(transactionData.Rcpt, transactionData.RcptW);\r\n            return {\r\n                CustomerReceipt: this.$sce.trustAsHtml(s)\r\n            };\r\n        }\r\n    };\r\n\r\n    private printReceipt() {\r\n        const deferred = this.$q.defer();\r\n        try {\r\n            if (!this.merchantReceipt) {\r\n                deferred.resolve();\r\n                return deferred.promise;\r\n            }\r\n            this.printService.finishPrintCollectMode();\r\n            this.printService.printDataContainer = [{data: $(this.getReceiptAsHtml(this.merchantReceipt, this.merchantReceiptWidth))}];\r\n            return this.printService.printReceiptFromHTML()\r\n            .catch(err => console.log(err))\r\n            .finally(err => {\r\n                this.printService.resetPrintCollectMode();\r\n                deferred.resolve();\r\n                return deferred.promise;\r\n            });\r\n        } catch (e) {\r\n            console.log(e)\r\n        }\r\n      \r\n    }\r\n    \r\n    private requestReceipt() {\r\n        return this.call(this.toXML(\r\n            {\r\n                ...this.createRequest(),\r\n                TxnType: 'Receipt',\r\n                ReceiptType: '1',\r\n                TxnRef: this.currentRef,\r\n            }\r\n        )).pipe(timeout({ each:  1000 * 20}), tap(res => {\r\n            this.merchantReceipt = (<TransactionResponse>res).Rcpt;\r\n            this.merchantReceiptWidth = Number((res as TransactionResponse).RcptW);\r\n        }), take(1));\r\n    }\r\n\r\n    private answer(answer: string): void {\r\n        this.cancelPolling?.next();\r\n\r\n        if (answer === 'cancel')  {\r\n            if (this.lastResult) {\r\n                this.deferred.resolve(this.lastResult);\r\n            }\r\n            return this.returnError('Transaction cancelled');\r\n        }\r\n        \r\n        this.call(this.toXML(\r\n            {\r\n                ...this.createRequest(),\r\n                TxnType: 'UI',\r\n                TxnRef: this.currentRef,\r\n                UiType: 'Bn',\r\n                Name: answer,\r\n                Val: answer\r\n            }\r\n        )).pipe(take(1)).subscribe(this.subscribeObject);\r\n    }\r\n\r\n    private processCompletedResponse(response: TransactionResponse): IResponse {\r\n        console.log('completed: ');\r\n        console.log(response);\r\n        this.cancelPolling?.next();\r\n\r\n        const error = (err: string) => ({\r\n            result: false,\r\n            response: {\r\n                errorDescription: err\r\n            }\r\n        });\r\n        if (response.ReCo !== '00' && <any>response.ReCo !== 0 && response.ReCo !== '0' && response.ReCo !== undefined) {\r\n            return error(this.getDescriptionFromReCo(response.ReCo, response.DL1));\r\n        } else if (<any>response.Result?.AP !== 1) {\r\n            if (response.DL1) {\r\n                this.updateText(response);\r\n            }\r\n            return error(response.Result?.RT ? `${response.Result?.RT} (${response.Result.RC})` :  response.Result?.AC || response.Result?.RC);\r\n        } else {\r\n            if (response.DL1) {\r\n                this.updateText(response);\r\n            }\r\n            return {\r\n                result: true,\r\n                amount: response.Result.AmtA ? response.Result.AmtA / 100 : undefined,\r\n                response: {\r\n                    ServerTransactionID: response.Result.TR,\r\n                    TransactionMetaData: response,\r\n                }\r\n            \r\n            }\r\n        }\r\n    }\r\n\r\n    private updateText(response: InitialTransactionResponse) {\r\n        this.progressDialog.updateText(response.DL2 ? response.DL1 + '\\n' + response.DL2 : response.DL1);\r\n    }\r\n\r\n\r\n    private postTransaction(options: IMakePaymentOptions): Observable<InitialTransactionResponse> {\r\n        this.currentRef = options.Sale.ID;\r\n        return this.call(this.toXML(\r\n            <TransactionData>{\r\n                ...this.createRequest(),\r\n                TxnType: 'Purchase',\r\n                TxnRef: options.Sale.ID,\r\n                Amount: options.amount,\r\n                Cur: options.currency,\r\n                MRef: options.OrderNumber,\r\n            }\r\n        ));\r\n    }\r\n\r\n    private postRefund(amount : number, ref: string, id: string, currency: string): Observable<InitialTransactionResponse> {\r\n        this.currentRef = ref\r\n        return this.call(this.toXML(\r\n            <TransactionData>{\r\n                ...this.createRequest(),\r\n                TxnType: 'Refund',\r\n                TxnRef: ref,\r\n                Amount: amount,\r\n                Cur: currency,\r\n                DpsTxnRef: id,\r\n            }\r\n        ));\r\n    }\r\n\r\n    private statusCall(ref: string): Observable<InitialTransactionResponse> {\r\n        return this.call(this.toXML(\r\n            {\r\n                ...this.createRequest(),\r\n                TxnType: 'Status',\r\n                TxnRef: ref\r\n            }\r\n        ));\r\n    }\r\n\r\n    private call<T extends InitialTransactionResponse>(data: string) {\r\n\r\n        const processBtn = (btn: any): string => {\r\n            if (typeof btn === 'object') {\r\n                return btn.$?.en == '1' && btn._ ? btn._ : undefined;\r\n            }\r\n            return btn;\r\n        };\r\n\r\n        const headers = { 'Content-Type': 'text/xml', 'Accept': 'text/xml'};\r\n        return from<Promise<IHttpResponse<string>>>(\r\n            <Promise<IHttpResponse<string>>>this.$http.post<string>(this.configService.connectionURL + '/POSCorsProxy', \r\n                data,\r\n                { \r\n                    headers: new Headers({'packed-request-headers': encodeURIComponent(JSON.stringify(headers))}),\r\n                    responseType: 'text',\r\n                    params: { initialUrl: encodeURIComponent(this.url) },\r\n                }\r\n            )\r\n        ).pipe(\r\n            switchMap(res => {\r\n                var parser = new Parser({ valueProcessors: [parseNumbers], explicitArray: false });\r\n                return from<Promise<any>>(parser.parseStringPromise(res.data))\r\n                    .pipe(\r\n                        map((obj: {Scr: InitialTransactionResponse}) => {\r\n                            if (obj.Scr.StatusId !== undefined) {\r\n                                this.lastStatus = obj.Scr.StatusId;\r\n                            }\r\n                            obj.Scr.B1 = processBtn(obj.Scr.B1);\r\n                            obj.Scr.B2 = processBtn(obj.Scr.B2);\r\n                            if (obj.Scr.ReCo && obj.Scr.ReCo !== '00' && (<number><unknown>obj.Scr.ReCo) !== 0) {\r\n                                throw new Error(this.getDescriptionFromReCo(obj.Scr.ReCo, obj.Scr.DL2 ? obj.Scr.DL1 + ' ' + obj.Scr.DL2 : obj.Scr.DL1));\r\n                            }\r\n                            return obj.Scr as T;\r\n                        })\r\n                    );\r\n            }),\r\n            catchError(err => {\r\n                return throwError(() => err);\r\n            })\r\n        ).pipe(take(1));\r\n    }\r\n\r\n    private toXML(obj: any, action: string = 'doScrHIT') {\r\n        const builder = new Builder();\r\n\r\n        return builder.buildObject({\r\n            Scr: {\r\n                $: {\r\n                    action: action,\r\n                    user: (<any>this.configService).windcaveUsername,\r\n                    key: (<any>this.configService).windcaveKey,\r\n                },\r\n                ...obj\r\n            }\r\n        });\r\n    }\r\n\r\n    private createRequest(): BaseTransactionData {\r\n        return {\r\n            Station: (<any>this.configService).windcaveStation,\r\n            DeviceId: this.configService.lastRegistry?.length > 32 ? this.configService.lastRegistry.substr(0, 32) : this.configService.lastRegistry || 'default register',\r\n            PosName: this.POSName,\r\n            PosVersion: this.POSVersion,\r\n            VendorId: this.POSVendorId,\r\n        };\r\n\r\n    }\r\n\r\n    validate() {\r\n        if (!(<any>this.configService).windcaveUsername || !(<any>this.configService).windcaveKey) {\r\n            throw new Error(this.gettextCatalog.getString('Windcave credentials have not been configured.'));\r\n        }\r\n        if (!(<any>this.configService).windcaveStation) {\r\n            throw new Error(this.gettextCatalog.getString('Please configure Windcave station in the register settings'));\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private getDescriptionFromReCo(code: string, text: string): string {\r\n        switch (code) {\r\n            case 'P4':\r\n                return 'PosDeviceId is greater than 32 characters';\r\n            case 'P5':\r\n                return 'PosDeviceId not matched';\r\n            case 'P7':\r\n                return 'Invalid transaction type';\r\n            case 'P8':\r\n                return 'Authentication error';\r\n            case 'P9':\r\n                return 'Authentication error—Station Id mismatch';\r\n            case 'PA':\r\n                return 'Status request error';\r\n            case 'PB':\r\n            case 'PC':\r\n                return 'SCRHIT Init Session Error';\r\n            case 'PC':\r\n                return 'Existing Txn In progress — previous transaction was left in an incomplete state, ensure sending status request of the previous transaction and its reference and status response is handled accordingly.';\r\n            case 'PD':\r\n            case 'PE':\r\n            case 'PF':\r\n                return 'SCRHIT Transmit Error — network connection issue, ensure the terminal has performed a Logon to the Windcave HOST.';\r\n            case 'PG':\r\n                return 'Init Wait Timeout';\r\n            case 'PJ':\r\n                return 'TxnRef not matched';\r\n            case 'PK':\r\n                return 'SCRHIT not enabled';\r\n            case 'PL':\r\n                return 'Invalid input parameter';\r\n            case 'PM':\r\n                return 'Txn type not allowed';\r\n            case 'PO':\r\n                return 'Invalid Station Id';\r\n            case 'TQ':\r\n                return 'HIT Start Failed — connection lost, ensure the terminal has performed a Logon to the Windcave HOST.';\r\n            default:\r\n                if (text) return text;\r\n                return 'Unknown error: ' + code;\r\n        }\r\n    }\r\n\r\n}\r\n\r\n\r\n(<any>angular).module('services')\r\n    .service('windcaveProvider', WindcaveProviderService.$inject);\r\n\r\nexport default 'windcaveProvider';","import { HelperService, IConfigService } from \"../Typings/Typings\";\r\nimport { IMessageData, ISecondScreenControllerScope } from \"../Controllers/second-screen.controller\";\r\nimport { IAngularStatic } from 'angular';\r\nimport { IReceiptSaleModel, ISale } from \"../Interfaces\";\r\n\r\ndeclare var $: any;\r\ndeclare const angular: IAngularStatic;\r\ndeclare var buildConfiguration: any;\r\ndeclare var ExternalScreen: any;\r\n\r\nexport const SecondScreenStates = {\r\n    Off: 'off',\r\n    Sale: 'sale',\r\n    Payment: 'payment'\r\n}\r\n\r\ntype SecondScreenStatesType = 'off' | 'sale' | 'payment';\r\n\r\ninterface ISecondTerminalImplementation {\r\n    processPartialReceipt(scope: any, state: SecondScreenStatesType): Promise<boolean>;\r\n    init(): Promise<boolean>;\r\n}\r\n\r\nexport class SecondTerminalService {\r\n    static $inject = ['$q', 'secondTerminalServiceImplementation', SecondTerminalService];\r\n\r\n    private isOff = true;\r\n\r\n    constructor(\r\n        private $q: any,\r\n        private implementation: ISecondTerminalImplementation\r\n    ) { }\r\n\r\n\r\n    presentationIsAvailable = false;\r\n\r\n    init() {\r\n        this.presentationIsAvailable = true;\r\n        try {\r\n            this.implementation.init();\r\n        } catch (err) {\r\n            console.log(err);\r\n        }\r\n    }\r\n\r\n    /*showBackHTML(scope, el, mode) {\r\n\r\n        if (this.presentationIsAvailable) {\r\n\r\n            if (el.length == 0)\r\n                return this.init();\r\n\r\n            switch (mode) {\r\n                case 'partialCheck':\r\n                    return this.processPartialReceipt(scope);\r\n                default:\r\n                    //return this.processReceiptHTML(el);\r\n                    break;\r\n            }\r\n        }\r\n        else {\r\n            var deffered = this.$q.defer();\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n        }\r\n    }*/\r\n\r\n    update(scope: any, state: SecondScreenStatesType) {\r\n        try {\r\n            // do not re-render each time if it is already off\r\n            if (this.presentationIsAvailable && (state !== SecondScreenStates.Off || !this.isOff)) {\r\n                return this.implementation.processPartialReceipt(scope, state)\r\n                    .then((res) => {\r\n                        this.isOff = state == SecondScreenStates.Off;\r\n                        return res;\r\n                    });\r\n            }\r\n            else {\r\n                const deffered = this.$q.defer();\r\n                deffered.resolve(null);\r\n                return deffered.promise;\r\n            }\r\n        }\r\n        catch (ex) {\r\n            console.log(ex);\r\n            const deffered = this.$q.defer();\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n        }\r\n    }\r\n\r\n    /*processReceiptHTML(el: any) {\r\n\r\n        const el2 = el.clone();\r\n        el2.find('div[template]').removeAttr('template');\r\n        const s = el2.html();\r\n\r\n        const itemTpl = $('script[backmonitor-template]').text();\r\n\r\n        let html = this.replace(itemTpl, '{{s}}', s);\r\n        html = this.replace(html, '{{t}}', 'receipt ' + this.uuid2.newguid());\r\n\r\n        return this.setBackHTML(html, null);\r\n    }*/\r\n}\r\n\r\nabstract class BaseMobileImplementation implements ISecondTerminalImplementation {\r\n\r\n    protected constructor(protected $timeout: any) {\r\n    }\r\n\r\n    abstract setBackHTML(html: string, scope: any): Promise<boolean>;\r\n\r\n    private replace(str, search, value) {\r\n        return str.replace(search, function () { return value; });\r\n    }\r\n\r\n    private replaceAll(str, mapObj){\r\n        var re = new RegExp(Object.keys(mapObj).map(s => `(\\{\\{${s}\\}\\})`).join(\"|\"),\"g\");\r\n    \r\n        return str.replace(re, function(matched){\r\n            return mapObj[matched.substring(2, matched.length - 2)];\r\n        });\r\n    }\r\n\r\n    async processPartialReceipt(scope: any, state: SecondScreenStatesType): Promise<boolean> {\r\n        const el = $('.receipt-template');\r\n        if (el.length == 0) {\r\n            await this.init();\r\n        }\r\n\r\n        // to trigger change detection and rerender in .receipt-template\r\n        return this.$timeout(() => scope.secondScreenState = state).then(() => this.$timeout(() => {\r\n\r\n            console.log(scope.lastSaleType);\r\n            const itemTpl = $('[backmonitor-resume]').html();\r\n\r\n            let container = $('script[backmonitor-container]').text();\r\n            container = this.replace(container, '{{t}}', 'receipt ' + Math.floor(Math.random() * (Number.MAX_SAFE_INTEGER)));\r\n\r\n            let html = this.replaceAll(container, {\r\n                backgroundColor: scope.backgroundColor,\r\n                designClass: scope.customizedUI ? 'advanced-design' : 'simple-design',\r\n                s: itemTpl\r\n            });\r\n            return this.setBackHTML(html, scope);\r\n        }));\r\n    }\r\n\r\n    init() {\r\n        const html = \"<!DOCTYPE html>\\n\" +\r\n            \"<html lang=\\\"en\\\">\\n\" +\r\n            \"  <head>\\n\" +\r\n            \"    <meta charset=\\\"utf-8\\\">\\n\" +\r\n            \"    <title>default page</title>\\n\" +\r\n            \"  </head>\\n\" +\r\n            \"  <body style=\\\"background-color:black;color:white;\\\">\\n\" +\r\n            \"  </body>\\n\" +\r\n            \"</html>\";\r\n\r\n        return this.setBackHTML(html, {});\r\n    }\r\n}\r\n\r\nclass SecondTerminalServiceIOS extends BaseMobileImplementation {\r\n    static $inject = ['$q', '$timeout', SecondTerminalServiceIOS];\r\n\r\n    constructor(private $q: any, $timeout: any) {\r\n        super($timeout);\r\n    }\r\n\r\n    setBackHTML(html: string, scope: any) {\r\n        const deferred = this.$q.defer();\r\n        ExternalScreen.checkAvailability(function (isAvailable) {\r\n            if (isAvailable) {\r\n                ExternalScreen.loadHTML(html);\r\n                deferred.resolve(true);\r\n            }\r\n\r\n            deferred.resolve(false);\r\n        })\r\n        console.log('ios');\r\n\r\n        return deferred.promise;\r\n    }\r\n}\r\n\r\nexport class SecondTerminalServiceWeb implements ISecondTerminalImplementation {\r\n    static ChannelName = \"secondScreen_channel\";\r\n    static $inject = ['configService' , SecondTerminalServiceWeb];\r\n\r\n    constructor (private configService: IConfigService) {\r\n    }\r\n\r\n    init(): Promise<boolean> {\r\n        return Promise.resolve(true);\r\n    }\r\n\r\n    processPartialReceipt(scope: any, state: SecondScreenStatesType): Promise<boolean> {\r\n        try {\r\n            // @ts-ignore\r\n            const channel = new BroadcastChannel(SecondTerminalServiceWeb.ChannelName);\r\n            channel.postMessage(<IMessageData>{ scope: this.cloneScope(scope), secondScreenState: state })\r\n\r\n            channel.close();\r\n            return Promise.resolve(true);\r\n        } catch (e) {\r\n            return Promise.reject(e);\r\n        }\r\n    }\r\n\r\n    async openSecondScreenPage() {\r\n        if (!this.configService.isSite) {\r\n            return;\r\n        }\r\n        const isRelease = buildConfiguration.configuration === \"Release\" || buildConfiguration.configuration === \"QA\";\r\n        const location = (<any>window).location;\r\n        const url = isRelease ? `${location.protocol}//${location.host}/#/secondScreen` : `${location.protocol}//${location.host}/index.html#/secondScreen`;\r\n        let secondScreenInfo: {left: number, top: number, width: number, height: number} = null;\r\n\r\n        if ('getScreenDetails' in window) {\r\n            try {\r\n                const screenDetails = await (<any>window).getScreenDetails();\r\n                if (screenDetails.screens.length > 1) {\r\n                    for (const screen of screenDetails.screens) {\r\n                        // find first external screen\r\n                        if (screen !== screenDetails.currentScreen) {\r\n                            secondScreenInfo = {\r\n                                left: screen.left,\r\n                                top: screen.top,\r\n                                height: screen.height,\r\n                                width: screen.width\r\n                            };\r\n                        }\r\n                    }\r\n                }\r\n            } catch (ex) {\r\n                console.log(ex);\r\n            }\r\n        }\r\n\r\n        let options = 'location=no,status=no,fullscreen=yes';\r\n        if (secondScreenInfo) {\r\n            for (const key in secondScreenInfo) {\r\n                options += `,${key}=${secondScreenInfo[key]}`;\r\n            }\r\n        }\r\n        (<any>window).open(url, '_blank', options);\r\n    }\r\n\r\n    private cloneScope(scope: Partial<{currentSale: ISale, receiptSaleModel: IReceiptSaleModel, lastSaleType: string, currency_symbol: string }>) {\r\n        return scope ? <Partial<ISecondScreenControllerScope>>{\r\n                //  moment dates can't be serialized\r\n                currentSale: {...scope.currentSale, Payments: scope.currentSale.Payments?.map(p => ({...p, Date: <any>p.Date?.toString()}))},\r\n                lastSaleType: scope.lastSaleType,\r\n                receiptSaleModel: {...scope.receiptSaleModel},\r\n                currency_symbol: scope.currency_symbol,\r\n                customizedUI: this.configService.customizedSecondScreenUI,\r\n                logoUrl: this.configService.secondScreenLogoUrl,\r\n                backgroundColor: this.configService.secondScreenBackground,\r\n                currencyCulture: this.configService.currencyCulture\r\n            }\r\n            : null;\r\n    }\r\n}\r\n\r\nclass SecondTerminalServiceAndroid extends BaseMobileImplementation {\r\n    static $inject = ['$q', 'helperService', 'gettextCatalog', '$timeout', SecondTerminalServiceAndroid];\r\n\r\n    constructor(private $q: any, private helperService: HelperService, private gettextCatalog: any, $timeout: any) {\r\n        super($timeout);\r\n    }\r\n\r\n    setBackHTML(html: string, scope: any) {\r\n        var deffered = this.$q.defer();\r\n\r\n\r\n        (<any>window).plugins.starPrinter.setBackDisplay(html, (err, result) => {\r\n            if (err) {\r\n                if (err === \"NO OVERLAY PERMISSION\") {\r\n                    this.askForPermission().then(() => deffered.resolve()).catch((err) => {\r\n                        console.log(err)\r\n                        deffered.resolve(err);\r\n                    });\r\n                    return;\r\n                } else {\r\n                    console.log(\"setBackDisplay failed\");\r\n                    deffered.resolve(false);\r\n                }\r\n            }\r\n            else {\r\n                console.log(\"setBackDisplay success: \" + JSON.stringify(result));\r\n                deffered.resolve(result.IsPresentationEnabled);\r\n            }\r\n\r\n            deffered.resolve(null);\r\n        });\r\n\r\n\r\n        return deffered.promise;\r\n    }\r\n\r\n    askForPermission(): Promise<void> {\r\n        const cacheKey = 'SkipOverlayPermissionWarning';\r\n        const message = this.gettextCatalog.getString(\"You need to give \\\"Draw over other apps\\\" permission to display content on second screen.\");\r\n        const skipwarn = localStorage.getItem(cacheKey) === 'true';\r\n        var deffered = this.$q.defer();\r\n\r\n        if (!skipwarn) {\r\n            this.helperService.showCustomDialog3(this.gettextCatalog.getString('Warning'), message,\r\n                this.gettextCatalog.getString('Go to settings'), '', false, true, skipwarn,\r\n                (skip) => {\r\n                    localStorage.setItem(cacheKey, skip);\r\n                    (<any>window).plugins.starPrinter.askOverlayPermission()\r\n                });\r\n        }\r\n\r\n        return deffered.promise;\r\n    }\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('secondTerminalService', SecondTerminalService.$inject);\r\n\r\n(<any>angular).module('services')\r\n    .service('secondTerminalServiceAndroid', SecondTerminalServiceAndroid.$inject);\r\n(<any>angular).module('services')\r\n    .service('secondTerminalServiceIOS', SecondTerminalServiceIOS.$inject);\r\n(<any>angular).module('services')\r\n    .service('secondTerminalServiceWeb', SecondTerminalServiceWeb.$inject);\r\n\r\n(<any>angular).module('services')\r\n    .service('secondTerminalServiceImplementation', ['configService', 'secondTerminalServiceWeb', 'secondTerminalServiceAndroid', 'secondTerminalServiceIOS',\r\n        function (configService, secondTerminalServiceWeb, secondTerminalServiceAndroid, secondTerminalServiceIOS) {\r\n            if (configService.isSite || ((<any>window).navigator.platform && (<any>window).navigator.platform.toLowerCase().startsWith('win'))) {\r\n                return secondTerminalServiceWeb;\r\n            }\r\n            else if (buildConfiguration.platform == 'android') {\r\n                return secondTerminalServiceAndroid;\r\n            }\r\n\r\n            return secondTerminalServiceIOS;\r\n        }]);","import { IAngularStatic } from \"angular\";\r\nimport { IConfigService } from \"../Typings/Typings\";\r\nimport { DeviceInfoService } from \"./device-info.service\";\r\n\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\n\r\nexport class ServerConnectionService {\r\n\r\n    static $inject = ['$http', 'configService', 'deviceInfo', '$location', ServerConnectionService];\r\n\r\n    constructor(private $http: ng.IHttpService, private configService: IConfigService, private deviceInfo: DeviceInfoService, private $location: ng.ILocationService) {\r\n    }\r\n\r\n    public async isCertificateError(): Promise<boolean> {\r\n        if (!this.deviceInfo.isAndroid || window.isSite) return Promise.resolve(false);\r\n\r\n        try {\r\n            const version = this.deviceInfo.deviceInfo?.version;\r\n            if (!version) return Promise.resolve(false);\r\n            const majorVersion = Number.parseInt(version.split('.')[0]);\r\n            if (majorVersion >= 10) return Promise.resolve(false);\r\n        } catch (ex) {\r\n            return Promise.resolve(false);\r\n        }\r\n\r\n        $.blockUI();\r\n        const req = this.$http({\r\n            method: 'GET',\r\n            url: this.configService.connectionURL + '/PosPing',\r\n            // @ts-ignore\r\n            byPassCancellation: true,\r\n            // @ts-ignore\r\n            bypassRetry: true\r\n        });\r\n\r\n        return req\r\n            .then(() => Promise.resolve(false))\r\n            .catch((error) => {\r\n                if (this.configService.isQAMode) {\r\n                    console.log(JSON.stringify(error))\r\n                }\r\n                if (error.status === -1) {\r\n                    return Promise.resolve(true);\r\n                }\r\n\r\n                return Promise.resolve(false);\r\n            })\r\n            .finally(() => $.unblockUI());\r\n    }\r\n\r\n    public async showCertificateErrorPage(): Promise<boolean> {\r\n        const isError = await this.isCertificateError();\r\n\r\n        if (isError) {\r\n            this.$location.path('/certificate-error');\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('serverConnectionService', ServerConnectionService.$inject);\r\n\r\nexport default 'serverConnectionService';","import { IAngularStatic } from 'angular';\r\nimport { HelperService, IConfigService, SaleService } from '../Typings/Typings';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\ninterface ISurcharge {\r\n    SurchargeID: string;\r\n    Value: number;\r\n    IsActive: boolean;\r\n    Name: string;\r\n    Type: string;\r\n    RefundSurcharge: boolean | null;\r\n\r\n    // set manually\r\n    CalculatedValue: number;\r\n    Tax: number;\r\n    CalculatedValueWithTax: number;\r\n}\r\n\r\ninterface ISurchargeData {\r\n        paymentProcessorID: string;\r\n        isCustom: boolean;\r\n        surcharges: ISurcharge[];\r\n        realSum: number;\r\n        tax: any;\r\n        taxInclucive: boolean\r\n}\r\n\r\nclass SurchargeService {\r\n    static $inject = ['helperService', 'saleService', SurchargeService];\r\n    constructor(\r\n        private helperService: HelperService,\r\n        private saleService: SaleService\r\n    ) {\r\n    }\r\n\r\n    calculateSurcharges(data: ISurchargeData) {\r\n        let surcharges = [];\r\n        for (var i = 0; i < data.surcharges.length; i++) {\r\n            var item = angular.copy(data.surcharges[i]);\r\n            if (item.Type == 'percentage') {\r\n                item.CalculatedValue = this.helperService.DEARRound(data.realSum * item.Value / 100, 2);\r\n            }\r\n            else {\r\n                item.CalculatedValue = this.helperService.DEARRound(item.Value, 2);\r\n            }\r\n\r\n            var surchargeTax = JSON.parse(data.tax);\r\n            item.Tax = this.helperService.DEARRound(this.saleService.calculateTax(surchargeTax, item.CalculatedValue, data.taxInclucive), 2);\r\n\r\n            if (data.taxInclucive) {\r\n                item.CalculatedValueWithTax = this.helperService.DEARRound(item.CalculatedValue, 6);                        \r\n            }\r\n            else {\r\n                item.CalculatedValueWithTax = this.helperService.DEARRound(item.CalculatedValue + item.Tax, 6);\r\n            }\r\n            surcharges.push(item);\r\n        }\r\n        return surcharges;\r\n    }\r\n\r\n    extractSurcharge(amount: number, data: ISurchargeData) {\r\n        let surcharges = [];\r\n        for (var i = 0; i < data.surcharges.length; i++) {\r\n            var item = angular.copy(data.surcharges[i]);\r\n            if (item.Type == 'percentage') {\r\n                item.CalculatedValue = this.helperService.DEARRound(data.realSum * item.Value / 100, 2);\r\n            }\r\n            else {\r\n                item.CalculatedValue = this.helperService.DEARRound(item.Value, 2);\r\n            }\r\n\r\n            var surchargeTax = JSON.parse(data.tax);\r\n            item.Tax = this.helperService.DEARRound(this.saleService.calculateTax(surchargeTax, item.CalculatedValue, data.taxInclucive), 2);\r\n\r\n            if (data.taxInclucive) {\r\n                item.CalculatedValueWithTax = this.helperService.DEARRound(item.CalculatedValue, 6);                        \r\n            }\r\n            else {\r\n                item.CalculatedValueWithTax = this.helperService.DEARRound(item.CalculatedValue + item.Tax, 6);\r\n            }\r\n            surcharges.push(item);\r\n        }\r\n        return surcharges;\r\n    }\r\n\r\n\r\n    reCalculateSurchargeForPartiallyApproved(surcharge: ISurcharge, realSum: number, taxInclucive: boolean, tax: any): ISurcharge {\r\n        const surchargeTax = JSON.parse(tax);\r\n        let surchargeWithTax = 0;\r\n        let surchargeValue = 0;\r\n        let taxValue = 0;\r\n        if (surcharge.Type === 'percentage') {\r\n            const taxPercent = (<any>this.saleService).getTaxPercent(surchargeTax, taxInclucive);\r\n            const surchargePercentWithTax =  surcharge.Value + (surcharge.Value * taxPercent / 100);\r\n            surchargeWithTax = this.helperService.DEARRound(realSum * surchargePercentWithTax / 100, 6);\r\n            taxValue = this.helperService.DEARRound(surchargeWithTax * taxPercent / 100, 2);\r\n            surchargeValue = this.helperService.DEARRound(surchargeWithTax - (!taxInclucive ? taxValue : 0), 6);\r\n        } else {\r\n            surchargeValue = this.helperService.DEARRound(surcharge.Value, 2);\r\n            surchargeWithTax = surchargeValue;\r\n            taxValue = this.helperService.DEARRound(this.saleService.calculateTax(surchargeTax, surchargeValue, taxInclucive), 2);\r\n            if (!taxInclucive) {\r\n                surchargeWithTax = this.helperService.DEARRound(surchargeValue + tax, 6);\r\n            }\r\n        }\r\n\r\n        return <ISurcharge>{\r\n            CalculatedValue: surchargeValue,\r\n            Tax: taxValue,\r\n            CalculatedValueWithTax: surchargeWithTax,\r\n        }\r\n    }        \r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('surchargeService', SurchargeService.$inject);","import { CardPayService } from \"../../src/PosScripts/cardPayService\";\r\nimport { CalculatorService } from \"../CalculatorService\";\r\nimport { IGroupedSale, ISale, IOutletInfo } from \"../Interfaces\";\r\n\r\n\r\nexport interface IExternalServices {\r\n    webOnlyProvider: any;\r\n    loyaltyService: any;\r\n    saleService: SaleService;\r\n    receiptService: ReceiptService;\r\n    cardPayService: CardPayService;\r\n    barcodeService: BarcodeService;\r\n    gettextCatalog: any;\r\n    constantService: any;\r\n    uuid2Service: any;\r\n    configService: IConfigService;\r\n    helperService: HelperService;\r\n    outletService: any;\r\n}\r\n\r\ndeclare global {\r\n    var ext: IExternalServices;\r\n    var isSite: boolean;\r\n}\r\n\r\n\r\n\r\n    export interface ReceiptService {\r\n        fillVantivTransactionData(transactionData: any, currency: any): any;\r\n    }\r\n\r\n    /*export interface CardPayService {\r\n        detectProvider(metaData: string): string;\r\n        addSumToCardPayment(arr: any, transactionID: string, clientTransactionID: string, amount: number, transMetadata?: string): void;\r\n        combineKey(transactionID: string, clientTransactionID: string): string;\r\n        removeFullyUsedCards(crd: any): number;\r\n        sumAllCardPayments(any, includeSurchargeRefund: boolean): number;\r\n        createCardPaymentMap(groupedSale: IGroupedSale): void;\r\n    }*/\r\n\r\n    export interface BarcodeService {\r\n        initForReceipt(receiptSaleModel: any);\r\n    }\r\n\r\n    export interface SaleService {\r\n        fillTyroTransactionData(transactionData: any, isMerchant: boolean): any;\r\n        fillLinklyPaymentTransactionData(transactionData: any, isMerchant: boolean): any;\r\n        calculateTax(taxObject, total: number, isTaxInclusive: boolean): number;\r\n    }\r\n\r\n    export interface HelperService {\r\n        closeDialog(id: string): unknown;\r\n        showDialog(id: string): unknown;\r\n        DEARRound(value: number, places: number): number;\r\n        toDateFromDatepickerParameter(str: string, timeStr?: string, noReplace?: boolean): string;\r\n        showCustomDialog3(caption: string, text: string, okButtonName?: string,\r\n            cancelButtonName?: string, showCancel?: boolean, showCheckbox?: boolean,\r\n            checkboxValue?: any, checkBoxCallback?: any): void;\r\n        applyCurrency(number: any, currency: any): string;\r\n        getFormatedDate(date: any): string;\r\n        addValues(a: any, b: any): number;\r\n        mapToList(map: any): Array<any>;\r\n        roundCash(amount: number): number;\r\n        storeCurrentSale(sale: ISale, scope?: any): void;\r\n        formatTime(v: number): string;\r\n        toDateFromDatepickerDirect(dtStr: string): string;\r\n        toDateFromDatepicker(dtStr: string): string;\r\n        convertToDateFromDatepicker(dtStr: string): any;\r\n        toDateFromDatepickerDirectNoZone(dtStr: string): string;\r\n        getFormatedLocalDateTime(dt: string): { date: string, time: number };\r\n        getFormatedDateAsIs(dt: Date): string;\r\n        getFormatedDateOnlyAsIs(dt: Date): string;\r\n        getSaleQueue(): any[];\r\n        storeSaleQueue(queue: any[]);\r\n        guidToFlatString(guid: string): string;\r\n    };\r\n\r\n\r\n    export interface IConfiguration {\r\n        taxCalculationMethod: string;\r\n        taxInclucive: any;\r\n        allowNewCalculations?: boolean;\r\n        applyCustomerDiscountAfterOtherDiscounts: boolean;\r\n        ignoreCustomerTaxRule: boolean;\r\n        enableLoyalty: boolean;\r\n        useCustomerPriceTier: boolean;\r\n        deliveryTimeInterval: number;\r\n        deliveryTemplateID: string;\r\n        deliveryNumberPerDay: number;\r\n        tenantTaxRule: string;\r\n        loyaltyLionToken: string;\r\n\r\n        lastUserName: string;\r\n        lastDisplayUserName: string;\r\n\r\n        isClover: boolean;\r\n        useWindcave: boolean;\r\n        useLinkly: boolean;\r\n        usePaymentSense: boolean;\r\n        useTriPOS: boolean;\r\n        useTyro: boolean;\r\n        CanSaleRep: boolean;\r\n    }\r\n\r\n    export interface IOutletConfiguration {\r\n        lastOutletTax: string;\r\n        lastOutlet: string;\r\n        lastOutletID: string;\r\n        lastECSMappingOutletID: string;\r\n\r\n        customizedSecondScreenUI: boolean;\r\n        secondScreenBackground: string;\r\n        secondScreenLogoUrl: string;\r\n    }\r\n\r\n    export interface IRegistryConfiguration {\r\n        lastRegistry: string;\r\n        lastRegistryID: string;\r\n        registryPrefix: string;\r\n        registrySuffix: string;\r\n        registrySalesID: string;\r\n    }\r\n\r\n    export interface IGetTextCatalog {\r\n        getString(s: string, params?: {}): string;\r\n    }\r\n\r\n    export interface IUUID2Service {\r\n        newguid(): string;\r\n    }\r\n   \r\n\r\n    export interface IConfigService extends IConfiguration, IOutletConfiguration, IRegistryConfiguration {\r\n        isQAMode: boolean;\r\n        currencyCulture: string;\r\n        lastOutletInfo: IOutletInfo;\r\n        applicationID: string;\r\n        currency: string;\r\n        userName: string;\r\n        isSite: boolean;\r\n        isMobile: boolean;\r\n        connectionURL: string;\r\n        getCardPaymentSettings<T extends object>(): T;\r\n    }\r\n\r\n    export declare var configService: IConfigService;\r\n\r\n    export declare var uuid2Service: IUUID2Service;\r\n\r\n    export declare var constantService: {\r\n        newGuid: string;\r\n    }\r\n\r\n    export declare var gettextCatalog: IGetTextCatalog;\r\n\r\n    export declare var loyaltyService: {\r\n        loyaltyEnabled: boolean;\r\n    }\r\n\r\n    export declare var webOnlyProvider: {\r\n        loadDeliveries(params: any): Promise<any>;\r\n        loadDelivery(params: any): Promise<any>;\r\n        loadCalendars(params: any): Promise<any>;\r\n        loadProductsAvailableForDelivery(posOrderID: string): Promise<any>;\r\n        CreateDelivery(deliveryID: string, params: any): Promise<any>;\r\n        UpdateDelivery(deliveryID: string, params: any): Promise<any>;\r\n        UpdateDeliveryTaskStatus(deliveryTaskID: string, locationID: string, status: string): Promise<any>;\r\n    }\r\n\r\n    export type LocalDBProvider = {\r\n        removeSales(posName: string, statusID?: string, exeptStatusID?: string): PromiseLike<any>;\r\n        removeSale(saleID: string, statusID: string, operationID: string): PromiseLike<any>;\r\n        loadOfflineSalesCount(posName: string, saleID: string, statusID: string, exeptStatusID: string): PromiseLike<number>;\r\n        loadOfflineSalesErrorHistory(posName: string) : PromiseLike<any[]>\r\n    }\r\n\r\n    export type JsStoreProvider = {\r\n        removeSale(saleID: string, statusID: string, operationID: string): PromiseLike<any>;\r\n        loadOfflineSalesErrorHistory(posName: string) : PromiseLike<any[]>\r\n    }\r\n\r\n\r\n// helper function for js like cordova app initialization\r\nconst initializeCalculator = (helperService: any, configService: any, uuid2: any, constantService: any,\r\n    gettextCatalog: any, barodeService: any, cardPayService: any, receiptService: any, saleService: any,\r\n    loyaltyService: any, webOnlyProvider: any, outletService: any) => {\r\n    if (typeof ext === 'undefined') {\r\n        const ext = <IExternalServices>{};\r\n        window.ext = ext;\r\n    }\r\n    // @ts-ignore\r\n    if (typeof pc === 'undefined') {\r\n        //@ts-ignore\r\n        window.pc = {};\r\n    }\r\n    ext.helperService = helperService;\r\n    ext.configService = configService;\r\n    ext.uuid2Service = uuid2;\r\n    ext.constantService = constantService;\r\n    ext.gettextCatalog = gettextCatalog;\r\n    ext.barcodeService = barodeService;\r\n    ext.cardPayService = cardPayService;\r\n    ext.receiptService = receiptService;\r\n    ext.saleService = saleService;\r\n    ext.loyaltyService = loyaltyService;\r\n    ext.webOnlyProvider = webOnlyProvider;\r\n    ext.outletService = outletService;\r\n    return CalculatorService.Instance;\r\n}\r\n\r\n\r\nexport default initializeCalculator;","import { IAngularStatic, IQService, IScope } from 'angular';\r\nimport { HelperService, IConfigService, IGetTextCatalog, IUUID2Service } from '../../TypePosScripts/Typings/Typings';\r\nimport { IPaymentProvider, IResponse } from '../../TypePosScripts/Services/payment-providers/Interfaces';\r\nimport windcaveProvider, { WindcaveProviderService } from '../../TypePosScripts/Services/payment-providers/windcave/windcave-provider.service';\r\n\r\n\r\ndeclare const angular: IAngularStatic;\r\ninterface IProvider {\r\n    provider: IPaymentProvider<any>;\r\n    key: string;\r\n    name: string;\r\n}\r\n\r\nexport class CardPayService {\r\n    delayDone: boolean = false;\r\n    cardTransactionInProgress: boolean = false;\r\n\r\n    static $inject = [\r\n        '$q', 'configService', 'gettextCatalog', 'cloverReaderProvider', 'squareReaderProvider',\r\n        'tyroReaderProvider', 'triPOSReaderProvider', 'linklyPaymentReaderProvider', 'paymentSenseReaderProvider', windcaveProvider,\r\n        'helperService', 'uuid2', 'printService', '$rootScope'\r\n    ];\r\n\r\n    constructor(\r\n        private $q: IQService,\r\n        private configService: IConfigService,\r\n        private gettextCatalog: IGetTextCatalog,\r\n        private cloverReaderProvider: IPaymentProvider<any>,\r\n        private squareReaderProvider: IPaymentProvider<any>,\r\n        private tyroReaderProvider: IPaymentProvider<any>,\r\n        private triPOSReaderProvider: IPaymentProvider<any>,\r\n        private linklyPaymentReaderProvider: IPaymentProvider<any>,\r\n        private paymentSenseReaderProvider: IPaymentProvider<any>,\r\n        private windcaveProvider: WindcaveProviderService,\r\n        private helperService: HelperService,\r\n        private uuid2: IUUID2Service,\r\n        private printService: any,\r\n        private $rootScope: any\r\n    ) {\r\n        (<any>this.$rootScope).cardTransactionInProgress = false;\r\n    }\r\n\r\n    setInProgress() {\r\n        (<any>this.$rootScope).cardTransactionInProgress = true;\r\n    }\r\n\r\n    getProviderMap(): IProvider[] {\r\n        let providerMap: IProvider[] = [];\r\n\r\n        // add below each new card reader provider\r\n        providerMap.push({ provider: null, key: 'emptyProvider', name: this.gettextCatalog.getString('Not integrated') });\r\n        if (!this.configService.isSite)\r\n            providerMap.push({ provider: this.squareReaderProvider, key: 'squareReaderProvider', name: this.gettextCatalog.getString('Square reader') });\r\n\r\n        if (this.configService.isClover)\r\n            providerMap.push({ provider: this.cloverReaderProvider, key: 'cloverReaderProvider', name: this.gettextCatalog.getString('Clover reader') });\r\n\r\n        if (this.configService.useTyro)\r\n            providerMap.push({ provider: this.tyroReaderProvider, key: 'tyroReaderProvider', name: this.gettextCatalog.getString('Tyro reader') });\r\n\r\n        if (this.configService.useTriPOS)\r\n            providerMap.push({ provider: this.triPOSReaderProvider, key: 'triPOSReaderProvider', name: this.gettextCatalog.getString('Vantiv triPOS reader') });\r\n\r\n        if (this.configService.usePaymentSense)\r\n            providerMap.push({ provider: this.paymentSenseReaderProvider, key: 'paymentSenseReaderProvider', name: this.gettextCatalog.getString('Paymentsense reader') });\r\n\r\n        if (this.configService.useLinkly)\r\n            providerMap.push({ provider: this.linklyPaymentReaderProvider, key: 'linklyPaymentReaderProvider', name: this.gettextCatalog.getString('Linkly reader') });\r\n\r\n        if (this.configService.useWindcave)\r\n            providerMap.push({ provider: this.windcaveProvider, key: 'windcaveProvider', name: this.gettextCatalog.getString('Windcave') });\r\n\r\n        return providerMap;\r\n    }\r\n\r\n    getAvailableProviders(): { key: string, name: string }[] {\r\n        let res: { key: string, name: string }[] = [];\r\n        this.getProviderMap().forEach(e => {\r\n            res.push({ key: e.key, name: e.name });\r\n        });\r\n\r\n        return res;\r\n    }\r\n\r\n    pair(scope: any, key: string, settings: any): Promise<any> {\r\n        let obj = this.selectProvider(scope, key);\r\n        return obj.provider.init(true, settings).finally(() => {\r\n            (<any>obj.provider).parentScope = null;\r\n        });\r\n    }\r\n\r\n    unpair(scope: any, key: string, settings: any): Promise<any> {\r\n        let obj = this.selectProvider(scope, key);\r\n        return obj.provider.unpair(settings).finally(() => {\r\n            (<any>obj.provider).parentScope = null;\r\n        });\r\n    }\r\n\r\n    cancelCurrentTransaction(scope, key) {\r\n        const obj = this.selectProvider(scope, key);\r\n\r\n        if (typeof (obj.provider.cancelCurrentTransaction) == 'function') {\r\n            return obj.provider.cancelCurrentTransaction().finally(() => {\r\n                (<any>obj.provider).parentScope = null;\r\n            });\r\n        }\r\n        else {\r\n            return this.$q.resolve().finally(() => {\r\n                (<any>obj.provider).parentScope = null;\r\n            });;\r\n        }\r\n    };\r\n\r\n    /*\r\n    Makes card payment using specified payment provider\r\n    callback - function to be called when payment is finished\r\n    can receive error as well\r\n    */\r\n    makePayment(payInfo, scope) {\r\n\r\n        try {\r\n            var providerCfg = this.selectProvider(scope);\r\n        } catch (e) {\r\n            var deferred1 = this.$q.defer();\r\n            deferred1.reject(e);\r\n            return deferred1.promise;\r\n        }\r\n\r\n        if (providerCfg.provider == null) {\r\n            var deferred = this.$q.defer();\r\n            const meta = 'non integrated card payment';\r\n            deferred.resolve({\r\n                result: true,\r\n                response: {\r\n                    ServerTransactionID: this.uuid2.newguid(),\r\n                    TransactionMetaData: meta\r\n                }\r\n\r\n            });\r\n\r\n            return deferred.promise;\r\n        }\r\n\r\n        var options = {\r\n            amount: payInfo.Amount,\r\n            currency: payInfo.Currency,\r\n            metadata: this.helperService.guidToFlatString(payInfo.ID),\r\n            receiptCallback: payInfo.receiptCallback,\r\n            receiptDoneCallback: payInfo.receiptDoneCallback,\r\n            OrderNumber: payInfo.OrderNumber,\r\n            Sale: payInfo.Sale\r\n        };\r\n\r\n        console.log('makePayment' + ' call params: ' + JSON.stringify(options));\r\n        this.printService.initPrintCollectMode();\r\n\r\n\r\n        const deferredMain = this.$q.defer<any>();\r\n        deferredMain.resolve(null);\r\n        let prm = deferredMain.promise;\r\n\r\n        if (window.device) {\r\n            if (window.device.platform !== 'iOS' || (window.device.platform == 'iOS' && parseInt(window.device.version) < 13)) {\r\n                if (providerCfg.key == 'squareReaderProvider') {\r\n                    prm = prm.then(() => this.printService.disconnect()); // async\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        if (typeof (providerCfg.provider.init) === 'function') {\r\n            prm = prm\r\n                .then(() => {\r\n                    this.$rootScope.cardTransactionInProgress = true;\r\n                    return providerCfg.provider.init();\r\n                });\r\n        }\r\n\r\n        prm = prm.then(() => {\r\n            this.$rootScope.cardTransactionInProgress = true;\r\n            return providerCfg.provider.makePayment(options);\r\n        });\r\n\r\n        return prm.then((res: IResponse | boolean) => {\r\n            $.blockUI();\r\n            if (typeof (res) === 'object') {\r\n                res.provider = providerCfg.key;\r\n                if (res.response?.TransactionMetaData) {\r\n                    (<any>res.response?.TransactionMetaData).provider = providerCfg.key;\r\n                }\r\n            }\r\n            \r\n            this.printService.finishPrintCollectMode();\r\n            return this.printService.printReceiptFromHTML().then(() => {\r\n                this.printService.resetPrintCollectMode();\r\n                var q = this.$q.defer();\r\n                q.resolve(res);\r\n               \r\n                return q.promise;\r\n            });\r\n        })\r\n        .catch((err) => {\r\n            if (err.disableAddPayment === undefined) {\r\n                err.disableAddPayment = !!providerCfg.provider.disablePaymentOnFailed;\r\n            }\r\n            throw err;\r\n        })\r\n        .finally(() => {\r\n            $.unblockUI();\r\n            (<any>providerCfg.provider).parentScope = null;\r\n            this.$rootScope.cardTransactionInProgress = false;\r\n\r\n            if (!!providerCfg.provider &&\r\n                typeof (providerCfg.provider.closeConnection) === 'function') {\r\n                providerCfg.provider.closeConnection();\r\n            }\r\n\r\n            if (window.device) {\r\n                if (window.device.platform !== 'iOS' || (window.device.platform == 'iOS' && parseInt(window.device.version) < 13)) {\r\n                    if (providerCfg.key === 'squareReaderProvider') {\r\n                        this.printService.connect();\r\n                    }\r\n                }\r\n            }\r\n\r\n            this.helperService.storeCurrentSale(null);\r\n        });\r\n\r\n    };\r\n\r\n    refund(initialPayment, refunds, scope, payInfo) {\r\n        var options = {\r\n            receiptCallback: payInfo.receiptCallback,\r\n            OrderNumber: payInfo.OrderNumber,\r\n            currency: payInfo.Currency\r\n        };\r\n\r\n        var p = null;\r\n        var providerCfg = this.selectProvider(scope);\r\n        var procRes = [];\r\n\r\n        if (!providerCfg.provider) {\r\n\r\n            var deferred2 = this.$q.defer();\r\n            deferred2.resolve(null);\r\n            p = deferred2.promise;\r\n            var returnPayments = !!initialPayment.nativeSalePayments ?\r\n                initialPayment.nativeSalePayments :\r\n                !!initialPayment.GroupedSale ? this.helperService.mapToList(initialPayment.GroupedSale.PaymentsMap) :\r\n                    initialPayment.ReturnPayments;\r\n\r\n            angular.forEach(returnPayments, (el) => {\r\n                if (el.PaymentTypeName == 'Credit Card' ||\r\n                    el.ShortName == 'credit card') {\r\n                    var key = this.combineKey(el.ServerTransactionID, el.ClientTransactionID);\r\n                    var refund = refunds[key];\r\n\r\n                    if (!!refund && refund.amount > 0) {\r\n                        p = p.then(() => {\r\n                            var deferred2 = this.$q.defer();\r\n                            deferred2.resolve({\r\n                                amount: refund.amount,\r\n                                result: true,\r\n                                ServerTransactionID: this.uuid2.newguid(),\r\n                                TransactionMetaData: 'non integrated card refund',\r\n                                SaleServerTransactionID: el.ServerTransactionID,\r\n                                Surcharge: refund.Surcharge\r\n                            });\r\n\r\n                            return deferred2.promise;\r\n                        });\r\n\r\n                        p = p.then((res) => {\r\n                            procRes.push(res);\r\n                            var deferred2 = this.$q.defer();\r\n                            deferred2.resolve(res);\r\n                            return deferred2.promise;\r\n                        });\r\n                    }\r\n                }\r\n            });\r\n\r\n            return p.then(() => {\r\n                var deferred2 = this.$q.defer();\r\n                deferred2.resolve(procRes);\r\n                return deferred2.promise;\r\n            });\r\n\r\n        }\r\n\r\n        if (typeof (providerCfg.provider.refund) != 'function') {\r\n            var deferred = this.$q.defer();\r\n            deferred.reject(\r\n                {\r\n                    result: false,\r\n                    response: {\r\n                        errorDescription: 'Refund is not supported'\r\n                    }\r\n                });\r\n            return deferred.promise;\r\n        }\r\n\r\n        if (typeof (providerCfg.provider.init) == 'function') {\r\n            p = providerCfg.provider.init();\r\n        }\r\n        else {\r\n            var deferred2 = this.$q.defer();\r\n            deferred2.resolve(null);\r\n            p = deferred2.promise;\r\n        }\r\n\r\n        this.printService.initPrintCollectMode();\r\n        p = p.then(() => {\r\n            this.setInProgress();\r\n        });\r\n\r\n        angular.forEach(initialPayment.ReturnPayments, (el) => {\r\n            if (el.PaymentTypeName == 'Credit Card') {\r\n                var key = this.combineKey(el.ServerTransactionID, el.ClientTransactionID);\r\n                var refund = refunds[key];\r\n\r\n                if (!!refund && refund.amount > 0) {\r\n\r\n                    // we need to skip real payment gateway processing (possibly this payment was processed on provider side but we were unable to get info)\r\n                    if (refund.isRemotedlyProcessed === true || el.TransactionMetaData === 'non integrated card payment' || el.TransactionMetaData === 'restored after crash') {\r\n                        p = p.then(() => {\r\n                            var deferred2 = this.$q.defer();\r\n                            deferred2.resolve({\r\n                                amount: refund.amount,\r\n                                ServerTransactionID: \"\",\r\n                                TransactionMetaData: 'manually processed card pay refund',\r\n                                result: true,\r\n                                Surcharge: refund.Surcharge\r\n                            });\r\n                            return deferred2.promise;\r\n                        });\r\n                    }\r\n                    else if (el.TransactionMetaData && typeof (el.TransactionMetaData) === 'object' && el.TransactionMetaData.provider && el.TransactionMetaData.provider !== providerCfg.key) {\r\n                        p = p.then(() => {\r\n                            const deferred = this.$q.defer();\r\n                            deferred.reject(\r\n                                {\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: `Sale payment was completed using another payment provider (${el.TransactionMetaData.provider}). Only cash refund is available.`\r\n                                    }\r\n                                });\r\n                            return deferred.promise;\r\n                        });\r\n                    }\r\n                    else\r\n                        if (providerCfg.key == 'squareReaderProvider') {\r\n                            if (!!el.squareIntegrationID && (el.ClientTransactionID || el.ServerTransactionID)) { // square refund\r\n                                p = p.then(() => { return this.squareReaderProvider.refund(el, refund.amount); }).then(res => {\r\n                                    const deferred = this.$q.defer();\r\n                                    if (res.result === false && res.message) {\r\n                                        deferred.reject(res.message);\r\n                                    } else {\r\n                                        deferred.resolve(res);\r\n                                    }\r\n                                    return deferred.promise;\r\n                                });\r\n                            }\r\n                            else {\r\n                                p = p.then(() => {\r\n                                    var deferred2 = this.$q.defer();\r\n                                    deferred2.resolve({\r\n                                        amount: refund.amount,\r\n                                        result: true,\r\n                                        Surcharge: refund.Surcharge\r\n                                    });\r\n                                    return deferred2.promise;\r\n                                });\r\n                            }\r\n                        }\r\n                        else {\r\n                            p = p.then(() => { return providerCfg.provider.refund(el, refund.amount, options); });\r\n                        }\r\n\r\n                    p = p.then((res) => {\r\n                        res.SaleServerTransactionID = el.ServerTransactionID;\r\n                        if (!res.Surcharge && refund.Surcharge) {\r\n                            res.Surcharge = refund.Surcharge;\r\n                        }\r\n                        if (typeof (res) === 'object') {\r\n                            res.provider = providerCfg.key;\r\n                            if (res.response?.TransactionMetaData) {\r\n                                (<any>res.response?.TransactionMetaData).provider = providerCfg.key;\r\n                                if (!res.TransactionMetaData) {\r\n                                    res.TransactionMetaData = res.response.TransactionMetaData;\r\n                                }\r\n                                if (!res.ServerTransactionID) {\r\n                                    res.ServerTransactionID = res.response.ServerTransactionID;\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        procRes.push(res);\r\n                        var deferred2 = this.$q.defer();\r\n                        deferred2.resolve(res);\r\n                        return deferred2.promise;\r\n                    });\r\n                }\r\n            }\r\n        });\r\n\r\n        p = p.then((res) => {\r\n            this.printService.finishPrintCollectMode();\r\n            return this.printService.printReceiptFromHTML().then(() => {\r\n                this.printService.resetPrintCollectMode();\r\n                var q = this.$q.defer();\r\n                q.resolve(res);\r\n                return q.promise;\r\n            });\r\n        }).finally(() => {\r\n            (<any>this.$rootScope).cardTransactionInProgress = false;\r\n            if (!!providerCfg.provider &&\r\n                typeof (providerCfg.provider.closeConnection) === 'function') {\r\n                providerCfg.provider.closeConnection();\r\n            }\r\n        });\r\n\r\n        return p.then(() => {\r\n            var deferred2 = this.$q.defer();\r\n            deferred2.resolve(procRes);\r\n            return deferred2.promise;\r\n        });\r\n    };\r\n\r\n    validate(key: string) {\r\n        const provider = this.selectProvider(null, key, true);\r\n\r\n        if (provider?.provider && typeof (provider.provider.validate) === 'function') {\r\n            return provider.provider.validate();\r\n        }\r\n        return true;\r\n    }\r\n\r\n    selectProvider(scope: any, providerKey = undefined, noThrowError = false) {\r\n        this.delayDone = false;\r\n\r\n        var cfg = this.configService.getCardPaymentSettings<any>();\r\n        if (this.configService.isClover) {\r\n            cfg.providerKey = 'cloverReaderProvider';\r\n        }\r\n\r\n        if (scope && scope.operationName === 'Refund' && scope.saleType === 'standaloneReturn') {\r\n            cfg.providerKey = \"emptyProvider\";\r\n        }\r\n\r\n        var key = !!providerKey ? providerKey : cfg.providerKey;\r\n        var cp = this.getProviderMap().filter(function (v) { return v.key == key; })[0];\r\n\r\n\r\n        if (!cp) {\r\n            if (noThrowError === true)\r\n                return null;\r\n\r\n            var s = this.gettextCatalog.getString(\r\n                'No card payment provider was found. Please reconfigure a payment provider in the POS application setup/ payment setup menu.');\r\n            throw new Error(s);\r\n        }\r\n\r\n        if (!!cp.provider) {\r\n            (<any>cp.provider).parentScope = scope;\r\n            this.delayDone = (<any>cp.provider).delayDone === true;\r\n        }\r\n\r\n        return cp;\r\n    };\r\n\r\n    combineKey(transactionID: string, clientTransactionID: string) {\r\n        return (!transactionID ? '' : transactionID) + '_' + (!clientTransactionID ? '' : clientTransactionID);\r\n    };\r\n\r\n    addSumToCardPayment(arr, transactionID, clientTransactionID, amount, transMetadata?: any) {\r\n        var key = this.combineKey(transactionID, clientTransactionID);\r\n        var o = arr[key];\r\n        if (!o || !o.validationAmount) {\r\n            o = { amount: 0, validationAmount: 0, id: key };\r\n            if (!!transMetadata)\r\n                $.extend(o, this.getCardInfo(transMetadata));\r\n        }\r\n\r\n        o.validationAmount += amount;\r\n\r\n        arr[key] = o;\r\n\r\n        return arr;\r\n    };\r\n\r\n    removeFullyUsedCards(arr) {\r\n        var sm = 0;\r\n        angular.forEach(Object.getOwnPropertyNames(arr), function (key) {\r\n            if (arr[key].validationAmount <= 0)\r\n                delete arr[key];\r\n            else\r\n                sm += arr[key].validationAmount;\r\n        });\r\n\r\n        return this.helperService.DEARRound(sm, 6);\r\n    };\r\n\r\n    sumAllCardPayments(arr, includeSurchargeRefund) {\r\n        var sum = 0;\r\n        angular.forEach(Object.getOwnPropertyNames(arr), function (key) {\r\n            if (!!arr[key].amount) {\r\n                sum += arr[key].amount;\r\n                if (includeSurchargeRefund === true && !!arr[key].Surcharge && arr[key].Surcharge.RefundSurcharge === true &&\r\n                    arr[key].Surcharge.AmountToRefund)\r\n                    sum += arr[key].Surcharge.AmountToRefund;\r\n            }\r\n        });\r\n\r\n        return sum;\r\n    };\r\n\r\n    setAllCardAmountToZero(arr) {\r\n        angular.forEach(Object.getOwnPropertyNames(arr), function (key) {\r\n            arr[key].amount = 0;\r\n            if (!!arr[key].Surcharge) {\r\n                arr[key].Surcharge.AmountToRefund = 0;\r\n                arr[key].Surcharge.TaxToRefund = 0;\r\n            }\r\n\r\n            // also make copy of validation amount to allow valid recalculation of surcharge when return back and continue exchange payment\r\n            arr[key].initialValidationPayment = arr[key].validationAmount;\r\n        });\r\n    };\r\n\r\n    validateCardRefunds(arr, errContainer) {\r\n        var idx = 1;\r\n        var hasErrors = false;\r\n        angular.forEach(Object.getOwnPropertyNames(arr), (key) => {\r\n            var el = arr[key];\r\n\r\n            if (el.amount < 0 || el.amount > this.helperService.DEARRound(el.validationAmount, 2)) {\r\n                errContainer.push(this.gettextCatalog.getString(\"Credit card {{idx}} payment amount should be between 0 and \", { idx: idx })\r\n                    + this.helperService.DEARRound(el.validationAmount, 2));\r\n                hasErrors = true;\r\n            }\r\n            idx++;\r\n        });\r\n\r\n        return hasErrors;\r\n    };\r\n\r\n    getCardInfo(transMetadata) {\r\n        var res = {};\r\n        var provType = this.detectProvider(transMetadata);\r\n        var providerCfg = this.selectProvider(null, provType, true);\r\n        if (providerCfg?.provider && typeof providerCfg.provider.getCardInfo === 'function') {\r\n            return providerCfg.provider.getCardInfo(transMetadata);\r\n        }\r\n\r\n        if (provType == 'triPOSReaderProvider') {\r\n            res = {\r\n                cardPAN: transMetadata.accountNumber,\r\n                cardType: transMetadata.cardLogo\r\n            };\r\n        } else if (provType == 'paymentSenseReaderProvider') {\r\n            res = {\r\n                cardPAN: transMetadata.primaryAccountNumber,\r\n                cardType: transMetadata.cardSchemeName\r\n            };\r\n        } else if (provType == 'linklyPaymentReaderProvider') {\r\n            res = {\r\n                cardPAN: transMetadata.pan,\r\n                cardType: transMetadata.cardType\r\n            };\r\n        }\r\n        else\r\n            res = {\r\n                cardPAN: transMetadata.elidedPan,\r\n                cardType: transMetadata.cardType\r\n            };\r\n\r\n        return res;\r\n    };\r\n\r\n    detectProvider(metaData) {\r\n        if (!metaData.provider) {\r\n            if (!!metaData._processor) {\r\n                metaData.provider = 'triPOSReaderProvider';\r\n            }\r\n            else if (!!metaData.elidedPan) {\r\n                metaData.provider = 'tyroReaderProvider';\r\n            } else if (!!metaData.tpi) {\r\n                metaData.provider = 'paymentSenseReaderProvider';\r\n            } else if (!!metaData.pan) {\r\n                metaData.provider = 'linklyPaymentReaderProvider';\r\n            }\r\n        }\r\n\r\n        return metaData.provider;\r\n    }\r\n\r\n    timeout(prom, time, ex) {\r\n        let timer;\r\n        return Promise.race([\r\n            prom,\r\n            new Promise((_r, rej) => timer = setTimeout(rej, time, ex))\r\n        ]).finally(() => clearTimeout(timer));\r\n    }\r\n\r\n    /*\r\n    Some of payment gateway provider requires that POS get  EndOfDay report from card machine\r\n    so this method is for this aims\r\n    */\r\n    getEndOfDayReport(scope, registerCloseID) {\r\n        var providerCfg = this.selectProvider(scope, null, true);\r\n        const deferredMain = this.$q.defer<any>();\r\n\r\n        let prm = deferredMain.promise;\r\n\r\n\r\n        const savedReportStr = window.localStorage.getItem('CloseOfDayReport');\r\n        if (!!savedReportStr) {\r\n            const savedReport = JSON.parse(savedReportStr);\r\n            if (savedReport.RegisterCloseID === registerCloseID) {\r\n                deferredMain.resolve(savedReport.report);\r\n                return deferredMain.promise;\r\n            }\r\n        }\r\n\r\n        deferredMain.resolve(null);\r\n        prm = deferredMain.promise;\r\n\r\n        if (!providerCfg || !providerCfg.provider || typeof (providerCfg.provider.getEndOfDayReport) !== 'function') {\r\n            return prm.then(() => {\r\n                var deferred2 = this.$q.defer();\r\n                deferred2.resolve(null);\r\n                return deferred2.promise;\r\n            });\r\n        }\r\n\r\n        if (typeof (providerCfg.provider.init) === 'function') {\r\n            prm = prm.then(() => providerCfg.provider.init())\r\n        }\r\n\r\n        return prm.then(() => {\r\n            var ex = new Error('Timeout');\r\n            this.timeout(providerCfg.provider.getEndOfDayReport(registerCloseID), 60 * 2 * 1000, ex)\r\n                .then((res) => {\r\n                    window.localStorage.setItem('CloseOfDayReport', JSON.stringify({\r\n                        RegisterCloseID: registerCloseID,\r\n                        report: res\r\n                    }));\r\n\r\n                    var deferred2 = this.$q.defer();\r\n                    deferred2.resolve(res);\r\n                    return deferred2.promise;\r\n                })\r\n                .catch(e => {\r\n                    if (e === ex) {\r\n                        var deferred2 = this.$q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    }\r\n                });\r\n        })\r\n            .finally(() =>{\r\n                if (!!providerCfg.provider &&\r\n                    typeof (providerCfg.provider.closeConnection) === 'function') {\r\n                    providerCfg.provider.closeConnection();\r\n                }\r\n            });\r\n    };\r\n\r\n    createCardPaymentMap(groupedSale) {\r\n        groupedSale.PaymentsMap2 = {};\r\n        var plist = this.helperService.mapToList(groupedSale.PaymentsMap);\r\n        plist.forEach((p) => {\r\n            if (p.ShortName === 'credit card') {\r\n                groupedSale.PaymentsMap2[this.combineKey(p.ServerTransactionID, p.ClientTransactionID)] = p;\r\n            }\r\n        });\r\n    };\r\n}\r\n\r\nangular.module('services').service('cardPayService', CardPayService);","import bioAuthService, { BiometricsAuthService } from '../../TypePosScripts/Services/biometrics-auth.service';\r\nimport msalService, { MSALService } from '../../TypePosScripts/Services/msal.service';\r\nimport {DeviceInfoService} from '../../TypePosScripts/Services/device-info.service';\r\nimport buildConfiguration from './configEnvironment';\r\nimport { IAngularStatic } from 'angular';\r\nimport { LoginService } from './loginService';\r\nimport { ServerConnectionService } from '../../TypePosScripts/Services/server-connection.service';\r\nimport serverConnectionService  from '../../TypePosScripts/Services/server-connection.service';\r\n\r\nconst EMAIL_NOT_LINKED_CODE = 10;\r\ndeclare const angular: IAngularStatic;\r\n\r\nangular.module(\"mainApp\").controller('loginController',\r\n    ['$scope', '$rootScope', 'configService', 'loginService', 'errorService', 'helperService',\r\n     '$timeout', 'gettextCatalog', 'googleHelperService', bioAuthService, msalService, 'deviceInfo', serverConnectionService,\r\nfunction ($scope, $rootScope, configService, loginService: LoginService, errorService, helperService,\r\n    $timeout, gettextCatalog, googleHelperService, bioAuthService: BiometricsAuthService, /* @type {} **/ msalService: MSALService, deviceInfo: DeviceInfoService, serverConnectionService: ServerConnectionService) {\r\n    $scope.isDeviceRooted = false;\r\n    $scope.isBioAvailable = false;\r\n    $scope.isDBEngineSupported = function () {\r\n        // for not supported browsers we simply use standard web logic without any locally saved data\r\n        return true;\r\n        //return !configService.isSite || jsStoreProvider.isSupported;\r\n    };\r\n\r\n    $scope.isIOS9 = function () {\r\n        return window.isOS9 === true;\r\n    };\r\n\r\n    // temp fields\r\n    $scope.dearPosMode = false;\r\n\r\n    //$scope.dearPosModeShow = configService.baseURL.indexOf('qa.dearsystems.com') >= 0 ||\r\n    //   configService.baseURL.indexOf('127.0.0.1') >= 0 ||\r\n    //   configService.baseURL.indexOf('localhost') >= 0;\r\n    //console.log('dearPosModeShow: ' + configService.isQAMode);\r\n    //console.log('dearPosModeShow: ' + configService.baseURL);\r\n\r\n    $scope.dearPosModeShow = false; // do not change this settings on production or QA !!!\r\n\r\n    if ($scope.dearPosModeShow)\r\n        $scope.dearPosMode = true; // on QA we set old mode as default\r\n\r\n    //\r\n    $scope.dearPosName = configService.lastDearPosName;\r\n    $scope.userName = configService.lastUserName;\r\n    $scope.displayUserName = configService.lastDisplayUserName;\r\n    $scope.password = null;\r\n    $scope.showChangeIP = false;\r\n    $scope.hosIpAddress = configService.baseURL;\r\n    $scope.isSite = configService.isSite;\r\n    $scope.idToken = null;\r\n    \r\n    $scope.isRelease = buildConfiguration.configuration == \"Release\";// && (configService.isMobile || configService.isSite);\r\n    //console.log('login controller inited');\r\n    $scope.isOnline = configService.isOnline;\r\n    $scope.pinMode = false;\r\n    $scope.pinValue = [];\r\n    $scope.finished = false;\r\n    $scope.invalidPinAttempt = 0;\r\n    for (var i = 0; i < configService.pinSize; i++)\r\n        $scope.pinValue.push(null);\r\n\r\n    $scope.resetPIN = function () {\r\n        for (var i = 0; i < configService.pinSize; i++)\r\n            $scope.pinValue[i] = null;\r\n\r\n        $scope.finished = false;\r\n    };\r\n\r\n    $scope.warningVisibility = {\r\n        DEARPOSName: false,\r\n        Email: false,\r\n        Password: false        \r\n    };\r\n\r\n    $scope.pinFormCaption = gettextCatalog.getString('Enter your Cin7 Core POS PIN');\r\n\r\n    $scope.setPinMode = function () {\r\n        $(document).off('keydown', keyboardListener).on('keydown', keyboardListener);\r\n        $scope.pinMode = true;\r\n        $scope.resetPIN();\r\n    };\r\n\r\n    $scope.setLoginMode = function () {\r\n        if($scope.pinMode)\r\n            $(document).unbind('keydown', keyboardListener); \r\n\r\n        $scope.pinMode = false;\r\n        $scope.resetPIN();\r\n    };\r\n\r\n    $scope.clickFun = function (s) {\r\n        $timeout(function () {\r\n            console.log('pin clickFun:'+s);\r\n            if (s == 'backspace') {\r\n                for (var i = ($scope.pinValue.length - 1) ; i >= 0; i--) {\r\n                    if ($scope.pinValue[i] != null) {\r\n                        $scope.pinValue[i] = null;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                for (var i = 0; i < $scope.pinValue.length; i++) {\r\n                    if ($scope.pinValue[i] == null) {\r\n                        $scope.pinValue[i] = s;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            $scope.finished = $scope.pinValue[$scope.pinValue.length - 1] != null;\r\n        });\r\n    };\r\n\r\n\r\n    function keyboardListener(e){\r\n        if($scope.pinMode){\r\n            if((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105))\r\n                $scope.clickFun(e.key);\r\n            else if(e.keyCode === 8)\r\n                $scope.clickFun('backspace');\r\n        }\r\n    }\r\n\r\n    $scope.$watch('finished',\r\n      function (newValue, oldValue) {\r\n          if (newValue === true && $scope.pinMode === true) {\r\n              $scope.login();\r\n          }\r\n      }\r\n     );\r\n\r\n    $scope.showWaitPopup = false;\r\n    $scope.recreateDBStart = false;\r\n\r\n    $scope.afterInit = async function () {\r\n        const valid = !configService.isSite && buildConfiguration.configuration !== 'Debug' ? !await serverConnectionService.showCertificateErrorPage() : true;\r\n        if (valid) {\r\n            // if it's not a first login and pin is enabled, show pin form first\r\n            if (configService.pinEnabled === true && configService.pinToken && !!configService.lastUserName) {\r\n                $scope.setPinMode();\r\n            } else {\r\n                $scope.setLoginMode();\r\n                bioAuthService.isAvailable().then(res => {\r\n                    if (res) {\r\n                        $scope.isBioAuthEnabled = bioAuthService.isBioAuthEnabled();\r\n                        if ($scope.isBioAuthEnabled && loginService.isFirstLogin)\r\n                            setTimeout(() => $scope.biometricLogin());\r\n                    }\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    $scope.$on('login.show', function (event, data) {\r\n        if (deviceInfo.isDeviceRooted) {\r\n            errorService.showError(gettextCatalog.getString('This app will not work on rooted device.'));\r\n            $scope.isDeviceRooted = true;\r\n        } else {\r\n            $scope.afterInit();\r\n        }\r\n\r\n        $('.dp_colored-background').hide();\r\n\r\n        $scope.showWaitPopup = window.waitApplication === true;\r\n        $scope.recreateDBStart = false;\r\n\r\n        console.log('login controller got login.show event');\r\n        $scope.showDialog();\r\n    });\r\n\r\n    $scope.$on('login.hide', function (event, data) {\r\n        $scope.showWaitPopup = window.waitApplication === true;\r\n        $scope.recreateDBStart = window.recreateDBStart === true;\r\n    });\r\n    \r\n    $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n        $scope.isOnline = object;\r\n    });\r\n\r\n    // silent login without login form. This takes place after \r\n    // password change\r\n    $scope.$on('login.silent', function (event, data) {\r\n        $scope.dearPosName = data.dearPosName;\r\n        $scope.userName = data.userName;\r\n        $scope.password = data.password;\r\n        $scope.login(data.callBack);\r\n    });\r\n\r\n    $scope.$on('header.logoff', function (event) {\r\n        $scope.userName = null;\r\n        $scope.password = null;\r\n        $scope.invalidPinAttempt = 0;\r\n\r\n        googleHelperService.logout();\r\n\r\n    });\r\n\r\n    $scope.showDialog = function () {\r\n\r\n        if (window.localStorage.getItem('FirstLoad') === 'false') {\r\n            $scope.password = null;\r\n            helperService.showDialog($('#enterModal'), function () {\r\n                $scope.password = null;\r\n                $timeout(function () {\r\n                    $scope.password = null;\r\n                }, 250);\r\n                const func = function () {\r\n                    if (navigator.splashscreen) {\r\n                        navigator.splashscreen.hide();\r\n                        $timeout(function () {\r\n                            $('#enterModal').css('z-index', '10040');\r\n                            $('#enterModalInner').css('z-index', '10040');\r\n                        }, 500);\r\n                    } else {\r\n                        document.addEventListener('deviceready', function () {\r\n                            navigator.splashscreen.hide();\r\n                            $timeout(function () {\r\n                                $('#enterModal').css('z-index', '10040');\r\n                                $('#enterModalInner').css('z-index', '10040');\r\n                            }, 500);\r\n                        }, false);\r\n                    }\r\n                    \r\n                };\r\n\r\n                if (configService.isMobile) {\r\n                    $timeout(func, 500);\r\n                } else if (typeof window.device !== 'undefined' && window.device.isVirtual) {\r\n                    $timeout(func, 500);\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    $scope.showForgotPasswordDialog = function () {\r\n        //$('#forgotPasswordModalInner .modal-body').height($('#enterModalInner .modal-body').height());\r\n\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n\r\n        helperService.showDialog($('#forgotPasswordModal'));\r\n    };\r\n    \r\n    $scope.hideForgotPasswordDialog = function () {\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n\r\n        helperService.closeDialog($('#forgotPasswordModal'));\r\n    };\r\n\r\n    $rootScope.callbackModalCancel = function () {\r\n        console.log('callbackModalCancel called');\r\n        if ($scope.dialogMode == 'enable-face-auth') {\r\n            bioAuthService.reset();\r\n            $scope.afterLogin();\r\n            $scope.dialogMode = '';\r\n        }\r\n    };\r\n\r\n    $rootScope.callbackModal3 = async function () {\r\n        console.log('callbackModal called');\r\n\r\n        if ($scope.dialogMode == 'enable-face-auth') {\r\n            try {\r\n                await bioAuthService.registerSecret(JSON.stringify($scope.getDataForLogin()));\r\n                await bioAuthService.saveBioAuthKey(configService.lastDearPosName, configService.loginUserID);\r\n            } catch (e) {\r\n                errorService.showError(e);\r\n            } finally {\r\n                $scope.afterLogin();\r\n                $scope.dialogMode = '';\r\n            }\r\n        }\r\n    };\r\n\r\n    $scope.afterLogin = (callback) => {\r\n        if (callback) {\r\n            $rootScope.$broadcast('header.updateSettingsSecondStep');\r\n        } else {\r\n            // show outlet|register dialog\r\n            $rootScope.$broadcast('selectOR.show'); // show outlet|register dialog\r\n        }\r\n    }\r\n\r\n    //$scope.afterLoginCallback = null;\r\n\r\n    $scope.canShowErrors = false;\r\n    // Login button was pressed\r\n    $scope.login = function (callback) {\r\n        var pin = null;\r\n\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n\r\n        if (!$scope.pinMode) {\r\n            $scope.canShowErrors = !!$scope.loginForm.$invalid;\r\n\r\n            if ($scope.loginForm.$invalid) {\r\n                return false;\r\n            }\r\n        }\r\n        else {\r\n            pin = '';\r\n            for (var i = 0; i < $scope.pinValue.length; i++)\r\n                pin += $scope.pinValue[i];\r\n        }\r\n\r\n        if (configService.isMobile) {\r\n            Keyboard.hide();\r\n        }\r\n        else {\r\n            helperService.hideKeyboard();\r\n        }\r\n\r\n        $.blockUI();\r\n\r\n        const loginError = (err) => {\r\n            // process error\r\n            $.unblockUI();\r\n\r\n            var title = 'Error';\r\n\r\n            errorService.showError(err, function () {\r\n                if ($scope.pinMode) {\r\n                    $timeout(function () {\r\n                        $scope.resetPIN();\r\n                        $scope.invalidPinAttempt++;\r\n                        if ($scope.invalidPinAttempt >= 3) {\r\n                            $scope.invalidPinAttempt = 0;\r\n                            $scope.setLoginMode();\r\n                        }\r\n                    });\r\n                }\r\n            }, title);\r\n        };\r\n\r\n        const loginSuccess = async (data) => {\r\n            // temp processing. Back switch to old style sale format\r\n            if ($scope.dearPosMode === true) {\r\n                configService.allowNewCalculations = false;\r\n                $scope.payloadVersion = '1';\r\n            }\r\n            //\r\n\r\n            const afterLoginVersionCheckCall = async () => {\r\n                helperService.closeDialog($('#enterModal'));\r\n                // save login info\r\n\r\n                $scope.loginUser(data);\r\n\r\n                if (data.IsRequiredChangePassword) {\r\n                    //$.unblockUI();\r\n                    // show password change dialog\r\n                    $rootScope.$broadcast('changepassword.show', {\r\n                        userName: configService.lastUserName,\r\n                        dearPosName: configService.lastDearPosName,\r\n                        userID: configService.loginUserID,\r\n                        password: $scope.password\r\n                    });\r\n                } else {\r\n\r\n                    if (!callback) {\r\n                        $scope.displayBiometricAuthSuggestionDialog($scope.afterLogin);\r\n                    }\r\n                    else {\r\n                        $scope.afterLogin(callback)\r\n                    }\r\n\r\n                }\r\n\r\n                if ($scope.pinMode)\r\n                    $(document).unbind('keydown', keyboardListener);\r\n            }\r\n\r\n            $.unblockUI();\r\n            if (data.VersionWarning && !data.VersionOutdated && !JSON.parse(localStorage.getItem('versionCheckboxPOS'))) {\r\n                helperService.showCustomDialog3(gettextCatalog.getString('Version warning'), data.VersionWarning,\r\n                    gettextCatalog.getString('Ok'), '', false, true, JSON.parse(localStorage.getItem('versionCheckboxPOS')) || false,\r\n                    async (val) => {\r\n                        localStorage.setItem('versionCheckboxPOS', val);\r\n                        await afterLoginVersionCheckCall();\r\n                    }\r\n                );\r\n            } else if (data.VersionOutdated) {\r\n                helperService.showCustomDialog(gettextCatalog.getString('Version outdated'), data.VersionOutdated,\r\n                    gettextCatalog.getString('Ok'), '', false\r\n                );\r\n            } else {\r\n                await afterLoginVersionCheckCall();\r\n            }\r\n        };\r\n\r\n        loginService.login($scope.dearPosName, $scope.userName, $scope.password, pin).then(loginSuccess, loginError);\r\n    };\r\n\r\n    $scope.canShowForgotPasswordErrors = false;\r\n\r\n    $scope.recoverPassword = function () {\r\n        $scope.canShowForgotPasswordErrors = !!$scope.forgotPasswordForm.$invalid;\r\n\r\n        if ($scope.forgotPasswordForm.$invalid) {\r\n            return false;\r\n        }\r\n        $.blockUI();\r\n        loginService.recoverPassword($scope.dearPosName, $scope.userName).then(function(resp) {\r\n            $.unblockUI();\r\n            helperService.showInfoDialog({\r\n                title: '',\r\n                body: gettextCatalog.getString(\"We just sent you an email message to the address you specified. Inside the message is a link you can use to change your password. The message should show up within a few seconds. If it doesn't, check your spam or junk mail folder and look for a message from Cin7 Core that says 'Password Reset Request'.\")\r\n            }, function () {\r\n                $timeout(function () {\r\n                    $scope.hideForgotPasswordDialog();\r\n                }, 0);\r\n            });\r\n        },\r\n            function (err) {\r\n                // process error\r\n                $.unblockUI();\r\n\r\n                var title = 'Error';\r\n\r\n                errorService.showError(err, null, title);\r\n                //                errorService.showError(err, $scope.showDialog, title);\r\n                // show error and login page once more\r\n            });\r\n\r\n        \r\n    };\r\n\r\n    $scope.changeIpAddress = function() {\r\n        configService.setBaseURL($scope.hosIpAddress);\r\n        configService.baseImageURL = $scope.hosIpAddress + configService.imageURLSuffix;\r\n        $scope.showChangeIP = false;\r\n    };\r\n\r\n    $scope.showIpChange = function() {\r\n        $scope.showChangeIP = true;\r\n    };\r\n\r\n    $scope.getIpAddressClass = function(form) {\r\n        if ((!form.dearPosIpAddress.$invalid && form.dearPosIpAddress.$dirty) || (!form.dearPosIpAddress.$invalid && form.dearPosIpAddress.length > 0))\r\n            return 'dp_has-success has-success';\r\n        else if (((form.dearPosIpAddress.$invalid || form.dearPosIpAddress.$error.required) && (form.dearPosIpAddress.$dirty || form.dearPosIpAddress.length > 0)))\r\n            return 'has-danger dp_has-danger';\r\n    };\r\n\r\n    $scope.getDearPosNameClass = function (form) {\r\n        if ((form.dearPosName.$invalid || form.dearPosName.$error.required) && $scope.canShowErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n    $scope.getUserNameClass = function (form) {\r\n       if ((form.userName.$invalid || form.userName.$error.required || form.userName.$error.email) && $scope.canShowErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n\r\n    $scope.getEmailFormatError = function (form) {\r\n        return form.userName.$error.email == true && $scope.canShowErrors == true;\r\n    };\r\n\r\n    $scope.getEmailRequiredError = function (form) {\r\n        return (form.userName.$invalid && form.userName.$error.required) && $scope.canShowErrors;\r\n    };\r\n\r\n    $scope.getPosNameRequiredError = function (form) {\r\n        return (form.dearPosName.$invalid && form.dearPosName.$error.required) && $scope.canShowErrors;\r\n    };\r\n\r\n    $scope.getPasswordRequiredError = function (form) {\r\n        return (form.password.$invalid && form.password.$error.required) && $scope.canShowErrors;\r\n    };\r\n\r\n    $scope.getPasswordClass = function (form) {\r\n        if ((form.password.$invalid || form.password.$error.required) && $scope.canShowErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n    $scope.getPosNameRequiredErrorFP = function (form) {\r\n        return (form.dearPosNameFP.$invalid && form.dearPosNameFP.$error.required) && $scope.canShowForgotPasswordErrors;\r\n    };\r\n\r\n    $scope.getDearPosNameClassFP = function (form) {\r\n        if ((form.dearPosNameFP.$invalid || form.dearPosNameFP.$error.required) && $scope.canShowForgotPasswordErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n    $scope.getEmailRequiredErrorFP = function (form) {\r\n        return (form.userNameFP.$invalid && form.userNameFP.$error.required) && $scope.canShowForgotPasswordErrors;\r\n    };\r\n\r\n    $scope.getUserNameClassFP = function (form) {\r\n        if ((form.userNameFP.$invalid || form.userNameFP.$error.required || form.userNameFP.$error.email) && $scope.canShowForgotPasswordErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n    $scope.getEmailFormatErrorFP = function (form) {\r\n        return form.userNameFP.$error.email == true && $scope.canShowForgotPasswordErrors == true;\r\n    };\r\n\r\n    $scope.showDEARPOSWarning = function() {\r\n        $scope.warningVisibility.DEARPOSName = !$scope.warningVisibility.DEARPOSName;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n    };\r\n\r\n    $scope.showEmailWarning = function() {\r\n        $scope.warningVisibility.Email = !$scope.warningVisibility.Email;\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Password = false;\r\n    };\r\n\r\n    $scope.showPasswordWarning = function() {\r\n        $scope.warningVisibility.Password = !$scope.warningVisibility.Password;\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n    };\r\n\r\n\r\n    $scope.eyePasswordInit = function () {\r\n        var eyePasswordLink = $('#eyePassword');\r\n        console.log(eyePasswordLink);\r\n        $(eyePasswordLink).attr('title', gettextCatalog.getString('Show password')); \r\n    };\r\n\r\n    $scope.eyePasswordToggle = function () {\r\n        var eyePasswordLink = $('#eyePassword');\r\n        var eye = $(eyePasswordLink).children('span');\r\n        if ($(eye).hasClass(\"glyphicon-eye-open\")) {\r\n            $(eye).removeClass(\"glyphicon-eye-open\");\r\n            $(eye).addClass(\"glyphicon-eye-close\");\r\n        }\r\n        else {\r\n            $(eye).removeClass(\"glyphicon-eye-close\");\r\n            $(eye).addClass(\"glyphicon-eye-open\");\r\n        }\r\n\r\n        var input = $($(eyePasswordLink).data(\"toggle\"));\r\n        if (input.attr(\"type\") === \"password\") {\r\n            input.attr(\"type\", \"text\");\r\n            $(eyePasswordLink).attr('title', gettextCatalog.getString('Hide password'));\r\n        } else {\r\n            input.attr(\"type\", \"password\");\r\n            $(eyePasswordLink).attr('title', gettextCatalog.getString('Show password'));\r\n        }\r\n    };\r\n\r\n    $scope.googleLoginInit = function () {\r\n        googleHelperService.init();\r\n    };\r\n\r\n    $scope.externalLogin = function (params) {\r\n        $.blockUI();\r\n        return loginService.login($scope.dearPosName, params.email, null, null, params.externalToken, params.tokenType).then(\r\n            (data) => {\r\n                if ($scope.dearPosMode === true) {\r\n                    configService.allowNewCalculations = false;\r\n                    $scope.payloadVersion = '1';\r\n                }\r\n\r\n                helperService.closeDialog($('#enterModal'));\r\n                $.unblockUI();\r\n                $scope.loginUser(data);\r\n\r\n                $scope.displayBiometricAuthSuggestionDialog(() => {\r\n                    // show outlet|register dialog\r\n                    $rootScope.$broadcast('selectOR.show'); // show outlet|register dialog\r\n                });\r\n            },\r\n            function (err) {\r\n\r\n                $.unblockUI();\r\n\r\n                if (err && err.length > 0 && (err[0].Exception == 'Email is not linked with Cin7 Core, Please link the email and try again.' || err[0].ErrorCode == EMAIL_NOT_LINKED_CODE)) {\r\n                    $scope.externalToken = params.externalToken;\r\n                    $scope.userName = params.email;\r\n                    $scope.tokenType = params.tokenType;\r\n                    $scope.showLinkingDialog();\r\n                }\r\n                else {        \r\n                    if (params.tokenType === 'google') {\r\n                        googleHelperService.logout();\r\n                    }\r\n                    errorService.showError(err);\r\n                }\r\n            });\r\n    }\r\n\r\n    $scope.displayBiometricAuthSuggestionDialog = async function(callBack) {\r\n        if (await bioAuthService.isAvailable()) {\r\n            if (!bioAuthService.isBioAuthEnabled(configService.lastDearPosName, configService.loginUserID)) {\r\n                const checkBoxValue = JSON.parse(localStorage.getItem(`doNotShowEnableBioAuth_${configService.loginUserID}`)) || false;\r\n                if (checkBoxValue) {\r\n                    return callBack && callBack();\r\n                }\r\n                \r\n           \r\n                $scope.dialogMode = 'enable-face-auth';\r\n                \r\n                helperService.showCustomDialog3(gettextCatalog.getString('Confirmation'), gettextCatalog.getString(`Do you want to enable biometric sign-in for user ${configService.lastUserName}?`),\r\n                    gettextCatalog.getString('Yes'), gettextCatalog.getString('No'), true, true, checkBoxValue,\r\n                    (val) => {\r\n                        console.log('success callback')\r\n                        if (val) {\r\n                            localStorage.setItem(`doNotShowEnableBioAuth_${configService.loginUserID}`, true.toString());\r\n                            bioAuthService.reset();\r\n                        }\r\n                    }\r\n                );\r\n            } else if (callBack) {\r\n                callBack();   \r\n            }\r\n        } else {\r\n            callBack();\r\n        }\r\n    }\r\n\r\n    $scope.googleLogin = function () {\r\n\r\n        if (!$scope.isOnline) {\r\n            errorService.showError(gettextCatalog.getString(\"Cannot log in to Google when offline.\"));\r\n            return false;\r\n        }\r\n\r\n        if (!$scope.dearPosName) {\r\n            errorService.showError(gettextCatalog.getString(\"Required attribute 'PosApplicationName' cannot be empty.\"));\r\n            return false;\r\n        }\r\n\r\n        googleHelperService.login()\r\n            .then(function (user) {\r\n                $scope.externalLogin({email: user.email, password: null, externalToken: user.idToken, tokenType: 'google'});\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n\r\n                googleHelperService.logout();\r\n\r\n                if (err && err.error && err.error != 'popup_closed_by_user') {\r\n                    errorService.showError(err);\r\n                }\r\n\r\n            });\r\n    };\r\n\r\n    $scope.msalLogin = async function () {\r\n\r\n        if (!$scope.isOnline) {\r\n            errorService.showError(gettextCatalog.getString(\"Cannot log in when offline.\"));\r\n            return false;\r\n        }\r\n\r\n        if (!$scope.dearPosName) {\r\n            errorService.showError(gettextCatalog.getString(\"Please enter POS name first\"));\r\n            return false;\r\n        }\r\n\r\n        msalService.login()\r\n            .then(function (res) {\r\n                if (!res) return;\r\n                \r\n                $scope.externalLogin({email: res.username, password: null, externalToken: res.token, tokenType: 'ms'});\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n    };\r\n\r\n    $scope.eyeLinkingPasswordToggle = function () {\r\n        var eyeLinkingPasswordLink = $('#eyeLinkingPassword');\r\n        var eye = $(eyeLinkingPasswordLink).children('span');\r\n        if ($(eye).hasClass(\"glyphicon-eye-open\")) {\r\n            $(eye).removeClass(\"glyphicon-eye-open\");\r\n            $(eye).addClass(\"glyphicon-eye-close\");\r\n        }\r\n        else {\r\n            $(eye).removeClass(\"glyphicon-eye-close\");\r\n            $(eye).addClass(\"glyphicon-eye-open\");\r\n        }\r\n\r\n        var input = $($(eyeLinkingPasswordLink).data(\"toggle\"));\r\n        if (input.attr(\"type\") === \"password\") {\r\n            input.attr(\"type\", \"text\");\r\n            $(eyeLinkingPasswordLink).attr('title', gettextCatalog.getString('Hide password'));\r\n        } else {\r\n            input.attr(\"type\", \"password\");\r\n            $(eyeLinkingPasswordLink).attr('title', gettextCatalog.getString('Show password'));\r\n        }\r\n    };\r\n\r\n    $scope.showLinkingDialog = function () {\r\n\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n        $scope.password = null;\r\n\r\n        helperService.showDialog($('#externalLinkingModal'));\r\n    };\r\n\r\n    $scope.hideLinkingDialog = function () {\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n        $scope.password = null;\r\n\r\n        helperService.closeDialog($('#externalLinkingModal'));\r\n    };\r\n\r\n\r\n    $scope.loginUser = (data) => {\r\n        configService.setLastDearPosName(data.PosName);\r\n        configService.setLastUserName(data.UserName);\r\n        configService.setLastDisplayUserName(data.DisplayUserName);\r\n\r\n        $rootScope.$broadcast('header.setUserInfo', {\r\n            currentUser: !data.DisplayUserName ? data.UserName : data.DisplayUserName,\r\n            currentPosName: data.PosName,\r\n            currentRoleName: configService.role,\r\n            currentUserId: configService.loginUserID,\r\n        });\r\n    };\r\n\r\n    $scope.canShowLinkingGoogleErrors = false;\r\n    \r\n    $scope.linkExternal = () => {\r\n        //TODO\r\n        $scope.canShowLinkingGoogleErrors = !!$scope.externalLinkingForm.$invalid;\r\n\r\n        if ($scope.externalLinkingForm.$invalid) {\r\n            return false;\r\n        }\r\n        $.blockUI();\r\n        loginService.linkingExternal($scope.dearPosName, $scope.userName, $scope.password, $scope.externalToken, $scope.tokenType).then(() => {\r\n\r\n            loginService.login($scope.dearPosName, $scope.userName, null, null, $scope.externalToken, $scope.tokenType).then(\r\n                (data) => {\r\n\r\n                    $scope.idToken = null;\r\n                    if ($scope.dearPosMode === true) {\r\n                        configService.allowNewCalculations = false;\r\n                        $scope.payloadVersion = '1';\r\n                    }\r\n\r\n                    $scope.hideLinkingDialog();\r\n                    helperService.closeDialog($('#enterModal'));\r\n\r\n                    $.unblockUI();\r\n\r\n                    $scope.loginUser(data);\r\n\r\n                    // show outlet|register dialog\r\n                    $rootScope.$broadcast('selectOR.show'); // show outlet|register dialog\r\n                },\r\n                function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n    };\r\n\r\n    $scope.googleLogOut = function () {\r\n        $scope.idToken = null;\r\n        googleHelperService.logout();\r\n    };\r\n\r\n    $scope.biometricLogin = async () => {\r\n        try {\r\n            if (!$scope.isBioAuthEnabled) return;\r\n            const val = await bioAuthService.loadSecret();\r\n            if (val) {\r\n                const data = JSON.parse(val);\r\n                if (data) {\r\n                    $.blockUI();\r\n                    try {\r\n                        const res = await loginService.login(data.PosName, data.UserName, null, null, null, null, data);\r\n                        helperService.closeDialog($('#enterModal'));\r\n                        $scope.loginUser(res);\r\n                        $.unblockUI();\r\n                        $scope.afterLogin();\r\n                    } catch (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    }\r\n                }\r\n            }\r\n        } catch (e) {\r\n            console.log(e);\r\n            if (e.code && e.code === Fingerprint.BIOMETRIC_NO_SECRET_FOUND ) {\r\n                errorService.showError(gettextCatalog.getString(`Please log in using user/password first to enable biometric login`));\r\n                return;\r\n            } else if (e.code && (e.code === Fingerprint.BIOMETRIC_NO_SECRET_FOUND || e.code === Fingerprint.BIOMETRIC_PIN_OR_PATTERN_DISMISSED)) {\r\n                return;\r\n            } else if (e.message) {\r\n                errorService.showError(e.message);\r\n            } else {\r\n                errorService.showError(e);\r\n            }\r\n        }\r\n    }\r\n\r\n    $scope.getDataForLogin = () => {\r\n        return {\r\n            PosName: configService.lastDearPosName,\r\n            UserName: configService.lastUserName,\r\n            DisplayUserName: configService.lastDisplayUserName,\r\n            IsRequiredChangePassword: false,\r\n            ApplicationKey: configService.applicationKey,\r\n            UserID: configService.loginUserID\r\n        }\r\n    }\r\n}]);","import sjcl from 'sjcl';\r\nimport { IAngularStatic, Injectable } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class LoginService {\r\n    static $inject = [\r\n        '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', 'gettextCatalog', 'tmhDynamicLocale',\r\n        '$interval', 'helperService', 'saleService', 'productsService', 'receiptService',\r\n        'userManagementService', 'customerService', 'barcodeService', 'registryService', 'loyaltyService', '$rootScope', 'googleHelperService', 'deviceInfo',\r\n        'pendoService', LoginService\r\n    ];\r\n\r\n    public isFirstLogin = true;\r\n    private afterLoginCallbacks = [];\r\n    private payloadVersion: string;\r\n    private idleLogoutTimer: number;\r\n\r\n    constructor(private $q, private configService: any, private remoteRequestProvider, private localDBProvider, private gettextCatalog, private tmhDynamicLocale,\r\n                private $interval,  private helperService, private saleService, private productsService, private receiptService,\r\n                private userManagementService, private customerService, private barcodeService, private registryService, private loyaltyService, private $rootScope, private googleHelperService, private deviceInfo,\r\n                private pendoService)\r\n    {\r\n        this.$interval(() => {\r\n            if (this.isLoggedIn()) {\r\n                configService.execCallbackFunctions();\r\n            }\r\n        }, this.configService.dataSendInterval);\r\n    }\r\n\r\n    isLoggedIn() {\r\n        return !!this.configService.applicationKey && !!this.configService.tenantID && !!this.configService.loginUserID;\r\n    };\r\n\r\n    login(dearPosName, userName, password, pin, externalToken = null, tokenType = null, savedData = null) {\r\n        var isOnline = this.configService.isOnline !== false;\r\n        var provider = isOnline || this.deviceInfo.isSimulator ? this.remoteRequestProvider : this.localDBProvider;\r\n        var pinToken = null;\r\n        if (!!pin) {\r\n            pinToken = this.preparePinToken(pin);\r\n            if (!userName)\r\n                userName = this.configService.lastUserName;\r\n        }\r\n\r\n        // *************** for debug !!! ***********************\r\n        //configService.applicationKey = '12345';\r\n        //configService.tenantID = '32145';\r\n        //configService.loginUserID = '34534534';\r\n        //configService.userName = userName;\r\n        //configService.role = 'Administrator';\r\n        //deferred.resolve(null);\r\n        //return deferred.promise;\r\n        // ***************************************************\r\n        var pr = provider.login(dearPosName, userName, password, pin, pinToken, externalToken, tokenType, savedData)\r\n            .then((resp) => {\r\n                const deferred = this.$q.defer();\r\n                this.configService.loginChanges = null;\r\n\r\n                if (!resp) {\r\n                    // call error processing\r\n                    deferred.reject('Error on login to address: ' + this.configService.connectionURL);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                const body = resp.data;\r\n\r\n                //                    if (!!pin) { // Doesn't matter wht kind of login is used: check preconditions\r\n                if (!this.isFirstLogin) {\r\n                    if (this.configService.applicationID === body.ApplicationID) {\r\n                        this.configService.loginChanges = 'full';\r\n\r\n                        if (this.configService.lastLoginUserID === body.UserId) {\r\n                            this.configService.loginChanges = 'none';\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (savedData && savedData.ApplicationKey) {\r\n                    body.ApplicationKey = savedData.ApplicationKey;\r\n                }\r\n\r\n                this.setConfiguration(body);\r\n                this.configService.posName = dearPosName;\r\n                this.configService.password = password;\r\n\r\n\r\n                if (!this.configService.currencyCulture) {\r\n                    this.configService.currencyCulture = 'en-US';\r\n                }\r\n\r\n                this.tmhDynamicLocale.set(this.configService.currencyCulture.toLowerCase()); // register make sence under android/ios\r\n                this.helperService.setSpecialCurrencySymbols();\r\n\r\n                body.Password = password;\r\n                body.PosName = dearPosName;\r\n\r\n                if (isOnline) {\r\n                    this.configService.setBaseURL();\r\n                }\r\n\r\n                $.each(this.afterLoginCallbacks, function (idx, el) {\r\n                    el();\r\n                });\r\n\r\n\r\n                if (this.configService.autoLockAfter) {\r\n                    this.initIdleLogout(this.configService.autoLockAfter);\r\n                }\r\n\r\n                this.pendoService.initPendo();\r\n\r\n                deferred.resolve(body);\r\n                return deferred.promise;\r\n            }, (err) => {\r\n                const err0 = err;\r\n                if (!!err && err.hasOwnProperty('headers')) {\r\n                    err = err.data;\r\n                }\r\n                if (!err) {\r\n                    err = this.gettextCatalog.getString(\"Connection refused.\");\r\n                }\r\n\r\n                const deferred = this.$q.defer();\r\n                // call error processing\r\n                console.log('Error on login to address: ' + this.configService.connectionURL + '/PosAccount: ' + err0);\r\n                deferred.reject(err);\r\n                return deferred.promise;\r\n            })\r\n            .then((body) => {\r\n                if (this.configService.isSite === true || !body.Password || !this.configService.isOnline || this.deviceInfo.isSimulator) {\r\n                    var deferred = this.$q.defer();\r\n                    deferred.resolve(body);\r\n                    return deferred.promise;\r\n                } else {\r\n                    return this.localDBProvider.saveLogin(body);\r\n                }\r\n            });\r\n\r\n        // init Loylaty providers\r\n        pr = pr.then((res) => {\r\n            return this.loyaltyService.preload(res);\r\n        });\r\n\r\n        return pr;\r\n    };\r\n\r\n    setAfterLoginCallbacks(func) {\r\n        this.afterLoginCallbacks.push(func);\r\n    };\r\n\r\n    logoff() {\r\n\r\n        this.googleHelperService.logout();\r\n\r\n        this.configService.applicationKey = null;\r\n        this.configService.loginUserID = null;\r\n        this.configService.userName = null;\r\n        this.configService.roles = null;\r\n        this.configService.UserHasSelectedOutlet = null;\r\n        this.configService.lastPosChange = null;\r\n        this.configService.password = null;\r\n        this.configService.applyCustomerDiscountAfterOtherDiscounts = null;\r\n        // this.configService.pinToken = null;\r\n        this.productsService.stopProductsAutoUpdate();\r\n        this.saleService.stopSequenceAutoUpdate();\r\n        this.pendoService.resetPendo();\r\n    };\r\n\r\n    changePassword(userID, passwordOld, passwordNew) {\r\n        return this.remoteRequestProvider.changePassword(userID, passwordOld, passwordNew);\r\n    };\r\n\r\n    recoverPassword(posName, userName) {\r\n        var pr = this.remoteRequestProvider.recoverPassword(posName, userName);\r\n        pr = pr.then((res) => {\r\n            var deferred = this.$q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    preparePinToken(pin) {\r\n        const pinData = {\r\n            posName: this.configService.posName.toLowerCase(),\r\n            applicationID: this.configService.applicationID.toLowerCase(),\r\n            tenantID: this.configService.tenantID.toLowerCase(),\r\n            pin: pin\r\n        };\r\n\r\n        const s = JSON.stringify(pinData);\r\n\r\n        console.log(s);\r\n\r\n        const salt = sjcl.codec.base64.fromBits([17, 4, 19, 71]);\r\n\r\n        const r = sjcl.json.encrypt(pin, s, {\r\n            salt: salt,\r\n            iv: salt\r\n        });\r\n\r\n        return r;\r\n    };\r\n\r\n    savePin(pin) {\r\n\r\n        // try to save it to db then save to local\r\n        const ciphertext = pin == null ? null : this.preparePinToken(pin);\r\n        this.configService.pinToken = ciphertext;\r\n\r\n        let pr = this.remoteRequestProvider.savePin(ciphertext);\r\n        if (this.configService.isMobile && !this.deviceInfo.isSimulator) {\r\n            pr = pr.then(() => {\r\n                return this.localDBProvider.savePin(ciphertext);\r\n            });\r\n        }\r\n\r\n        return pr;\r\n    };\r\n\r\n    static listOfResetEvents = ['load', 'mousemove', 'mousedown', 'touchstart', 'click', 'keypress', 'scroll'];\r\n\r\n    /*\r\n     * This function should logout user if he exceeds idle time (if its set on pos integration page)\r\n     */\r\n    private initIdleLogout(idleMaxDuration) {\r\n        const resetTimer = (e)  => {\r\n            // console.log('reseted by ', e.type);\r\n            clearTimeout(this.idleLogoutTimer);\r\n            this.idleLogoutTimer = setTimeout(idleLogout, idleMaxDuration*1000);  // time is in milliseconds\r\n        }\r\n\r\n        LoginService.listOfResetEvents.forEach((e) => {\r\n            window.addEventListener(e, resetTimer.bind(this), true);\r\n        });\r\n\r\n        const idleLogout = () => {\r\n            if (this.$rootScope.cardTransactionInProgress) {\r\n                resetTimer({type: 'transaction in progress'});\r\n                return;\r\n            }\r\n            console.log('clear timeout');\r\n            clearTimeout(this.idleLogoutTimer);\r\n\r\n            LoginService.listOfResetEvents.forEach((e) => {\r\n                window.removeEventListener(e, resetTimer.bind(this));\r\n            });\r\n\r\n            this.$rootScope.$broadcast('header.logoff');\r\n            this.googleHelperService.logout();\r\n        }\r\n\r\n        clearTimeout(this.idleLogoutTimer);\r\n        this.idleLogoutTimer = setTimeout(idleLogout, idleMaxDuration*1000);\r\n    }\r\n\r\n    /*\r\n     * This function loads everything that is required to work properly\r\n     * depending on this.configService.pinMode and ECSConfigID and OutletLocationMappingID and userID\r\n     * will decide what to load\r\n     */\r\n    loadAll(dataChangeNotificationService, getHash) {\r\n        console.time('Load all');\r\n\r\n        var prList = [];\r\n        var skipMost = false; // if the same user logged on by pin - skip as much as we can\r\n        var skipBigData = false; // the outlet is the same, so skip big data loading\r\n\r\n        switch (this.configService.loginChanges) {\r\n            case 'none': // even user is the same on pin login\r\n                skipMost = true;\r\n                skipBigData = true;\r\n                break;\r\n            case 'user': // user is different, but outlet is the same\r\n                skipBigData = true;\r\n                break;\r\n        }\r\n\r\n        this.configService.loginChanges = null; // reset\r\n\r\n        console.time('Load receipt template');\r\n        var pr = null;\r\n\r\n        // condition below is removed as it makes receipt to be not loaded at first time\r\n        // also it's useful to reload template as it can be modified\r\n        if (!skipMost) {\r\n            pr = this.receiptService.getReceiptTemplate()\r\n                .then(() => {\r\n                    console.timeEnd('Load receipt template');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n        }\r\n\r\n        // if we are in mobile mode or in site mode and we support indexed db\r\n        if (this.configService.isSite === false || window.isSupported === true) {\r\n            dataChangeNotificationService.stop();\r\n            pr = dataChangeNotificationService.init();\r\n            prList.push(pr);\r\n        }\r\n\r\n        if (!skipBigData) {\r\n            // load only for mobile version or Indexed DB supported browsers\r\n            if (!this.configService.isSite || window.isSupported) {\r\n                console.time('loadSaleRepresentativesAll');\r\n                pr = this.userManagementService.loadSaleRepresentativesAll(true, getHash).then(() => {\r\n                    console.timeEnd('loadSaleRepresentativesAll');\r\n                    return this.userManagementService.startSaleRepresentativesAutoUpdate();\r\n                });\r\n                prList.push(pr);\r\n            }\r\n        }\r\n\r\n        if (!skipBigData) {\r\n            // load only for mobile version or Indexed DB supported browsers\r\n            console.time('Load products');\r\n            pr = this.productsService.loadProducts(true, getHash);\r\n\r\n            // disable auto product reloading due to system overload.\r\n            // also StocktakeTask event also lead to reload and also is disabled\r\n            //if (!this.configService.isSite || window.isSupported) {\r\n            //    pr = pr.then(() => {\r\n            //        console.timeEnd('Load products');\r\n            //        return productsService.startProductsAutoUpdate();\r\n            //    });\r\n            //} else {\r\n            pr = pr.then(() => {\r\n                console.timeEnd('Load products');\r\n                return this.helperService.resolvePromise();\r\n            });\r\n            //}\r\n            prList.push(pr);\r\n\r\n            pr = this.customerService.loadCustomersOnInit(getHash);\r\n            prList.push(pr);\r\n\r\n            console.time('Load discounts');\r\n            pr = this.saleService.getPosDiscounts()\r\n                .then(() => {\r\n                    console.timeEnd('Load discounts');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n\r\n            console.time('Load card settings');\r\n            pr = this.productsService.getGiftCardSettings()\r\n                .then(() => {\r\n                    console.timeEnd('Load card settings');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n        }\r\n\r\n        console.time('startSequenceAutoUpdate');\r\n        pr = this.saleService.startSequenceAutoUpdate()\r\n            .then(() => {\r\n                console.timeEnd('startSequenceAutoUpdate');\r\n                return this.helperService.resolvePromise();\r\n            });\r\n        prList.push(pr);\r\n\r\n        if (!skipBigData) {\r\n            console.time('getSurcharge');\r\n            pr = this.saleService.getSurcharge()\r\n                .then(() => {\r\n                    console.timeEnd('getSurcharge');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n        }\r\n\r\n        if (!skipBigData) {\r\n            console.time('loadAllFonts');\r\n            pr = this.barcodeService.loadAllFonts()\r\n                .then(() => {\r\n                    console.timeEnd('loadAllFonts');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n\r\n            console.time('Load tax rules');\r\n            pr = this.productsService.loadTaxRules()\r\n                .then(() => {\r\n                    console.timeEnd('Load tax rules');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n        }\r\n\r\n        // the promise below should be the last always\r\n        console.time('getActiveRegistrySales');\r\n        pr = this.registryService.getActiveRegistrySales(this.configService.lastRegistryID, this.configService.lastUserName)\r\n            .then((resp) => {\r\n                console.timeEnd('getActiveRegistrySales');\r\n                this.registryService.activeSalesFromLogin = resp;\r\n                return this.helperService.resolvePromise(resp);\r\n            });\r\n        prList.push(pr);\r\n\r\n        return this.$q.all(prList);\r\n    };\r\n\r\n    setConfiguration(body) {\r\n        this.configService.lastLoginUserID = body.UserId;\r\n        this.configService.userImageID = body.UserImageID;\r\n        this.configService.applicationID = body.ApplicationID;\r\n        this.configService.applicationKey = body.ApplicationKey;\r\n        this.configService.tenantID = body.AccountId;\r\n        this.configService.loginUserID = body.UserId;\r\n        this.configService.loadCustomersMode = body.LoadCustomersMode == undefined ? 2 : body.LoadCustomersMode;\r\n        this.configService.userName = body.UserName;\r\n        this.configService.role = body.UserRole;\r\n        this.configService.taxCalculationMethod = body.TaxCalculationMethod;\r\n        this.configService.taxInclucive = body.TaxInclucive;\r\n        this.configService.tenantTaxRule = JSON.stringify(body.Tax);\r\n        this.configService.ignoreCustomerTaxRule = body.IgnoreCustomerTaxRule;\r\n        this.configService.currency = body.Currency; // tenant level currency\r\n        this.configService.paymentProcessors = body.PaymentProcessors;\r\n        this.configService.posPaymentProcessors = body.PaymentProcessors;\r\n        this.configService.enableLoyalty = body.EnableLoyalty;\r\n        this.configService.UserHasSelectedOutlet = body.UserHasSelectedOutlet;\r\n        this.configService.dateFormat = body.DateFormat;\r\n        this.configService.roundTo = body.RoundTo;\r\n        this.configService.roundingRule = body.RoundingRule;\r\n        this.configService.loyaltyEarning = body.LoyaltyEarning;\r\n        this.configService.currencyCulture = body.CurrencyCulture;\r\n        this.configService.setCurrencyCulture(body.CurrencyCulture);\r\n        this.configService.blockSales = body.BlockSales;\r\n        this.configService.lastPosChange = body.LastPosChange;\r\n\r\n        this.configService.pinEnabled = body.PinEnabled;\r\n        this.configService.pinSize = body.PinLength;\r\n        this.configService.pinToken = body?.PinToken ?? null;\r\n        this.configService.applyCustomerDiscountAfterOtherDiscounts = body.ApplyCustomerDiscountAfterOtherDiscounts;\r\n        this.configService.useTyro = body.UseTyro === true;\r\n        this.configService.useTriPOS = body.UseTriPOS === true;\r\n        this.configService.tyroMerchantID = body.TyroMerchantID;\r\n        this.configService.triPOSAccountID = body.TriPOSAccountID;\r\n        this.configService.triPOSAcceptorID = body.TriPOSAcceptorID;\r\n        this.configService.triPOSAccountToken = body.TriPOSAccountToken;\r\n        this.configService.usePaymentSense = body.UsePaymentSense === true;\r\n        this.configService.useLinkly = body.UseLinkly === true;\r\n        this.configService.linklyUserName = body.LinklyUserName;\r\n        this.configService.linklyPassword = body.LinklyPassword;\r\n        this.configService.timeZone = body.TimeZone;\r\n        this.configService.decimalPlaces = !body.DecimalPlaces ? 0 : Number(body.DecimalPlaces.substr(1));\r\n        this.configService.useCustomerPriceTier = body.UseCustomerPriceTier === true;\r\n        this.configService.canChangePrice = body.CanChangePrice;\r\n        this.configService.canGiveDiscount = body.CanGiveDiscount;\r\n        this.configService.canSellOnAccount = body.CanSellOnAccount;\r\n        this.configService.canSeeDashboard = body.CanSeeDashboard;\r\n        this.configService.banknoteDenominations = body.BanknoteDenominations;\r\n        this.configService.MatchedLoginsCount = body.MatchedLoginsCount;\r\n        this.configService.zeroTaxID = body.ZeroTaxID;\r\n        this.configService.canSeeAllSales = body.CanSeeAllSales;\r\n        this.configService.CanDoLayby = body.CanDoLayby;\r\n        this.configService.CanSeeStockValue = body.CanSeeStockValue;\r\n        this.configService.CanSeeItemValue = body.CanSeeItemValue;\r\n        this.configService.CanVoidSales = body.CanVoidSales;\r\n        this.configService.canClearOfflineSales = body.CanClearOfflineSales;\r\n        this.configService.checkAvailabilityOnCheckout = body.CheckAvailabilityOnCheckout;\r\n        this.configService.CanSaleRep = (body.CanSaleRep === null || body.CanSaleRep === undefined) ? true : body.CanSaleRep;\r\n\r\n        // weight based barcode settings\r\n        this.configService.advancedBarcodeMode = body.AdvancedBarcodeMode;\r\n        this.configService.advancedBarcodeUseOutletSKU = body.AdvancedBarcodeUseOutletSKU;\r\n        this.configService.advancedBarcodeSKULength = body.AdvancedBarcodeSKULength;\r\n        this.configService.advancedBarcodeValueLength = body.AdvancedBarcodeValueLength;\r\n        this.configService.advancedBarcodeValueDecimalPoint = body.AdvancedBarcodeValueDecimalPoint;\r\n\r\n        this.configService.consolidateToCustomerID = body.ConsolidateToCustomerID;\r\n        this.configService.autoLockAfter = body.AutoLockAfter;\r\n\r\n        // if the below setting is false, it means all delivery functionality should be hidden from current logged on user\r\n        this.configService.canSeeAllScheduledDeliveries = body.CanSeeAllScheduledDeliveries && body.DeliverySchedulingEnable;\r\n        this.configService.deliveryNumberPerDay = body.DeliveryNumberPerDay;\r\n        this.configService.deliveryTimeInterval = body.deliveryTimeInterval;\r\n\r\n        this.configService.deliveryProcessShipSales = body.DeliveryProcessShipSales === true;\r\n        this.configService.deliveryTemplateID = body.DeliveryTemplateID;\r\n\r\n        this.configService.loadCustomersMode = body.LoadCustomersMode;\r\n        this.configService.paymentDisplayOrder = body.PaymentDisplayOrder;\r\n        this.configService.enableOrderStatusTracking = body.EnableOrderStatusTracking;\r\n\r\n        // LoyaltyLion settings\r\n        if (body.LoyaltyLionToken) {\r\n            this.configService.loyaltyLionToken = body.LoyaltyLionToken;\r\n            this.configService.enableLoyalty = false;\r\n        }\r\n\r\n        this.configService.allowNewCalculations = !body.AllowNewCalculations ? false : true;\r\n        if (this.configService.allowNewCalculations) {\r\n            this.payloadVersion = '3';\r\n        }\r\n\r\n        if (body.CashManagementOparationReasons)\r\n            this.configService.cashManagementOparationReasons = body.CashManagementOparationReasons;\r\n\r\n        this.configService.useWindcave = body.UseWindcave === true;\r\n        if (this.configService.useWindcave) {\r\n            this.configService.windcaveUsername = body.WindcaveUsername;\r\n            this.configService.windcaveKey = body.WindcaveKey;\r\n        }\r\n    }\r\n\r\n    linkingExternal(posName, userName, password, token, tokenType) {\r\n        return this.remoteRequestProvider.linkingExternal(posName, userName, password, token, tokenType);\r\n    }\r\n}\r\n\r\nangular.module('services').service('loginService', LoginService.$inject as unknown as Injectable<Function>);","import { IAngularStatic, Injectable } from 'angular';\r\nimport buildConfiguration from './configEnvironment';\r\nimport { events } from './eventConstants';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class PendoService {\r\n    static $inject = ['configService', 'deviceInfo', '$rootScope', PendoService];\r\n\r\n    private pendoEnabled = true;\r\n    private pendoRef: any; // pendo reference\r\n    private pendoStub: any;\r\n\r\n    private getPendo() {\r\n        return typeof window !== 'undefined' ? (window as any).pendo : undefined;\r\n    }\r\n\r\n    static loadPendoScript() {\r\n        try {\r\n            const apiKey = buildConfiguration.PendoKey;\r\n            const win = window as any;\r\n\r\n            if (!apiKey || win.pendo || win.pendoLoading) {\r\n                return;\r\n            }\r\n\r\n            win.pendoLoading = true;\r\n\r\n            (function(apiKey){\r\n                (function(p,e,n,d,o){var v,w,x,y,z;o=p[d]=p[d]||{};o._q=o._q||[];\r\n                v=['initialize','identify','updateOptions','pageLoad','track'];for(w=0,x=v.length;w<x;++w)(function(m){\r\n                    o[m]=o[m]||function(){o._q[m===v[0]?'unshift':'push']([m].concat([].slice.call(arguments,0)));};})(v[w]);\r\n                    y=e.createElement(n);y.async=!0;y.src='https://cdn.pendo.io/agent/static/'+apiKey+'/pendo.js';y.onload=function(){win.pendoLoading=false;};y.onerror=function(){win.pendoLoading=false;};\r\n                    z=e.getElementsByTagName(n)[0];z.parentNode.insertBefore(y,z);})(window,document,'script','pendo');\r\n            })(apiKey);\r\n\r\n            \r\n        } catch (e) {\r\n            if (typeof window !== 'undefined') {\r\n                 (window as any).pendoLoading = false;\r\n            }\r\n            console.error('Error loading Pendo script:', e);\r\n        }\r\n    }\r\n\r\n    constructor(private configService: any, private deviceInfo: any, private $rootScope: any) {\r\n        this.pendoRef = null;\r\n        this.initializePendoStub();\r\n        this.setupEventListeners();\r\n    }\r\n\r\n    private setupEventListeners() {\r\n        // listen syncStatus to enable/disable Pendo based on status\r\n        this.$rootScope.$on(events.HEADER_SYNC_STATUS_EVENT, (event, status) => {\r\n            if (status === events.STATUS_OK_AFTER_ERROR_SEND) {\r\n                this.enablePendo();\r\n            } else if (status === events.STATUS_ERROR_SEND_ORDER) {\r\n                this.disablePendo();\r\n            }\r\n        });\r\n    }\r\n\r\n    private initializePendoStub() {\r\n        this.pendoStub = {\r\n            initialize: () => { this.pendoEnabled = false; },\r\n            track: () => {},\r\n            identify: () => {},\r\n            clearSession: () => {},\r\n            stopSendingEvents: () => {},\r\n            startSendingEvents: () => {},\r\n            updateOptions: () => {}\r\n        };\r\n    }\r\n\r\n    initPendo() {\r\n        const pendo = this.getPendo();\r\n        if (!pendo || typeof pendo.initialize !== 'function') {\r\n            return;\r\n        }\r\n\r\n        this.pendoRef = pendo;\r\n\r\n        try {\r\n            if (buildConfiguration.configuration !== \"Debug\") {\r\n                const prefix = this.configService.isQAMode || buildConfiguration.configuration === \"Debug\" ? 'QA_Pendo_Test_' : '';\r\n                const name = prefix + this.configService.userName;\r\n                const model = this.deviceInfo.device ? `${this.deviceInfo.device.manufacturer}: ${this.deviceInfo.device.model}` : undefined;\r\n                pendo.initialize({\r\n                    visitor: {\r\n                        id: name,\r\n                        visitorId: name,\r\n                        email: this.configService.userName,\r\n\r\n                        appVersion: buildConfiguration.appVersion,\r\n                        model: model,\r\n                        deviceID: this.deviceInfo.device ? this.deviceInfo.device.uuid : undefined,\r\n                        osVersion: this.deviceInfo.device ? this.deviceInfo.device.version : undefined,\r\n                    },\r\n                    account: {\r\n                        id: this.configService.tenantID,\r\n                        accountId: prefix + this.configService.tenantID,\r\n                        isQA: (this.configService.isQAMode || buildConfiguration.configuration === \"Debug\").toString()\r\n                    }\r\n                });\r\n            }\r\n        } catch (e) {\r\n            console.error(e);\r\n        }\r\n    }\r\n\r\n\r\n    resetPendo() {\r\n        const pendo = this.getPendo();\r\n        if (!pendo) {\r\n            return;\r\n        }\r\n\r\n        try {\r\n            if (buildConfiguration.configuration !== \"Debug\") {\r\n                pendo.clearSession && pendo.clearSession();\r\n                Object.assign(pendo, this.pendoStub);\r\n            }\r\n        } catch (e) {\r\n            console.error(e);\r\n        }\r\n    }\r\n\r\n    enablePendo() {\r\n        const pendo = this.getPendo();\r\n        if (!pendo) {\r\n            return;\r\n        }\r\n\r\n        if (!this.pendoEnabled) {\r\n            this.pendoRef = pendo;\r\n            this.initPendo();\r\n            pendo.startSendingEvents && pendo.startSendingEvents();\r\n            this.pendoEnabled = true;\r\n        }\r\n    }\r\n\r\n    disablePendo() {\r\n        const pendo = this.getPendo();\r\n        if (!pendo) {\r\n            return;\r\n        }\r\n\r\n        if (this.pendoEnabled) {\r\n            pendo.stopSendingEvents && pendo.stopSendingEvents();\r\n            pendo.teardown && pendo.teardown();\r\n            Object.assign(pendo, this.pendoStub);\r\n            this.pendoEnabled = false;\r\n        }\r\n    }\r\n}\r\n\r\nangular.module('services').service('pendoService', PendoService.$inject as unknown as Injectable<Function>);\r\n","export default function Worker_fn() {\n  return new Worker(__webpack_public_path__ + \"unpackWorker-bundle.worker.js?h=881f4a1570d83cfb761e\");\n}\n","var map = {\n\t\"./Error_2020.svg\": \"./src/PosImages/Error_2020.svg\",\n\t\"./POS_2020.svg\": \"./src/PosImages/POS_2020.svg\",\n\t\"./Payment_2020.svg\": \"./src/PosImages/Payment_2020.svg\",\n\t\"./Print_2020.svg\": \"./src/PosImages/Print_2020.svg\",\n\t\"./Question_2020.svg\": \"./src/PosImages/Question_2020.svg\",\n\t\"./Question_yellow_2020.svg\": \"./src/PosImages/Question_yellow_2020.svg\",\n\t\"./Scanner_2020.svg\": \"./src/PosImages/Scanner_2020.svg\",\n\t\"./Success-full_2020.svg\": \"./src/PosImages/Success-full_2020.svg\",\n\t\"./Success-transparent_2020.svg\": \"./src/PosImages/Success-transparent_2020.svg\",\n\t\"./Success_2020.svg\": \"./src/PosImages/Success_2020.svg\",\n\t\"./Warning_2020.svg\": \"./src/PosImages/Warning_2020.svg\",\n\t\"./accountIcon_2020.svg\": \"./src/PosImages/accountIcon_2020.svg\",\n\t\"./add.green.svg\": \"./src/PosImages/add.green.svg\",\n\t\"./add.white.svg\": \"./src/PosImages/add.white.svg\",\n\t\"./amexLogo.svg\": \"./src/PosImages/amexLogo.svg\",\n\t\"./android-chrome-192x192.png\": \"./src/PosImages/android-chrome-192x192.png\",\n\t\"./android-chrome-384x384.png\": \"./src/PosImages/android-chrome-384x384.png\",\n\t\"./apple-touch-icon.png\": \"./src/PosImages/apple-touch-icon.png\",\n\t\"./arrow-left-clear_2020.svg\": \"./src/PosImages/arrow-left-clear_2020.svg\",\n\t\"./arrowDown_2020.svg\": \"./src/PosImages/arrowDown_2020.svg\",\n\t\"./arrowLeft_2020.svg\": \"./src/PosImages/arrowLeft_2020.svg\",\n\t\"./arrowRight_2020.svg\": \"./src/PosImages/arrowRight_2020.svg\",\n\t\"./backarrow.blue.svg\": \"./src/PosImages/backarrow.blue.svg\",\n\t\"./backarrow.white.svg\": \"./src/PosImages/backarrow.white.svg\",\n\t\"./backarrow1.svg\": \"./src/PosImages/backarrow1.svg\",\n\t\"./backspace.svg\": \"./src/PosImages/backspace.svg\",\n\t\"./barcode-svgrepo-com.svg\": \"./src/PosImages/barcode-svgrepo-com.svg\",\n\t\"./barcodeScanner-error.svg\": \"./src/PosImages/barcodeScanner-error.svg\",\n\t\"./barcodeScanner1.svg\": \"./src/PosImages/barcodeScanner1.svg\",\n\t\"./barcodeScanner2.svg\": \"./src/PosImages/barcodeScanner2.svg\",\n\t\"./bg.jpg\": \"./src/PosImages/bg.jpg\",\n\t\"./brand.svg\": \"./src/PosImages/brand.svg\",\n\t\"./calendar.svg\": \"./src/PosImages/calendar.svg\",\n\t\"./calendar_2020.svg\": \"./src/PosImages/calendar_2020.svg\",\n\t\"./calendar_icon_range_2020.svg\": \"./src/PosImages/calendar_icon_range_2020.svg\",\n\t\"./cash.png\": \"./src/PosImages/cash.png\",\n\t\"./cash.svg\": \"./src/PosImages/cash.svg\",\n\t\"./cashIcon_2020.svg\": \"./src/PosImages/cashIcon_2020.svg\",\n\t\"./cashIcon_2023.svg\": \"./src/PosImages/cashIcon_2023.svg\",\n\t\"./category.svg\": \"./src/PosImages/category.svg\",\n\t\"./checkMark.green.svg\": \"./src/PosImages/checkMark.green.svg\",\n\t\"./checkMark3.svg\": \"./src/PosImages/checkMark3.svg\",\n\t\"./cin7-core.svg\": \"./src/PosImages/cin7-core.svg\",\n\t\"./clip.svg\": \"./src/PosImages/clip.svg\",\n\t\"./close.svg\": \"./src/PosImages/close.svg\",\n\t\"./closed-sign.svg\": \"./src/PosImages/closed-sign.svg\",\n\t\"./cog_2020.svg\": \"./src/PosImages/cog_2020.svg\",\n\t\"./comment-alt.svg\": \"./src/PosImages/comment-alt.svg\",\n\t\"./complete-btn.png\": \"./src/PosImages/complete-btn.png\",\n\t\"./complete.png\": \"./src/PosImages/complete.png\",\n\t\"./copy_2020.svg\": \"./src/PosImages/copy_2020.svg\",\n\t\"./credit-card.png\": \"./src/PosImages/credit-card.png\",\n\t\"./creditCard.svg\": \"./src/PosImages/creditCard.svg\",\n\t\"./creditCardIcon_2020.svg\": \"./src/PosImages/creditCardIcon_2020.svg\",\n\t\"./creditCardIcon_2023.svg\": \"./src/PosImages/creditCardIcon_2023.svg\",\n\t\"./customers-icon_2020.svg\": \"./src/PosImages/customers-icon_2020.svg\",\n\t\"./customers.svg\": \"./src/PosImages/customers.svg\",\n\t\"./dashboard-icon_2020.svg\": \"./src/PosImages/dashboard-icon_2020.svg\",\n\t\"./dashboard.svg\": \"./src/PosImages/dashboard.svg\",\n\t\"./date-left.png\": \"./src/PosImages/date-left.png\",\n\t\"./date-right.png\": \"./src/PosImages/date-right.png\",\n\t\"./delete-red.svg\": \"./src/PosImages/delete-red.svg\",\n\t\"./delete.svg\": \"./src/PosImages/delete.svg\",\n\t\"./delivery-truck.svg\": \"./src/PosImages/delivery-truck.svg\",\n\t\"./display.svg\": \"./src/PosImages/display.svg\",\n\t\"./double-left-chevron.svg\": \"./src/PosImages/double-left-chevron.svg\",\n\t\"./dp_add-head__back.png\": \"./src/PosImages/dp_add-head__back.png\",\n\t\"./dp_add-head__close.png\": \"./src/PosImages/dp_add-head__close.png\",\n\t\"./dp_arrow-left.png\": \"./src/PosImages/dp_arrow-left.png\",\n\t\"./dp_arrow-right.png\": \"./src/PosImages/dp_arrow-right.png\",\n\t\"./dp_arrow_1.png\": \"./src/PosImages/dp_arrow_1.png\",\n\t\"./dp_arrow_2.png\": \"./src/PosImages/dp_arrow_2.png\",\n\t\"./dp_arrow_3.png\": \"./src/PosImages/dp_arrow_3.png\",\n\t\"./dp_arrow_4.png\": \"./src/PosImages/dp_arrow_4.png\",\n\t\"./dp_catalogue__cart-item_add.png\": \"./src/PosImages/dp_catalogue__cart-item_add.png\",\n\t\"./dp_catalogue__cart-top-cart.png\": \"./src/PosImages/dp_catalogue__cart-top-cart.png\",\n\t\"./dp_catalogue__cart-top-settings.png\": \"./src/PosImages/dp_catalogue__cart-top-settings.png\",\n\t\"./dp_catalogue__products-top-add-white.png\": \"./src/PosImages/dp_catalogue__products-top-add-white.png\",\n\t\"./dp_catalogue__products-top-add.png\": \"./src/PosImages/dp_catalogue__products-top-add.png\",\n\t\"./dp_catalogue__products-top-caption.png\": \"./src/PosImages/dp_catalogue__products-top-caption.png\",\n\t\"./dp_catalogue__products-top-close.png\": \"./src/PosImages/dp_catalogue__products-top-close.png\",\n\t\"./dp_catalogue__products-top-nav-toggle.png\": \"./src/PosImages/dp_catalogue__products-top-nav-toggle.png\",\n\t\"./dp_catalogue__products-top-search.png\": \"./src/PosImages/dp_catalogue__products-top-search.png\",\n\t\"./dp_custom-file-control.png\": \"./src/PosImages/dp_custom-file-control.png\",\n\t\"./dp_customers-table__item-redact.png\": \"./src/PosImages/dp_customers-table__item-redact.png\",\n\t\"./dp_customers-table__item-toggle.png\": \"./src/PosImages/dp_customers-table__item-toggle.png\",\n\t\"./dp_drawer-list__img_1.png\": \"./src/PosImages/dp_drawer-list__img_1.png\",\n\t\"./dp_drawer-list__img_2.png\": \"./src/PosImages/dp_drawer-list__img_2.png\",\n\t\"./dp_drawer-list__img_3.png\": \"./src/PosImages/dp_drawer-list__img_3.png\",\n\t\"./dp_drawer-list__img_4.png\": \"./src/PosImages/dp_drawer-list__img_4.png\",\n\t\"./dp_drawer-list__img_5.png\": \"./src/PosImages/dp_drawer-list__img_5.png\",\n\t\"./dp_drawer-user__img.png\": \"./src/PosImages/dp_drawer-user__img.png\",\n\t\"./dp_filter-select-up.png\": \"./src/PosImages/dp_filter-select-up.png\",\n\t\"./dp_filter-select.png\": \"./src/PosImages/dp_filter-select.png\",\n\t\"./dp_form-control-search.png\": \"./src/PosImages/dp_form-control-search.png\",\n\t\"./dp_form-control_note.png\": \"./src/PosImages/dp_form-control_note.png\",\n\t\"./dp_modal-note-sale-2.png\": \"./src/PosImages/dp_modal-note-sale-2.png\",\n\t\"./dp_modal-note-sale.png\": \"./src/PosImages/dp_modal-note-sale.png\",\n\t\"./dp_modal-select-item__val-less.png\": \"./src/PosImages/dp_modal-select-item__val-less.png\",\n\t\"./dp_modal-select-item__val-more.png\": \"./src/PosImages/dp_modal-select-item__val-more.png\",\n\t\"./dp_modal__back.png\": \"./src/PosImages/dp_modal__back.png\",\n\t\"./dp_note-table__item-go.png\": \"./src/PosImages/dp_note-table__item-go.png\",\n\t\"./dp_payment__info-pay-done.png\": \"./src/PosImages/dp_payment__info-pay-done.png\",\n\t\"./dp_payment__info-pay-input.png\": \"./src/PosImages/dp_payment__info-pay-input.png\",\n\t\"./dp_payment__info-text-add.png\": \"./src/PosImages/dp_payment__info-text-add.png\",\n\t\"./dropdown1.svg\": \"./src/PosImages/dropdown1.svg\",\n\t\"./dropdown2.svg\": \"./src/PosImages/dropdown2.svg\",\n\t\"./dropdown2.up.svg\": \"./src/PosImages/dropdown2.up.svg\",\n\t\"./dropdown3.svg\": \"./src/PosImages/dropdown3.svg\",\n\t\"./editPencilRecord_2020.svg\": \"./src/PosImages/editPencilRecord_2020.svg\",\n\t\"./email.svg\": \"./src/PosImages/email.svg\",\n\t\"./email.white.svg\": \"./src/PosImages/email.white.svg\",\n\t\"./emailed.svg\": \"./src/PosImages/emailed.svg\",\n\t\"./empty.jpg\": \"./src/PosImages/empty.jpg\",\n\t\"./enter.png\": \"./src/PosImages/enter.png\",\n\t\"./export.svg\": \"./src/PosImages/export.svg\",\n\t\"./export_2020.svg\": \"./src/PosImages/export_2020.svg\",\n\t\"./eye-filled.svg\": \"./src/PosImages/eye-filled.svg\",\n\t\"./face-scan.svg\": \"./src/PosImages/face-scan.svg\",\n\t\"./favicon.png\": \"./src/PosImages/favicon.png\",\n\t\"./filter.svg\": \"./src/PosImages/filter.svg\",\n\t\"./filters_button_2020.svg\": \"./src/PosImages/filters_button_2020.svg\",\n\t\"./giftCard.svg\": \"./src/PosImages/giftCard.svg\",\n\t\"./giftCardIcon_2020.svg\": \"./src/PosImages/giftCardIcon_2020.svg\",\n\t\"./giftCardIcon_2023.svg\": \"./src/PosImages/giftCardIcon_2023.svg\",\n\t\"./go-into.png\": \"./src/PosImages/go-into.png\",\n\t\"./google-logo.svg\": \"./src/PosImages/google-logo.svg\",\n\t\"./infoIcon_2020.svg\": \"./src/PosImages/infoIcon_2020.svg\",\n\t\"./info_icon.svg\": \"./src/PosImages/info_icon.svg\",\n\t\"./inventory-icon_2020.svg\": \"./src/PosImages/inventory-icon_2020.svg\",\n\t\"./inventory.svg\": \"./src/PosImages/inventory.svg\",\n\t\"./keyboardIcon_2023.svg\": \"./src/PosImages/keyboardIcon_2023.svg\",\n\t\"./logo.png\": \"./src/PosImages/logo.png\",\n\t\"./mail_2020.svg\": \"./src/PosImages/mail_2020.svg\",\n\t\"./menu-hamburger_2020.svg\": \"./src/PosImages/menu-hamburger_2020.svg\",\n\t\"./menu-tabs.svg\": \"./src/PosImages/menu-tabs.svg\",\n\t\"./menu.svg\": \"./src/PosImages/menu.svg\",\n\t\"./ms.svg\": \"./src/PosImages/ms.svg\",\n\t\"./mstile-150x150.png\": \"./src/PosImages/mstile-150x150.png\",\n\t\"./next.black.svg\": \"./src/PosImages/next.black.svg\",\n\t\"./nextRound_2020.svg\": \"./src/PosImages/nextRound_2020.svg\",\n\t\"./ok.png\": \"./src/PosImages/ok.png\",\n\t\"./openInnerTable_2020.svg\": \"./src/PosImages/openInnerTable_2020.svg\",\n\t\"./outlet.svg\": \"./src/PosImages/outlet.svg\",\n\t\"./paginatorLeftDouble_2020.svg\": \"./src/PosImages/paginatorLeftDouble_2020.svg\",\n\t\"./paginatorLeftSingle_2020.svg\": \"./src/PosImages/paginatorLeftSingle_2020.svg\",\n\t\"./paginatorRightDouble_2020.svg\": \"./src/PosImages/paginatorRightDouble_2020.svg\",\n\t\"./paginatorRightSingle_2020.svg\": \"./src/PosImages/paginatorRightSingle_2020.svg\",\n\t\"./paper-warning2.svg\": \"./src/PosImages/paper-warning2.svg\",\n\t\"./password.svg\": \"./src/PosImages/password.svg\",\n\t\"./pay-busket_2020.svg\": \"./src/PosImages/pay-busket_2020.svg\",\n\t\"./paymentKeyboard.svg\": \"./src/PosImages/paymentKeyboard.svg\",\n\t\"./paymentSystem2.svg\": \"./src/PosImages/paymentSystem2.svg\",\n\t\"./paymentSystem3.svg\": \"./src/PosImages/paymentSystem3.svg\",\n\t\"./paymentSystem4.svg\": \"./src/PosImages/paymentSystem4.svg\",\n\t\"./prev.black.svg\": \"./src/PosImages/prev.black.svg\",\n\t\"./prevRound_2020.svg\": \"./src/PosImages/prevRound_2020.svg\",\n\t\"./printButtonBlack_2020.svg\": \"./src/PosImages/printButtonBlack_2020.svg\",\n\t\"./printButton_2020.svg\": \"./src/PosImages/printButton_2020.svg\",\n\t\"./printLabels.svg\": \"./src/PosImages/printLabels.svg\",\n\t\"./printer-error.svg\": \"./src/PosImages/printer-error.svg\",\n\t\"./printer1.svg\": \"./src/PosImages/printer1.svg\",\n\t\"./printer2.svg\": \"./src/PosImages/printer2.svg\",\n\t\"./printer3.svg\": \"./src/PosImages/printer3.svg\",\n\t\"./question-mark.png\": \"./src/PosImages/question-mark.png\",\n\t\"./question-mark2.png\": \"./src/PosImages/question-mark2.png\",\n\t\"./quickKeysIcon_2020.svg\": \"./src/PosImages/quickKeysIcon_2020.svg\",\n\t\"./refundSuccessful.svg\": \"./src/PosImages/refundSuccessful.svg\",\n\t\"./register-error.svg\": \"./src/PosImages/register-error.svg\",\n\t\"./register.svg\": \"./src/PosImages/register.svg\",\n\t\"./reportType.svg\": \"./src/PosImages/reportType.svg\",\n\t\"./reports-icon_2020.svg\": \"./src/PosImages/reports-icon_2020.svg\",\n\t\"./reports.svg\": \"./src/PosImages/reports.svg\",\n\t\"./rightArrow.svg\": \"./src/PosImages/rightArrow.svg\",\n\t\"./role.svg\": \"./src/PosImages/role.svg\",\n\t\"./safari-pinned-tab.png\": \"./src/PosImages/safari-pinned-tab.png\",\n\t\"./saleComplete.svg\": \"./src/PosImages/saleComplete.svg\",\n\t\"./scan.png\": \"./src/PosImages/scan.png\",\n\t\"./scanner.svg\": \"./src/PosImages/scanner.svg\",\n\t\"./sell-icon_2020.svg\": \"./src/PosImages/sell-icon_2020.svg\",\n\t\"./sell.svg\": \"./src/PosImages/sell.svg\",\n\t\"./session-icon_2020.svg\": \"./src/PosImages/session-icon_2020.svg\",\n\t\"./setting.svg\": \"./src/PosImages/setting.svg\",\n\t\"./settings.svg\": \"./src/PosImages/settings.svg\",\n\t\"./setup-icon_2020.svg\": \"./src/PosImages/setup-icon_2020.svg\",\n\t\"./setup.svg\": \"./src/PosImages/setup.svg\",\n\t\"./signin-background.svg\": \"./src/PosImages/signin-background.svg\",\n\t\"./status.svg\": \"./src/PosImages/status.svg\",\n\t\"./store-credit.png\": \"./src/PosImages/store-credit.png\",\n\t\"./sync-alt.svg\": \"./src/PosImages/sync-alt.svg\",\n\t\"./sync.svg\": \"./src/PosImages/sync.svg\",\n\t\"./tiles.svg\": \"./src/PosImages/tiles.svg\",\n\t\"./trash_2020.svg\": \"./src/PosImages/trash_2020.svg\",\n\t\"./trash_2023.svg\": \"./src/PosImages/trash_2023.svg\",\n\t\"./trash_red_s.png\": \"./src/PosImages/trash_red_s.png\",\n\t\"./undo.png\": \"./src/PosImages/undo.png\",\n\t\"./user-icon_2020.svg\": \"./src/PosImages/user-icon_2020.svg\",\n\t\"./user.svg\": \"./src/PosImages/user.svg\",\n\t\"./userGreen.svg\": \"./src/PosImages/userGreen.svg\",\n\t\"./users-icon_2020.svg\": \"./src/PosImages/users-icon_2020.svg\",\n\t\"./validationError.png\": \"./src/PosImages/validationError.png\",\n\t\"./validationWarning.png\": \"./src/PosImages/validationWarning.png\",\n\t\"./warn.png\": \"./src/PosImages/warn.png\",\n\t\"./warning.svg\": \"./src/PosImages/warning.svg\",\n\t\"./wrong.svg\": \"./src/PosImages/wrong.svg\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/PosImages sync recursive \\\\.(svg%7Cpng%7Cjpg)$\";","var map = {\n\t\"./addCustomerPartial.html\": \"./src/PosViews/addCustomerPartial.html\",\n\t\"./addNotesDialogPartial.html\": \"./src/PosViews/addNotesDialogPartial.html\",\n\t\"./addProductPartial.html\": \"./src/PosViews/addProductPartial.html\",\n\t\"./addSalesRepresentativePartial.html\": \"./src/PosViews/addSalesRepresentativePartial.html\",\n\t\"./addShippingAddressPartial.html\": \"./src/PosViews/addShippingAddressPartial.html\",\n\t\"./addStockTakePartial.html\": \"./src/PosViews/addStockTakePartial.html\",\n\t\"./addSurchargePartial.html\": \"./src/PosViews/addSurchargePartial.html\",\n\t\"./availabilityCheckPartial.html\": \"./src/PosViews/availabilityCheckPartial.html\",\n\t\"./backScreenTemplates.html\": \"./src/PosViews/backScreenTemplates.html\",\n\t\"./cameraScanSequentialPartial.html\": \"./src/PosViews/cameraScanSequentialPartial.html\",\n\t\"./cashManagementPartial.html\": \"./src/PosViews/cashManagementPartial.html\",\n\t\"./cashRoundingDialogPartial.html\": \"./src/PosViews/cashRoundingDialogPartial.html\",\n\t\"./certificate-error.component.html\": \"./src/PosViews/certificate-error.component.html\",\n\t\"./changeLanguagePartial.html\": \"./src/PosViews/changeLanguagePartial.html\",\n\t\"./changePasswordPartial.html\": \"./src/PosViews/changePasswordPartial.html\",\n\t\"./checkoutProductsAvailabilityInsufficientDialogPartial.html\": \"./src/PosViews/checkoutProductsAvailabilityInsufficientDialogPartial.html\",\n\t\"./clickAndCollectGridPartial.html\": \"./src/PosViews/clickAndCollectGridPartial.html\",\n\t\"./clickAndCollectModalDialogPartial.html\": \"./src/PosViews/clickAndCollectModalDialogPartial.html\",\n\t\"./clickAndCollectScanBatchDialogPartial.html\": \"./src/PosViews/clickAndCollectScanBatchDialogPartial.html\",\n\t\"./couponDialogPartial.html\": \"./src/PosViews/couponDialogPartial.html\",\n\t\"./creditCardProcessingErrorPartial.html\": \"./src/PosViews/creditCardProcessingErrorPartial.html\",\n\t\"./customDialog2Partial.html\": \"./src/PosViews/customDialog2Partial.html\",\n\t\"./customDialogPartial.html\": \"./src/PosViews/customDialogPartial.html\",\n\t\"./customSaleDialogPartial.html\": \"./src/PosViews/customSaleDialogPartial.html\",\n\t\"./customerDisplaySetupDialogPartial.html\": \"./src/PosViews/customerDisplaySetupDialogPartial.html\",\n\t\"./customerEmailWarningDialog.html\": \"./src/PosViews/customerEmailWarningDialog.html\",\n\t\"./customersPartial.html\": \"./src/PosViews/customersPartial.html\",\n\t\"./dashboardDetailsPartial.html\": \"./src/PosViews/dashboardDetailsPartial.html\",\n\t\"./dashboardPartial.html\": \"./src/PosViews/dashboardPartial.html\",\n\t\"./dateRangeSelector.html\": \"./src/PosViews/dateRangeSelector.html\",\n\t\"./deliveryCalendarPartial.html\": \"./src/PosViews/deliveryCalendarPartial.html\",\n\t\"./deliveryDialogPartial.html\": \"./src/PosViews/deliveryDialogPartial.html\",\n\t\"./deliveryPartial.html\": \"./src/PosViews/deliveryPartial.html\",\n\t\"./emailReportDialogPartial.html\": \"./src/PosViews/emailReportDialogPartial.html\",\n\t\"./errorDialogPartial.html\": \"./src/PosViews/errorDialogPartial.html\",\n\t\"./fullCalendarPartial.html\": \"./src/PosViews/fullCalendarPartial.html\",\n\t\"./giftCardPayPartial.html\": \"./src/PosViews/giftCardPayPartial.html\",\n\t\"./giftCardSalePartial.html\": \"./src/PosViews/giftCardSalePartial.html\",\n\t\"./headerPartial.html\": \"./src/PosViews/headerPartial.html\",\n\t\"./homePartial.html\": \"./src/PosViews/homePartial.html\",\n\t\"./layByPaymentDateDialogPartial.html\": \"./src/PosViews/layByPaymentDateDialogPartial.html\",\n\t\"./linklyPinPadPairing.html\": \"./src/PosViews/linklyPinPadPairing.html\",\n\t\"./loginPartial.html\": \"./src/PosViews/loginPartial.html\",\n\t\"./loyaltyConfirmPartial.html\": \"./src/PosViews/loyaltyConfirmPartial.html\",\n\t\"./loyaltyLionDialogPartial.html\": \"./src/PosViews/loyaltyLionDialogPartial.html\",\n\t\"./messageBoxPartial.html\": \"./src/PosViews/messageBoxPartial.html\",\n\t\"./numberKeyboardPartial.html\": \"./src/PosViews/numberKeyboardPartial.html\",\n\t\"./offlinePaymentsDialogPartial.html\": \"./src/PosViews/offlinePaymentsDialogPartial.html\",\n\t\"./offlineSalesPartial.html\": \"./src/PosViews/offlineSalesPartial.html\",\n\t\"./openCloseRegistryPartial.html\": \"./src/PosViews/openCloseRegistryPartial.html\",\n\t\"./partialPaymentsDialogPartial.html\": \"./src/PosViews/partialPaymentsDialogPartial.html\",\n\t\"./paymentModalSetupPartial.html\": \"./src/PosViews/paymentModalSetupPartial.html\",\n\t\"./pdfWebPrintPartial.html\": \"./src/PosViews/pdfWebPrintPartial.html\",\n\t\"./pinCodePartial.html\": \"./src/PosViews/pinCodePartial.html\",\n\t\"./pinCodeSetupPartial.html\": \"./src/PosViews/pinCodeSetupPartial.html\",\n\t\"./prepareAnyDayClosurePartial.html\": \"./src/PosViews/prepareAnyDayClosurePartial.html\",\n\t\"./printerModalSetupPartial.html\": \"./src/PosViews/printerModalSetupPartial.html\",\n\t\"./productLabelPrintPartial.html\": \"./src/PosViews/productLabelPrintPartial.html\",\n\t\"./productManagementPartial.html\": \"./src/PosViews/productManagementPartial.html\",\n\t\"./productManagementPriceDlgPartial.html\": \"./src/PosViews/productManagementPriceDlgPartial.html\",\n\t\"./productOptionsPartial.html\": \"./src/PosViews/productOptionsPartial.html\",\n\t\"./quoteEmailDialogPartial.html\": \"./src/PosViews/quoteEmailDialogPartial.html\",\n\t\"./receiptDialogPartial.html\": \"./src/PosViews/receiptDialogPartial.html\",\n\t\"./receiptEmailDialogPartial.html\": \"./src/PosViews/receiptEmailDialogPartial.html\",\n\t\"./reportCloseRegistryDetailsPartial.html\": \"./src/PosViews/reportCloseRegistryDetailsPartial.html\",\n\t\"./reportCloseRegistryPartial.html\": \"./src/PosViews/reportCloseRegistryPartial.html\",\n\t\"./reportGiftCardPartial.html\": \"./src/PosViews/reportGiftCardPartial.html\",\n\t\"./reportInTransitColumnSelectorPartial.html\": \"./src/PosViews/reportInTransitColumnSelectorPartial.html\",\n\t\"./reportInTransitPartial.html\": \"./src/PosViews/reportInTransitPartial.html\",\n\t\"./reportInventoryColumnSelectorPartial.html\": \"./src/PosViews/reportInventoryColumnSelectorPartial.html\",\n\t\"./reportInventoryPartial.html\": \"./src/PosViews/reportInventoryPartial.html\",\n\t\"./reportPaymentTypeSummaryPartial.html\": \"./src/PosViews/reportPaymentTypeSummaryPartial.html\",\n\t\"./reportProductPerformanceColumnSelectorPartial.html\": \"./src/PosViews/reportProductPerformanceColumnSelectorPartial.html\",\n\t\"./reportProductPerformancePartial.html\": \"./src/PosViews/reportProductPerformancePartial.html\",\n\t\"./reportSalesSummaryColumnSelectorPartial.html\": \"./src/PosViews/reportSalesSummaryColumnSelectorPartial.html\",\n\t\"./reportSalesSummaryPartial.html\": \"./src/PosViews/reportSalesSummaryPartial.html\",\n\t\"./reportStoreCreditPartial.html\": \"./src/PosViews/reportStoreCreditPartial.html\",\n\t\"./reportSurchargePartial.html\": \"./src/PosViews/reportSurchargePartial.html\",\n\t\"./requestCancelDialogPartial.html\": \"./src/PosViews/requestCancelDialogPartial.html\",\n\t\"./returnCompliteDialogPartial.html\": \"./src/PosViews/returnCompliteDialogPartial.html\",\n\t\"./returnPaymentsDialogPartial.html\": \"./src/PosViews/returnPaymentsDialogPartial.html\",\n\t\"./returnSaleDialogPartial.html\": \"./src/PosViews/returnSaleDialogPartial.html\",\n\t\"./saleHistoryDetailsDialogPartial.html\": \"./src/PosViews/saleHistoryDetailsDialogPartial.html\",\n\t\"./saleHistoryFilterDialogPartial.html\": \"./src/PosViews/saleHistoryFilterDialogPartial.html\",\n\t\"./saleSummaryPartial.html\": \"./src/PosViews/saleSummaryPartial.html\",\n\t\"./salesHistoryPartial.html\": \"./src/PosViews/salesHistoryPartial.html\",\n\t\"./salesParkedPartial.html\": \"./src/PosViews/salesParkedPartial.html\",\n\t\"./scanSerialNumberDialogPartial.html\": \"./src/PosViews/scanSerialNumberDialogPartial.html\",\n\t\"./scannerModalSetupPartial.html\": \"./src/PosViews/scannerModalSetupPartial.html\",\n\t\"./secondScreen.html\": \"./src/PosViews/secondScreen.html\",\n\t\"./selectOutletRegistryPartial.html\": \"./src/PosViews/selectOutletRegistryPartial.html\",\n\t\"./selectTaxDialogPartial.html\": \"./src/PosViews/selectTaxDialogPartial.html\",\n\t\"./sellCheckoutSectionNewPartial.html\": \"./src/PosViews/sellCheckoutSectionNewPartial.html\",\n\t\"./sellCheckoutSectionPartial.html\": \"./src/PosViews/sellCheckoutSectionPartial.html\",\n\t\"./sellPartial.html\": \"./src/PosViews/sellPartial.html\",\n\t\"./sellProductNamePartial.html\": \"./src/PosViews/sellProductNamePartial.html\",\n\t\"./sellProductPriceNewPartial.html\": \"./src/PosViews/sellProductPriceNewPartial.html\",\n\t\"./sellProductPricePartial.html\": \"./src/PosViews/sellProductPricePartial.html\",\n\t\"./sellToPayNewPartial.html\": \"./src/PosViews/sellToPayNewPartial.html\",\n\t\"./sellToPayPartial.html\": \"./src/PosViews/sellToPayPartial.html\",\n\t\"./sellTopInfoNewPartial.html\": \"./src/PosViews/sellTopInfoNewPartial.html\",\n\t\"./sellTopInfoPartial.html\": \"./src/PosViews/sellTopInfoPartial.html\",\n\t\"./sellTotalSectionNewPartial.html\": \"./src/PosViews/sellTotalSectionNewPartial.html\",\n\t\"./sellTotalSectionPartial.html\": \"./src/PosViews/sellTotalSectionPartial.html\",\n\t\"./setPassword.html\": \"./src/PosViews/setPassword.html\",\n\t\"./setupLabelPrinterSelectFromListDlgPartial.html\": \"./src/PosViews/setupLabelPrinterSelectFromListDlgPartial.html\",\n\t\"./setupPartial.html\": \"./src/PosViews/setupPartial.html\",\n\t\"./setupPrinterSelectFromListDlgPartial.html\": \"./src/PosViews/setupPrinterSelectFromListDlgPartial.html\",\n\t\"./sideBarPartial.html\": \"./src/PosViews/sideBarPartial.html\",\n\t\"./standaloneExchangeDialogPartial.html\": \"./src/PosViews/standaloneExchangeDialogPartial.html\",\n\t\"./standaloneRefundDialogPartial.html\": \"./src/PosViews/standaloneRefundDialogPartial.html\",\n\t\"./stockFamilyProductMatrixPartial.html\": \"./src/PosViews/stockFamilyProductMatrixPartial.html\",\n\t\"./stockItemQuantityDlgPartial.html\": \"./src/PosViews/stockItemQuantityDlgPartial.html\",\n\t\"./stockOrderingCommentsDialogPartial.html\": \"./src/PosViews/stockOrderingCommentsDialogPartial.html\",\n\t\"./stockOrderingPartial.html\": \"./src/PosViews/stockOrderingPartial.html\",\n\t\"./stockPurchaseOrderDetailsPartial.html\": \"./src/PosViews/stockPurchaseOrderDetailsPartial.html\",\n\t\"./stockTakePartial.html\": \"./src/PosViews/stockTakePartial.html\",\n\t\"./stockTransferAddItemPartial.html\": \"./src/PosViews/stockTransferAddItemPartial.html\",\n\t\"./stockTransferOrderAddItemPartial.html\": \"./src/PosViews/stockTransferOrderAddItemPartial.html\",\n\t\"./stockTransferOrderDetailsPartial.html\": \"./src/PosViews/stockTransferOrderDetailsPartial.html\",\n\t\"./stockTransferOrderQuantityAbsolutePartial.html\": \"./src/PosViews/stockTransferOrderQuantityAbsolutePartial.html\",\n\t\"./stockTransferOrderReorderDialogPartial.html\": \"./src/PosViews/stockTransferOrderReorderDialogPartial.html\",\n\t\"./stockTransferOrderScanGridPartial.html\": \"./src/PosViews/stockTransferOrderScanGridPartial.html\",\n\t\"./stockTransferOrderScanGridPartial2.html\": \"./src/PosViews/stockTransferOrderScanGridPartial2.html\",\n\t\"./stockTransferOrderSetQuantityDialogPartial.html\": \"./src/PosViews/stockTransferOrderSetQuantityDialogPartial.html\",\n\t\"./stockTransferPartial.html\": \"./src/PosViews/stockTransferPartial.html\",\n\t\"./stockTransferProcessPartial.html\": \"./src/PosViews/stockTransferProcessPartial.html\",\n\t\"./stockTransferScanGridPartial.html\": \"./src/PosViews/stockTransferScanGridPartial.html\",\n\t\"./stockTransferScanGridPartial2.html\": \"./src/PosViews/stockTransferScanGridPartial2.html\",\n\t\"./stockTransferSetQuantityDialogPartial.html\": \"./src/PosViews/stockTransferSetQuantityDialogPartial.html\",\n\t\"./stocktakeProcessPartial.html\": \"./src/PosViews/stocktakeProcessPartial.html\",\n\t\"./stocktakeQuantityAbsolutePartial.html\": \"./src/PosViews/stocktakeQuantityAbsolutePartial.html\",\n\t\"./stocktakeScanGridPartial.html\": \"./src/PosViews/stocktakeScanGridPartial.html\",\n\t\"./stocktakeScanPartial.html\": \"./src/PosViews/stocktakeScanPartial.html\",\n\t\"./stocktakeSetQuantityDialogPartial.html\": \"./src/PosViews/stocktakeSetQuantityDialogPartial.html\",\n\t\"./storeCreditConfirmPartial.html\": \"./src/PosViews/storeCreditConfirmPartial.html\",\n\t\"./userManagementPartial.html\": \"./src/PosViews/userManagementPartial.html\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/PosViews sync recursive \\\\.html$\";","angular.module('mainApp').run(['gettextCatalog', function (gettextCatalog) {\r\n/* jshint -W100 */\r\n    gettextCatalog.setStrings('en-GB', {});\r\n    gettextCatalog.setStrings('en-US', {\"&nbsp;\":\"&nbsp;\",\"(Family)\":\"(Family)\",\"*Please enter a sale order number, customer name or an invoice number in the search field to\\r\\n                    populate all sales including backend sales from other sales channels.\":\"*Please enter a sale order number, customer name or an invoice number in the search field to\\r\\n                    populate all sales including backend sales from other sales channels.\",\"- disabled\":\"- disabled\",\"<b style=\\\"font-weight: bold;\\\">Are you sure?</b>\":\"<b style=\\\"font-weight: bold;\\\">Are you sure?</b>\",\"<b style=\\\"font-weight: bold;\\\">Are you sure?</b><br>\\n                        All changes will be lost. Would you like to continue?\":\"<b style=\\\"font-weight: bold;\\\">Are you sure?</b><br>\\n                        All changes will be lost. Would you like to continue?\",\"<img src=\\\"PosImages/arrow-left-clear_2020.svg\\\" alt=\\\"arrow\\\" style=\\\"height: auto;\\n                                    width: 15px;\\n                                    position: relative;\\n                                    top: 1px;\\n                                    right: 5px;\\\">\\n                            Back to list\":\"<img src=\\\"PosImages/arrow-left-clear_2020.svg\\\" alt=\\\"arrow\\\" style=\\\"height: auto;\\n                                    width: 15px;\\n                                    position: relative;\\n                                    top: 1px;\\n                                    right: 5px;\\\">\\n                            Back to list\",\"<img src=\\\"PosImages/delivery-truck.svg\\\" style=\\\"width:23px;\\\">&nbsp;\\n                                            <span translate>Schedule delivery</span>\":\"<img src=\\\"PosImages/delivery-truck.svg\\\" style=\\\"width:23px;\\\">&nbsp;\\n                                            <span translate>Schedule delivery</span>\",\"<img src=\\\"PosImages/printButtonBlack_2020.svg\\\">&nbsp;\\n                                            <span translate>Print receipt</span>\":\"<img src=\\\"PosImages/printButtonBlack_2020.svg\\\">&nbsp;\\n                                            <span translate>Print receipt</span>\",\"<img src=\\\"PosImages/wrong.svg\\\" alt=\\\"void\\\">\\n                        Void\":\"<img src=\\\"PosImages/wrong.svg\\\" alt=\\\"void\\\">\\n                        Void\",\"<span class=\\\"ng-scope\\\">Add new stock</span>\":\"<span class=\\\"ng-scope\\\">Add new stock</span>\",\"<span class=\\\"ng-scope\\\">Return</span>\":\"<span class=\\\"ng-scope\\\">Return</span>\",\"<span class=\\\"ng-scope\\\">Sale</span>\":\"<span class=\\\"ng-scope\\\">Sale</span>\",\"<span translate>Available at</span> {{currentOrder.fromLocationName}}\":\"<span translate>Available at</span> {{currentOrder.fromLocationName}}\",\"<span translate>Sign in to POS</span>\":\"<span translate>Sign in to POS</span>\",\"A coupon with this code has already been used or doesn't exist. Please enter another code.\":\"A coupon with this code has already been used or doesn't exist. Please enter another code.\",\"A product with a negative price cannot be added to the checkout.\":\"A product with a negative price cannot be added to the checkout.\",\"A product with this serial number has been already added to the checkout.\":\"A product with this serial number has been already added to the checkout.\",\"Account\":\"Account\",\"Account sale payments\":\"Account sale payments\",\"Account sales\":\"Account sales\",\"Account sales started or continued\":\"Account sales started or continued\",\"Actions\":\"Actions\",\"Activate user\":\"Activate user\",\"Activation code\":\"Activation code\",\"Add\":\"Add\",\"Add a new stocktake\":\"Add a new stocktake\",\"Add a product to your sale\":\"Add a product to your sale\",\"Add a sales representative to the sale\":\"Add a sales representative to the sale\",\"Add a stock transfer\":\"Add a stock transfer\",\"Add cash\":\"Add cash\",\"Add customer to the sale\":\"Add customer to the sale\",\"Add new customer\":\"Add new customer\",\"Add new product\":\"Add new product\",\"Add new user\":\"Add new user\",\"Add order\":\"Add order\",\"Add the sale representative to the sale order\":\"Add the sale representative to the sale order\",\"Address\":\"Address\",\"Address #. 'Address line' is required.\":\"Address #. 'Address line' is required.\",\"Address #. 'City' is required.\":\"Address #. 'City' is required.\",\"Address line 1\":\"Address line 1\",\"Address line 2\":\"Address line 2\",\"Addresses\":\"Addresses\",\"All\":\"All\",\"All application data has been successfully updated!\":\"All application data has been successfully updated!\",\"All barcodes were recognised and added to your document.\":\"All barcodes were recognized and added to your document.\",\"All low on stock\":\"All low on stock\",\"All outlets\":\"All outlets\",\"All registers\":\"All registers\",\"All roles\":\"All roles\",\"All sales\":\"All sales\",\"All statuses\":\"All statuses\",\"Allow stock adjustment\":\"Allow stock adjustment\",\"Already picked\":\"Already picked\",\"Always show quantity\":\"Always show quantity\",\"Amount\":\"Amount\",\"Amount to pay {{sum}} is larger than gift card {{code}} balance {{bal}}. The entire gift card balance will be used.\":\"Amount to pay {{sum}} is larger than gift card {{code}} balance {{bal}}. The entire gift card balance will be used.\",\"An error occurred during payment processing.\":\"An error occurred during payment processing.\",\"Applied coupon\":\"Applied coupon\",\"Apply\":\"Apply\",\"Apply coupon\":\"Apply coupon\",\"Apply filters\":\"Apply filters\",\"Apply surcharge\":\"Apply surcharge\",\"Are you sure that you want to delete this attachment?\":\"Are you sure that you want to delete this attachment?\",\"Are you sure you want to close this register?\":\"Are you sure you want to close this register?\",\"Are you sure you want to delete\":\"Are you sure you want to delete\",\"Are you sure you want to proceed with the sale?\":\"Are you sure you want to proceed with the sale?\",\"Are you sure you want to skip card machine processing?\":\"Are you sure you want to skip card machine processing?\",\"Attached by\":\"Attached by\",\"Auto-discover printer\":\"Auto-discover printer\",\"Available\":\"Available\",\"Available \\n                                            <span ng-if=\\\"currentOrder.fromLocationName\\\" translate>at <br> \\n                                            {{currentOrder.fromLocationName}}</span>\":\"Available \\n                                            <span ng-if=\\\"currentOrder.fromLocationName\\\" translate>at <br> \\n                                            {{currentOrder.fromLocationName}}</span>\",\"Available Paymentsense terminals:\":\"Available Paymentsense terminals:\",\"Available at\":\"Available at\",\"Available at {{currentOrder.fromLocationName}}\":\"Available at {{currentOrder.fromLocationName}}\",\"Available:\":\"Available:\",\"Average cost:\":\"Average cost:\",\"BIN\":\"BIN\",\"Back\":\"Back\",\"Back to product list\":\"Back to product list\",\"Back to sale\":\"Back to sale\",\"Balance\":\"Balance\",\"Balance:\":\"Balance:\",\"Barcode\":\"Barcode\",\"Barcode detected.\":\"Barcode detected.\",\"Barcode:\":\"Barcode:\",\"Basket size\":\"Basket size\",\"Basket value\":\"Basket value\",\"Batch\":\"Batch\",\"Batch/SN\":\"Batch/SN\",\"Batch/serial no.\":\"Batch/serial no.\",\"Batch/serial number not found.\":\"Batch/serial number not found.\",\"Billing address:\":\"Billing address:\",\"Bin\":\"Bin\",\"Brand\":\"Brand\",\"Brands\":\"Brands\",\"Breakdown of cash movement\":\"Breakdown of cash movement\",\"COGS\":\"COGS\",\"Can't open cash drawer automatically:\":\"Can't open cash drawer automatically:\",\"Cancel\":\"Cancel\",\"Cancel partial payments\":\"Cancel partial payments\",\"Cancel stocktake\":\"Cancel stocktake\",\"Cancelled\":\"Canceled\",\"Cancelled on\":\"Canceled on\",\"Cancelling transaction...\":\"Canceling transaction...\",\"Cannot log in to Google when offline.\":\"Cannot log in to Google when offline.\",\"Cannot log in when offline.\":\"Cannot log in when offline.\",\"Cannot sell gift card while offline\":\"Cannot sell gift card while offline\",\"Card machine end of day report data\":\"Card machine end of day report data\",\"Card payment system\":\"Card payment system\",\"Cash\":\"Cash\",\"Cash in\":\"Cash in\",\"Cash management\":\"Cash management\",\"Cash movements\":\"Cash movements\",\"Cash out\":\"Cash out\",\"Cash payment amount should be between 0 and\":\"Cash payment amount should be between 0 and\",\"Cash rounding\":\"Cash rounding\",\"Cash surcharge ({{currency_symbol}}&nbsp;{{paymentValidation.cashSurchargeAmount | number:2}} max)\":\"Cash surcharge ({{currency_symbol}}&nbsp;{{paymentValidation.cashSurchargeAmount | number:2}} max)\",\"Cash to refund\":\"Cash to refund\",\"Categories\":\"Categories\",\"Category\":\"Category\",\"Cc\":\"Cc\",\"Change\":\"Change\",\"Change\\n                                outlet|register\":\"Change\\n                                outlet|register\",\"Change host IP address\":\"Change host IP address\",\"Change language\":\"Change language\",\"Change outlet|register\":\"Change outlet|register\",\"Change password\":\"Change password\",\"Choose a different payment type\":\"Choose a different payment type\",\"Choose a document template\":\"Choose a document template\",\"Cin7 Core POS name is required.\":\"Cin7 Core POS name is required.\",\"City / suburb\":\"City / suburb\",\"Clear\":\"Clear\",\"Clear ({{countOffline}})\":\"Clear ({{countOffline}})\",\"Clear sale\":\"Clear sale\",\"Click & collect\":\"Click & collect\",\"Close\":\"Close\",\"Close Registry Details\":\"Close Registry Details\",\"Close date\":\"Close date\",\"Close day\":\"Close day\",\"Close menu\":\"Close menu\",\"Close register\":\"Close register\",\"Close register day\":\"Close register day\",\"Closed\":\"Closed\",\"Clover reader\":\"Clover reader\",\"Collect\":\"Collect\",\"Comment for product\":\"Comment for product\",\"Comments\":\"Comments\",\"Complete\":\"Complete\",\"Complete\\n                                    <!-- <img class=\\\"buttonImageOffset\\\" src=\\\"PosImages/complete-btn.png\\\" />\\n                                    <span class=\\\"completeButton-text\\\" translate>Complete</span> -->\":\"Complete\\n                                    <!-- <img class=\\\"buttonImageOffset\\\" src=\\\"PosImages/complete-btn.png\\\" />\\n                                    <span class=\\\"completeButton-text\\\" translate>Complete</span> -->\",\"Complete stocktake\":\"Complete stocktake\",\"Complete!\":\"Complete!\",\"Completed\":\"Completed\",\"Confirm\":\"Confirm\",\"Confirm cancellation of editing\":\"Confirm cancellation of editing\",\"Confirm password doesn't match\":\"Confirm password doesn't match\",\"Confirm password is required.\":\"Confirm password is required.\",\"Confirmation\":\"Confirmation\",\"Connect\":\"Connect\",\"Connect to a different payment system\":\"Connect to a different payment system\",\"Connect to the network and try again.\":\"Connect to the network and try again.\",\"Connect using Bluetooth: BT:00:11:22:33:FF:EE\":\"Connect using Bluetooth: BT:00:11:22:33:FF:EE\",\"Connect using IP or MAC address: TCP:192.168.0.100\":\"Connect using IP or MAC address: TCP:192.168.0.100\",\"Connect with a different printer\":\"Connect with a different printer\",\"Connection problems.\":\"Connection problems.\",\"Connection refused.\":\"Connection refused.\",\"Connection to the server has been interrupted while processing the refund. It could have been successfully processed. Please check sales history to confirm successful processing of this refund.\":\"Connection to the server has been interrupted while processing the refund. It could have been successfully processed. Please check sales history to confirm successful processing of this refund.\",\"Contact\":\"Contact\",\"Contact #. 'Name' is required.\":\"Contact #. 'Name' is required.\",\"Contact #. Please enter a valid email.\":\"Contact #. Please enter a valid email.\",\"Contact name\":\"Contact name\",\"Contacts\":\"Contacts\",\"Continue\":\"Continue\",\"Continue exchange\":\"Continue exchange\",\"Continue return\":\"Continue return\",\"Copies\":\"Copies\",\"Copy\":\"Copy\",\"Costing method\":\"Costing method\",\"Count:\":\"Count:\",\"Counted\":\"Counted\",\"Country\":\"Country\",\"Coupon code\":\"Coupon code\",\"Create a new customer\":\"Create a new customer\",\"Create an account\":\"Create an account\",\"Create exchange without sale\":\"Create exchange without sale\",\"Create refund without sale\":\"Create refund without sale\",\"Credit card\":\"Credit card\",\"Credit card payment amount should be between 0 and\":\"Credit card payment amount should be between 0 and\",\"Credit card surcharge:\":\"Credit card surcharge:\",\"Credit card {{idx}} payment amount should be between 0 and\":\"Credit card {{idx}} payment amount should be between 0 and\",\"Credit limit exceeded!\":\"Credit limit exceeded!\",\"Credit limit:\":\"Credit limit:\",\"Custom sale\":\"Custom sale\",\"Customer\":\"Customer\",\"Customer count\":\"Customer count\",\"Customer display setup\":\"Customer display setup\",\"Customer email is empty. Can not get customer information from LoyaltyLion.\":\"Customer email is empty. Can not get customer information from LoyaltyLion.\",\"Customer info\":\"Customer info\",\"Customer is on credit hold!\":\"Customer is on credit hold!\",\"Customer name\":\"Customer name\",\"Customer outstanding balance including this order is\":\"Customer outstanding balance including this order is\",\"Customer reference #:\":\"Customer reference #:\",\"Customer:\":\"Customer:\",\"Customers\":\"Customers\",\"Customers list\":\"Customers list\",\"Customise columns\":\"Customize columns\",\"Cut receipts\":\"Cut receipts\",\"Dashboard\":\"Dashboard\",\"Data created\":\"Data created\",\"Date\":\"Date\",\"Day\":\"Day\",\"Day closure date\":\"Day closure date\",\"Deactivate user\":\"Deactivate user\",\"Default billing address\":\"Default billing address\",\"Default shipping address\":\"Default shipping address\",\"Delete\":\"Delete\",\"Delete stocktake\":\"Delete stocktake\",\"Delete user\":\"Delete user\",\"Delivered\":\"Delivered\",\"Deliveries\":\"Deliveries\",\"Delivery\":\"Delivery\",\"Delivery #\":\"Delivery #\",\"Delivery calendar\":\"Delivery calendar\",\"Delivery should contain at least one item with a date and time filled in before saving.\":\"Delivery should contain at least one item with a date and time filled in before saving.\",\"Delivery task\":\"Delivery task\",\"Delivery task was cancelled.\":\"Delivery task was canceled.\",\"Delivery task was completed.\":\"Delivery task was completed.\",\"Delivery task will be cancelled. Would you like to continue?\":\"Delivery task will be canceled. Would you like to continue?\",\"Delivery task will be completed. Would you like to continue?\":\"Delivery task will be completed. Would you like to continue?\",\"Delivery tasks\":\"Delivery tasks\",\"Delivery was successfully saved.\":\"Delivery was successfully saved.\",\"Delivery without items will be removed. Would you like to continue?\":\"Delivery without items will be removed. Would you like to continue?\",\"Description\":\"Description\",\"Difference\":\"Difference\",\"Discard\":\"Discard\",\"Discount\":\"Discount\",\"Discount %\":\"Discount %\",\"Discount percent\":\"Discount percent\",\"Discount value\":\"Discount value\",\"Discount:\":\"Discount:\",\"Discounts\":\"Discounts\",\"Dismiss\":\"Dismiss\",\"Do not show this warning again\":\"Do not show this warning again\",\"Do you want to add payments to this sale?\":\"Do you want to add payments to this sale?\",\"Do you want to enable biometric sign-in for user ?\":\"Do you want to enable biometric sign-in for user ?\",\"Do you want to remove invalid payment methods?\":\"Do you want to remove invalid payment methods?\",\"Done\":\"Done\",\"Download\":\"Download\",\"Draft\":\"Draft\",\"Due\":\"Due\",\"Due date:\":\"Due date:\",\"Due:\":\"Due:\",\"Edit customer\":\"Edit customer\",\"Edit or delete assigned taxes for individual products\":\"Edit or delete assigned taxes for individual products\",\"Edit or delete assigned taxes for multiple products grouped by tax rules\":\"Edit or delete assigned taxes for multiple products grouped by tax rules\",\"Edit purchase order\":\"Edit purchase order\",\"Edit stock transfer\":\"Edit stock transfer\",\"Edit stock transfer order\":\"Edit stock transfer order\",\"Edit taxes\":\"Edit taxes\",\"Effective date\":\"Effective date\",\"Email\":\"Email\",\"Email address / login\":\"Email address / login\",\"Email address / username\":\"Email address / username\",\"Email is required.\":\"Email is required.\",\"Email purchase order\":\"Email purchase order\",\"Email quote\":\"Email quote\",\"Email receipt\":\"Email receipt\",\"Email report\":\"Email report\",\"Email subject\":\"Email subject\",\"Email:\":\"Email:\",\"Enable automatic opening\":\"Enable automatic opening\",\"Enable camera scanner\":\"Enable camera scanner\",\"Enable loyalty\":\"Enable loyalty\",\"Enable software keyboard\":\"Enable software keyboard\",\"Enough\":\"Enough\",\"Enter no less than {{cnt}} symbols to start searching.\":\"Enter no less than {{cnt}} symbols to start searching.\",\"Enter serial/batch #\":\"Enter serial/batch #\",\"Enter your Cin7 Core POS PIN\":\"Enter your Cin7 Core POS PIN\",\"Enter your new Cin7 Core POS PIN\":\"Enter your new Cin7 Core POS PIN\",\"Entered amount is larger than remaining amount.<br/>Please enter a smaller value.\":\"Entered amount is larger than remaining amount.<br/>Please enter a smaller value.\",\"Error\":\"Error\",\"Error processing the card:\":\"Error processing the card:\",\"Error sending email.\":\"Error sending email.\",\"Exchange\":\"Exchange\",\"Exchanged\":\"Exchanged\",\"Expected\":\"Expected\",\"Expense account\":\"Expense account\",\"Expiration date\":\"Expiration date\",\"Expiry date\":\"Expiry date\",\"Failed to complete fulfillment, please try again later or contact support.\":\"Failed to complete fulfillment, please try again later or contact support.\",\"Failed to convert sale, please try again later or contact support.\":\"Failed to convert sale, please try again later or contact support.\",\"Failed to load sale quote template.\":\"Failed to load sale quote template.\",\"Failed to load sale, please try again later or contact support.\":\"Failed to load sale, please try again later or contact support.\",\"Failed to perform auto fulfillment, please try again later or contact support.\":\"Failed to perform auto fulfillment, please try again later or contact support.\",\"Failed to remove attachment:\":\"Failed to remove attachment:\",\"File\":\"File\",\"Filters\":\"Filters\",\"Final product price is zero, so product count is set to 1.\":\"Final product price is zero, so product count is set to 1.\",\"Finish\":\"Finish\",\"Fixed\":\"Fixed\",\"Forgot password?\":\"Forgot password?\",\"From\":\"From\",\"From supplier\":\"From supplier\",\"From warehouse\":\"From warehouse\",\"Fulfill\":\"Fulfill\",\"Fulfill all\":\"Fulfill all\",\"Fulfillment\":\"Fulfillment\",\"Full calendar\":\"Full calendar\",\"Gift Card\":\"Gift Card\",\"Gift card\":\"Gift card\",\"Gift card #\":\"Gift card #\",\"Gift card cannot be refunded.\":\"Gift card cannot be refunded.\",\"Gift card code\":\"Gift card code\",\"Gift card history\":\"Gift card history\",\"Gift card payment is available in online mode only.\":\"Gift card payment is available in online mode only.\",\"Gift card price\":\"Gift card price\",\"Gift card support is disabled.\":\"Gift card support is disabled.\",\"Gift card with this code already exists.\":\"Gift card with this code already exists.\",\"Gift card {{code}} is being sold in this sale and can't be used for payment.\":\"Gift card {{code}} is being sold in this sale and can't be used for payment.\",\"Gift card:\":\"Gift card:\",\"Gift cards\":\"Gift cards\",\"Go back to login\":\"Go back to login\",\"Go to settings\":\"Go to settings\",\"Goods to pick\":\"Goods to pick\",\"Gross profit\":\"Gross profit\",\"Group register\":\"Group register\",\"Group variants\":\"Group variants\",\"Hide password\":\"Hide password\",\"Home\":\"Home\",\"If you really want to close this day, please, press 'Continue'\":\"If you really want to close this day, please, press 'Continue'\",\"Image\":\"Image\",\"Import products in bulk\":\"Import products in bulk\",\"In progress\":\"In progress\",\"In the web version, the standard browser printing form is used.\":\"In the web version, the standard browser printing form is used.\",\"In transit\":\"In transit\",\"Including tax\":\"Including tax\",\"Initiating {{type}}...\":\"Initiating {{type}}...\",\"Insufficient stock level for this batch.\":\"Insufficient stock level for this batch.\",\"Insufficient stock quantity detected in the following sale item(s):\":\"Insufficient stock quantity detected in the following sale item(s):\",\"Invalid number of copies was specified!<br/> Please, enter the number of copies between 1 and 10000.\":\"Invalid number of copies was specified!<br/> Please, enter the number of copies between 1 and 10000.\",\"Inventory\":\"Inventory\",\"Invoice #\":\"Invoice #\",\"Invoice #:\":\"Invoice #:\",\"Invoice date:\":\"Invoice date:\",\"Invoice number\":\"Invoice number\",\"Issue change of\":\"Issue change of\",\"It seems like the Cin7 Core POS configuration you are currently logged in is incomplete. To avoid posting incorrect sale transactions, your session will be terminated. Please contact your POS administrator/manager to resolve the issue.\":\"It seems like the Cin7 Core POS configuration you are currently logged in is incomplete. To avoid posting incorrect sale transactions, your session will be terminated. Please contact your POS administrator/manager to resolve the issue.\",\"It seems like this outlet/register combination is not available any more. Please select the outlet/register again.\":\"It seems like this outlet/register combination is not available any more. Please select the outlet/register again.\",\"Items have been successfully exchanged. Stock adjustment for returned items has been completed at {{outletName}}.\":\"Items have been successfully exchanged. Stock adjustment for returned items has been completed at {{outletName}}.\",\"JSON has been copied to clipboard.\":\"JSON has been copied to clipboard.\",\"Label printer\":\"Label printer\",\"Label printer found.\":\"Label printer found.\",\"Label printer name\":\"Label printer name\",\"Labels\":\"Labels\",\"Last 30 days\":\"Last 30 days\",\"Last 7 days\":\"Last 7 days\",\"Last 90 days\":\"Last 90 days\",\"Last financial year\":\"Last financial year\",\"Last month\":\"Last month\",\"Last quarter\":\"Last quarter\",\"Layby\":\"Layby\",\"Layby closed\":\"Layby closed\",\"Layby payments\":\"Layby payments\",\"Laybys started\":\"Laybys started\",\"Linking with Cin7 Core POS\":\"Linking with Cin7 Core POS\",\"Linkly payment system\":\"Linkly payment system\",\"Linkly reader\":\"Linkly reader\",\"Loading the updated POS/outlet configuration settings. Please wait...\":\"Loading the updated POS/outlet configuration settings. Please wait...\",\"Location\":\"Location\",\"Lock products\":\"Lock products\",\"Log out\":\"Log out\",\"Login\":\"Login\",\"Loyalty\":\"Loyalty\",\"Loyalty\\n                                                            points\":\"Loyalty\\n                                                            points\",\"Loyalty point amount should be between 0 and\":\"Loyalty point amount should be between 0 and\",\"Loyalty points\":\"Loyalty points\",\"Loyalty points amount should be between 0 and\":\"Loyalty points amount should be between 0 and\",\"Loyalty points earned\":\"Loyalty points earned\",\"Loyalty points:\":\"Loyalty points:\",\"LoyaltyLion points:\":\"LoyaltyLion points:\",\"Main register\":\"Main register\",\"Make partial payment\":\"Make partial payment\",\"Marketing consent\":\"Marketing consent\",\"Markup\":\"Markup\",\"Maximum name length is 256 characters.\":\"Maximum name length is 256 characters.\",\"Maximum reason field length is 256 characters.\":\"Maximum reason field length is 256 characters.\",\"Message\":\"Message\",\"Mobile phone\":\"Mobile phone\",\"Model name\":\"Model name\",\"Modify product\":\"Modify product\",\"Modify stocktake\":\"Modify stocktake\",\"Month\":\"Month\",\"N/A\":\"N/A\",\"Name\":\"Name\",\"Name:\":\"Name:\",\"New\":\"New\",\"New purchase order\":\"New purchase order\",\"New sales\":\"New sales\",\"New stock transfer\":\"New stock transfer\",\"New stock transfer order\":\"New stock transfer order\",\"New to Cin7 Core POS?\":\"New to Cin7 Core POS?\",\"Next\":\"Next\",\"Next 30 days\":\"Next 30 days\",\"Next 7 days\":\"Next 7 days\",\"No\":\"No\",\"No Clover printer is connected.\":\"No Clover printer is connected.\",\"No card payment provider was found. Please reconfigure a payment provider in the POS application setup/ payment setup menu.\":\"No card payment provider was found. Please reconfigure a payment provider in the POS application setup/ payment setup menu.\",\"No customers found.\":\"No customers found.\",\"No label printer was found. Please try to specify the label printer name manually.\":\"No label printer was found. Please try to specify the label printer name manually.\",\"No printer was found. Please try to specify the printer name manually.\":\"No printer was found. Please try to specify the printer name manually.\",\"No products found.\":\"No products found.\",\"No reason\":\"No reason\",\"No results found\":\"No results found\",\"No shipping address available\":\"No shipping address available\",\"No surcharge\":\"No surcharge\",\"No-receipt exchange\":\"No-receipt exchange\",\"No-receipt refund\":\"No-receipt refund\",\"Non-POS\":\"Non-POS\",\"Not enough\":\"Not enough\",\"Not integrated\":\"Not integrated\",\"Note\":\"Note\",\"Notes\":\"Notes\",\"OK\":\"OK\",\"Offline mode\":\"Offline mode\",\"Offline sales\":\"Offline sales\",\"Ok\":\"Ok\",\"On account\":\"On account\",\"On account closed\":\"On account closed\",\"On hand\":\"On hand\",\"On hand:\":\"On hand:\",\"On order\":\"On order\",\"On order <span ng-if=\\\"currentOrder.toLocationName\\\" translate>at <br> {{currentOrder.toLocationName}}</span>\":\"On order <span ng-if=\\\"currentOrder.toLocationName\\\" translate>at <br> {{currentOrder.toLocationName}}</span>\",\"On order at\":\"On order at\",\"On order at {{currentOrder.toLocationName}}:\":\"On order at {{currentOrder.toLocationName}}:\",\"Once deactivated, users won't be able to use the POS any more until activated again.\":\"Once deactivated, users won't be able to use the POS any more until activated again.\",\"Only\":\"Only\",\"Only available\":\"Only available\",\"Only first\":\"Only first\",\"Only the first 10 customers will be shown. You can also add a new customer here.\":\"Only the first 10 customers will be shown. You can also add a new customer here.\",\"Only the first {{cnt}} products are shown.\":\"Only the first {{cnt}} products are shown.\",\"Oops!\":\"Oops!\",\"Open / close\":\"Open / close\",\"Open WMS\":\"Open WMS\",\"Open cash drawer\":\"Open cash drawer\",\"Open customer display\":\"Open customer display\",\"Open register\":\"Open register\",\"Opened\":\"Opened\",\"Opening balance\":\"Opening balance\",\"Opening float\":\"Opening float\",\"Opt in\":\"Opt in\",\"Opt out\":\"Opt out\",\"Options\":\"Options\",\"Order #\":\"Order #\",\"Order amount\":\"Order amount\",\"Order info:\":\"Order info:\",\"Order number\":\"Order number\",\"Order: #{{currentSale.OrderNumber}}\":\"Order: #{{currentSale.OrderNumber}}\",\"Ordered quantity\":\"Ordered quantity\",\"Ordering\":\"Ordering\",\"Ordering for product family {{familyName}}\":\"Ordering for product family {{familyName}}\",\"Outlet\":\"Outlet\",\"Outlet / register\":\"Outlet / register\",\"Outlet SKU should have {{cnt}} digits. Please enter a valid SKU.\":\"Outlet SKU should have {{cnt}} digits. Please enter a valid SKU.\",\"Outlet level SKU\":\"Outlet level SKU\",\"Outlet name\":\"Outlet name\",\"Overall totals\":\"Overall totals\",\"Overview dashboard\":\"Overview dashboard\",\"PIN SETUP\":\"PIN SETUP\",\"PIN code is incorrect.\":\"PIN code is incorrect.\",\"POS register is closed\":\"POS register is closed\",\"POS sales\":\"POS sales\",\"Paid\":\"Paid\",\"Paid.\":\"Paid.\",\"Pair code\":\"Pair code\",\"Pair with terminal\":\"Pair with terminal\",\"Paper roll is empty. Please replace the paper.\":\"Paper roll is empty. Please replace the paper.\",\"Paper width\":\"Paper width\",\"Park\":\"Park\",\"Parked sales\":\"Parked sales\",\"Partial payment will be automatically allocated to the store credit account. Please use store credit to complete the exchange transaction.\":\"Partial payment will be automatically allocated to the store credit account. Please use store credit to complete the exchange transaction.\",\"Password is required.\":\"Password is required.\",\"Password recovery\":\"Password recovery\",\"Password was successfully changed.\":\"Password was successfully changed.\",\"Paste code\":\"Paste code\",\"Pay\":\"Pay\",\"Pay %0 with loyalty\":\"Pay %0 with loyalty\",\"Pay %0 with store credits\":\"Pay %0 with store credits\",\"Pay with Amex\":\"Pay with Amex\",\"Pay with a gift card\":\"Pay with a gift card\",\"Pay {{currentSale.customer.LoyaltyPoints |currency}} with loyalty\":\"Pay {{currentSale.customer.LoyaltyPoints |currency}} with loyalty\",\"Pay {{currentSale.customer.StoreCredits |currency}} with store credits\":\"Pay {{currentSale.customer.StoreCredits |currency}} with store credits\",\"Payable amount\":\"Payable amount\",\"Payment\\n                                    Type Summary\":\"Payment\\n                                    Type Summary\",\"Payment (cash rounding)\":\"Payment (cash rounding)\",\"Payment Type\":\"Payment Type\",\"Payment Type Summary\":\"Payment Type Summary\",\"Payment Type Summary:&nbsp;\":\"Payment Type Summary:&nbsp;\",\"Payment is required.\":\"Payment is required.\",\"Payment setup\":\"Payment setup\",\"Payment system setup\":\"Payment system setup\",\"Payment term:\":\"Payment term:\",\"Payment type\":\"Payment type\",\"Payments\":\"Payments\",\"Paymentsense reader\":\"Paymentsense reader\",\"Pending\":\"Pending\",\"Percent\":\"Percent\",\"Petty cash in\":\"Petty cash in\",\"Petty cash out\":\"Petty cash out\",\"Phone\":\"Phone\",\"Phone:\":\"Phone:\",\"Please add a customer for this exchange.\":\"Please add a customer for this exchange.\",\"Please add a customer for this refund.\":\"Please add a customer for this refund.\",\"Please configure Windcave station in the register settings\":\"Please configure Windcave station in the register settings\",\"Please enter POS name first\":\"Please enter POS name first\",\"Please fix the discount to complete the sale.\":\"Please fix the discount to complete the sale.\",\"Please install our Warehouse Management System QA application to process shipment from the store.\":\"Please install our Warehouse Management System QA application to process shipment from the store.\",\"Please install our Warehouse Management System application to process shipment from the store.\":\"Please install our Warehouse Management System application to process shipment from the store.\",\"Please log in using user/password first to enable biometric login\":\"Please log in using user/password first to enable biometric login\",\"Please note that the total discount has been updated.\":\"Please note that the total discount has been updated.\",\"Please perform the 'Authorise POS' function on your terminal.\":\"Please perform the 'Authorize POS' function on your terminal.\",\"Please scan barcode\":\"Please scan barcode\",\"Please select a label printer from the list below\":\"Please select a label printer from the list below\",\"Please select a printer from the list below\":\"Please select a printer from the list below\",\"Please specify the pair code.\":\"Please specify the pair code.\",\"Please, consider using Cin7 Core POS mobile app from the App Store.\":\"Please, consider using Cin7 Core POS mobile app from the App Store.\",\"Please, pick at least one item to complete fulfillment.\":\"Please, pick at least one item to complete fulfillment.\",\"Please, select the day closure date and press 'Continue'.\":\"Please, select the day closure date and press 'Continue'.\",\"Please, use Chrome or another latest browser on your platform.\":\"Please, use Chrome or another latest browser on your platform.\",\"Postcode\":\"Postcode\",\"Postcode / ZIP\":\"Postcode / ZIP\",\"Preferred time\":\"Preferred time\",\"Press the 'Cancel' button to interrupt the request.\":\"Press the 'Cancel' button to interrupt the request.\",\"Price\":\"Price\",\"Print\":\"Print\",\"Print EFTPOS receipts on the Tyro terminal\":\"Print EFTPOS receipts on the Tyro terminal\",\"Print all receipts\":\"Print all receipts\",\"Print complete!\":\"Print complete!\",\"Print labels\":\"Print labels\",\"Print merchant receipt copy\":\"Print merchant receipt copy\",\"Print receipt\":\"Print receipt\",\"Print receipt through Cin7 Core\":\"Print receipt through Cin7 Core\",\"Print receipts on Linkly PIN pad\":\"Print receipts on Linkly PIN pad\",\"Printer\":\"Printer\",\"Printer cover is open.\":\"Printer cover is open.\",\"Printer is found.\":\"Printer is found.\",\"Printer is offline.\":\"Printer is offline.\",\"Printer manufacturer\":\"Printer manufacturer\",\"Printer model\":\"Printer model\",\"Printer name\":\"Printer name\",\"Printer name is empty.\":\"Printer name is empty.\",\"Printer name/ IP address\":\"Printer name/ IP address\",\"Printer resolution is invalid.\":\"Printer resolution is invalid.\",\"Printer settings have been saved.\":\"Printer settings have been saved.\",\"Printer setup\":\"Printer setup\",\"Processed\":\"Processed\",\"Product\":\"Product\",\"Product\\n                                    Performance\":\"Product\\n                                    Performance\",\"Product / SKU\":\"Product / SKU\",\"Product Performance\":\"Product Performance\",\"Product discount\":\"Product discount\",\"Product has insufficient stock level.\":\"Product has insufficient stock level.\",\"Product is not found in this sale.\":\"Product is not found in this sale.\",\"Product management\":\"Product management\",\"Product name\":\"Product name\",\"Product name / SKU\":\"Product name / SKU\",\"Product not found. Please scan another barcode.\":\"Product not found. Please scan another barcode.\",\"Product not found. Please, scan another barcode.\":\"Product not found. Please, scan another barcode.\",\"Product with this serial number has been already added to pick.\":\"Product with this serial number has been already added to pick.\",\"Product {{name}} quantity was updated.\":\"Product {{name}} quantity was updated.\",\"Product {{name}} was added.\":\"Product {{name}} was added.\",\"Products\":\"Products\",\"Purchase order\":\"Purchase order\",\"Qty:\":\"Qty:\",\"Quantity\":\"Quantity\",\"Quantity for serial numbered products can't be changed. Would you like to delete this product from checkout?\":\"Quantity for serial numbered products can't be changed. Would you like to delete this product from checkout?\",\"Quantity on hand\":\"Quantity on hand\",\"Query period should not exceed 31 days.\":\"Query period should not exceed 31 days.\",\"Quick Key\":\"Quick Key\",\"Quick refund\":\"Quick refund\",\"Quick refund customer\":\"Quick refund customer\",\"Quick sale\":\"Quick sale\",\"REFUNDED\":\"REFUNDED\",\"Rate\":\"Rate\",\"Reason\":\"Reason\",\"Receipt\":\"Receipt\",\"Receipt #\":\"Receipt #\",\"Receipt # / customer\":\"Receipt # / customer\",\"Receipt number\":\"Receipt number\",\"Receipt sent successfully.\":\"Receipt sent successfully.\",\"Receipt template not found.\":\"Receipt template not found.\",\"Received\":\"Received\",\"Received date\":\"Received date\",\"Received quantity\":\"Received quantity\",\"Recover\":\"Recover\",\"Refresh\":\"Refresh\",\"Refresh page\":\"Refresh page\",\"Refund\":\"Refund\",\"Refund amount cannot be more than\":\"Refund amount cannot be more than\",\"Refund complete!\":\"Refund complete!\",\"Refund completed.\":\"Refund completed.\",\"Refund is required.\":\"Refund is required.\",\"Refund is successfully\":\"Refund is successfully\",\"Refund successful\":\"Refund successful\",\"Refunded\":\"Refunded\",\"Refunded.\":\"Refunded.\",\"Register\":\"Register\",\"Register\\n                                    Closure\":\"Register\\n                                    Closure\",\"Register Closure\":\"Register Closure\",\"Register closing is available online only.\":\"Register closing is available online only.\",\"Register name\":\"Register name\",\"Reload data\":\"Reload data\",\"Remaining to refund amount must be equal to zero.\":\"Remaining to refund amount must be equal to zero.\",\"Remaining to refund amount must be equal to zero. Please fill in the cash or store credit refund amount.\":\"Remaining to refund amount must be equal to zero. Please fill in the cash or store credit refund amount.\",\"Remaining to refund without surcharges:\":\"Remaining to refund without surcharges:\",\"Remaining to refund:\":\"Remaining to refund:\",\"Remove\":\"Remove\",\"Remove cash\":\"Remove cash\",\"Remove invalid payment methods\":\"Remove invalid payment methods\",\"Remove pairing\":\"Remove pairing\",\"Reorder\":\"Reorder\",\"Reorder products\":\"Reorder products\",\"Reports\":\"Reports\",\"Request to the server was cancelled.\":\"Request to the server was canceled.\",\"Required attribute 'PosApplicationName' cannot be empty.\":\"Required attribute 'PosApplicationName' cannot be empty.\",\"Required by\":\"Required by\",\"Reset\":\"Reset\",\"Return\":\"Return\",\"Return count\":\"Return count\",\"Returned\":\"Returned\",\"Returns\":\"Returns\",\"Revenue\":\"Revenue\",\"Role\":\"Role\",\"Rounded cash to refund\":\"Rounded cash to refund\",\"Rounding\":\"Rounding\",\"Rounding:\":\"Rounding:\",\"SCANNING\":\"SCANNING\",\"SET TO ALL\":\"SET TO ALL\",\"SKU\":\"SKU\",\"SKU:\":\"SKU:\",\"Sale\":\"Sale\",\"Sale cannot be modified.\":\"Sale cannot be modified.\",\"Sale count\":\"Sale count\",\"Sale details\":\"Sale details\",\"Sale gift card\":\"Sale gift card\",\"Sale note\":\"Sale note\",\"Sale order will be deleted together with its data from all internal reports. Are you sure that you want to proceed?\":\"Sale order will be deleted together with its data from all internal reports. Are you sure that you want to proceed?\",\"Sale order {{orderNumber}} has been voided.\":\"Sale order {{orderNumber}} has been voided.\",\"Sale quote\":\"Sale quote\",\"Sale quote sent successfully.\":\"Sale quote sent successfully.\",\"Sale rep\":\"Sale rep\",\"Sale summary\":\"Sale summary\",\"Sale total\":\"Sale total\",\"Sale would be deleted from error history. Would you like to continue?\":\"Sale would be deleted from error history. Would you like to continue?\",\"Sales\":\"Sales\",\"Sales Summary\":\"Sales Summary\",\"Sales history\":\"Sales history\",\"Sales with loyalty or store credit payments or returns cannot be processed without connection to the server.\":\"Sales with loyalty or store credit payments or returns cannot be processed without connection to the server.\",\"Save\":\"Save\",\"Save as draft\":\"Save as draft\",\"Scan again\":\"Scan again\",\"Scan barcode\\n                                    <!-- <img class=\\\"buttonImageOffset\\\" src=\\\"PosImages/scan.png\\\" />\\n                                    <span class=\\\"scanBarcodeButton-text\\\" translate>Scan barcode</span> -->\":\"Scan barcode\\n                                    <!-- <img class=\\\"buttonImageOffset\\\" src=\\\"PosImages/scan.png\\\" />\\n                                    <span class=\\\"scanBarcodeButton-text\\\" translate>Scan barcode</span> -->\",\"Scan serial number\":\"Scan serial number\",\"Scanner setup\":\"Scanner setup\",\"Schedule delivery\":\"Schedule delivery\",\"Scheduled deliveries\":\"Scheduled deliveries\",\"Search\":\"Search\",\"Search results for\":\"Search results for\",\"Search results for barcode\":\"Search results for barcode\",\"Select a customer\":\"Select a customer\",\"Select a product to order\":\"Select a product to order\",\"Select a shipping address to add to the sale\":\"Select a shipping address to add to the sale\",\"Select address\":\"Select address\",\"Select at least one product.\":\"Select at least one product.\",\"Select contact\":\"Select contact\",\"Select costing method\":\"Select costing method\",\"Select country\":\"Select country\",\"Select default location\":\"Select default location\",\"Select expense account\":\"Select expense account\",\"Select items for return\":\"Select items for return\",\"Select language\":\"Select language\",\"Select layby date\":\"Select layby date\",\"Select location\":\"Select location\",\"Select outlet\":\"Select outlet\",\"Select paper type\":\"Select paper type\",\"Select paper width\":\"Select paper width\",\"Select payment system\":\"Select payment system\",\"Select printer manufacturer\":\"Select printer manufacturer\",\"Select printer model\":\"Select printer model\",\"Select product category\":\"Select product category\",\"Select product type\":\"Select product type\",\"Select reason\":\"Select reason\",\"Select register\":\"Select register\",\"Select role\":\"Select role\",\"Select terminal to pair\":\"Select terminal to pair\",\"Selected invoice cannot be fulfilled.\":\"Selected invoice cannot be fulfilled.\",\"Selection done\":\"Selection done\",\"Sell\":\"Sell\",\"Sell\\n                            offline\":\"Sell\\n                            offline\",\"Send email\":\"Send email\",\"Session\":\"Session\",\"Set\":\"Set\",\"Set PIN code\":\"Set PIN code\",\"Set the margins value to 'none' in the next print dialogue for correct printing.\":\"Set the margins value to 'none' in the next print dialog for correct printing.\",\"Set up your POS system\":\"Set up your POS system\",\"Setup\":\"Setup\",\"Shipped by\":\"Shipped by\",\"Shipping address\":\"Shipping address\",\"Short description\":\"Short description\",\"Show all\":\"Show all\",\"Show completed\":\"Show completed\",\"Show on hand\":\"Show on hand\",\"Show password\":\"Show password\",\"Show products\":\"Show products\",\"Sign in\":\"Sign in\",\"Sign in to POS\":\"Sign in to POS\",\"Sign in with Google\":\"Sign in with Google\",\"Sign in with Microsoft\":\"Sign in with Microsoft\",\"Sign in with biometrics\":\"Sign in with biometrics\",\"Simulator mode\":\"Simulator mode\",\"Skip warning\":\"Skip warning\",\"Sold by\":\"Sold by\",\"Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Unprocessed barcodes are listed in the box below.\":\"Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Unprocessed barcodes are listed in the box below.\",\"Some refunds were unsuccessful, so the amount was transferred to store credit instead.\":\"Some refunds were unsuccessful, so the amount was transferred to store credit instead.\",\"Some refunds were unsuccessful:<br/>\":\"Some refunds were unsuccessful:<br/>\",\"Some things went wrong, please download {{app}} application from store manually\":\"Some things went wrong, please download {{app}} application from store manually\",\"Someone has already opened this register.\":\"Someone has already opened this register.\",\"Something went wrong, please try again.\":\"Something went wrong, please try again.\",\"Something went wrong: cannot pay negative amount with a gift card.\":\"Something went wrong: cannot pay negative amount with a gift card.\",\"Specify product quantity\":\"Specify product quantity\",\"Specify stock transfer quantity\":\"Specify stock transfer quantity\",\"Specify stocktake quantity\":\"Specify stocktake quantity\",\"Square reader\":\"Square reader\",\"Start a new sale\":\"Start a new sale\",\"Start date\":\"Start date\",\"Start stocktake\":\"Start stocktake\",\"State / province\":\"State / province\",\"Status\":\"Status\",\"Still open.\":\"Still open.\",\"Stock transfer\":\"Stock transfer\",\"Stock transfer order\":\"Stock transfer order\",\"Stocktake\":\"Stocktake\",\"Stocktake is running in the location so there are no available products.\":\"Stocktake is running in the location so there are no available products.\",\"Stocktake quantity\":\"Stocktake quantity\",\"Stocktake quantity:\":\"Stocktake quantity:\",\"Store\\n                                                            credits\":\"Store\\n                                                            credits\",\"Store Credit\":\"Store Credit\",\"Store Credit\\n                                    Report\":\"Store Credit\\n                                    Report\",\"Store Credit Report\":\"Store Credit Report\",\"Store credit\":\"Store credit\",\"Store credit payment amount should be between 0 and\":\"Store credit payment amount should be between 0 and\",\"Store credit surcharge\":\"Store credit surcharge\",\"Store credits:\":\"Store credits:\",\"Subtotal\":\"Subtotal\",\"Subtotal:\":\"Subtotal:\",\"Sum\":\"Sum\",\"Supplier\":\"Supplier\",\"Surcharge\":\"Surcharge\",\"Surcharge\\n                                    Report\":\"Surcharge\\n                                    Report\",\"Surcharge Report\":\"Surcharge Report\",\"Surcharge amount\":\"Surcharge amount\",\"Surcharge refund amount:\":\"Surcharge refund amount:\",\"Surcharge:\":\"Surcharge:\",\"Surcharges\":\"Surcharges\",\"Swipe left/right\":\"Swipe left/right\",\"Sync\":\"Sync\",\"Tags\":\"Tags\",\"Tax\":\"Tax\",\"Tax\\n                                            number\":\"Tax\\n                                            number\",\"Tax\\n                                        number\":\"Tax\\n                                        number\",\"Tax:\":\"Tax:\",\"Tender\":\"Tender\",\"Terminal ID\":\"Terminal ID\",\"Terminal connection timeout\":\"Terminal connection timeout\",\"Terminal has been disconnected from Cin7 Core POS.\":\"Terminal has been disconnected from Cin7 Core POS.\",\"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\":\"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\",\"Terminal has been successfully disconnected from Cin7 Core POS.\":\"Terminal has been successfully disconnected from Cin7 Core POS.\",\"Terminal has been successfully paired with Cin7 Core POS.\":\"Terminal has been successfully paired with Cin7 Core POS.\",\"Test connection\":\"Test connection\",\"Test print\":\"Test print\",\"Thank you for the purchase!\":\"Thank you for the purchase!\",\"The 'From' date should be less than or equal to the 'To' date.\":\"The 'From' date should be less than or equal to the 'To' date.\",\"The PIN code is not available. Switch on the PIN code support on the Cin7 Core POS integration setup page.\":\"The PIN code is not available. Switch on the PIN code support on the Cin7 Core POS integration setup page.\",\"The PIN code is reset.\":\"The PIN code is reset.\",\"The PIN pad has already been paired. Do you want to exit without connecting?\":\"The PIN pad has already been paired. Do you want to exit without connecting?\",\"The PIN pad has already been paired. Do you want to remove the current pairing and pair it again?\":\"The PIN pad has already been paired. Do you want to remove the current pairing and pair it again?\",\"The barcode could not be detected. Make sure your scanner is connected correctly and then try scanning again.\":\"The barcode could not be detected. Make sure your scanner is connected correctly and then try scanning again.\",\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or disable 'Print EFTPOS receipts on the Linkly payment terminal' on the setup page.\":\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or disable 'Print EFTPOS receipts on the Linkly payment terminal' on the setup page.\",\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or enable 'Print EFTPOS receipts on the Tyro terminal' on the setup page.\":\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or enable 'Print EFTPOS receipts on the Tyro terminal' on the setup page.\",\"The email is not well-formed.\":\"The email is not well-formed.\",\"The file is saved as:\":\"The file is saved as:\",\"The label printer has been successfully set.\":\"The label printer has been successfully set.\",\"The maximum number of product is\\n                                                {{item.maxCount}}\":\"The maximum number of product is\\n                                                {{item.maxCount}}\",\"The outlet does not have active registers. Please create registers on the POS integration page of the Cin7 Core site or select another outlet.\":\"The outlet does not have active registers. Please create registers on the POS integration page of the Cin7 Core site or select another outlet.\",\"The payment amount is more than the sales amount.\":\"The payment amount is more than the sales amount.\",\"The payment cannot be processed. The 'Square integration to process' parameter isn't set for the outlet on the POS setup page or you need to reset the outlet.\":\"The payment cannot be processed. The 'Square integration to process' parameter isn't set for the outlet on the POS setup page or you need to reset the outlet.\",\"The printer has been successfully set.\":\"The printer has been successfully set.\",\"The printer is not responding. Make sure your printer is connected correctly and then try again.\":\"The printer is not responding. Make sure your printer is connected correctly and then try again.\",\"The printer was not set up.\":\"The printer was not set up.\",\"The quote cannot be sent. Please check your email address.\":\"The quote cannot be sent. Please check your email address.\",\"The receipt cannot be sent. Please check your email address.\":\"The receipt cannot be sent. Please check your email address.\",\"The sale format is unknown. Please, update application from the store\":\"The sale format is unknown. Please, update application from the store\",\"The sale was not found. If it was a parked sale, someone may already be processing it right now.\":\"The sale was not found. If it was a parked sale, someone may already be processing it right now.\",\"The sale {{orderNumber}} could not be saved because it contains a deleted product.\":\"The sale {{orderNumber}} could not be saved because it contains a deleted product.\",\"The same gift card has been already added to the checkout.\":\"The same gift card has been already added to the checkout.\",\"The selected item appears on the list of the current stocktake. To avoid incorrect counts you may need to cancel the sale of the item.\":\"The selected item appears on the list of the current stocktake. To avoid incorrect counts you may need to cancel the sale of the item.\",\"The ultimate solution for your business\":\"The ultimate solution for your business\",\"The username, password, or paircode was invalid. Please check this information and try again.\":\"The username, password, or paircode was invalid. Please check this information and try again.\",\"The username/password combination is incorrect or you have exceeded the number of allowed login attempts. Please try to recover the password using the 'Forgot your password' link.\":\"The username/password combination is incorrect or you have exceeded the number of allowed login attempts. Please try to recover the password using the 'Forgot your password' link.\",\"There are more products in this location but some of them are under stocktake.\":\"There are more products in this location but some of them are under stocktake.\",\"There are no available products in this location.\":\"There are no available products in this location.\",\"There are no comments.\":\"There are no comments.\",\"There is a problem connecting to the server.<br/> Please check your internet connection.\":\"There is a problem connecting to the server.<br/> Please check your internet connection.\",\"There is nothing to pay. Continue?\":\"There is nothing to pay. Continue?\",\"This app will not work on rooted device.\":\"This app will not work on rooted device.\",\"This one-off coupon has already been used!\":\"This one-off coupon has already been used!\",\"This receipt number has already been used. Are you sure you would like to proceed with new exchange with this receipt number?\":\"This receipt number has already been used. Are you sure you would like to proceed with new exchange with this receipt number?\",\"This receipt number has already been used. Are you sure you would like to proceed with new refund with this receipt number?\":\"This receipt number has already been used. Are you sure you would like to proceed with new refund with this receipt number?\",\"This report has been successfully sent\":\"This report has been successfully sent\",\"This will reverse all transfers and change the transfer status to draft! Would you like to proceed anyway?\":\"This will reverse all transfers and change the transfer status to draft! Would you like to proceed anyway?\",\"This will reverse all transfers and change the transfer status to voided! Would you like to proceed anyway?\":\"This will reverse all transfers and change the transfer status to voided! Would you like to proceed anyway?\",\"Time\":\"Time\",\"To\":\"To\",\"To cash ({{currency_symbol}}&nbsp;{{paymentValidation.cashAmount | number:2}} max)\":\"To cash ({{currency_symbol}}&nbsp;{{paymentValidation.cashAmount | number:2}} max)\",\"To credit card&nbsp;<span ng-show=\\\"paymentValidation.cardPayments.length>1\\\" class=\\\"rp_value\\\">#{{$index+1}} </span>({{currency_symbol}}&nbsp;{{obj.validationAmount | number:2}} max)\":\"To credit card&nbsp;<span ng-show=\\\"paymentValidation.cardPayments.length>1\\\" class=\\\"rp_value\\\">#{{$index+1}} </span>({{currency_symbol}}&nbsp;{{obj.validationAmount | number:2}} max)\",\"To loyalty points\":\"To loyalty points\",\"To select a product to print a label, you can click on product image in the product list on the previous screen.\":\"To select a product to print a label, you can click on product image in the product list on the previous screen.\",\"To setup time, please setup delivery calendar for current location.\":\"To setup time, please setup delivery calendar for current location.\",\"To store credit\":\"To store credit\",\"Today\":\"Today\",\"Total\":\"Total\",\"Total account sale payments\":\"Total account sale payments\",\"Total account sales\":\"Total account sales\",\"Total before discount\":\"Total before discount\",\"Total discount\":\"Total discount\",\"Total issued\":\"Total issued\",\"Total layby payments\":\"Total layby payments\",\"Total new laybys\":\"Total new laybys\",\"Total new returns\":\"Total new returns\",\"Total redeemed\":\"Total redeemed\",\"Total refund amount:\":\"Total refund amount:\",\"Total sold\":\"Total sold\",\"Total tax\":\"Total tax\",\"Total:\":\"Total:\",\"Totals\":\"Totals\",\"Totals by payment type\":\"Totals by payment type\",\"Transaction in progress...\":\"Transaction in progress...\",\"Transaction is\":\"Transaction is\",\"Transaction timeout: please try again\":\"Transaction timeout: please try again\",\"Transfer #\":\"Transfer #\",\"Transfer quantity\":\"Transfer quantity\",\"Try connecting again\":\"Try connecting again\",\"Type\":\"Type\",\"Type is required.\":\"Type is required.\",\"Tyro payment system\":\"Tyro payment system\",\"Tyro payment system error.\":\"Tyro payment system error.\",\"Tyro reader\":\"Tyro reader\",\"Undo\":\"Undo\",\"Undo stock transfer\":\"Undo stock transfer\",\"Undo stocktake\":\"Undo stocktake\",\"Unit\":\"Unit\",\"Unit of measure\":\"Unit of measure\",\"Unknown\":\"Unknown\",\"Update\":\"Update\",\"Update settings\":\"Update settings\",\"Use same address for billing\":\"Use same address for billing\",\"User\":\"User\",\"User / note\":\"User / note\",\"User management\":\"User management\",\"Users\":\"Users\",\"Users list\":\"Users list\",\"Value\":\"Value\",\"Vantiv triPOS reader\":\"Vantiv triPOS reader\",\"Variation\":\"Variation\",\"Version outdated\":\"Version outdated\",\"Version warning\":\"Version warning\",\"Void\":\"Void\",\"Void stock transfer\":\"Void stock transfer\",\"Voided\":\"Voided\",\"Warehouse Management\\n                                    System application is not available\":\"Warehouse Management\\n                                    System application is not available\",\"Warehouse Management System {{qa}} application is not available\":\"Warehouse Management System {{qa}} application is not available\",\"Warning\":\"Warning\",\"Was the payment successful?\":\"Was the payment successful?\",\"We do not support Cin7 Core Web POS in this browser.\":\"We do not support Cin7 Core Web POS in this browser.\",\"We do not support Cin7 Core Web POS on IOS version < 10.\":\"We do not support Cin7 Core Web POS on IOS version < 10.\",\"We have identified incorrectly completed payment transaction. Please confirm if the payment succeeded?\":\"We have identified incorrectly completed payment transaction. Please confirm if the payment succeeded?\",\"We just sent you an email message to the address you specified. Inside the message is a link you can use to change your password. The message should show up within a few seconds. If it doesn't, check your spam or junk mail folder and look for a message from Cin7 Core that says 'Password Reset Request'.\":\"We just sent you an email message to the address you specified. Inside the message is a link you can use to change your password. The message should show up within a few seconds. If it doesn't, check your spam or junk mail folder and look for a message from Cin7 Core that says 'Password Reset Request'.\",\"Week\":\"Week\",\"Windcave\":\"Windcave\",\"Windcave credentials have not been configured.\":\"Windcave credentials have not been configured.\",\"Windcave payment\":\"Windcave payment\",\"Would you like to add payment?\":\"Would you like to add payment?\",\"Would you like to cancel\":\"Would you like to cancel\",\"Would you like to clear the current sale?\":\"Would you like to clear the current sale?\",\"Would you like to complete\":\"Would you like to complete\",\"Would you like to convert this sale into a POS sale?\":\"Would you like to convert this sale into a POS sale?\",\"Would you like to delete\":\"Would you like to delete\",\"Would you like to delete sales representative:\":\"Would you like to delete sales representative:\",\"Would you like to delete the parked sale or clear the current sale?\":\"Would you like to delete the parked sale or clear the current sale?\",\"Would you like to park this sale?\":\"Would you like to park this sale?\",\"Would you like to print a receipt?\":\"Would you like to print a receipt?\",\"Would you like to remove gift card:\":\"Would you like to remove gift card:\",\"Would you like to remove product:\":\"Would you like to remove product:\",\"Would you like to remove this customer:\":\"Would you like to remove this customer:\",\"Would you like to remove this product?\":\"Would you like to remove this product?\",\"Would you like to reorder only the products available at {{currentOrder.fromLocationName}}, or all low on stock products?\":\"Would you like to reorder only the products available at {{currentOrder.fromLocationName}}, or all low on stock products?\",\"Would you like to return this item?\":\"Would you like to return this item?\",\"Would you like to start\":\"Would you like to start\",\"Would you like to undo\":\"Would you like to undo\",\"X\":\"X\",\"Yes\":\"Yes\",\"Yes, cancel\":\"Yes, cancel\",\"Yes, complete\":\"Yes, complete\",\"Yes, delete\":\"Yes, delete\",\"Yes, remove delivery\":\"Yes, remove delivery\",\"Yes, this is a layby sale\":\"Yes, this is a layby sale\",\"Yes, this is an on account sale\":\"Yes, this is an on account sale\",\"Yesterday\":\"Yesterday\",\"You are working in offline mode.\":\"You are working in offline mode.\",\"You can only redeem up to the value of your current loyalty balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.\":\"You can only redeem up to the value of your current loyalty balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.\",\"You can only redeem up to the value of your current store credits balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.\":\"You can only redeem up to the value of your current store credits balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.\",\"You can set up a max 1-year period for reporting only.\":\"You can set up a max 1-year period for reporting only.\",\"You need to give \\\"Draw over other apps\\\" permission to display content on second screen.\":\"You need to give \\\"Draw over other apps\\\" permission to display content on second screen.\",\"You won't be able to change the sale after clicking \\\"Yes, this is a layby sale\\\", would you like to continue?\":\"You won't be able to change the sale after clicking \\\"Yes, this is a layby sale\\\", would you like to continue?\",\"You won't be able to change the sale after clicking \\\"Yes, this is an on account sale\\\", would you like to continue?\":\"You won't be able to change the sale after clicking \\\"Yes, this is an on account sale\\\", would you like to continue?\",\"Your PIN code has been successfully reset.\":\"Your PIN code has been successfully reset.\",\"Your PIN code has been successfully saved.\":\"Your PIN code has been successfully saved.\",\"Your PIN code is not unique. Please, change your PIN code as soon as possible to prevent wrong logins.\":\"Your PIN code is not unique. Please, change your PIN code as soon as possible to prevent wrong logins.\",\"Your computer is not connected to the internet. Please check the status of your connection. You\\n                        can make sales in register while you're offline, but you'll lose any unfinished work on this\\n                        page. Otherwise, wait here. When you're online again, this box will close, and you'll be ready\\n                        to go.\":\"Your computer is not connected to the internet. Please check the status of your connection. You\\n                        can make sales in register while you're offline, but you'll lose any unfinished work on this\\n                        page. Otherwise, wait here. When you're online again, this box will close, and you'll be ready\\n                        to go.\",\"Your current sale will be lost. You will need to log in again. Would you like to continue?\":\"Your current sale will be lost. You will need to log in again. Would you like to continue?\",\"Your payment and sales totals will be finalised for this period.\":\"Your payment and sales totals will be finalized for this period.\",\"_register_\":\"_register_\",\"amount should be between 0 and\":\"amount should be between 0 and\",\"at <br> \\n                                            {{currentOrder.fromLocationName}}\":\"at <br> \\n                                            {{currentOrder.fromLocationName}}\",\"at <br> {{currentOrder.toLocationName}}\":\"at <br> {{currentOrder.toLocationName}}\",\"availability\":\"availability\",\"completed\":\"completed\",\"from users?\":\"from users?\",\"has unsupported extension\":\"has unsupported extension\",\"is approved. The rest of the amount must be paid in another way.\":\"is approved. The rest of the amount must be paid in another way.\",\"loyalty points deducted\":\"loyalty points deducted\",\"or\":\"or\",\"partially\":\"partially\",\"refund is not supported for this payment:\":\"refund is not supported for this payment:\",\"sale representatives will be shown\":\"sale representatives will be shown\",\"stocktake?\":\"stocktake?\",\"to\":\"to\",\"to process this sale using the following\":\"to process this sale using the following\",\"v.\":\"v.\",\"v. {{appVersion}}\":\"v. {{appVersion}}\",\"whereas the customer credit limit is\":\"whereas the customer credit limit is\",\"x\":\"x\",\"{{$parent.messageBoxNo ? $parent.messageBoxNo : 'No'}}\":\"{{$parent.messageBoxNo ? $parent.messageBoxNo : 'No'}}\",\"{{$parent.messageBoxYes ? $parent.messageBoxYes : 'Yes'}}\":\"{{$parent.messageBoxYes ? $parent.messageBoxYes : 'Yes'}}\",\"{{QuantityPropName === 'TransferQuantity' ? 'Transfer quantity' : 'Quantity' }}\":\"{{QuantityPropName === 'TransferQuantity' ? 'Transfer quantity' : 'Quantity' }}\",\"{{btn.name}}\":\"{{btn.name}}\",\"{{caption}}\":\"{{caption}}\",\"{{chartDetails.Title}}\":\"{{chartDetails.Title}}\",\"{{currentStocktake.name}}\":\"{{currentStocktake.name}}\",\"{{newCustomer.UseSameForBilling ? 'Default shipping/billing address' : 'Default shipping address'}}\":\"{{newCustomer.UseSameForBilling ? 'Default shipping/billing address' : 'Default shipping address'}}\",\"{{selectedData.MethodName}}\":\"{{selectedData.MethodName}}\",\"{{type}} cancelled\":\"{{type}} canceled\"});\r\n/* jshint +W100 */\r\n}]);","/* (ignored) */","/* (ignored) */","/* (ignored) */","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\tif (cachedModule.error !== undefined) throw cachedModule.error;\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\ttry {\n\t\tvar execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ };\n\t\t__webpack_require__.i.forEach(function(handler) { handler(execOptions); });\n\t\tif (!execOptions.factory) {\n\t\t\tdelete __webpack_module_cache__[moduleId];\n\t\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\t\tmodule = execOptions.module;\n\t\texecOptions.factory.call(module.exports, module, module.exports, execOptions.require);\n\t} catch(e) {\n\t\tmodule.error = e;\n\t\tthrow e;\n\t}\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n// expose the module execution interceptor\n__webpack_require__.i = [];\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn) {\n\tif(chunkIds) {\n\t\tdeferred.push([chunkIds, fn]);\n\t\treturn;\n\t}\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif (Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter/value functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","// This function allow to reference all chunks\n__webpack_require__.u = function(chunkId) { return chunkId + \"-bundle.js?h=\" + {\"0\":\"f5dfec7df8223e22a2fe\",\"defaultVendors\":\"0da6851f9aa5b21b362b\",\"main\":\"cec8c33bed0c4ee0f90b\"}[chunkId] + \"\"; };","// This function allow to reference all chunks\n__webpack_require__.hu = function(chunkId) { return chunkId + \".\" + __webpack_require__.h() + \".hot-update.js\"; };","// This function allow to reference all chunks\n__webpack_require__.miniCssF = function(chunkId) { return chunkId + \".css?h=\" + {\"defaultVendors\":\"234e622d4c830ba3e776\",\"main\":\"43646b226b1520d4aabe\"}[chunkId] + \"\"; };","__webpack_require__.hmrF = function() { return \"main.\" + __webpack_require__.h() + \".hot-update.json\"; };","__webpack_require__.h = function() { return \"f5fdb1d9308ba71b2fad\"; };","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); };","var inProgress = {};\nvar dataWebpackPrefix = \"crdregister:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var currentModuleData = {};\nvar installedModules = __webpack_require__.c;\n\n// module and require creation\nvar currentChildModule;\nvar currentParents = [];\n\n// status\nvar registeredStatusHandlers = [];\nvar currentStatus = \"idle\";\n\n// while downloading\nvar blockingPromises = 0;\nvar blockingPromisesWaiting = [];\n\n// The update info\nvar currentUpdateApplyHandlers;\nvar queuedInvalidatedModules;\n\n__webpack_require__.hmrD = currentModuleData;\n\n__webpack_require__.i.push(function (options) {\n\tvar module = options.module;\n\tvar require = createRequire(options.require, options.id);\n\tmodule.hot = createModuleHotObject(options.id, module);\n\tmodule.parents = currentParents;\n\tmodule.children = [];\n\tcurrentParents = [];\n\toptions.require = require;\n});\n\n__webpack_require__.hmrC = {};\n__webpack_require__.hmrI = {};\n\nfunction createRequire(require, moduleId) {\n\tvar me = installedModules[moduleId];\n\tif (!me) return require;\n\tvar fn = function (request) {\n\t\tif (me.hot.active) {\n\t\t\tif (installedModules[request]) {\n\t\t\t\tvar parents = installedModules[request].parents;\n\t\t\t\tif (parents.indexOf(moduleId) === -1) {\n\t\t\t\t\tparents.push(moduleId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcurrentParents = [moduleId];\n\t\t\t\tcurrentChildModule = request;\n\t\t\t}\n\t\t\tif (me.children.indexOf(request) === -1) {\n\t\t\t\tme.children.push(request);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t\"[HMR] unexpected require(\" +\n\t\t\t\t\trequest +\n\t\t\t\t\t\") from disposed module \" +\n\t\t\t\t\tmoduleId\n\t\t\t);\n\t\t\tcurrentParents = [];\n\t\t}\n\t\treturn require(request);\n\t};\n\tvar createPropertyDescriptor = function (name) {\n\t\treturn {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn require[name];\n\t\t\t},\n\t\t\tset: function (value) {\n\t\t\t\trequire[name] = value;\n\t\t\t}\n\t\t};\n\t};\n\tfor (var name in require) {\n\t\tif (\n\t\t\tObject.prototype.hasOwnProperty.call(require, name) &&\n\t\t\tname !== \"e\" &&\n\t\t\tname !== \"ei\"\n\t\t) {\n\t\t\tObject.defineProperty(fn, name, createPropertyDescriptor(name));\n\t\t}\n\t}\n\t// A chunk load blocks the update until it settles, and `.ei` is the analyzable\n\t// half of `.e`. A runtime that loads no chunks has neither to wrap.\n\tif (require.e) {\n\t\t(fn).e = function (chunkId, fetchPriority) {\n\t\t\treturn trackBlockingPromise(\n\t\t\t\t(require.e)(chunkId, fetchPriority)\n\t\t\t);\n\t\t};\n\t}\n\tif (require.ei) {\n\t\t(fn).ei = function (chunkId, importFn) {\n\t\t\treturn trackBlockingPromise(\n\t\t\t\t(require.ei)(chunkId, importFn)\n\t\t\t);\n\t\t};\n\t}\n\treturn (fn);\n}\n\nfunction createModuleHotObject(moduleId, me) {\n\tvar _main = currentChildModule !== moduleId;\n\tvar hot = {\n\t\t// private stuff\n\t\t_acceptedDependencies: {},\n\t\t_acceptedErrorHandlers: {},\n\t\t_declinedDependencies: {},\n\t\t_selfAccepted: false,\n\t\t_selfDeclined: false,\n\t\t_selfInvalidated: false,\n\t\t_disposeHandlers: [],\n\t\t_main: _main,\n\t\t_requireSelf: function () {\n\t\t\tcurrentParents = me.parents.slice();\n\t\t\tcurrentChildModule = _main ? undefined : moduleId;\n\t\t\t__webpack_require__(moduleId);\n\t\t},\n\n\t\t// Module API\n\t\tactive: true,\n\t\taccept: function (dep, callback, errorHandler) {\n\t\t\tif (dep === undefined) hot._selfAccepted = true;\n\t\t\telse if (typeof dep === \"function\") hot._selfAccepted = dep;\n\t\t\telse if (typeof dep === \"object\" && dep !== null) {\n\t\t\t\tfor (var i = 0; i < dep.length; i++) {\n\t\t\t\t\thot._acceptedDependencies[dep[i]] = callback || function () {};\n\t\t\t\t\thot._acceptedErrorHandlers[dep[i]] = errorHandler;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thot._acceptedDependencies[dep] = callback || function () {};\n\t\t\t\thot._acceptedErrorHandlers[dep] = errorHandler;\n\t\t\t}\n\t\t},\n\t\tdecline: function (dep) {\n\t\t\tif (dep === undefined) hot._selfDeclined = true;\n\t\t\telse if (typeof dep === \"object\" && dep !== null)\n\t\t\t\tfor (var i = 0; i < dep.length; i++)\n\t\t\t\t\thot._declinedDependencies[dep[i]] = true;\n\t\t\telse hot._declinedDependencies[dep] = true;\n\t\t},\n\t\tdispose: function (callback) {\n\t\t\thot._disposeHandlers.push(callback);\n\t\t},\n\t\taddDisposeHandler: function (callback) {\n\t\t\thot._disposeHandlers.push(callback);\n\t\t},\n\t\tremoveDisposeHandler: function (callback) {\n\t\t\tvar idx = hot._disposeHandlers.indexOf(callback);\n\t\t\tif (idx >= 0) hot._disposeHandlers.splice(idx, 1);\n\t\t},\n\t\tinvalidate: function () {\n\t\t\tthis._selfInvalidated = true;\n\t\t\tswitch (currentStatus) {\n\t\t\t\tcase \"idle\":\n\t\t\t\t\tcurrentUpdateApplyHandlers = [];\n\t\t\t\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t\t\t\t__webpack_require__.hmrI[key](\n\t\t\t\t\t\t\tmoduleId,\n\t\t\t\t\t\t\t(currentUpdateApplyHandlers)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tsetStatus(\"ready\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ready\":\n\t\t\t\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t\t\t\t__webpack_require__.hmrI[key](\n\t\t\t\t\t\t\tmoduleId,\n\t\t\t\t\t\t\t(currentUpdateApplyHandlers)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"prepare\":\n\t\t\t\tcase \"check\":\n\t\t\t\tcase \"dispose\":\n\t\t\t\tcase \"apply\":\n\t\t\t\t\t(queuedInvalidatedModules = queuedInvalidatedModules || []).push(\n\t\t\t\t\t\tmoduleId\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// ignore requests in error states\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\t// Management API\n\t\tcheck: hotCheck,\n\t\tapply: hotApply,\n\t\tstatus: function (l) {\n\t\t\tif (!l) return currentStatus;\n\t\t\tregisteredStatusHandlers.push(l);\n\t\t},\n\t\taddStatusHandler: function (l) {\n\t\t\tregisteredStatusHandlers.push(l);\n\t\t},\n\t\tremoveStatusHandler: function (l) {\n\t\t\tvar idx = registeredStatusHandlers.indexOf(l);\n\t\t\tif (idx >= 0) registeredStatusHandlers.splice(idx, 1);\n\t\t},\n\n\t\t// inherit from previous dispose call\n\t\tdata: currentModuleData[moduleId]\n\t};\n\tcurrentChildModule = undefined;\n\treturn hot;\n}\n\nfunction setStatus(newStatus) {\n\tcurrentStatus = newStatus;\n\tvar results = [];\n\n\tfor (var i = 0; i < registeredStatusHandlers.length; i++)\n\t\tresults[i] = registeredStatusHandlers[i].call(null, newStatus);\n\n\treturn Promise.all(results).then(function () {});\n}\n\nfunction unblock() {\n\tif (--blockingPromises === 0) {\n\t\tsetStatus(\"ready\").then(function () {\n\t\t\tif (blockingPromises === 0) {\n\t\t\t\tvar list = blockingPromisesWaiting;\n\t\t\t\tblockingPromisesWaiting = [];\n\t\t\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\t\t\tlist[i]();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction trackBlockingPromise(promise) {\n\tswitch (currentStatus) {\n\t\tcase \"ready\":\n\t\t\tsetStatus(\"prepare\");\n\t\t/* fallthrough */\n\t\tcase \"prepare\":\n\t\t\tblockingPromises++;\n\t\t\tpromise.then(unblock, unblock);\n\t\t\treturn promise;\n\t\tdefault:\n\t\t\treturn promise;\n\t}\n}\n\nfunction waitForBlockingPromises(fn) {\n\tif (blockingPromises === 0) return fn();\n\treturn (\n\t\tnew Promise(function (resolve) {\n\t\t\tblockingPromisesWaiting.push(function () {\n\t\t\t\tresolve(fn());\n\t\t\t});\n\t\t})\n\t);\n}\n\nfunction hotCheck(applyOnUpdate) {\n\tif (currentStatus !== \"idle\") {\n\t\tthrow new Error(\"check() is only allowed in idle status\");\n\t}\n\treturn setStatus(\"check\")\n\t\t.then(__webpack_require__.hmrM)\n\t\t.then(function (update) {\n\t\t\tif (!update) {\n\t\t\t\treturn setStatus(applyInvalidatedModules() ? \"ready\" : \"idle\").then(\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn setStatus(\"prepare\").then(function () {\n\t\t\t\tvar updatedModules = [];\n\t\t\t\tcurrentUpdateApplyHandlers = [];\n\n\t\t\t\treturn Promise.all(\n\t\t\t\t\tObject.keys(__webpack_require__.hmrC).reduce(function (\n\t\t\t\t\t\tpromises,\n\t\t\t\t\t\tkey\n\t\t\t\t\t) {\n\t\t\t\t\t\t__webpack_require__.hmrC[key](\n\t\t\t\t\t\t\tupdate.c,\n\t\t\t\t\t\t\tupdate.r,\n\t\t\t\t\t\t\tupdate.m,\n\t\t\t\t\t\t\tpromises,\n\t\t\t\t\t\t\t(currentUpdateApplyHandlers),\n\t\t\t\t\t\t\tupdatedModules,\n\t\t\t\t\t\t\tupdate.css,\n\t\t\t\t\t\t\tupdate.f\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn promises;\n\t\t\t\t\t}, ([]))\n\t\t\t\t).then(function () {\n\t\t\t\t\treturn waitForBlockingPromises(function () {\n\t\t\t\t\t\tif (applyOnUpdate) {\n\t\t\t\t\t\t\treturn internalApply(applyOnUpdate);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setStatus(\"ready\").then(function () {\n\t\t\t\t\t\t\treturn updatedModules;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n}\n\nfunction hotApply(options) {\n\tif (currentStatus !== \"ready\") {\n\t\treturn Promise.resolve().then(function () {\n\t\t\tthrow new Error(\n\t\t\t\t\"apply() is only allowed in ready status (state: \" +\n\t\t\t\t\tcurrentStatus +\n\t\t\t\t\t\")\"\n\t\t\t);\n\t\t});\n\t}\n\treturn internalApply(options);\n}\n\nfunction internalApply(options) {\n\toptions = options || {};\n\n\tapplyInvalidatedModules();\n\n\tvar results = (\n\t\tcurrentUpdateApplyHandlers\n\t).map(function (handler) {\n\t\treturn handler((options));\n\t});\n\tcurrentUpdateApplyHandlers = undefined;\n\n\tvar errors = results\n\t\t.map(function (r) {\n\t\t\treturn r.error;\n\t\t})\n\t\t.filter(Boolean);\n\n\tif (errors.length > 0) {\n\t\treturn setStatus(\"abort\").then(function () {\n\t\t\tthrow errors[0];\n\t\t});\n\t}\n\n\t// Now in \"dispose\" phase\n\tvar disposePromise = setStatus(\"dispose\");\n\n\tresults.forEach(function (result) {\n\t\tif (result.dispose) result.dispose();\n\t});\n\n\t// Now in \"apply\" phase\n\tvar applyPromise = setStatus(\"apply\");\n\n\tvar error;\n\tvar reportError = function (err) {\n\t\tif (!error) error = err;\n\t};\n\n\tvar outdatedModules = [];\n\n\tvar onAccepted = function () {\n\t\treturn Promise.all([disposePromise, applyPromise]).then(function () {\n\t\t\t// handle errors in accept handlers and self accepted module load\n\t\t\tif (error) {\n\t\t\t\treturn setStatus(\"fail\").then(function () {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (queuedInvalidatedModules) {\n\t\t\t\treturn internalApply(options).then(function (list) {\n\t\t\t\t\toutdatedModules.forEach(function (moduleId) {\n\t\t\t\t\t\tif (list.indexOf(moduleId) < 0) list.push(moduleId);\n\t\t\t\t\t});\n\t\t\t\t\treturn list;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn setStatus(\"idle\").then(function () {\n\t\t\t\treturn outdatedModules;\n\t\t\t});\n\t\t});\n\t};\n\n\treturn Promise.all(\n\t\tresults\n\t\t\t.filter(function (result) {\n\t\t\t\treturn result.apply;\n\t\t\t})\n\t\t\t.map(function (result) {\n\t\t\t\treturn (result.apply)(reportError);\n\t\t\t})\n\t)\n\t\t.then(function (applyResults) {\n\t\t\tapplyResults.forEach(function (modules) {\n\t\t\t\tif (modules) {\n\t\t\t\t\tfor (var i = 0; i < modules.length; i++) {\n\t\t\t\t\t\toutdatedModules.push(modules[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t})\n\t\t.then(onAccepted);\n}\n\nfunction applyInvalidatedModules() {\n\tif (queuedInvalidatedModules) {\n\t\tif (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [];\n\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t(queuedInvalidatedModules).forEach(\n\t\t\t\tfunction (moduleId) {\n\t\t\t\t\t__webpack_require__.hmrI[key](\n\t\t\t\t\t\tmoduleId,\n\t\t\t\t\t\t(currentUpdateApplyHandlers)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t\tqueuedInvalidatedModules = undefined;\n\t\treturn true;\n\t}\n}","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// no chunk loading\n\nvar oldTags = [];\nvar newTags = [];\nvar applyHandler = function(options) {\n\treturn { dispose: function() {\n\t\tfor(var i = 0; i < oldTags.length; i++) {\n\t\t\tvar oldTag = oldTags[i];\n\t\t\tif(oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);\n\t\t}\n\t\toldTags.length = 0;\n\t}, apply: function() {\n\t\tfor(var i = 0; i < newTags.length; i++) newTags[i].rel = \"stylesheet\";\n\t\tnewTags.length = 0;\n\t} };\n}\n__webpack_require__.hmrC.miniCss = function(chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList) {\n\tapplyHandlers.push(applyHandler);\n\tchunkIds.forEach(function(chunkId) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tvar oldTag = findStylesheet(href, fullhref);\n\t\tif(!oldTag) return;\n\t\tpromises.push(new Promise(function(resolve, reject) {\n\t\t\tvar tag = createStylesheet(chunkId, fullhref, oldTag, function() {\n\t\t\t\ttag.as = \"style\";\n\t\t\t\ttag.rel = \"preload\";\n\t\t\t\tresolve();\n\t\t\t}, reject);\n\t\t\toldTags.push(oldTag);\n\t\t\tnewTags.push(tag);\n\t\t}));\n\t});\n}\n\n// no prefetching\n\n// no preloaded","__webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || {\n\t\"main\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\nvar currentUpdatedModulesList;\nvar waitingUpdateResolves = {};\nfunction loadUpdateChunk(chunkId, updatedModulesList) {\n\tcurrentUpdatedModulesList = updatedModulesList;\n\treturn new Promise(function(resolve, reject) {\n\t\twaitingUpdateResolves[chunkId] = resolve;\n\t\t// start update chunk loading\n\t\tvar url = __webpack_require__.p + __webpack_require__.hu(chunkId);\n\t\t// create error before stack unwound to get useful stacktrace later\n\t\tvar error = new Error();\n\t\tvar loadingEnded = function(event) {\n\t\t\tif(waitingUpdateResolves[chunkId]) {\n\t\t\t\twaitingUpdateResolves[chunkId] = undefined\n\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\terror.message = 'Loading hot update chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\terror.type = errorType;\n\t\t\t\terror.request = realSrc;\n\t\t\t\terror.event = event;\n\t\t\t\treject(error);\n\t\t\t}\n\t\t};\n\t\t__webpack_require__.l(url, loadingEnded);\n\t});\n}\n\nself[\"webpackHotUpdatecrdregister\"] = function(chunkId, moreModules, runtime) {\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\tcurrentUpdate[moduleId] = moreModules[moduleId];\n\t\t\tcurrentUpdatedModulesList && currentUpdatedModulesList.push(moduleId);\n\t\t}\n\t}\n\tif(runtime) currentUpdateRuntime.push(runtime);\n\tif(waitingUpdateResolves[chunkId]) {\n\t\twaitingUpdateResolves[chunkId]();\n\t\twaitingUpdateResolves[chunkId] = undefined;\n\t}\n};\n\nvar currentUpdateChunks;\nvar currentUpdate;\nvar currentUpdateRemovedChunks;\nvar currentUpdateRuntime;\nfunction applyHandler(options) {\n\tif (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr;\n\tcurrentUpdateChunks = (\n\t\t(undefined)\n\t);\n\tfunction getAffectedModuleEffects(updateModuleId) {\n\t\tvar outdatedModules = [updateModuleId];\n\t\tvar outdatedDependencies = {};\n\n\t\tvar queue = outdatedModules.map(function (id) {\n\t\t\treturn {\n\t\t\t\tchain: [id],\n\t\t\t\tid: id\n\t\t\t};\n\t\t});\n\t\twhile (queue.length > 0) {\n\t\t\tvar queueItem = (queue.pop());\n\t\t\tvar moduleId = queueItem.id;\n\t\t\tvar chain = queueItem.chain;\n\t\t\tvar module = __webpack_require__.c[moduleId];\n\t\t\tif (\n\t\t\t\t!module ||\n\t\t\t\t(module.hot._selfAccepted && !module.hot._selfInvalidated)\n\t\t\t)\n\t\t\t\tcontinue;\n\t\t\tif (module.hot._selfDeclined) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"self-declined\",\n\t\t\t\t\tchain: chain,\n\t\t\t\t\tmoduleId: moduleId\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (module.hot._main) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"unaccepted\",\n\t\t\t\t\tchain: chain,\n\t\t\t\t\tmoduleId: moduleId\n\t\t\t\t};\n\t\t\t}\n\t\t\tfor (var i = 0; i < module.parents.length; i++) {\n\t\t\t\tvar parentId = module.parents[i];\n\t\t\t\tvar parent = __webpack_require__.c[parentId];\n\t\t\t\tif (!parent) continue;\n\t\t\t\tif (parent.hot._declinedDependencies[moduleId]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"declined\",\n\t\t\t\t\t\tchain: chain.concat([parentId]),\n\t\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\t\tparentId: parentId\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (outdatedModules.indexOf(parentId) !== -1) continue;\n\t\t\t\tif (parent.hot._acceptedDependencies[moduleId]) {\n\t\t\t\t\tif (!outdatedDependencies[parentId])\n\t\t\t\t\t\toutdatedDependencies[parentId] = [];\n\t\t\t\t\taddAllToSet(outdatedDependencies[parentId], [moduleId]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdelete outdatedDependencies[parentId];\n\t\t\t\toutdatedModules.push(parentId);\n\t\t\t\tqueue.push({\n\t\t\t\t\tchain: chain.concat([parentId]),\n\t\t\t\t\tid: parentId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"accepted\",\n\t\t\tmoduleId: updateModuleId,\n\t\t\toutdatedModules: outdatedModules,\n\t\t\toutdatedDependencies: outdatedDependencies\n\t\t};\n\t}\n\n\tfunction addAllToSet(a, b) {\n\t\tfor (var i = 0; i < b.length; i++) {\n\t\t\tvar item = b[i];\n\t\t\tif (a.indexOf(item) === -1) a.push(item);\n\t\t}\n\t}\n\n\t// at begin all updates modules are outdated\n\t// the \"outdated\" status can propagate to parents if they don't accept the children\n\tvar outdatedDependencies = {};\n\tvar outdatedModules = [];\n\tvar appliedUpdate = {};\n\n\tvar warnUnexpectedRequire = function warnUnexpectedRequire(module) {\n\t\tconsole.warn(\n\t\t\t\"[HMR] unexpected require(\" + module.id + \") to disposed module\"\n\t\t);\n\t};\n\n\tfor (var moduleId in currentUpdate) {\n\t\tif (__webpack_require__.o(currentUpdate, moduleId)) {\n\t\t\tvar newModuleFactory = currentUpdate[moduleId];\n\t\t\tvar result = newModuleFactory\n\t\t\t\t? getAffectedModuleEffects(moduleId)\n\t\t\t\t: {\n\t\t\t\t\t\ttype: \"disposed\",\n\t\t\t\t\t\tmoduleId: moduleId\n\t\t\t\t\t};\n\t\t\tvar abortError = false;\n\t\t\tvar doApply = false;\n\t\t\tvar doDispose = false;\n\t\t\tvar chainInfo = \"\";\n\t\t\tif (result.chain) {\n\t\t\t\tchainInfo = \"\\nUpdate propagation: \" + result.chain.join(\" -> \");\n\t\t\t}\n\t\t\tswitch (result.type) {\n\t\t\t\tcase \"self-declined\":\n\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n\t\t\t\t\tif (!options.ignoreDeclined)\n\t\t\t\t\t\tabortError = new Error(\n\t\t\t\t\t\t\t\"Aborted because of self decline: \" +\n\t\t\t\t\t\t\t\tresult.moduleId +\n\t\t\t\t\t\t\t\tchainInfo\n\t\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"declined\":\n\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n\t\t\t\t\tif (!options.ignoreDeclined)\n\t\t\t\t\t\tabortError = new Error(\n\t\t\t\t\t\t\t\"Aborted because of declined dependency: \" +\n\t\t\t\t\t\t\t\tresult.moduleId +\n\t\t\t\t\t\t\t\t\" in \" +\n\t\t\t\t\t\t\t\tresult.parentId +\n\t\t\t\t\t\t\t\tchainInfo\n\t\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"unaccepted\":\n\t\t\t\t\tif (options.onUnaccepted) options.onUnaccepted(result);\n\t\t\t\t\tif (!options.ignoreUnaccepted)\n\t\t\t\t\t\tabortError = new Error(\n\t\t\t\t\t\t\t\"Aborted because \" + moduleId + \" is not accepted\" + chainInfo\n\t\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accepted\":\n\t\t\t\t\tif (options.onAccepted) options.onAccepted(result);\n\t\t\t\t\tdoApply = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"disposed\":\n\t\t\t\t\tif (options.onDisposed) options.onDisposed(result);\n\t\t\t\t\tdoDispose = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Unexception type \" + result.type);\n\t\t\t}\n\t\t\tif (abortError) {\n\t\t\t\treturn {\n\t\t\t\t\terror: abortError\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (doApply) {\n\t\t\t\tappliedUpdate[moduleId] = (\n\t\t\t\t\tnewModuleFactory\n\t\t\t\t);\n\t\t\t\taddAllToSet(\n\t\t\t\t\toutdatedModules,\n\t\t\t\t\t(result.outdatedModules)\n\t\t\t\t);\n\t\t\t\tvar resultOutdatedDependencies =\n\t\t\t\t\t(\n\t\t\t\t\t\tresult.outdatedDependencies\n\t\t\t\t\t);\n\t\t\t\tfor (moduleId in resultOutdatedDependencies) {\n\t\t\t\t\tif (__webpack_require__.o(resultOutdatedDependencies, moduleId)) {\n\t\t\t\t\t\tif (!outdatedDependencies[moduleId])\n\t\t\t\t\t\t\toutdatedDependencies[moduleId] = [];\n\t\t\t\t\t\taddAllToSet(\n\t\t\t\t\t\t\toutdatedDependencies[moduleId],\n\t\t\t\t\t\t\tresultOutdatedDependencies[moduleId]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (doDispose) {\n\t\t\t\taddAllToSet(outdatedModules, [result.moduleId]);\n\t\t\t\tappliedUpdate[moduleId] = warnUnexpectedRequire;\n\t\t\t}\n\t\t}\n\t}\n\tcurrentUpdate = (\n\t\t(undefined)\n\t);\n\n\t// Store self accepted outdated modules to require them later by the module system\n\tvar outdatedSelfAcceptedModules = [];\n\tfor (var j = 0; j < outdatedModules.length; j++) {\n\t\tvar outdatedModuleId = outdatedModules[j];\n\t\tvar module = __webpack_require__.c[outdatedModuleId];\n\t\tif (\n\t\t\tmodule &&\n\t\t\t(module.hot._selfAccepted || module.hot._main) &&\n\t\t\t// removed self-accepted modules should not be required\n\t\t\tappliedUpdate[outdatedModuleId] !== warnUnexpectedRequire &&\n\t\t\t// when called invalidate self-accepting is not possible\n\t\t\t!module.hot._selfInvalidated\n\t\t) {\n\t\t\toutdatedSelfAcceptedModules.push({\n\t\t\t\tmodule: outdatedModuleId,\n\t\t\t\trequire: module.hot._requireSelf,\n\t\t\t\terrorHandler: module.hot._selfAccepted\n\t\t\t});\n\t\t}\n\t}\n\n\tvar moduleOutdatedDependencies;\n\n\treturn {\n\t\tdispose: function () {\n\t\t\tcurrentUpdateRemovedChunks.forEach(function (chunkId) {\n\t\t\t\tdelete installedChunks[chunkId];\n\t\t\t});\n\t\t\tcurrentUpdateRemovedChunks = (\n\t\t\t\t(undefined)\n\t\t\t);\n\n\t\t\tvar idx;\n\t\t\tvar queue = outdatedModules.slice();\n\t\t\twhile (queue.length > 0) {\n\t\t\t\tvar moduleId = (queue.pop());\n\t\t\t\tvar module = __webpack_require__.c[moduleId];\n\t\t\t\tif (!module) continue;\n\n\t\t\t\tvar data = {};\n\n\t\t\t\t// Call dispose handlers\n\t\t\t\tvar disposeHandlers = module.hot._disposeHandlers;\n\t\t\t\tfor (j = 0; j < disposeHandlers.length; j++) {\n\t\t\t\t\tdisposeHandlers[j].call(null, data);\n\t\t\t\t}\n\t\t\t\t__webpack_require__.hmrD[moduleId] = data;\n\n\t\t\t\t// disable module (this disables requires from this module)\n\t\t\t\tmodule.hot.active = false;\n\n\t\t\t\t// remove module from cache\n\t\t\t\tdelete __webpack_require__.c[moduleId];\n\n\t\t\t\t// when disposing there is no need to call dispose handler\n\t\t\t\tdelete outdatedDependencies[moduleId];\n\n\t\t\t\t// remove \"parents\" references from all children\n\t\t\t\tfor (j = 0; j < module.children.length; j++) {\n\t\t\t\t\tvar child = __webpack_require__.c[module.children[j]];\n\t\t\t\t\tif (!child) continue;\n\t\t\t\t\tidx = child.parents.indexOf(moduleId);\n\t\t\t\t\tif (idx >= 0) {\n\t\t\t\t\t\tchild.parents.splice(idx, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// remove outdated dependency from module children\n\t\t\tvar dependency;\n\t\t\tfor (var outdatedModuleId in outdatedDependencies) {\n\t\t\t\tif (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {\n\t\t\t\t\tmodule = __webpack_require__.c[outdatedModuleId];\n\t\t\t\t\tif (module) {\n\t\t\t\t\t\tmoduleOutdatedDependencies =\n\t\t\t\t\t\t\toutdatedDependencies[outdatedModuleId];\n\t\t\t\t\t\tfor (j = 0; j < moduleOutdatedDependencies.length; j++) {\n\t\t\t\t\t\t\tdependency = moduleOutdatedDependencies[j];\n\t\t\t\t\t\t\tidx = module.children.indexOf(dependency);\n\t\t\t\t\t\t\tif (idx >= 0) module.children.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tapply: function (reportError) {\n\t\t\tvar acceptPromises = [];\n\t\t\t// insert new code\n\t\t\tfor (var updateModuleId in appliedUpdate) {\n\t\t\t\tif (__webpack_require__.o(appliedUpdate, updateModuleId)) {\n\t\t\t\t\t__webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// run new runtime modules\n\t\t\tfor (var i = 0; i < currentUpdateRuntime.length; i++) {\n\t\t\t\tcurrentUpdateRuntime[i](__webpack_require__);\n\t\t\t}\n\n\t\t\t// call accept handlers\n\t\t\tfor (var outdatedModuleId in outdatedDependencies) {\n\t\t\t\tif (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {\n\t\t\t\t\tvar module = __webpack_require__.c[outdatedModuleId];\n\t\t\t\t\tif (module) {\n\t\t\t\t\t\tmoduleOutdatedDependencies =\n\t\t\t\t\t\t\toutdatedDependencies[outdatedModuleId];\n\t\t\t\t\t\tvar callbacks = [];\n\t\t\t\t\t\tvar errorHandlers = [];\n\t\t\t\t\t\tvar dependenciesForCallbacks = [];\n\t\t\t\t\t\tfor (var j = 0; j < moduleOutdatedDependencies.length; j++) {\n\t\t\t\t\t\t\tvar dependency = moduleOutdatedDependencies[j];\n\t\t\t\t\t\t\tvar acceptCallback =\n\t\t\t\t\t\t\t\tmodule.hot._acceptedDependencies[dependency];\n\t\t\t\t\t\t\tvar errorHandler =\n\t\t\t\t\t\t\t\tmodule.hot._acceptedErrorHandlers[dependency];\n\t\t\t\t\t\t\tif (acceptCallback) {\n\t\t\t\t\t\t\t\tif (callbacks.indexOf(acceptCallback) !== -1) continue;\n\t\t\t\t\t\t\t\tcallbacks.push(acceptCallback);\n\t\t\t\t\t\t\t\terrorHandlers.push(errorHandler);\n\t\t\t\t\t\t\t\tdependenciesForCallbacks.push(dependency);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (var k = 0; k < callbacks.length; k++) {\n\t\t\t\t\t\t\tvar result;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresult = callbacks[k].call(null, moduleOutdatedDependencies);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tif (typeof errorHandlers[k] === \"function\") {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t(errorHandlers[k])(err, {\n\t\t\t\t\t\t\t\t\t\t\tmoduleId: outdatedModuleId,\n\t\t\t\t\t\t\t\t\t\t\tdependencyId: dependenciesForCallbacks[k]\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} catch (err2) {\n\t\t\t\t\t\t\t\t\t\tif (options.onErrored) {\n\t\t\t\t\t\t\t\t\t\t\toptions.onErrored({\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"accept-error-handler-errored\",\n\t\t\t\t\t\t\t\t\t\t\t\tmoduleId: outdatedModuleId,\n\t\t\t\t\t\t\t\t\t\t\t\tdependencyId: dependenciesForCallbacks[k],\n\t\t\t\t\t\t\t\t\t\t\t\terror: err2,\n\t\t\t\t\t\t\t\t\t\t\t\toriginalError: err\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (!options.ignoreErrored) {\n\t\t\t\t\t\t\t\t\t\t\treportError(err2);\n\t\t\t\t\t\t\t\t\t\t\treportError(err);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (options.onErrored) {\n\t\t\t\t\t\t\t\t\t\toptions.onErrored({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"accept-errored\",\n\t\t\t\t\t\t\t\t\t\t\tmoduleId: outdatedModuleId,\n\t\t\t\t\t\t\t\t\t\t\tdependencyId: dependenciesForCallbacks[k],\n\t\t\t\t\t\t\t\t\t\t\terror: err\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!options.ignoreErrored) {\n\t\t\t\t\t\t\t\t\t\treportError(err);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tresult &&\n\t\t\t\t\t\t\t\ttypeof ((result).then) ===\n\t\t\t\t\t\t\t\t\t\"function\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tacceptPromises.push((result));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar onAccepted = function () {\n\t\t\t\t// Load self accepted modules\n\t\t\t\tfor (var o = 0; o < outdatedSelfAcceptedModules.length; o++) {\n\t\t\t\t\tvar item = outdatedSelfAcceptedModules[o];\n\t\t\t\t\tvar moduleId = item.module;\n\t\t\t\t\ttry {\n\t\t\t\t\t\titem.require(moduleId);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (typeof item.errorHandler === \"function\") {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\titem.errorHandler(err, {\n\t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\t\t\t\t\tmodule: __webpack_require__.c[moduleId]\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} catch (err1) {\n\t\t\t\t\t\t\t\tif (options.onErrored) {\n\t\t\t\t\t\t\t\t\toptions.onErrored({\n\t\t\t\t\t\t\t\t\t\ttype: \"self-accept-error-handler-errored\",\n\t\t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\t\t\t\t\t\terror: err1,\n\t\t\t\t\t\t\t\t\t\toriginalError: err\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!options.ignoreErrored) {\n\t\t\t\t\t\t\t\t\treportError(err1);\n\t\t\t\t\t\t\t\t\treportError(err);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (options.onErrored) {\n\t\t\t\t\t\t\t\toptions.onErrored({\n\t\t\t\t\t\t\t\t\ttype: \"self-accept-errored\",\n\t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\t\t\t\t\terror: err\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!options.ignoreErrored) {\n\t\t\t\t\t\t\t\treportError(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn Promise.all(acceptPromises)\n\t\t\t\t.then(onAccepted)\n\t\t\t\t.then(function () {\n\t\t\t\t\treturn outdatedModules;\n\t\t\t\t});\n\t\t}\n\t};\n}\n__webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) {\n\tif (!currentUpdate) {\n\t\tcurrentUpdate = {};\n\t\tcurrentUpdateRuntime = [];\n\t\tcurrentUpdateRemovedChunks = [];\n\t\tapplyHandlers.push(applyHandler);\n\t}\n\tif (!__webpack_require__.o(currentUpdate, moduleId)) {\n\t\tcurrentUpdate[moduleId] = __webpack_require__.m[moduleId];\n\t}\n};\n__webpack_require__.hmrC.jsonp = function (\n\tchunkIds,\n\tremovedChunks,\n\tremovedModules,\n\tpromises,\n\tapplyHandlers,\n\tupdatedModulesList,\n\tcss,\n\tforceLoadChunks\n) {\n\tapplyHandlers.push(applyHandler);\n\tcurrentUpdateChunks = {};\n\tcurrentUpdateRemovedChunks = removedChunks;\n\tcurrentUpdate = removedModules.reduce(function (obj, key) {\n\t\tobj[key] = false;\n\t\treturn obj;\n\t}, ({}));\n\tcurrentUpdateRuntime = [];\n\tchunkIds.forEach(function (chunkId) {\n\t\tif (\n\t\t\t__webpack_require__.o(installedChunks, chunkId) &&\n\t\t\tinstalledChunks[chunkId] !== undefined\n\t\t) {\n\t\t\tpromises.push(loadUpdateChunk(chunkId, updatedModulesList));\n\t\t\tcurrentUpdateChunks[chunkId] = true;\n\t\t} else {\n\t\t\tcurrentUpdateChunks[chunkId] = false;\n\t\t}\n\t});\n\tif (__webpack_require__.f) {\n\t\t__webpack_require__.f.jsonpHmr = function (chunkId, promises) {\n\t\t\tif (\n\t\t\t\tcurrentUpdateChunks &&\n\t\t\t\t__webpack_require__.o(currentUpdateChunks, chunkId) &&\n\t\t\t\t!currentUpdateChunks[chunkId]\n\t\t\t) {\n\t\t\t\tpromises.push(loadUpdateChunk(chunkId));\n\t\t\t\tcurrentUpdateChunks[chunkId] = true;\n\t\t\t}\n\t\t};\n\t\t// Force-load chunks that now own modules orphaned by a removed chunk;\n\t\t// ensure handlers skip already-installed chunks, so no guard is needed.\n\t\tif (forceLoadChunks) {\n\t\t\tforceLoadChunks.forEach(function (chunkId) {\n\t\t\t\tObject.keys(__webpack_require__.f).forEach(function (key) {\n\t\t\t\t\t__webpack_require__.f[key](chunkId, promises);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n};\n\n__webpack_require__.hmrM = function() {\n\tif (typeof fetch === \"undefined\") throw new Error(\"No browser support: need fetch API\");\n\treturn fetch(__webpack_require__.p + __webpack_require__.hmrF()).then(function(response) {\n\t\tif(response.status === 404) return; // no update available\n\t\tif(!response.ok) throw new Error(\"Failed to fetch update manifest \" + response.statusText);\n\t\treturn response.json();\n\t});\n};\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkcrdregister\"] = self[\"webpackChunkcrdregister\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","","// module cache are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\n__webpack_require__.O(undefined, [\"defaultVendors\"], function() { return __webpack_require__(\"./src/PosScripts/globals.js\"); })\n__webpack_require__.O(undefined, [\"defaultVendors\"], function() { return __webpack_require__(\"./src/PosScripts/main.js\"); })\n__webpack_require__.O(undefined, [\"defaultVendors\"], function() { return __webpack_require__(\"./src/PosScripts/index.js\"); })\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"defaultVendors\"], function() { return __webpack_require__(\"./src/PosScripts/entry.js\"); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n",""],"names":["window","buildConfiguration","isSite","module","exports","OptionsTreeItem","_createClass","el","_classCallCheck","angular","controller","$scope","$rootScope","configService","errorService","customerService","helperService","$element","constants","$timeout","gettextCatalog","liveSearchService","$q","customer","searchText","searchTextLive","customerSearchList","showViewDetails","searchLimit","customerSearchLimit","mode","enableLoyalty","isOnline","minSymbolsToStartSearch","minSymbolsMessage","getString","cnt","notSetAddressTypeText","debounceTime","countries","submittedTab","submittedEditTab","tabs","contactTabIndex","billingSelected","shippingSelected","fcss","innerHeight","$on","event","object","formatBalance","addressTypes","Name","newCustomer","Contacts","Email","Phone","MobilePhone","Addresses","Line1","Type","Account","ID","Status","Currency","currency","EnableLoyaltyPoints","LoyaltyPoints","StoreCredits","UseSameForBilling","SendReceiptViaEmail","loadCountries","$","blockUI","then","resp","data","err","showError","unblockUI","resetNewCustomer","MarketingConsent","trigger","setCustomerLoadMode","loadOnline","currentTabCreate","prevTabCreate","isCustomersGrid","addCustomerForm","$setPristine","console","log","initSelects","showDialog","focus","editCustomerShowHandler","resetTabdrop","contractSelected","currentTab","prevTab","existShipping","existBilling","editedCustomer","copy","shippingAddr","filter","x","each","idx","billingAddr","length","push","open","index","findIndex","addr","_shippingAddr$","selectedShippingAddr","_objectSpread","_billingAddr$","selectedBillingAddr","groupValidation","groupName","isTouched","isValid","editCustomerForm","SCOPE","updateTabdrop","formType","options","selectSearch","selectSearchNotFound","selectSearchPlaceholder","attr","styler","firstRunEditDialog","fullReset","removeClass","ctrl","tabdrop","text","editedCustomerContact","Contact","editedCustomerContactObjcet","editedCustomerAddress","Address","editedCustomerAddressObjcet","liveSearchIsOpen","$watch","newValue","oldValue","fitHeightTypeahead","loadCustomersOnlineResults","liveSearchCustomer","val","isMobileDesign","isLoading","filterCustomerData","loadCustomers","res","Customers","SearchText","liveSearchResults","mapOnlineCustomers","slice","liveSearchFinished","name","liveSearchSelected","item","model","label","Array","from","target","classList","includes","viewDetailsButtonHandler","searchCustomerID","id","searchCustomerEmail","email","searchCustomer","CustomerID","Keyboard","hide","hideKeyboard","$broadcast","liveKeyPress","which","canShowErrors","searchCustomerLoadCustomers","forceOnline","pr","deferred","defer","resolve","promise","selectCustomer","addCustomer","isMobile","searchCustomerForm","$invalid","searchCustomerText","cancelDialog","initialModeValue","cancelEditCustomerDialogModal","closeDialog","action","createCustomer","validateCreateModal","a","City","forEach","State","StateProvince","Postcode","ZipPostCode","DefaultForType","Line2","Country","LocatoinID","lastOutletID","AddressID","CitySuburb","TaxExemptionReasonCode","ValidationState","ValidationText","c","ContactID","Website","IncludeInEmail","Fax","Comment","JobTitle","TaxRuleID","EffectivePercentInclusive","EffectivePercentExclusive","unshift","handleDefaultAddress","form","type","address","touchAddress","$name","ad","editCustomer","validateModal","saveMainInfo","saveContacts","saveShipping","saveBilling","isContactsTouched","customerToSave","contactsToRemove","addressesToRemove","indexOf","splice","updateMode","d","extend","updateCustomer","onCustomerUpdated","currentSale","cancelDialogModal","editCustomerContact","Customer","editCustomerAddress","switchMode","setAddNew","setFocusToFirstInput","getNewCustomerAddressClass","validateNewCustomer","validateShippingAdress","validateBillingAdress","getFieldClass","fieldLengthGT","field","undefined","$dirty","$error","required","touchMainInfo","touched","touchContact","isMarketingConsent","arguments","concatsGroup","find","tabIndex","tab","contactName","concat","phone","mobilePhone","tabIsTouched","tabIsValid","$valid","$setDirty","group","line1","line2","city","state","zipCode","country","defaultForType","validateForm","valid","getNextItem","currentIdx","some","getPrevItem","reverse","existPrevNumber","existNextNumber","changeTab","tabNumber","email_0","changeTabCreate","prevPane","nextPane","shippingAddressRequired","billingAddressRequired","addressS","$viewValue","astateS","acountryS","azipPostCodeS","acityS","addressB","astateB","acountryB","azipPostCodeB","acityB","title","hasError","isRequired","errors","i","contact","v","join","userManagementService","localDBProvider","jsStoreProvider","deviceInfo","settingsProvider","isSimulator","hideUsersAssignedToAllLocations","salesRepresentative","salesRepresentativeSearchList","firstShow","hideUsersAssignedToAllLocationsChanged","value","setHideUsersAssignedToAllLocations","searchSalesRepresentative","getHideUsersAssignedToAllLocations","r","Value","show","searchSalesRepresentativeForm","searchSalesRepresentativeID","filters","HideAllLocations","searchSaleRepresentatives","SaleRepresentatives","selectSalesRepresentative","addSalesRepresentative","shippingAddressSearchList","emptyText","resultCount","salesShippingAddress","customerAddressData","shippingAddressList","defaultShippingAddressIndex","pop","map","displayText","displayAddress","prvSelectedAddressData","selectedAddressData","selectedAddress","getEmptyText","searchShippingAddress","filterText","toLowerCase","closeKeyboard","selectSalesShippingAddress","addSalesShippingAddress","selectedSalesShippingAddress","soundService","printService","STATUS_DRAFT","QuantityPropName","ShowAtLocations","availableProducts","groupedAvailableProducts","displayAvailableProducts","firstScanFormShow","firstAddFormShow","dateFormat","getDateByFormatForDatePickers","currentOrder","firstScanStart","isScanDlgVisible","itemQuantityDlg","quantityObject","scanGridProducts","modifyTransferItemFunc","showScanDlg","evt","scanError","scanSuccess","setMultiscan","stockTakeScanData","totalCount","inStocktransferCount","reconnect","click","Number","parent","stockTransferActiveTab","stocktakeScanActiveTab","clearScanData","multiScanText","getMultiscan","hideScanDlg","modifyTransferItem","row","isAbsolute","manualPress","comparator","b","searchProductList","Barcode","ProductCode","barcode","rows","msg","message","playBad","playGood","makeQuantityObject","String","fromCharCode","scanStockTransfer","arr","split","br","trim","showSetQuantityDlg","dataStatus","showItemQuantityDlg","refID","Adjustment","QuantityOnHand","OnHand","OnOrder","QuantityAvailable","Available","showOnHand","hideBarcode","readOnly","ProductID","elID","setQuantity","prm","adjustStockTransfer","processed","liveSearch","showMaxVisibleLiveSearchCountMsg","searchProductID","scanGridSearchText","placeMaxVisibleLiveSearchCountMsg","lst","getBoundingClientRect","width","height","css","left","bottom","searchType","filtered","searchLocationID","LocationID","searchExpiryDate","ExpiryDate","searchBatchSN","BatchSN","scanGridSearch","deferred2","scanGridCancelSearchMode","saleService","surchargeService","surcharge","surcharges","isCustom","paymentProcessorID","realSum","calculateSurcharges","selectSurcharge","addSurcharge","PaymentRealAmount","service","monochrome","scaleX","scaleY","rotation","arrBarcodes","clearBarcodes","initBarcode","elemID","altText","opts","imgDiv","html","barcodeText","replace","barcodeAltText","initArr","elt","sym","desc","opt","bw","BWIPJS","bwipjs_fonts","canvas","document","getElementById","style","visibility","tmp","eq","substr","alttext","includetext","backgroundcolor","bitmap","Bitmap","scale","pad","paddingwidth","paddingheight","BWIPP","e","display","errorText","stack","obj","renderBarcodes","loadfonts","len","render","dataURL","toDataURL","clearFonts","fontsets","f","fonts","loadAllFonts","monocolor","_loop","fst","Object","getOwnPropertyNames","sizes","j","sz","getglyph","minchar","initForReceiptInProgress","initForReceipt","receiptSaleModel","is","toUpperCase","THIS","elem","parceBarcodeWeightBased","SKU","advancedBarcodeMode","isGS1Mode","decimalPoint","advancedBarcodeValueDecimalPoint","IsDS1","prefix","parseInt","IsDS1PriceBased","advancedBarcodeSKULength","advancedBarcodeValueLength","isNaN","dec","UseOutletSKU","advancedBarcodeUseOutletSKU","getWeightAmount","amount","SpecAmount","parseFloat","setPriceBasedItemValue","elAdded","PriceBasedValue","Amount","Count","sjcl","unpackStr","$http","getNCache","url","bitArray","hash","sha256","fileName","codec","hex","fromBits","fileEntry","prepareFolder","fl","getFile","fe","readFile","requestConfig","method","cache","ContentType","Hash","objStr","Image","writeFile","deffered","reject","resolveLocalFileSystemURL","cordova","file","cacheDirectory","folder","getDirectory","create","dirEntry","exclusive","reader","FileReader","onloadend","result","readAsText","dataObj","createWriter","fileWriter","onwriteend","onerror","toString","blb","Blob","seek","write","clearCache","removeRecursively","isSequential","fireEvent","_","needFireEvent","scan2","finishScan","nextScan","scan","lastFocusedElement","isEmulator","format","cancelled","plugins","barcodeScanner","error","resultDisplayDuration","disableSuccessBeep","loginService","registryService","reportService","uuid2","$uibModal","$location","$locale","cashManagementService","$filter","viewName","constCashManagementViewName","isLoggedIn","goToHomePage","EmptyReason","getFormatedDate","getDateByFormat","getDateByFormatAlreadyLocal","closeRegistryObj","OutletName","lastOutlet","RegistryNumber","lastRegistry","movement","PettyAmount","CustomReason","Reason","currency_symbol","NUMBER_FORMATS","CURRENCY_SYM","fixDropdownHeight","off","offset","prn","closest","prnOff","newHeight","top","onLoad","checkOpenCashDrawer","getActiveRegistrySales","lastRegistryID","lastUserName","total","GiftCardCounted","GiftCardExpected","StoreCreditCounted","StoreCreditExpected","LoyaltyCounted","LoyaltyExpected","CreditCardCounted","CreditCardExpected","getCashMovements","operations","raiseViewChanged","path","calculateTotal","count","expected","removeCash","OperationType","checkBoxes","RemoveNotPetty","RemovePetty","editPosUserDialog","addCash","AddNotPetty","AddPetty","checkFields","reason","$windowElement","setType","addMovement","tempAmount","addCashMovement","newguid","userName","updateRegistryCash","registrySalesID","Reasons","mvm","printCashManagementReport","updateReasons","reasonName","addReason","reasons","cashManagementOparationReasons","getOperationType","getOperationSign","getMovementAmount","isValidAddMovementForm","DEARRound","maxValue","CashExpected","checkMaxValue","cashManagementAmountDlg","cashManagementPettyAmountDlg","tempPettyAmount","showCasgManagementAmountDlg","toggle","showCasgManagementPettyAmountDlg","setCashManagementAmount","setCashManagementPettyAmount","changeAmountType","getReasons","showOpenCashDrawer","hasCashDrawer","hasDrawer","openCashDrawer","remoteRequestProvider","webOnlyProvider","closeRegistryID","registryID","operationType","provider","objArr","CloseRegistryID","RegistryID","OperationTime","moment","utc","SalesRepresentative","addCashMovements","sendOfflineCashManagement","getCashMovementsToSend","promises","Success","ppr","markCashMovementsAsSent","Errors","Exist","Promise","all","sendDelayedOfflineCashManagement","addCallback","addCallbackFunction","password1","password2","dearPosName","userID","oldPassword","warningVisibility","Password1","Password2","password","confirm","confirmPasswordForm","changePassword","showPassword1Warning","showPassword2Warning","clickAndCollectService","keyPressDelayService","productsService","fulfillment","getDateByFormatForMoment","getImageUrl","imageID","subUrl","size","imagesX","imagesY","baseImageURL","loadClickAndCollectSale","taskID","fromOrderLines","PickedLines","InvoiceDateFormated","InvoiceDate","DueDateFormated","DueDate","getPickItemColor","Quantity","pickItemFunc","scanedValue","available","newQuantity","expiryDateDistribution","CostingMethod","skipScanDialog","productFound","skip","closeScanBatchDialog","pickItem","ExpiryDateDistribution","PickLines","showScanBatchDialog","removePickedItemFunc","BaseAvailable","scanedBatch","scanBatchSelectedItem","cancelPressed","showFulfillmentCompletedDialog","closefulfillmentCompletedDialog","submitScanBatch","checkProductSerialNumber","found","ids","respRow","pickedItem","changePickedItemQuantity","stopPropagation","preventDefault","newQuantityValue","isScanBatchDialogVisible","autoPick","TaskID","itemsToRemove","processedProducts","batchNumbers","batchItem","batch","completeFulfillment","payload","SaleID","Lines","UserName","pickedLines","pId","pLine","eId","exp","quantity","clickAndCollectFulfill","PosOrderID","isPartialPayment","localStorage","setItem","JSON","stringify","saleID","subType","toPaymentPage","isFullyPaid","IsPaid","posSale","convertDearSaleIntoPOSSale","currentSaleObject","convertCurrentSaleForAPI","TaxInclusive","OrderNumber","InvoiceNumber","IsFromDearSale","saveSale","errorMessage","error2","ErrorMessage","paidAmount","Payments","Total","Exception","constClickAndCollectViewName","fullFilters","CustomerSearch","SaleNumberSearch","selectedPage","totalPages","itemsByPage","totalRecords","ordersTotal","showNoInvoicesMessage","selectedRow","abs","Math","scrollReachBottomCallback","loadClickAndCollectSales","Orders","OrderDateFormated","SaleOrderDate","fEl","getPages","initPagerOnScroll","search","step","ceil","selectRow","showCustomDialog","callbackModal","getStatusColor","convertFromOld","CalculatorHelperService","AddressType","StartCalcLevel","Enumerable","$interval","stopLoadCheck","page","limit","clickAndCollectAutoPick","calculateTax","dearSale","Date","ReturnID","CheckoutItems","isDiscountPercent","Discount","DiscountTax","comment","CustomerNote","RealPaySum","CalculatedTax","CustomerName","CustomerLoyaltyPoints","CustomerStoreCredits","CustomerEnableLoyaltyPoints","CheckoutItemCount","Balance","LoyaltyPointsTotal","ClearOrderNumber","OrderType","CashChangeAmount","itemDiscount","selectedCoupon","manuallyAppliedDiscount","CashRounding","CustomerEmail","CustomerPhone","DontReloadContacts","ShippingAddress","Shipping","DontReloadAddresses","SaleLines","taxObject","effectivePercentExclusive","Tax","effectivePercentInclusive","ruleID","TaxRule","price","Price","priceWithDiscount","loyaltyEarning","LoyaltyEarning","priceWithT","pl","Tags","BrandID","CategoryID","FamilyID","Note","LoyaltyPointsEarning","PriceWithTax","CanEdit","CanDelete","SaleType","Taxes","BasePrice","BasePriceWithDiscount","Sku","BarCode","ImageID","Discounts","Option1","Option2","Option3","ProductShortDescription","ProductType","SerialNumber","CF1","CF2","CF3","CF4","CF5","CF6","CF7","CF8","CF9","CF10","DefaultPrice","deals","priceWithTax","discount","payment","PaymentProcessorID","DatePaid","ShortName","PaymentTypeName","Loyalty","Reference","Surcharge","showNewCheckoutUI","calculateCheckout","totalSum","convertDearSaleIntoPOSSaleWithRefunds","originalSale","GroupedSale","TotalSurcharge","GhostSurcharge","TotalSale","ExchangeAmount","PaymentsMap","LoyaltyRefundCoeff","cantProcessOffline","sale","refundID","ReturnPayments","Refunds","refundId","refund","IsPartialPaid","IsPartiallyPaid","newRefundOrder","RefundID","RefundLines","PriceWithDiscount","MissingInInvoice","RefundPayments","refPay","pi","pay","s1","sum","p","s2","chIdx","chkItem","FinalPrice","FinalAmount","FinalTaxAmount","makePayment","metadata","starPrinter","requestCharge","response","errorDescription","ServerTransactionID","paymentID","payloadVersion","bypassOutletRegistry","applicationID","applicationKey","loginUserID","tenantID","posName","role","taxCalculationMethod","taxInclucive","tenantTaxRule","ignoreCustomerTaxRule","paymentProcessors","posPaymentProcessors","UserHasSelectedOutlet","applyCustomerDiscountAfterOtherDiscounts","callbackFunctions","dataSendCount","dataSendInterval","hasNetworkConnection","pingFunction","pingFrequency","loginChanges","deliveryTimeInterval","loadCustomersMode","lastOutletInfo","lastPingCall","pingMinInterval","minimalAndroidVersion","isQAMode","pinSize","pinEnabled","pinToken","fractionalLimit","supportMerchantCustomerReceiptPrint","timeZone","posVendorId","supportLinklyMerchantCustomerReceiptPrint","isLinklyPairWithTerminal","requestTimeout","searchProductLimit","keyPressDelay","registryPrefix","registrySuffix","roundTo","roundingRule","currencyCulture","blockSales","lastPosChange","getStartedSuffix","connectionURLSuffix","imageURLSuffix","baseURL","dearAPIBaseUrl","dearAPIImageUrl","enableSoftKbd","isClover","decimalPlaces","zeroTaxID","banknoteDenominations","allowNewCalculations","autoLockAfter","giftCardSettings","hasCamera","configuration","getItem","getStartedURL","connectionURL","setBaseURL","newUrl","endsWith","setImageURL","lastDearPosName","setLastDearPosName","n","setLastUserName","lastDisplayUserName","setLastDisplayUserName","setPingFunction","func","setNetworkMode","_isOnline","pingResponse","old","changeState","execCallbackFunctions","updateInProcess","updateInProcessResult","callCallbackFunctions","updateCardPaymentIDsFromOutlet","useTyro","TyroMerchantID","tyroMerchantID","useTriPOS","TriPOSAccountID","triPOSAccountID","TriPOSAcceptorID","triPOSAcceptorID","TriPOSAccountToken","triPOSAccountToken","useLinkly","LinklyUserName","linklyUserName","LinklyPassword","linklyPassword","useWindcave","WindcaveStation","windcaveStation","lastECSMappingOutletID","lastOutletTax","lastSquareLocationID","lastSquareIntegrationID","lastPaymentSenseURL","lastPaymentSenseAPIKey","lastSurchargeTax","info","parse","setLastOutlet","outletConfig","PosOutletID","EcsLocationMappingID","SquareLocationID","SquareIntegrationID","PaymentSenseURL","PaymentSenseAPIKey","SurchargeTax","Info","customizedSecondScreenUI","CustomizedCustomerDisplayUI","secondScreenBackground","CustomerDisplayBackground","secondScreenLogoUrl","CustomerDisplayLogo","setCurrencyCulture","culture","cashRegistryPaymentProcessorID","receiptID","labelID","quickKeyTemplateID","quickKeyData","tyroTerminalID","triPOSLaneID","catalogTilesSize","catalogTilesVisibility","showProductAvailability","saveReceiptTemplate","tpl","loadReceiptTemplate","saveLabelTemplate","loadLabelTemplate","setLabelTemplate","setLastRegistry","registryName","cashRegistryPaymentProcessorId","setPrinterSettings","setLabelPrinterSettings","getPrinterSystems","canSelectModel","canDiscover","getLabelPrinterSystems","getPrinterSettings","force","printerWidthCode","printerWidthPoints","simulatorMode","printSystem","printerModel","printerName","getLabelPrinterSettings","labelPrinterWidthCode","labelPrinterWidthPointsX","labelPrinterWidthPointsY","labelW","labelH","labelPrintSystem","labelPrinterName","getScannerSettings","hasOwnProperty","enableCameraScan","setScannerSettings","cfg","setCardPaymentSettings","getCardPaymentSettings","providerKey","isAdmin","isManagerAndHigher","isAdminAndConnected","isManagerAndHigherAndConnected","getCardPaymentProcessor","loweredPaymentMethodName","getPaymentMethods","destScope","customPaymentMethods","storeCreditsPaymentProcessorID","creditCardPaymentProcessorID","laybyPaymentProcessorID","giftCardPaymentProcessorID","loyaltyPaymentProcessorID","isGiftCardEnabled","IsGiftCardEnabled","isGiftCardExpirationDateEnabled","CanGiftCardExpire","isGiftCardRefundable","CanGiftCardRefund","getCatalogPageSize","getCatalogPageRows","getCatalogPageCols","getCatalogTilesVisibility","getShowProductAvailability","setNextSequenceNumber","getNextSequenceNumber","intV","getTriPOSUrl","getTriPOSLaneUrl","events","UpdateLanguage","constHomeViewName","constSellViewName","constSessionViewName","constOfflineSalesViewName","constSalesHistoryViewName","constCloseRegistryViewName","constSalesParkedViewName","constProductsViewName","constCustomersViewName","constUserManagementViewName","constDashboardViewName","constProductManagementViewName","constSetupViewName","constPrinterSetupViewName","constLabelPrinterSetupViewName","constInventoryViewName","constInTransitViewName","constReportsViewName","constPaymentTypeSummaryViewName","constProductPerformanceViewName","constSalesSummaryViewName","constGiftCardViewName","constDeliveryViewName","UpdateLanguageFunction","constHomeSectionName","constSessionSectionName","constInventorySectionName","constReportsSectionName","constSellSectionName","constProductsSectionName","constCustomersSectionName","constUsersSectionName","constDashboardSectionName","constProductSectionName","constSetupSectionName","pageSize","parkStatuses","parked","layby","onaccount","pending","minScreenHeight","newGuid","backofficePayment","newSaleTotalCountName","newSaleCountName","giftCardSaleCountName","newOnAccountCountName","newLaybyCountName","newTaxCountName","newSaleDiscountName","refundTotalName","roundingTotalName","newPaymentCountName","maxAllowedPrice","maxAllowedTotalPrice","customKeyboardMaxLenth","playStoreAppLink","appleStoreAppLink","escapeString","s","exportTableToCSV","tableSelector","csv","ignore","col","isAsIs","txt","exportNewTableToCSV","downloadCSV","filename","csvFile","downloadLink","navigator","msSaveBlob","createElement","download","href","URL","createObjectURL","body","appendChild","writeCSVToFile","nativeURL","device","platform","externalDataDirectory","documentsDirectory","dir","blob","hybridModeLoadOnline","startCustomersAutoUpdate","injector","element","me","get","loadCustomersAll","loadMode","_getLoadCustomerProvider","isSupported","SaleBarcode","isOnlineOnStart","status","getCustomer","Id","resolvePromise","rejectPromise","cp","AccountReceivable","RevenueAccount","PriceTier","AdditionalAttribute1","AdditionalAttribute2","AdditionalAttribute3","AdditionalAttribute4","AdditionalAttribute5","AdditionalAttribute6","AdditionalAttribute7","AdditionalAttribute8","AdditionalAttribute9","AdditionalAttribute10","CreditLimit","Comments","removeCustomer","customerID","lockCustomersUpdate","loadCustomersOnInit","getHash","time","needLoad","timeEnd","prUpdate","_typeof","bind","needCheckCount","loadLiveCustomers","LoadOnline","fillCustomersData","checkCustomersOld","getCustomersHash","loadCostomersAll","loadRes","CompareResult","unpack","restored","CustomerHash","isArray","refreshCustomers","customers","Default","mapped","toLowerCamelCase","addresses","mattrixDiscounts","MatrixDiscounts","discounts","searchParameters","allCustomers","customersTotal","tabName","collapseObject","showCollapse","collapse","getAddressString","grep","Boolean","toggleRow","active","lockSearch","checkSearchAndWait","processBarcodeSearch","dispatchEvent","Event","bubbles","showInMobileDesign","showInDesktopDesign","Chart","outletService","stockTakeService","canSeeProfitabilityMetrics","CanSeeStockValue","chartObj","viewMode","startDate","add","startOf","endDate","periodLabel","OutletID","outleDetails","Revenue","SaleCount","CustomerCount","GrossProfit","DiscountValue","DiscountPercent","BasketValue","BasketSize","ReturnCount","COGS","totalValue","loadUserAvailableOutletsWithoutRegister","locations","allowSelectOutlet","reloadData","updatePeriodLabel","setViewMode","viewModeName","currentDate","clone","endOf","prevPeriod","nextPeriod","showDetails","chartName","chartDetails","Title","Outlets","Details","initChart","chartData","Labels","closeDashboardDetailsDialog","destroy","outletID","_startDate","toDateWithCurrentTimeZone","_endDate","getDashboardData","ranges","Ranges","outlets","lastPeriodData","LastPeriodData","SalesRevenue","SalesCount","key","outletData","ECSLocationName","Percent","getPercent","getAvgPercent","sort","compareOutlets","selector","labels","values","empty","ctx","getContext","myChart","datasets","backgroundColor","borderColor","fill","lineTension","pointRadius","pointBackgroundColor","pointBorderWidth","pointBorderColor","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","pointHoverBorderColor","responsive","legend","tooltips","enabled","elements","point","pointStyle","scales","xAxes","gridLines","scaleLabel","yAxes","ticks","suggestedMin","round","propName","outlet1","outlet2","factory","dataChangeNotificationService","lastEvents","timer","isInited","init","dataChangeStatuses","mp","lastChange","stop","cancel","JsStore","initialDBCreationScript","script","update2","tx","executeSql","update3","update4","update5","update6","update7","update8","update9","update10","update11","update12","update13","update14","update15","update16","update17","update18","update19","update20","update21","update22","update23","update24","update25","update26","update27","update28","update29","update30","update31","update32","update33","update34","update35","update36","update37","update38","update39","update40","update41","update42","update43","registeredUpdates","appplyUpdates","currentVersion","version","getSchema","settingsTable","columns","dataType","DATA_TYPE","primaryKey","notNull","enableSearch","DateTime","productsTable","multiEntry","customersTable","saleRepresentativesTable","offlineSalesTable","_defineProperty","productsSearchTempTable","registryOrdersTable","dbVersionTable","orderPaymentsTable","tables","canMigrateData","DeliveryHelper","Calendar","dayGridPlugin","$templateCache","$compile","showCompleted","setStatuses","searchFilter","calendar","refetchEvents","deliveryHelper","CreateDeliveryHelper","processParams","cs","removeItem","toDate","fromDate","firstTime","loadData","calendarEl","initialView","firstDay","dayMaxEventRows","loadCalendar","visibleRange","start","end","eventClick","gotoDeliveryList","viewDidMount","toolbar","prepend","addClass","prms","successCallback","failCallback","flt","loadDeliveries","prepareCalendarData","Rows","currentFilter","getFormatedDate2","cantExport","scrollEvent","loadUserAvailableOutletsAndRegistries","singleLocation","newVal","oldVal","nv","ov","equals","searchPress","blur","isNewSearch","cpy","getLocationID","formatRow","where","select","firstOrDefault","dateSelectedCallback","to","rtm","getFormatedLocalDateTime","StatusDate","FormattedDate","date","FormattedTime","formatTime","VoidDate","FormattedVoidDate","deactivateSchedule","dialogMode","currentRow","changeDeliveryStatus","editRow","EntityID","addNew","print","printDeliveries","printPdfReport","CompleteDeliveryTask","locationID","UpdateDeliveryTaskStatus","CancelDeliveryTask","$this","querySelector","scrollTop","scrollHeight","fullCalendar","dt","getFullYear","getMonth","uuid2Service","isContact","caption","deliveryInterval","customerName","contactID","addressID","addressLine1","addressLine2","postCode","deliveryCurrentTime","deliveryCurrentRow","deliveryItems","clearDelivery","clearContact","clearAddress","deliveryTimes","contacts","generateTime","dtStr","selectTimeList","selectTime","TaskStatus","offsetTop","offsetLeft","DeliveryTime","DeliveryDate","ex","setTime","DeliveryTimeDisplay","DeliveryNumber","wasSaved","loadDeliveryBySaleOrder","DeliveryItems","IsNew","editDeliveryCaption","fillContactObject","ContactDetails","fillAddressObject","ShipAddressDetails","processCustomerData","updateControls","datePickerFormat","DeliveryDateOld","setDatepicker","clearTime","fillAddress","fillContact","orderBy","order","toArray","orderByDescending","SelectedContact","foundContact","temp","defaultContact","Save","delivery","currentDelivery","DeliveryID","DeliveryDateStr","toDateFromDatepickerParameter","SaveInternal","exit","ret","SaveDelivery","getMinimalPendingDate","cloneDate","keyboardPartial","dateRangeSelector","details","constructor","prototype","directive","scope","attrs","ngSubmit","setTimeout","unbind","submit","$apply","link","$observe","preparePrintTemplate","attributes","activeElement","isDefined","$emit","require","ngModel","$setViewValue","$eval","ngmEnter","on","container","containerHeight","elHeight","outerHeight","curScroll","position","elPos","elemBottom","restrict","focusedElement","ngmSelect","cacheService","httpSrc","getConfig","takeParentSize","isQuickKeyImage","emptyImage","ngmEmptyImageSrc","$set","getImage","config","isFamily","imageId","isRealFamily","addSize","quickImageType","encodeURIComponent","onChange","transclude","templateUrl","checkDeviceVersion","elems","querySelectorAll","eix","floatPrecision","$parent","selectValue","positiveSign","formattedModel","selectSum","doc","range","selection","createTextRange","moveToElementText","getSelection","createRange","selectNodeContents","removeAllRanges","addRange","resetFontSize","AvailablePT","childClass","defaultSize","children","className","fitFontSize","maxWidth","first","elWidth","offsetWidth","setFocus","clickFun","symb","floor","applyFractionalLimit","tmpModel","pointPos","substring","pressFun","ngmPopoverCallback","ngmDiscountCodeTextModel","ht","dlg","ngmPopoverTarget","btnVar","ngActiveButtonModel","info1Var","ngInfo1Model","canChangeSignVar","ngmCanChangeSignModel","titleVar","ngmPopoverTitleModel","ngmEnterCallCallback","discountCodeZoneCls","ngmDiscountCodeZoneClsModel","ngmTitleCodeText","ngmDiscountCodeTitleText","discountCode","isValidCode","toggleSign","$$childHead","signIsPositive","titleCodeText","prnVar","ngmPopoverDialog","ngmPopoverTitle","placement","ngmPlacement","displayMode","ngmDisplayMode","inited","popel","remove","canChangeSign","LLDiscountType","popover","template","content","compiledContent","$modal","discountCodeFieldTemplate","discountCodeField","append","btnCancel","modal","keyHandler","keyCode","callback","isShown","timeout","activeButton","info1","formatFloatNumber","update","getModelValue","clean","getScope","apply","$interpolate","ngmOptionsCallback","ngmTemplate","ngmOptionsDialog","prnModel","ngmOptionsTitle","entireTemplate","ngmEntireTemplate","currentLevel","currentValue","option1","option2","option3","compiledTitle","selectOption","keys","call","templateCompiled","btnBack","hideDialog","evtHide","$root","handleDestroyEvent","parentOption","EMAIL_REGEXP","elm","$validators","modelValue","$isEmpty","test","ngmMoveFocusTo","fun","ngModelCtrl","equalToValidator","viewValue","checkedVal","thisInputVal","isEnterPressed","mdl","ngmRedirectChangeEvent","sItem","linker","bootstrapSwitch","frm","scp","showValue","ngmShowValue","showModal","ngmShowModal","table","evtName","refreshTable","pipe","tableState","stSelectCombo","query","distinct","stPageSelector","redraw","paginationState","pages","totalItemCount","stPageUpdater","pagination","$parse","preventClick","isTouchmove","moveMoment","timeStamp","cancelable","isDisabled","currentTarget","fn","$event","eventToFire","root","resizeFun","resize","removeResize","dateFrom","dateTo","dateLimit","FormatedDateRange","DateFrom","DateTo","allowReset","checkApplyButtonDisabled","disableApplyButton","bothDatesRequired","translatePredefinedDateRanges","dateDelivery","Code","subtract","month","year","res2","dateRanges","showDateSelector","setDateRange","hideDateSelector","keepData","updateDateRangePlaceholder","days","reset","monthLimit","setMonthLimit","period","toggleClass","updateContentHeight","$content","$contentWrapper","contentTop","contentHeight","screenHeight","bottomMargin","evt1","passKeyboard","evt2","evt3","def","terminal","afterRender","$window","opacity","tip","appendTo","extractOrderIDs","orderID","baseOrderID","standAloneReturn","sendEmailReceipt","emailSubject","emailBody","ignoreOrderID","templateID","documentBody","storeEmailReceipt","setEmailToken","hiddenToken","emailTemplate","PendoService","loadPendoScript","requireAll","context","onCloseCallback","isCriticalError","isHTML","errorObject","isCancelled","msd","exceptionMessage","statusText","showErrorDialog","HEADER_SYNC_STATUS_EVENT","STATUS_OK_AFTER_ERROR_SEND","STATUS_ERROR_SEND_ORDER","STATUS_TOO_LONG","STATUS_OK","downloadFile","_this","mimeType","_downloadWeb","req","responseType","_blobToBase64","printPdf","_downloadInAppBrowser","_downloadMobile","_this2","storageLocation","_getStorageLocation","folderpath","toURL","fileOpener2","success","InAppBrowser","Error","readAsDataURL","$sce","filterService","uibTypeaheadHighlightExFunction","filterInput","m","sel","searchu","filterInputu","searchArr","splitSearchText","intersections","findIntersections","sortIntersections","regions","unionAllIntersections","formatString","initCanvas","adj","textToLengthAdjusted","rhtml","w","trustAsHtml","maxLineWidth","clearCanvas","ff","fs","fw","sfnt","font","measureText","threeDotSpace","diffPos","idx2","increase","str","src","dst","begin","sortedArr","k","isIntersected","unionIntersections","offsetStart","sh","eh","shLength","ehLength","insertStr","max","pend","isStringContainsSearchArray","contains","checkEquality","pos","pos2","minPos","incompatiblePos","min","_MinPT","_AvailablePT","_ww","getCharMeasure","currentChar","pt","measureObject","_chTMP","measureTextWidth","charAt","measureTextHeight","maxHeight","getFontHeight","sourceWidth","sourceHeight","textAlign","textBaseline","fillText","getImageData","firstY","lastY","y","alpha","updateFontSize","child","minSize","checkHeight","innerText","widthSize","heightSize","fSz","fArr","offsetHeight","jsAddCustomerModalPosition","btnPositionTop","btnPositionLeft","btnHeight","modalWidth","btnPositionLeftDialog","onSelectOpened","onViewStyled","onSelectClosed","initTogglers","initCustomerForm","onScrollReachBottomCallback","$div","$divs","onScroll","$container","isEndOfList","barcodeService","googleHelperService","snackbar","SnackBar","sameFont","currentViewName","transmit","pageTitle","currentUser","currentOutlet","currentRegister","selectedLanguage","languages","Text","showHeader","updateDesignMode","indicatorTitle","outletName","updateTitle","changeLanguage","getCurrentLanguage","closeChangeLanguageDialog","closePageNotAvailableDialog","changeLanguageModalInstance","dismiss","setLanguage","setCurrentLanguage","logoff","dropdown","logout","cur","changeOutlet","toggleMenu","next","current","$$route","originalPath","fdf","$el","enableMenu","modalUpdateSettings","showInfoDialog","callBack","showRefreshPageDialog","location","reload","closePageRefreshDialog","refreshPage","closeCancelDialogModalDialog","syncStatus","printerStatus","scannerStatus","tillStatus","make","close","unpackArray","UnpackWorker","NonWrappableContainer","set","o","createNonWrappableContainer","dialogs","local","getFormatedDateAmPm","getFormatedDateAlreadyLocal","getDateFormat","tm","hours","minutes","getFormatedDateWithLocalTime2","getFormatedDateAsIs","getFormatedDateOnlyAsIs","toDateFromDatepickerDirect","toDateFromDatepickerDirectNoZone","convertToDateFromDatepicker","timeStr","skipReplace","toDateFromDatepickerParameterUTC","toISOString","toDateFromDatepicker","toJSON","mins","appendSecs","initCenterModalDialog","parentElement","modalDialog","alignModal","array","okButtonName","cancelButtonName","showCancel","showCustomDialog3","showCheckbox","checkboxValue","checkBoxCallback","checkBoxValue","resizeCallback","closeCallback","one","pressEnterElement","pressEscapeElement","isActive","backdrop","keyboard","okPressed","scope2","dbRawsToArray","places","pow","pv","toFixed","prop","_len","showPageAfterInit","applyCurrency","number","lastActive","erroDialogIsShown","_$windowElement$","_$$","removeProperty","closeBtn","setProperty","infoObject","isWarning","customClass","roundCash","rule","intAmount","lstDigit","lstDigits","elementId","setSelectionRange","inputs","er","alert","z","checkDeviceVersionIsBelowMinimal","guidToFlatString","g","gotoSell","gotoParkedSales","trimArray","extractCurrentQuickKeyInfo","qkey","qdataTemp","qdata","brands","categories","tags","groupingOperator","checkClickedElement","elpt","elementFromPoint","pageX","pageY","getSearchParams","cSearch","sendMessage","dateFormatFun","dateLimitRange","_customClass","datepicker","pickerInited","dtMin","hour","minute","second","dtMax","numberOfMonths","minDate","maxDate","showButtonPanel","onClose","dateText","instance","dpDiv","beforeShow","input","widget","off2","buttonPane","change","_clearDate","_gotoToday","setDatepicker2","beforeFun","closeFun","defaultDate","showOn","butttonImage","getEmailClass","formElement","isLoyaltyEnabled","storeCurrentSale","paymentType","saleType","operationName","restoreCurrentSale","Surcharges","isModalDialog","modalContent","elTop","availableHeight","keyboardHeight","resizeModalTypeahead","isOpen","$elPopup","$resizeContnet","elemHeight","absValue","getModalConfiguration","headerHeight","modalTopPadding","modalBottomPadding","getModalContainerHeight","mobileSettings","modalHeaderHeight","paddings","modalContainerHeight","getGuid","_p8","random","uniqueBy","hashTable","isSyncIndicatorSet","getSaleQueue","queue","createdDate","now","storeSaleQueue","checkNSetIndicator","setIndicator","tmpr","PROCESS_QUEUE_FAIL_THRESHOLD","processQueueToSendFail","failCounter","shift","processQueueToSendSuccess","OperationID","getQueueSaleToSend","shiftItem","compareStrings","treatNullAsValue","addValues","mapToList","setSpecialCurrencySymbols","localeID","GROUP_SEP","DECIMAL_SEP","useWorker","worker","postMessage","onmessage","useNewCalculation","hideDatePickers","b64toBlob","b64Data","contentType","byteCharacters","atob","byteArrays","byteNumbers","charCodeAt","byteArray","Uint8Array","downloadPdfReport","base64Pdf","startsWith","PrintPDF","lnk","cameraScan","sequense","canShowCameraScanIcon","sets","isCameraScanAvailable","getReceiptProcessSettings","promiseWhile","condition","whilst","newObj","newProp","printProcess","win","$uibModalInstance","closeErrorDialog","closeErrorDialogButton","showStartForm","splashscreen","callLogin","callGetStarted","abt","ngGettext","ngSanitize","tooltip","ngTouch","initializeCalculator","Boswer","support","transition","userAgent","fileref","setAttribute","getElementsByTagName","sessionStorage","isNewSession","browser","getParser","isSafari","isBrowser","osVer","getOSVersion","osver","isSafari11","satisfies","macos","safari","mobile","isSafari9","isIE","isOS9","getOSName","searchString","subjectString","isFinite","lastIndex","selectRange","moveEnd","moveStart","onBackKeyDown","_window$buildConfigur","appVersion","getTemplateUrl","app","$routeProvider","tmhDynamicLocaleProvider","when","caseInsensitiveMatch","redirectTo","otherwise","localeLocationPattern","run","cardPayService","receiptService","loyaltyService","put","setupCrd","addEventListener","checkPermissions","initThings","isSecondScreen","$$path","jSqlProvider","secondTerminalService","deviceInfoService","navigateHome","$evalAsync","servicesToAddCallbacks","isVirtual","resumeHandler","packageCode","BuildInfo","packageName","processKbdShow","processKbdHide","keepTabletLayoutWithKeyboard","startUp","jQuery","symbol","kbdset","mediaDevices","enumerateDevices","devices","kind","connection","Connection","NONE","err2","_iterator","_createForOfIteratorHelper","_step","done","callbackFun","permissions","list","WRITE_EXTERNAL_STORAGE","ACCESS_COARSE_LOCATION","ACCESS_FINE_LOCATION","CAMERA","BLUETOOTH_CONNECT","BLUETOOTH_SCAN","checkPermission","hasPermission","requestPermissions","screen","shortScreen","styleSheets","sheet","rules","cssRules","media","match","exec","deleteMedium","mediaText","webViewResizes","h","hasClass","hs","actel","scrollIntoView","behavior","block","inline","lpos","scrollBy","currentLanguage","debug","defaults","overlayCSS","background","border","padding","margin","color","cursor","baseZ","onBlock","isBlockUIVisible","onUnblock","loginHandler","isNegative","dbUpdatesService","db","productLikeIndex","chunkSize","dropAndCreate","schema","isDbExist","exists","dropDb","cleanSchema","createDb","openDb","insert","into","migrateData","currentSchema","existingTableNames","t","backupData","backupPromises","tableName","restorePromises","skipDataCheck","getVersionFromTable","recreateDB","freshDbResult","shouldMigrate","getDbSchema","cancelApplication","indexedDB","mozIndexedDB","webkitIndexedDB","msIndexedDB","checkOtherInstances","recreateDBStart","Instance","Worker","import","meta","waitApplication","crdlockDB","ver","getTime","req0","deleteDatabase","prt","onsuccess","onblocked","addCacheRow","productID","ExtraInfo","OutletSKU","Family","ProductFamilyName","productCode","outletSKU","productFamilyName","cF1","cF2","cF3","cF4","cF5","cF6","cF7","cF8","cF9","cF10","buildIndexes","refreshProducts","clear","vals","lastModified","tg","productFamilyID","Category","category","categoryID","DiscountName","discountName","DiscountID","discountID","discountLines","tax","Option1Name","productFamilyOption1Name","Option2Name","productFamilyOption2Name","Option3Name","productFamilyOption3Name","FamilyImageID","familyImageID","brandID","Brand","brand","productShortDescription","FamilyShortDescription","familyShortDescription","StocktakeLocked","stocktakeLocked","productType","costingMethod","Price1","price1","Price2","price2","Price3","price3","Price4","price4","Price5","price5","Price6","price6","Price7","price7","Price8","price8","Price9","price9","Price10","price10","splitBigBulkInsert","bulkInsert","upsert","bulks","getProductByID","qkeytemplate","tempClear","command","groupingOperatorAND","isConditionSet","or","rids","textu","tt","useWeightBasedSearch","useOutletSKU","tempBulkInsert","getSearchCount","tempSelectAll","jq","rs","groupBy","grouping","rs2","getSearchPage","tempSelectByKey","getLiveSearchProducs","checkProductsOld","getProductsHash","familySearch","familyID","tempSelectByFamilyID","getFamilySearchCount","tempSelectByFamilyIDCount","getFamilySearchPage","customerLikeIndex","isPartial","preparePromise","vls","enableLoyaltyPoints","matrixDiscounts","taxRuleID","priceTier","account","creditLimit","taxes","RuleID","LoadedFromLocalDb","cnd","refreshSaleRepresentatives","lpr","posOutletID","checkSaleRepresentativesOld","getSaleRepresentativesHash","loadParkedSales","take","productsSearchTemp","tempPrimaryKey","addOfflineSale","PosName","StatusID","statusID","Packed","InfoPacked","ErrorText","trackOrder","registryCloseID","OrderID","RegistryCloseID","CreatedDate","trackOrderPayments","refundIDs","paymentIDs","refundsJson","paymentsJson","getOrdersForCloseRegistry","by","getOrphanOrders","getOrderPaymentsForCloseRegistry","orders","orderIDs","removeSale","operationID","loadOfflineSalesErrorHistory","keyChain","timeOut","forceDelayOperation","timeDelay","keyChainMinLength","html2canvas","labelPaperWidthCode","deviceIsStarted","labelPrinterOnline","labelPrinterPaperNearEmpty","labelPrinterPaperEmpty","labelPrinterCoverOpen","currentSettings","eventListenerProcessor","callUpdate","disconnect","applyLabelPrinterSettings","settings","internalDisconnect","internalConnect","connect","discoverAvailableLabelPrinters","labelPrinterSystem","paperWidthCode","labelPrintMode","portable","initLabelPrinter","checkLabelPrinterConnection","labelPrintTest","printLabelsFromHTML","q","printArea","reg","RegExp","printer","landscape","createLabelPrintContainer","contentDocument","chl","outerWidth","dat","showLabelPrintImage","data64","modalStr","$d","wnd","scrolling","ec","removeAttr","printLabels","labelPrintEl","ignoreNotLabelPrint","elLabelPrint","outerHTML","tel","getLabelPrintArea","forceLocal","pointsX","pointsY","perRow","margins","getTemplate","getLabelTemplate","receipt","Template","se","appID","linklyPaymentApplicationId","delayDone","integrationKeys","parentScope","errorRecoveryInSeconds","polling","pollingIntervalInSeconds","isRequestFromPurchase","formKey","retrieveLinklyData","linklyCloudSecretKeyUrl","linklyPaymentPairCode","getLinklyCloudSecretKey","secret","storeLinklyData","iframeSourceUrl","posVersion","posId","linklyCloudPairTerminal","token","tokenExpiryInSeconds","expirySeconds","startPolling","getErrorText","unpair","removeLinklyData","stopPolling","getToken","progressText","isProgressShown","hideButtons","showProgressDialog","customModalDlg2Caption","customModalDlg2Text","customModalDlg2Buttons","callbackModal2","code","cancelCurrentTransaction","hideProgressDialog","dialogCalled","lastQuestion","lastCallback","isTokenExpired","d0","tokenExpiry","printLinklyPaymentReceiptOnTerminal","linklyCloudPaymentUrl","requestType","isPaymentReceiptOn","isCutReceiptOn","receiptsLinklyPaymentReceiptOnTerminal","tempSessionId","linklyCloudMakePayment","transactionData","responseTransactionData","receipts","receiptText","merchantReceipt","customerReceipt","getReprintReceipt","printReceipt","responseText","Sale","TransactionMetaData","errorRecovery","refundSum","rfn","purchaseAnalysisData","RFN","txnRef","linklyCloudRefundTransaction","customModalDlg2Text2","printPromise","linklyCloudCancelCurrentTransaction","errorRecoveryexpiry","linklyCloudTransactionStatus","transaction","tran","linklyCloudReprintReceipt","errorMSG","linklyCloudTerminalStatus","customersData","customerDataLoaded","fillData","products","sku","filterData","counter","fd","cmp","mapOnlineCustomer","postcode","firstLine","tempCustomer","onlineCustomer","mapCustomer","a1","b1","adr","longNameProcess","args","NaN","androidDatabaseProvider","sqlitePlugin","openDatabase","createDBSchema","resultSet","results","Version","__proto__","executeChunk","chunckSize","dbTHIS","ext","upperChunckBound","executeChunkBatch","batchStmnts","sqlBatch","pinLogin","pin","readTransaction","rec","isErr","matchedUsers","decrypt","PinToken","Password","MatchedLoginsCount","lastUser","l","login","__","savedData","Token","saveLogin","ciphertext","encrypt","savePin","saveUserOutlets","packed","getUserPosOutletsRegistry","getPosOutlet","updateOutletPacked","outlet","getNextSequence","posRegistryID","valueToReturn","Registries","PosRegistryID","CurrentReceiptNumber","intVal","setNextSequence","CHUNCK_SIZE","placeholders","isOnCreditHold","sch","rowsAffected","formatLikePart","searchArray","selectedCouponID","selectedCouponDealID","removeSales","exeptStatusID","prepareLoadOfflineSalesQuery","loadOfflineSalesCount","loadOfflineSales","getReceiptTemplate","EmailTemplate","EmailSubject","TemplateID","getRegistry","registry","Result","openRegistry","closeRegistry","cashCounted","creditCardCounted","giftCardCounted","loyaltyCounted","storeCreditCounted","note","additionals","report","sendClosecRegistry","sendResetRegistry","updateRegistrySales","cashExpected","creditCardExpected","giftCardExpected","loyaltyExpected","storeCreditExpected","registryCleanUp","getClosedRegistries","getRegisterStatisticToProcess","excludeID","removeSendedClosecRegistry","localOnly","removeCashMovements","concString","IsOnCreditHold","makeErrorOrder","orderId","makeErrorHistoryOrder","getPosDiscounts","targets","buyMore","refreshPosDiscounts","newDiscounts","allowCoupons","singleCouponCodeUsage","coupons","tagName","dealDiscountID","customersGroup","dealID","buyValue","getValue","minValue","discountLineType","parameters","getSaleCoupons","couponCode","addSaleCoupon","clearCoupons","getGiftCardSettings","setGiftCardSettings","savePOSData","posID","getPOSData","refreshTaxRules","Description","loadTaxRules","Rule","preload","LoyaltyLionProvider","useWidgetIfAvailable","sdkFailed","sdkReadyPromise","apiLoader","loyaltylion","_initData","startSdkReadyWatch","POLL_MS","POLL_TICKS","poll","site","soft","softReject","initCustomer","_this3","LLExternalType","silent","Warning","warning","LLEmail","LLCustomerID","LLServerToken","LLTokenDate","authenticateCustomer","auth","buffered","fallback","clearCustomer","getCustomerBalance","balance","insertScript","firstScript","crossOrigin","parentNode","insertBefore","isLoyaltyLion","lion","dateString","getDate","initialized","_token","commands","getHours","_buffer","useWidget","uiMode","loyaltyWidget","showWidget","hideWidget","loyaltyLionClipboardHandler","isLLCopyButton","$button","buttonEl","offsetParent","hasChildNodes","childNodes","loyaltyLionDiscountZoneClipboardHandler","toElement","isCordova","clipboard","showClipboardError","friendlyMessage","$applyAsync","sendCCMessage","paste","readText","writeText","loyaltyDEARProvider","loyaltyLionProvider","providerInfo","loaded","loyaltyEnabled","runProviderPreload","preloadRes","loyaltyLionToken","providerInformation","bal","LLInitialBalance","angularInjector","getAngularService","callRootScope","scannerDetection","avgTimeByChar","ignoreIfFocusOn","minLength","onComplete","qty","handlePopoverClose","rpopel0","rpopel","handleDateSelectorClose","handleTimeSelectorClose","rptm","handleSnackbarClose","snack","rootScope","isVisible","handleLoyaltyLionClipboard","closePopovers","ready","disableF5","platformStyles","styleTag","offlineSaleService","statuses","triggerChangeOutletFilter","filterSelectors","searchInput","canClearOfflineSales","selectedJSON","countOffline","clearOfflineSales","refreshCounter","getCount","loadFilters","getUserOulets","resp1","currentOfflineDir","errorHistory","resp2","mDateFormat","mDateFrom","dateFromFilter","itemDate","utcOffset","mDateTo","dateToFilter","setHours","saleObject","every","sync","sendOfflineSales","rowClick","removeFromHistory","OfflineStatus","ErrorHistory","clearOfflineSalesDlg","copyJSON","string","continueSale","newOfflineDir","sortOfflineFiled","sortOffline","direction","lastCloseRegistryObj","openingFloatAmount","openingFloatNotes","backReportFilters","forceClosure","PosOutletName","RegistryName","closeDate","CloseDay","reportFilters","existingRegistryCloseOnDeviceID","ClosingTime","customPayments","AdditionalCounters","CounterType","Counted","Counter","CustomCounterName","loadLastClosedRegistry","proccess","loyaltyPaymentDialog","isRegistryOpened","IsAlreadyOpened","cashAmountDlg","checkAmount","editElementType","keyboardTitle","enableChangeSign","showAmountDlg","payType","CashCounted","CounterName","setAmount","changeValue","getSurchargeRate","SurchargeRateType","SurchargeRate","closeKeyborad","self","getProvider","isTrackingEnabled","onlyConfig","enableOrderStatusTracking","groupOrdersByID","ordersMap","StatusChanges","ChangeDate","determineOrderStatus","saleInfo","rawSale","offlineStatusParked","FinancialStatus","hasPayments","extractRefundsAndPayments","mergePaymentData","groupedOrders","paymentsData","paymentRecord","refunds","payments","statusOrSaleInfo","openRegistrySalesID","extracted","warn","timestamp","regularOrders","orphanOrders","allOrders","getRemoteOnly","updateConfigPaymentProcessors","paymentMethodName","PaymentProcessors","pc","ln","socket","isSocketReady","readyState","CLOSED","CLOSING","PaymentSenseTerminalID","socketClose","socketConnect","sendRequest","deffered0","deffered2","signatureDeffered","deffered3","closeConnection","cancelKeepAlive","reportStage1","reportStage2","getEndOfDayReport","closeRegisterID","repRes","RegisterCloseID","masterDeffered","WebSocket","onopen","keepAlive","onclose","jsonrpc","send","params","notificationValue","processTimeout","transactionResult","timeoutSignature","transactionId","tpi","transactionType","amountTotal","reportResult","reportType","df","isCancel","timerID","timerId","clearTimeout","isCloverPrinter","needReconnection","ngmHideFonts","fixTerimnalPrintingInTemplate","fixCashPrintingInTemplate","fixReceipts","preprocessElement","fixReceipt","attrNgm","ed","startTab","nextUntil","detach","atr","dv","after","replaceWith","vars","detectPrinterByName","modelName","macAddress","portName","hasInternalScanner","_name","printerOnline","printerPaperNearEmpty","printerPaperEmpty","printerCoverOpen","barcodeScannerOnline","cashDrawerOpen","cd","applyPrinterSettings","disconnectEpson","printMode","portSettings","connectEpson","noScanner","discoverAvailablePrinters","printerSystem","portDiscoveryEpson","deviceName","portDiscovery","forceNoScanner","initPrinter","initCloverPrinter","initStarPrinter","initEpsonPrinter","emulation","openCashDrawerEpson","checkPrinterConnection","checkStatusEpson","checkStatus","printTest","printReceiptFromHTML","printDataContainer","collectMode","initPrintCollectMode","finishPrintCollectMode","resetPrintCollectMode","printReceiptFromHTMLInternal","THISFunc","FontScaleRelativeTo3inch","coeff","replaceValue","hidden","widthOfText","widthPerChar","containerWidth","fontSize","BreakWordsInTable","printDataContainerLocal","collectModeLocal","cln","isFirst","createPrintContainer","printFromHTMLClover","printHTMLViaPrintService","printFromHTMLEpson","printFromHTML","showPrintImage","resizePrintContainer","connectionInterface","isStringIPAddress","modelFound","starPrinterModels","modelTitle","canUseCashDrawer","getCloverPrinters","uuid","printAdditionalReceiptsPromise","printAdditionalReceipts","MerchantReceipt","CustomerReceipt","hasTerminalReceipts","printEl","directUse","elPrint","ignoreNotPrint","ignoreTerminalReceipts","ignorePrinterSetupError","q2","trmp","isValidOS","getPrinterModels","system","epsonPrinterModels","modelId","modelNames","paperSize","canSetDrawerOpenStatus","canPrintTextReceiptSample","canPrintUtf8EncodedText","canPrintRasterReceiptSample","canPrintCjk","canUseBlackMark","canUseBlackMarkDetection","canUsePageMode","canUseBarcodeReader","canUseCustomerDisplay","canUseAllReceipt","canGetProductSerialNumber","settableUsbSerialNumberLength","isUsbSerialNumberEnabledByDefault","productManagementService","labelPrintService","labelService","needToReloadProduct","ifcss","labelTemplateClass","dataCount","dataPage","dataPageDisplay","printParams","copies","productsData","labelTemplates","newLabelItems","labelModel","watches","labelsPRow","labelsPPage","modify","canChangePrice","PriceTiers","labelPrintArea","nextStepPrintModal","labelPrinterSettings","getData","units","salesPriceTiers","costingMethods","types","expenseAccounts","Model","tmpls","getTemplates","loadGrid","sorting","ProductName","watcher","loadProductList","Page","labelPrint","product","firstGridShow","formatTemplate","selectPage","goBack","editProductDialog","$focusElement","editProduct","prepareEdit","addNewProduct","prepareAddNew","newProduct","AlwaysShowQuantity","AssemblyCostEstimationMethod","AverageCost","DefaultLocation","DefaultUnitOfMeasure","DropShipMode","NotSellable","PriceTear1","PriceTear2","PriceTear3","PriceTear4","PriceTear5","PriceTear6","PriceTear7","PriceTear8","PriceTear9","PriceTear10","ShortDescription","ExpenseAccount","modifyProduct","isNew","IsMarkupTear1","IsMarkupTear2","IsMarkupTear3","IsMarkupTear4","IsMarkupTear5","IsMarkupTear6","IsMarkupTear7","IsMarkupTear8","IsMarkupTear9","IsMarkupTear10","familyRow","Products","loadFamilyProductList","productPrice","productPriceDlg","showPriceDlg","priceTear","tear","setPrice","reinitSelects","keyboardTemplateDlg","tempCopies","showKeyboardTemplateDlg","setCopies","findTemplate","labelSelectedArea","labelSelectedAreaParams","formatCurrencyInTemplate","WCode","replacedString","labelTemplate","updateLabelsTemplate","IsFamily","idch","elch","multiplyPush","_el","tr","lt","labelWpad","columnsCount","makeTableFromTemplate","lt2","pageEl","ProductPrice","printLabelCheck","getProductData","Process","OutletLocationMappingID","saveNewProduct","updateProduct","scaleWidth","ProductLabels","wrap","wrapItems","wraper","items","itemsArr","wrapAll","useSql","useSqlite","startProductsAutoUpdate","loadProducts","stopProductsAutoUpdate","reloadWhenOutletChanged","lockProductsUpdate","isForce","ProductHash","quickKeySearch","quickKey","weightBasedBarcode","qkeyTemplate","qtemplate","qi","QuickKeyTemplateID","QuickKeyID","ImageType","imageContentType","getFamilySearchFull","getProductImages","isProduct","productIDs","loadImage","loadFamilyImage","GiftCardSttings","serialNumber","checkSerialNumber","taxRules","checkCheckoutProductsAvailability","products2","insufficient","request","prod","insufficientProducts","insufficientQuantitySKUs","fixTerminalReceipt","templateName","scopeObjectName","getReceiptTemplateByName","prepareCashManagementReceiptSaleModel","toDateString","Time","CashManagementReceipts","CashManagementOperation","CashManagementAmount","CashManagementNotes","prepareVantivDeclineReceiptSaleModel","VantivTerminalReceipts","fillVantivTransactionData","emv","VantivMerchantID","merchantId","VantivTerminalID","terminalId","VantivReferenceNo","_processor","processorReferenceNumber","VantivAccountNo","accountNumber","VantivCard","cardLogo","VanitvEntry","entryMode","VantivTransactionID","VantivApprovalCode","approvalNumber","VantivResponseCode","processorResponseCode","VantivExpressResponseCode","hostResponseCode","VantivApprovedAmount","_type","totalAmount","approvedAmount","VantivSignature","signatureImage","VantivApplicationID","applicationIdentifier","VantivCryptogram","cryptogram","VantivTags","orderStatusService","currentSavingRegistryClose","IsActive","IsMobile","ordersPromise","fetchOrdersForCloseRegistry","endOfDayPromise","EndOfDayReport","sendOfflineOpenCloseRegistry","endOfDayReport","activeSalesFromLogin","forceNetwork","OrdersStatusHistory","orderPromises","externalToken","tokenType","PosApplicationName","Pin","AppVersion","ExternalToken","TokenType","Platform","GetConfig","UserID","ApplicationKey","passwordOld","passwordNew","OldPassword","NewPassword","getCurrentSequence","getPosOutletsRegistry","outletLocationMappingID","ignoreNullValues","sX","sY","checkCount","Term","Limit","assign","Attributes","loadFakeCustomer","FakeServerKey","processSale","Data","receiptName","receiptScopeObject","loadSalesHistory","isStatusArray","statusArr","DateOffset","getTimezoneOffset","ReceiptNumber","SortField","FieldName","SortDirection","Direction","ApplicationID","LastRequestDate","Statuses","parkSale","loadPosUsers","BaseOrderID","EmailBody","IgnoreOrderID","DocumentBody","getPosUsers","currentUserName","CurrentUserName","RoleName","loadSaleRepresentativesAll","createPosUser","user","RoleFullName","CurrentUser","updatePosUser","UserId","removePosUser","activateUser","isLocked","deactivateUser","discardParkedSale","checkConnection","configID","byPassCancellation","ping","canProcess","BlockSales","LastPosChange","recoverPassword","isLiveDataRequest","getStockTakeData","saveNewStockTake","updateStockTake","loadStocktakeList","deleteStocktake","startStocktake","loadStocktake","searchMode","adjustStocktakeItem","itemID","batchSN","expiryDate","receivedDate","completeStocktake","localDate","cancelStocktake","undoStocktake","CouponCode","ReturnType","ViewMode","FromOrderLines","checkGiftCardExists","GiftCardCodes","loadDEARSales","loadDEARSale","linkingExternal","getLLCustomerRewards","LLMerchantID","MerchantID","emailService","registries","triggerChangeRegisterFilter","prepareAnyDayClosureData","closureDate","backFilter","getReports","updateRegistriesCombo","gridControl","predicate","reportCloseRegistryData","loadRegistryCloseList","OpeningTime","currentReport","loadClosureRegistryDetails","showReportCloseRegistryDetailsDialog","firstTimeOpenDlg","closeReportCloseRegistryDetailsDialog","receiptTemplate","receiptEmailTemplate","receiptEmailSubject","addFormatting","printReport","getReportTemplate","emailReport","emailCtrl","formatEmailSubject","reportEmailSentStatus","firstshowPrepareClosureDayFormShow","showPrepareClosureDay","closePrepareAnyDayClosure","redirectToClosureDay","csvService","totalValueSold","totalValueRedeemed","totalOutstandingBalance","totalGiftCardActive","listOfColumns","additionalHeaders","orderByColumnId","orderDesc","giftCardFilter","selectedDetails","showGiftCardDetails","getReport","loadReportGiftCard","MaxRows","Headers","AdditionalHeaders","Values","GiftCardCode","InitialBalance","TotalValueSold","CurrentBalance","TotalBalance","TotalActiveCards","filterForm","allowEmailSubject","colIDs","ColumnList","emailTo","subject","loadReportGiftCardEmail","exportReport","loadReportGiftCardCSV","popoverUrl","totals","outelts","selectedColumns","selectedAdditionalColumns","showCustomiser","closeCustomiser","selectColumn","isColumnSelected","columnFilter","columnId","additionalColumnFilter","columnHeaderFilter","groupFamilies","OutletLocationName","LocationAddress","ef","fromPage1","headers","loadInTransitReport","Totals","isDefault","loadInTransitReportEmail","loadInTransitReportCSV","reportTypes","variantsGroupEnabled","getCurrentReportType","ReportType","loadInventoryReport","loadInventoryReportEmail","loadInventoryReportCSV","methods","users","triggerChangeUserFilter","grid","minimumColumnSize","rowHeight","enableColumnMenus","enableFiltering","enableSorting","excessRows","excessColumns","columnDefs","onRegisterApi","gridApi","customScroller","myScrolling","uiGridViewport","scrollHandler","myScrollingOverride","gridData","fadeIn","selectedData","core","handleWindowResize","renderCompleted","loadUserAvailableUsers","isProcessed","StartDate","EndDate","u","loadPaymentTypeSummary","Dates","updateGrid","valueCellTemplate","tooltipCellTemplate","cellTooltip","cellTemplate","cellClass","headerCellClass","minWidth","emailSubj","loadPaymentTypeSummaryReportEmail","loadPaymentTypeSummaryReportCSV","chunk","newArr","chunkedColumnsData","loadProductPerformanceReport","loadProductPerformanceReportEmail","loadProductPerformanceReportCSV","showProductEnabled","showProducts","showTotals","diff","loadSalesSummary","loadSalesSummaryEmail","loadSalesSummaryCSV","reportName","reportScopeObjectName","getPaymentTypeName","sname","pname","totalPayment","newPayment","cashManagement","laybyTotal","laybyClosedTotal","laybyClosed","onaccountTotal","onaccountClosedTotal","onaccountClosed","returnsTotal","returns","CashReceived","CashMovements","CashManagementOffset","NonCashPayments","TotalExpected","TotalCounted","giftCardCount","CloseTime","OpenTime","IsLatest","CashManagement","vr","counted","Diff","IsCustom","PosPayments","PaymentDate2","PaymentDate","paymentOnAccountCount","paymentLayByCount","saleTotalCount","saleCount","onAccountCount","layByCount","taxCount","discountCount","CashRoundingPosPayments","refundCount","CashCountedToBank","accountCounters","AccountData","PaymentType","Date2","p1","p2","camnt","closeTime","CloseReport","CloseOfDayReportHTML","EndOfDayReportConvertToHTML","formatCurrencyInObject","fields","fwn","subj","printVantivDeclineReceipt","infoType","loadStockTransferSatelliteData","loadSurchargeReport","loadSurchargeReportCSV","loadSurchargeReportEmail","loadStoreCredit","totalIssued","totalRedeemed","totalBalance","totalOpeningBalance","IssuedAmount","RedeemedAmount","OpeningBalance","reportLines","line","formats","loadStoreCreditCSV","loadStoreCreditEmail","totalValueIssued","typesSelect","DateFormated","fromd","tod","constSurchargeViewName","groupRegister","$injector","webRequest","canceller","gid","currentRequests","tmr","showCancellation","hdr","responseError","isPing","isSaleSaleOrder","hideCancellation","retryAttempts","retryTimeout","logoutUser","retryAttempt","bypassRetry","isCancelDialogVisible","cancelAllRequests","isLoggedOn","gotoLogin","$httpProvider","interceptors","convertToAPI","FinancialStatusType","needUpdateSequenceNumber","Parked","updateNextSequenceNumber","isAfterSale","queuedCnt","startSequenceAutoUpdate","stopSequenceAutoUpdate","isStandardPaymentType","paymentShortName","keepOrderNumber","callInBackGround","isRemoteProvider","_processError","isSuccess","Duplicate","NewRegistryID","updateSaleOrderNumberForCurrentSale","storeProvider","errorData","orderNumber","returnBool","IsPermanent","skipAnalyticData","isNewSale","PayloadVersion","IsParked","isParkSave","rawForStorage","buildRawSaleForStorage","RawSaleObject","CalculatedAnalyticData","calculateAnalyticData","LocalDate","st","allowAsync","addSaleToQueue","trackPromise","laybySale","onaccountSale","amountToSave","alreadyUsed","removeParkedSale","loadOnlineParkedSales","OrderDate","OrderDateUTC","DeliveryTasks","HideDelivery","ExtendedFlags","flags","SEE","ReceiptWasEmailed","isSendInProgress","forceStatusID","sales","ofs","offlineSale","ignoreError","updatePriceWithTax","isTaxInclusive","isStandaloneReturn","isStandaloneExchange","standAloneExchange","sign","updateBasePriceWithDiscount","copyCurrentSale","isContinue","savedTaxInclusive","newGuidValue","isPartiallyPaid","isPaymentStage","isParked","conversionVersion","that","doNotConsolidate","taxPrecision","paymentClose","taxInclusive","LaybyDate","DoNotConsolidate","SequenceGeneration","standaloneRefund","standaloneExchange","ParentOrderID","parentOrderID","LoyaltyUpdate","UpdateReceiptView","UpdateRegistrySequenceIfDuplicate","AdjustRefunds","TotalPerLine","CalculateTax","DiscountCoeff","discountValue","surchargeTotal","surchargeSum","surchargeTaxSum","discountCoeff","BaseTotal","GiftCardExpirationDate","itemAppliedDiscount","CalculatedValue","SurchargeID","PaymentID","PaymentShortName","discountPaymentLine","ClientTransactionID","GiftCardID","roundingPaymentLine","RefundForOrderID","existRefund","OverriddenPrice","SaleServerTransactionID","pms","CalculatedValueWithTax","paymentsSum","taxTypeInclusive","percent","getTaxPercent","subTotalSum","totalItemsDiscount","calculateTotalTax","isDiscountInvalid","excludeCalculatedSurcharges","posTaxInclucive","subSum","taxReduceCoeff","stax","SurchargeToRefund","SurchargeTaxToRefund","ssum","totalSumWithTax","itemsTotalExSurcharge","itemsTotal","surchargeTax","pSurcharge","InitialSurcharge","itemsOnly","paymentsSumExSurcharge","getAmountWithoutSurcharge","calcRemainingDue","paidEx","remaining","totalLoyaltyPoints","totalPaymentsLoyaltyPoints","calculateLoyaltyEx","checkoutItems","sumRefund","sumSale","LoyaltyRatio","currentLoyaltySum","separatePaySum","separateReturnSum","totalLoyaltyRefunds","updateReceipt","sumToPayLeft","isRefund","returnLoyaltyPoints","SaleLoyaltyPoints","CustomerLoyaltyPointsUsed","TotalLoyaltyPoints","LLDiscountCode","lpSum","usedL","calcCustomerLoyaltyPoints","cnts","CustomerShippingAddressLine1","CustomerShippingCity","CustomerShippingCountry","CustomerShippingAddressLine2","CustomerShippingZip","CustomerShippingProvince","caddrs","caddr","SalesRepresentativeName","receiptNumber","CheckoutProductCount","SubTotal","DiscountPercentage","totalTax","Change","Notes","SalesNote","CheckoutProducts","ProductCount","ProductAmount","ProductSku","ProductBarCode","ProductDiscount","ProductSerialNumber","ProductDiscountPercentage","ItemDiscount","rounding","PaymentAmount","Received","TyroTerminalReceipts","LinklyTerminalReceipts","fillTransactionData","printMerchantCopy","printTriPOSMerchantReceipt","detectProvider","fillTyroTransactionData","fillLinklyPaymentTransactionData","isMerchant","replaceAll","productDeals","getPreparedDeals","checkTag","tag","hasTag","hasThisDeal","deal","customerHasThatDeal","customerDeals","has","DealID","hasAvailableCoupons","cdl","dscIdx","disc","triggers","tIdx","tElement","filterProductDeals","couponID","filteredProductDeals","coups","getTaxObject","tenantTax","outletTax","customerTaxObject","isProductTax","applyCustomerTax","leaveTaxAsIs","taxInclisuve","updateItemTaxRelatedFields","updateProductWithZeroPrice","amountWithTax","getSaleDiscounts","removedItemsMap","SeparatedItemID","parentEl","ComplexSeparatedItemID","affectedProducts","totalDiscounts","calculateOrderDiscount","addNewResult","rIdx","customerDiscount","calculateDiscountLine","applyProirity","totalDiscount","itemsToSeparate","appliedDiscount","appliedByTag","appliedById","mIdx","martrixItem","MinValue","MaxValue","ByTag","DiscountLineType","prIdx","prDisc","productBuyCount","triggerItemIds","targetDiscIdx","targetDisc","targetItemIdx","targetItem","affectedValue","checkDifferentConditions","affectedProduct","otherItem","tryToFindOtherCheckoutItemByProductID","idxd","itemsToAdd","itemsWithOutDiscount","bestDiscount","newItem","oldEl","CustomDiscountType","discountPercentage","priceBasedValue","prevDiscountValue","bestTotalDiscount","keepTotalDiscount","skipwarn","totalMultiplier","applyTotalDiscount","tEl","diffConditins","preparedDeals","tenantTimeZone","hasGroup","trIdx","preparedDeal","removeDuplicates","mergeTargets","getTriggerKey","isQuantityBased","getTargetKey","getProductAvailability","searchOpts","getExpectedSums","expectedSumsObj","alreadyCountedPayments","alreadyCountedRefunds","expectedSums","saleCoupons","checkSingleUsageCouponIsAvailable","foundCouponUsages","couponToUse","getCouponFromDealsByCode","couponsInData","ignoreOneOffType","fnd","getGiftCardCodes","checkRefundAvailable","IsRefundAvailable","isGiftCardsRefundAvailable","IsTaxInclusive","elementLine","PosRegistryName","ProductSKU","ProductOption1","ProductOption2","ProductOption3","TaxesIncluded","srches","getSurcharges","_surcharges","SurchargeName","SurchargePaymentAmount","rnd","FullReturnRounding","getRoundingsFromPayments","rsum","surchargeAmount","surchargeTaxAmount","queueToSendIsInProcess","processQueueToSend","surchargeCacheLastLoad","surchargeCache","getSurcharge","loadSurcharges","predictCashPayments","sumToPay","denominations","minInteger","Nominal","twoBanknoteCombinations","oneBanknotes","union","goThroughEntireSaleItems","ref","goThroughEntireSalePayments","goThroughEntireSaleSurcharges","formPaymentID","ptp","formSurchargeID","recalcRefundSurcharges","groupedSale","paymentValidation","changedFieldType","totalToRefund","TotalToRefund","cashPayments","cashRest","cashSurchargeLimit","cardNCustomSurchargeRefunds","cash","storeCreditSurchargeLimit","cashSurcharge","storeCreditSurcharge","cashSurchargeAmount","storeCreditSurchargeAmount","cashRounded","prepareSurchargeLimits","sm","validationAmount","RefundSurcharge","AmountToRefund","TaxToRefund","cardPayments","createCardPaymentMap","PaymentsMap2","initialValidationPayment","cardNCustomSelectedRefunds","calcSelectedSurcharges","calcTotalPay","storeCredit","loyaltyPoints","createGhostSurchargeToRefund","surchargeAmountToRefund","paymentAmount","addGhostSurcharge","calculateRefundSurcharges","addExchangeAmountToGroupedSale","getProductDeals","setPaymentLimits","sumRest","refundDialogItem","OldAmount","cashAmount","storeCreditAmount","loyaltyPointsAmount","eid","valAmount","setRefundAmount","skipDialog","changepPaymentAmount","refundPaymentAmountDlg","selectedItem","operationSubName","actionMode","amountLimit","getRemainingToRefund","checkLimit","forceMessage","calculateRefundPayments","amountPercent","taxToRefund","amountToRefund","creditCard","sumAllCardPayments","setAllCardAmountToZero","attachFilesToOrder","files","removeAttachment","attachmentId","giftCardExists","checkPosSaleOrderExists","posOrderID","checkSaleOrderExists","isVoided","loadLLCustomerRewards","merchantID","_resp$data","OrderNumberDetails","currentOrderId","RegistrySequenceUpdated","OriginalOrderNumber","restoreTransactionMetadata","fontMeasureService","nothingFound","dearSalesFilters","lastRequestDateTime","dearSalesSelectedPage","dearSalesTotalPages","triggerChangeStatusFilter","currentDir","newDir","sortFiled","returnedLoaylty","canSeeAllSales","gridType","selectedDearSale","dearOrdersTotal","selectedAttachment","canBeVoided","changeGridType","dearSalesSearch","dearSales","dearSalesGetPages","dearSalesScrollReachBottomCallback","dearSalesSelectRow","convertDearSaleIntoPosSale","selectItem","resultSales","isTaxInvlusive","currentSaleObjects","apiPosSale","dearSalesDateSelectedCallback","haveItemLine","have","IsProduct","OutletID1","StatusID1","DateFrom1","DateTo1","dateOptions","formatYear","startingDay","datePicker","opened","openDatePicker","getCustomPaymentMethod","shortName","initMeasure","getCustomPaymentMethodName","translateStatuses","StatusName","financialStatusName","shouldPayExtra","nativeSale","StandaloneRefund","StandaloneExchange","isExchange","Users","reloadCurrentPage","onLoadInternal","selectedID","setDropdownPosition","unshiftedOrders","tempData","showLaybyDate","payLoad","saleTotalPaid","getSaleTotalPaid","saleTotalGrid","getSaleGridTotal","isParentOnAcount","receiptResp","injectedString","receiptTemplateID","filed","getServerFiledName","IsFromChild","getRoundingSign","paymentTypeName","rndPayment","getRefundOperationName","isPaid","getSaleTotalDue","PartiallyPaidDue","getPartialPaidDue","refundTotal","originalPaymentTotal","totalPaid","totalRefunded","getSaleTotal","ignoreRounding","fullGridRow","getHistoryOrderLineSum","continueReturnSale","reloadItem","submitSelectReturnItems","doneRefund","processError","continueExchangeSale","doneExchange","returnSale","nativeSalePayments","Message","mainSaleID","rawSaleObject","groupSalesTree","paymap","surmap","ghostsurlist","isDirectSaleData","srch","restoreSurcharge","setPaymentMethodName","paymentSum","loyaltyPaymentSum","negateSurcharge","sumSurcharges","maxReturnAmount","lidx","smap","hideDetails","isChainedReturn","isChainedRefundAllowed","RefundNumber","refundsCopy","additionalEstimateTotal","NonRefundableSurcharge","pmap","getSoldOnlyItems","reIdx","refItem","refLine","BaseCount","isPricesEqual","IsGiftCard","ReturnItems","refundQuantity","maxCount","canContinue","minCount","outData","calculateRefundCheckout","refundNeedCustomer","canChangeCustomer","EstimateTotal","estimateTotalSum","getDateByFormatFromUtcToLocal","firestLoad","selectItemInternal","openSalesHistoryFilterDialog","newGuidForRefund","newGuidForRefund2","closeSalesHistoryFilterDialog","applyFilters","getSaleShippingAddress","isSelected","IsFirstChild","CanVoidSales","nonChildRefunds","childRefunds","InitialLines","InitialRefunds","childLines","chL","totalSalePaid","totalSaleGrid","isNewSale0","hasRefund","refIdx","isFound","pRefIdx","pRef","posPayment","lineIdx","refLineIdx","priceWithNoSaleDiscount","refPayIdx","updatePay","payIdx","hideRefund","setPaymentName","roundingReturned","soldItems","groupMainSaleRefunds","returnDue","rawTotal","stot","sgn","paid","FromHistory","canReturn","canContinueReturn","canContinueExchange","canContinuePayment","cantExchange","allowOnAccountExchange","showSalesHistyoryDetailsDialog","itm","scrollTo","animate","calculateRefundDiscount","hiddenSearch","hideSearch","changeReturnItemCount","oldReturnPayments","isContinueReturn","addItem","fullReturn","lastItemReturn","isOnlyGiftCards","showRefundGiftCardError","showRefundAmountError","returnItem","delIdx","RefundSubmit","creditCardAmount","plist","ccAmount","addSumToCardPayment","combineKey","customPaymentName","hasExchange","refundIdx","lId","removeFullyUsedCards","totalRemaining","estimatedRounding","orderTotal","orderPaid","canReturnPartiallyPaid","getAllPartialPayment","totalWithOldReturnPayments","calcTax","cancelRefund","editReturnPayments","showReturnPaymentsDialog","closeSalesHistoryDetailsDialog","closeReturnPaymentsDialog","showReturnCompliteDialog","closeReturnCompliteDialog","openRegister","amountSums","showRefundPaymentsAmountError","showRefundExactPaymentsAmountError","cashPay","enteredAmount","addPayment","roundedAmount","cashRounding","addPaymentToRefund","customPay","payProcessor","sr","addSurchargeToRefund","isAddedToPayment","creditCardPay","receiptCallback","processPartialReturn","cardType","cardPAN","storeCreditsPay","loyaltyPointsPay","processReturn","lastCurrentSale","unblock","forceConnectionError","setMessage","submitSelectReturnPayments","refundPaymentsError","pp","hasErrors","validateCardRefunds","remainingToRefund","selectedToRefund","needOpenCashDrawer","processPayments","TotalSumWithTax","isError","d2","noWait","RefundLimits","rtr","keepDiscount","SelectedItem","copyToNewSale","DateNative","onAccountExchangeConfirmation","paidCurrency","doneOnAccountExchange","robj","isRemotedlyProcessed","submitStandaloneRefund2","submitStandaloneExchangeInternal","removeAttachmentInternal","voidSaleInternal","curSale","standaloneSettings","allowStockAdjustment","isInput","submitStandaloneRefund","DefaultCustomer","IsFastRefund","fastRefund","submitStandaloneExchange","posUtils","consolidateToCustomerID","showStandaloneDialog","closeStandaloneRefundDialog","showStandaloneExchangeDialog","closeStandaloneExchangeDialog","earnLoyalty","serverTransactionID","clientTransactionID","saleServerTransactionID","loyalty","ignoreTransactions","clearReceiptModel","receiptDialog","calledFromHistory","getBalance","showReceiptDialog","forceRestore","receiptEmail","closeReceiptDialog","vl","receiptHolder","receiptForm","printAllReceipts","sentToEmail","extFlags","ordr","closeReceiptEmailDialog","handleRemotedlyProcessed","showRefundPaymentAmountDlg","sumLimit","RemainingToRefund","refundItemCountDlg","refundDialogItemCount","showRefundItemCountDlg","setItemCount","getEmailClasss","cantProcessReturn","cant","hasErrorInItemCount","itemsToReturnCount","inputSearch","isPartialPaid","excludeSelectedAmount","sTotal","sGrid","fullReturnRounding","toggleItemSelection","callFullfilmentDialog","MasterTaskID","applyCustomSurchargeRefundCoefficient","totalLimit","reduceMaxAmounts","applyCardSurchargeRefundCoefficient","correctSurcharge","prepareSurcharge","surchargeCopy","sd","allCustomPaymentValidations","remainingInOrder","totalInOrder","subTotalInOrder","openAttachmentDialog","onFileSelect","filesToSend","fExtension","lastIndexOf","fileToBase64","resps","onload","fileContent","attachment","AttachementID","attachmentIndex","Attachments","addDelivery","selectDelivery","canDelivery","canSeeAllScheduledDeliveries","isLeftAligned","innerWidth","voidSale","offlineParkedSales","onlineParkedSales","loadOfflineParkedSales","restartRefresher","refresher","refreshData","loadInProcess","orderedRes","deformatCurrency","scrollOfflineReachBottomCallback","lockFast","TotalSum","scrollOnlineReachBottomCallback","pageNumber","activeMode","selectedOutletItem","selectedOutlet","selectedRegister","canBypassDialog","checkRegistersForOutlet","setChoice","foundOutlet","foundRegistry","ReceiptID","RegistryPrefix","RegistrySuffix","QuickKeyData","TyroTerminalID","TriPOSLaneID","CatalogTilesSize","CatalogTilesVisibility","ShowProductAvailability","cleanSale","loadAll","loadAllFinal","setOutlet","registrySelected","setRegister","setChoice2","outletObj","noRegister","isFirstLogin","setChoice3","register","backToLogin","oIdx","oEl","rEl","$uibModalProvider","animation","taxWatches","taxRulesMap","groupedItems","taxGroupedWatches","createTaxRules","createProductTaxes","createGroupedTaxes","inp","watchList","ShowPrice","calculateTax2","$watchGroup","isInclusiveTax","cursale","description","description2","InitialTaxRuleID","Description2","synchronizeGroupToProducts","changedTaxesMap","newTax","refreshSize","synchronizeProductsToGroup","applyChanges","checkMap","resetTax","SaleStatusType","linklyPaymentReaderProvider","secondTerminalServiceWeb","watchers","paymentDisplayOrder","creditCardError","addFailedCreditCardPayment","showSearchResult","prev","catalogTileRows","catalogTileCols","customizedUI","logoUrl","currentProductFamily","switchNoReceiptExchangeMode","noReceiptExchangeMode","fixStocktakeFlags","searchItems","map2","sp","hasQuickKey","pageRows","pageCols","tilesVisibility","calculateActualCatalogRows","setRegistrySales","addCustomerHandler","clearLLDiscount","LLCopiedCode","LLCurrentValue","LLDiscountTitle","clearSaleLLDiscount","needClearLLDiscount","initLoyaltyCustomer","loyaltyUnavailable","setDisableLoyaltyFlag","showCustomerEmailWarningDialog","initSummaryValues","updateCheckoutProductPrice","Setup","updateSizesInCheckout","customPayWithSurcharge","creditCardPayWithSurcharge","onLoyaltyLionWidgetClick","saleNotesShowMoreClick","slideToggle","cashMode","creditCardMode","isSearchVisible","searchTotal","currentPage","isInFamily","quoteTemplateHolder","QuoteTemplate","QuoteEmailTemplate","QuoteEmail","showLoyalty","disableLoyalty","isFastRefund","canChangeSalesRepresentative","canParkSale","canDiscardSale","canAddDiscount","canGiveDiscount","canInsertCheckoutItems","giftCardAmount","scanedSerialNumber","isValidAmount","checkOutItem","minSymbolsToStartSearchMessage","oldAvailableCouponsValue","paymentActionInProgress","pendingPaymentRegistry","handleEmptyResult","isSilent","quoteHolder","showPaymentSection","isPaymentFinished","setPaymentFinished","lastSaleType","disablePrintReceipt","formHolder","realCashSum","calculateSums","restoreSale","existingPayment","isContinueExchange","markSaleAsPayOnly","goPayment","compliteSale","dontReloadReceipt","defaultCustomer","adjustRefunds","NewRefundOrder","StandAloneReturn","StandAloneExchange","cSale","returnSelectedCoupon","returnSelectedCouponID","returnSelectedCouponDealID","checkRestoredSaleAsync","saleCheckResult","saleObj","restoredSaleObj","viewLoaded","firstTimeLoad","firstTimeSummaryLoad","openCustomerDisplay","openSecondScreenPage","paymentSettings","secretKey","isAfterLogin","toggleProductTiles","scrollToAddedPaymentItem","isUserAction","isUserPerformedSearch","byQuickKey","addPaymentItem","insideStocktakeCheck","sortProducts","showAvailability","slel","availabilityObject","option1Name","option2Name","option3Name","maxLevel","processItem","isQuickKey","elementID","checkData","tree","optionLevels","o1","o2","levels","showProductOptionsDlg","addImages","arr2","img","image","productFilter","checkOutItemsFilter","giftCardCode","isReturn","GiftCard","Return","changePage","QuickKeySearch","hideNoProdMessage","noClean","CreateNewSale","cleanSearch","stocktakeProductToCheck","callbackModalCancel","isElement","returnElemen","cancelPayment","declineTransactionData","removePaymentItem","removeCustomerCallback","removeSalesRepCallback","loyaltyPay","removeOnlinePaymentMethods","returnElement","skipGiftCardDlg","canCheck","showGiftCardDialog","scanSerialNumberWithCallback","showScanSerialNumberDialog","currentGiftCardProduct","closeScanSerialNumberDialog","isPriceBased","revertPrice","chooseProductTierPrice","ProductTaxString","extra","expirationDate","addCheckoutItemsToSale","changeItemCount","calculatePriceWithDiscount","discountRules","filterDiscount","discountType","isNewFormat","hasReturnItems","hasBuyItems","prnID","discardSale","showDiscardDialog","totalCheckoutItems","getCustomPaymentMethodByShortName","processZero","TotalForBackSide","calculatePayments","lastRegistryPiece","checkAvailability","CanSaleRep","isSalesRepresentativeExist","checkAvailabilityOnCheckout","showCheckoutProductsAvailabilityInsufficientDialog","noReceiptExchangeButtonDisabled","closeCheckoutProductsAvailabilityInsufficientDialog","amountRefundSums","cashRefundPay","creditCardRefundPay","customPayRet","storeCreditsRefundPay","loyaltyPointsRefundPay","lastPaymentID","customPayAmount","operationCode","fakePayments","rp","fakePayment","prc","forceHeightRecalc","emailSent","payAmountChanged","hasPaidLines","buildPendingPaymentKey","reference","normalizedAmount","saleKey","getOrCreatePendingPaymentId","paymentKey","clearPendingPaymentId","clearAllPendingPaymentIds","addPaymentToSaleObject","blockedDeferred","idp","invalidPaymentAmount","allSummPaid","lastCashRounding","amountToCheck","finalPaymentAmount","partialApproved","realSurchargeApplied","reCalculateSurchargeForPartiallyApproved","messageHide","errorCallback","disableAddPayment","finishPaymentPhase","payRes","forceSaleCompleted","canAddPayment","existingSurchargeIndex","cardPayment","$$hashKey","lastLoyaltyUpdateAmount","cancelLastPayment","$sсope","triggerSendEmailReceipt","deferred3","showOfflinePaymentsDialog","cancelCashRoundingDialog","closeCreditCardProcessingErrorDialog","closeCreditCardProcessingErrorDialog2","cashRoundingDialog","banknotePredictions","updateSizesInCashPayment","isLoyalty","checkPayment","_readOnlyError","srchs","getPaymentMethodSurcharges","giftCardPay","giftCardID","allowLayby","allow","CanDoLayby","hasGiftCardCodes","closeDiscardDialog","showAskPaymentDialog","messageBoxText","messageBoxYes","messageBoxNo","closeAskPaymentDialog","closeAskSureLayByDialog","laybyPayDialog","closeAskSureOnAccountDialog","onAccountPay","askSureLayBy","askSureOnAccount","laybyPay","allowOnAccount","canSellOnAccount","isDisableOffline","disableLoyaltyPayment","disable","CustomerLoyaltyPointsRemaining","disableStoreCreditsPayment","fromDialog","storeCreditPaymentDialog","endPayment","hideMenuDropdown","addShippingAddress","unsetWarning","unsetTimer","unsetCustomer","removeSaleShippingAddress","unsetSalesRepresentativeWarning","unsetSalesRepresentativeTimer","unsetSalesRepresentative","checkOfflinePaymentMethods","paymentToRemove","removePayment","isCouponDialogVisible","isGiftCardDialogVisible","isGiftCardPayDialogVisible","isScanSerialNumberDialogVisible","currentGiftCardPay","couponDialogCallback","submitScanSerialNumber","itemWithcallback","showNotNoundSerialNumberDialog","closeNotFoundSerialNumberDialog","notNoundSerialNumberAddToCheckOut","showCustomSaleDialog","customSale","objScope","customSaleForm","closeCustomSaleDialog","addCustomSaleProduct","productName","returnSaleDialog","returnSaleDialogInstance","ariaLabelledBy","ariaDescribedBy","closeReturnSaleDialog","cancelSearchMode","hideOptions","selPrn","discountDlg","discountCls","discountTitle","showDiscountDlg","stagedCode","setDiscount","updateSaleOrderDiscount","removeItemFromCheckout","customDiscountDlg","customDiscountSettings","tryShowCustomDiscountDlg","showCustomDiscountDlg","isNewVersion","customSetDiscount","setCustomItemDiscount","payDlg","showPayDlg","setPay","productOptionsDlg","addProductToCheckout","currentNote","noteMode","afterParkCallback","showSkipButton","showAddSaleNoteDialog","closeAddSaleNoteDialog","quickPayDlg","showqQickPayDlg","setQuickQuantity","quickPaySumDlg","showQuickPaySumDlg","setQuickPrice","invalidPrice","isControl","swipeDirection","swipe","updateCustomSale","pr1","foundItem","itemToCoppy","updateItem","separetedItemID","isSaleInNewFormat","pr2","isTotalExceedingMaxPrice","isTotalExceedingDlgShow","checkSaleTotalLimit","saleTotal","maxPrice","displayCheckData","FilterName","FilterNames","FilterSKU","FilterSKUs","FilterOption1","FilterOption1s","FilterOption2","FilterOption2s","FilterOption3","FilterOption3s","FilterOutlet","FilterOutlets","listSortFun","itemsByAvailability","dataPageAvailability","dataCountAvailability","averageCost","canSeeItemValue","CanSeeItemValue","availabilityFilterName","filterNames","filterSKUs","filterOption1s","filterOption2s","filterOption3s","filterOutlets","refreshAvailabilityPaging","$watchCollection","newCol","oldCol","getLastCheckoutItems","arrn","op","OptionLine","firstShowPartialPaymentsDlg","showCancelPartialPaymentsDlg","cancelPaymentRow","cancelPaymentDlg","initialPayment","hasSale","processParkedSales","newAvailableCouponsValue","canDismissCoupon","checkCouponIsValidAndProcess","cause","sc","couponDialogActive","showCouponDlg","couponPress","giftCardSaleDialogCallback","expDate","DefaultGiftCardExpirationPeriod","isExpirationDateEnabled","onGiftCardDialogSave","giftCardAmountDlg","showGiftCardAmountDlg","setGiftCardAmount","giftCardPayAmountDlg","showGiftCardPayAmountDlg","setGiftCardPayAmount","showGiftCardPayDialog","_getSumByGiftCard","toAddAmount","sumByGiftCard","giftCardPayDialogCallback","getGiftCardForPayment","isValidUsage","saleSum","hasItemToReturn","hasNewItem","hasExchangeItems","onResize","itemCustomerToggle","toggleItemDetails","showCalendar","paymentDetails","togglePaymentDetails","currentLayby","layByDateDialogCallback","updateTotalsFontSizes","catalogWindowWidth","catalogWindowHeight","onCatalogResize","keyboardShrink","useCustomerPriceTier","tier","calculateCashChangeValue","nativeSum","clientSum","payCashDlg","showPayCashDlg","setCashPay","setCashMode","setCreditCardMode","setPredefinedCash","cashPay2","creditCardPay2","showSelectTaxDialog","EffectiveExclusiveTaxPercent","EffectiveInclusiveTaxPercent","isTaxPopupAvailable","paymentTypeShortName","mn","isLoyaltyLionEnabled","llExistedCustomer","closeLoyaltyLionDialog","prepareQuoteReceipt","QuoteEmailSubject","QuoteTemplateID","getQuoteNumberAndReceipt","canEmailQuote","canPrintQuote","printQuote","showQuoteEmailDialog","closeQuoteEmailDialog","sendEmailQuote","closeQuoteEmailCompleteDialog","ErrorCode","Rewards","_window$loyaltylion","reward","llReward","claimedRewards","discount_amount","discount_type","point_cost","getCatalogTileContainerHeight","closeCustomerEmailWarningDialog","editCustomerEmail","customerEmail","deferred4","currencyFilter","currencySymbol","$route","pinFormCaption","pinMode","hideGoToLogin","isSuccessMessage","pinValue","keyboardListener","save","finished","updateParams","printerModalMode","selected","selectedSystem","selectedModel","showSoftKbdPart","points","printerModels","labelSettings","printTyroReceiptOnTerminal","printWindcaveReceipts","selectedPaymentSystem","providers","providerName","systemName","showPaymentSenseTerminals","getAvailableProviders","fiteredKeys","selectedArea","printerSystems","pf","models","labelPrinterSystems","labelSelectedSystem","pageSizeCode","findPrintArea","pairTyro","pair","pairTriPOS","removePairTriPOS","savePaymentSystem","showPaymentSenseTerminal","validate","paymentModalMode","isConnectionReady","pairLinklyPayment","showLinklyPinPadPairingConfirmDialog","pairLinklyPaymentSystem","removePairLinklyPayment","connectAnotherPaymentSystem","resetPrinter","printersList","labelPrintersList","discoverPrinter","setSelectedPrinter","discoverLabelPrinter","setSelectedLabelPrinter","printerSetup","testConnection","testLabelConnection","labelPrinterSetup","scanModalMode","openScannerSetup","closeScannerSetup","scanValue","scannerSettings","scanAgain","isScanAgainReady","openPaymentSetup","closePaymentSetup","showCardPaymentSetupConfirmDialog","secondScreenSettings","opencustomerDisplaySetup","enableAuto","closeCustomerDisplaySetup","saveCustomerDisplaySetup","openCustomerScreen","firstTimeOpenPrinterModal","openPrinterSetup","closePrinterSetup","connectAnotherPrinter","paymentSenseTerminals","closeLinklyPinPadPairingConfirmDialog","closeCardPaymentSetupConfirmDialog","showPaymentSetupModal","detailsVisibility","setup","session","inventory","reports","isAndroid","getUserImageUrl","userImageID","updateUserImageSrc","isQA","allowManagerAndOnline","currentSection","selectedMenuOption","selectedMenuOptionMobile","canSeeDashboard","showDetailsPanel","hideHomeAndProducts","isScanSetupVisible","goHome","currentPosName","currentRoleName","currentUserId","canManageUsers","canSale","setAfterLoginCallbacks","setRights","mobileTrigger","secName","previousSection","openWMS","scheme","packName","externalAppCall","appName","wmsApplicationNotAvailableDialog","hideSideBar","removeQueryparam","clickOutside","curSec","sectionName","pageNotAvailableDialog","sellOffline","qa","closeWMSApplicationNotAvailableDialog","getWMS","WMSApplicationLink","WMSApplicationLinkIOS","activityForResult","newLanguageObj","reloadAll","stayAtPage","blockScreen","isOldBrowser","badSound","goodSound","goodAudio","Audio","badAudio","canPlayOnCurrentDevice","canPlaySound","resetAndPlay","audio","pause","currentTime","playPromise","play","isFunction","playSound","canPlay","_schemes$find","squareApplicationId","backDeferred","schemes","CFBundleURLSchemes","squareURLSchema","applicationId","tenders","locationId","square","clientTransactionId","serverTransactionId","squareIntegrationID","squareLocationID","squareRefund","stockOrderingService","avaivedProducts","familyName","firstFormShow","baseOptionChange","hideBaseGridLine","baseOption","baseOptionValue","gridColumnsCount","gridColumnsSizePercent","productFamily","variationGrid","isDlgVisible","isEditable","productFamilyOptions","firstDlgShow","firstInitSelects","multiplier","selectedProducts","fromLocationName","toLocationName","evaluateProductFamily","showMatrixDlg","option1ValuesDistinct","option2ValuesDistinct","option3ValuesDistinct","option1Values","option2Values","option3Values","comments","selectedItems","availableItem","Index","Option1Values","it","Option2Values","Option3Values","Options","showSetQty","infoText","hasOption2","hasOption3","optionsCount","obaseNum","variationCount","IsHeader","Header","availLen","lineHeader","lineData","variationCount1","variationCount2","varOpt2No","axisXName","axisYName","axisXData","axisYData","headerLine","dataBlock","av","Empty","variationGridColLength","baseOptionValueChange","setAllQty","isToAll","itemQuantityDlg2","itemIndex","otherItems","textColor","availColor","orderedqty","ST_ORDER_TYPE","STATUS_ORDERED","STATUS_PICKING","STATUS_IN_TRANSIT","STATUS_IN_PROGRESS","STATUS_COMPLETED","STATUS_VOIDED","stockOrderingData","filterStatuses","statusName","allLocations","suppliers","referenceData","deleteMode","deleteObject","loadAvailableLocations","currentLocation","ParentID","loadSuppliers","$itemsContainer","itemsContainerHeight","itemsTableHeight","isPossibleToLoadMoreItems","loadTasksList","CompletionDate","stRequiredBy","STRequiredBy","getStatusName","canUndo","getCanUndo","canVoid","getCanVoid","FromLocationAddress","itemType","closeAddOrder","currentDetails","getStatusBg","loadStockOrderingList","loadAvailableProducts","toLocationId","compress","loadStockTransferOrderRelatedData","productsCompressed","loadStockTransferOrderDetails","modifyStockTransfer","task","FromLocationID","fromLocationID","ToLocationID","toLocationID","LastUpdatedBy","RequiredBy","rid","dtl","TransferQuantity","OrderedQuantity","saveNewStockTransferOrder","updateStockTransferOrder","loadReorderProducts","onlyAvailable","loadStockTransferReorderData","loadPurchaseAvailableProducts","supplierID","loadPurchaseOrderRelatedData","loadPurchaseOrderDetails","loadPurchaseTask","getRate","getExchangeRate","modifyPurchaseOrder","originalTask","CurrencyRate","currencyRate","TaxPercent","TaxCalculation","Terms","SupplierID","Supplier","supplierName","Approach","approach","Location","locationName","CombineAdditionalCharges","Memo","Items","variant","Cost","SupplierSKU","updateAdditionalTaxAndTotal","pricePrecision","saveNewPurchase","saveAsDraft","savePurchaseOrder","updatePurchase","undoPurchase","deleteUndoPurchase","voidPurchase","loadPurchaseReorderProducts","loadPurchaseReorderData","record","printPurchaseOrder","getPurchaseOrderEmail","sendPurchaseOrderEmail","loadPurchaseOrderTemplates","fileDownloadService","fcss_m","firstData","initInputs","loadGridProcess","isDelete","needReloadAvailable","voidItem","undoItem","hasChild","dataDisplay","OrderStatus","ToName","HasChild","IsVariation","supplierCurrency","baseCurrency","rate","supplier","TaxRuleName","PaymentTermName","TaxPercentInclusive","TaxPercentExclusive","showMessageWhenAdded","openFamilyDlg","ne","OrderLineID","UnitName","UnitOfMeasure","FamilyName","removeLineItem","availableItems","modifyOrder","currentLineCommentRow","currentLineComment","showChangeRowCommentDialog","closeAddLineCommentsDialog","reorderProducts","addFamilyItemToOrder","templates","printingMode","templateModel","showPrintDialog","Templates","processChosenTemplate","isOk","showEmailDlg","downloadOrder","Url","FileName","emailModel","BodyHtml","emailOrder","isSend","existing","newRec","Unit","activeTab","dataCountProcess","dataPageProcess","dataPageDisplayProcess","itemsByPageProcess","isProcessLoading","categoryLiveSearchIsOpen","brandLiveSearchIsOpen","tagLiveSearchIsOpen","datePickerReady","prepareDatePicker","defaultAcc","defaultAccount","accounts","newStocktake","lockSell","showOnhand","selectedCategory","selectedBrand","selectedTag","LockSell","IncludeQuantityOnHand","categoriesArr","brandsArr","tagsArr","scanLocationID","scanLocationName","stockTakesData","SearchParameters","editStocktake","modifyStocktake","modifyTask","liveSearchCategory","liveSearchCategorySelected","addTextToArray","liveSearchCategoryFinished","liveSearchBrand","liveSearchBrandSelected","liveSearchBrandFinished","liveSearchTag","liveSearchTagSelected","liveSearchTagFinished","removeFromList","removeTextFromArray","currentStocktake","bins","sncnts","BinID","fixQuantityObjectLocation","prepareCurrentStocktake","currentTask","showProcessStocktake","totalPagesProcess","scrollReachBottomCallbackProcess","getLocationBins","selectPageProcess","getPagesProcess","itemsInPage","rowClicked","prepareScanData","ExpiryDate2","gridControlProcess","ParentLocationID","adjustStocktakeAbsolute","ReceivedDate","scanComboInit","LocationName","scanStocktake","searchValue","scanInventoryMode","codes","adjustStocktakeRelative","processSingleScan","selectScanProduct","completeStocktakeDlgShow","completeStocktakeDlgShow2","cancelStocktakeDlgShow2","cancelStocktakeDlgShow","undoStocktakeDlgShow2","undoStocktakeDlgShow","addNewZeroStockItem","zeroStockProduct","LastChange","QtyOrder","canAdd","includeQuantityOnHand","isTemplateMode","correctDates","receivedDateDate","incValue","loadStockTransferList","loadUserAvailableOutlets","loadStockTransferDetails","saveNewStockTransfer","updateStockTransfer","voidStockTransfer","deleteStockTransfer","completeStockTransfer","putAwayData","undoStockTransfer","scanStockTakeInventoryMode","dataContainer","stockTransfersData","dateDisplay","ToLocationAddress","locationListTo","setLocationListTo","currentTransfer","wElement","fromLoc","initInnerSelects","editCurrent","toLoc","inStockTakeCount","reloadAvailable","removeTransferItem","forceComplete","liveSearchFunc","DisplayName","putAway","ReceivedQuantity","NonInventory","FromLocationOrBinID","fromLocationOrBinId","PutAway","showReorderDlg","closeReorderDlg","allLow","justClose","triPOSApplicationId","triPOSHeaders","laneID","loadTriPOSLane","isRemoveNeeded","deleteTriPOSLane","terminalID","triTerminalID","activationCode","triActivationCode","createTriPOSLane","triPOSMakePayment","transactionAmount","expressResponseCode","isApproved","titel","signature","patialApprovedSum","statusCode","expressResponseMessage","lnkObject","_links","rel","triPOSRefundPayment","tyroApplicationId","iclient","iframeSourceUrlExt","TYRO","IClient","posProductVendor","posProductName","posProductVersion","prWithTimeout","pairTerminal","integrationKey","prom","race","_r","rej","initiatePurchase","integratedReceipt","mid","tid","statusMessageCallback","questionCallback","question","answerCallback","d1","isManualCancel","transactionCompleteCallback","initiateRefund","elidedPan","pako","encoded","binData","inflate","initRolesFilter","userRole","roles","userHasSelectedOutlet","addPosUser","editedUser","editPosUser","OutletNames","saveUser","saveUserForm","deactivationModalDialog","cancelDeactivationModal","showDeleteUserDialog","hideDeleteUserDialog","userToDelete","deletePosUser","del","getUserNameClass","lockUpdate","SaleRepresentativesHash","startSaleRepresentativesAutoUpdate","families","ProductFamilyOption1Name","ProductFamilyOption2Name","ProductFamilyOption3Name","ProductFamilyID","DiscountLines","family","FamilyShortName","isLimitReached","dic","familyData","Mode","Registry","getApiUrl","setPassword","newPassword","finalizeID","FinalizeID","transactionID","originalTransactionDate","refundAmount","TransactionID","OriginalTransactionDate","RefundAmount","SearchString","completionDate","Lang","RootProperty","useCORSProxy","initialUrl","laneId","ticketNumber","allowDebit","allowPartialApprovals","registerCloseID","giftCardCodes","LocationId","isVoid","User","taskId","loadDelivery","loadProductsAvailableForDelivery","loadCalendars","CreateDelivery","deliveryID","UpdateDelivery","deliveryTaskID","newStatus","username","paircode","Accept","linklyCloudSecretKey","uri","operatorReference","lastLoginUserID","Merchant","TxnType","AmtPurchase","TxnRef","CurrencyCode","CutReceipt","ReceiptAutoPrint","Application","PurchaseAnalysisData","OPR","AMT","Key","App","ReprintType","StatusType"],"sourceRoot":""}