File size: 30,845 Bytes
be5030f
1
{"version":3,"sources":["util/int.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,+DAA+D;AAC/D,wDAAwD;AACxD,6DAA6D;AAC7D,oDAAoD;AACpD,6DAA6D;AAC7D,6DAA6D;AAC7D,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,6DAA6D;AAC7D,8DAA8D;AAC9D,yDAAyD;AACzD,4DAA4D;AAC5D,0DAA0D;AAC1D,qBAAqB;AAErB,cAAc;AACd,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,CAAC;AAE3B,cAAc;AACd,SAAS,QAAQ,CAAC,KAAa;IAC3B,IAAI,KAAK,GAAG,CAAC,EAAE;QACX,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;KAClC;IACD,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACrC,CAAC;AAED,cAAc;AACd,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAC9B,cAAc;AACd,MAAM,YAAY,GAAG,CAAC,CAAC;IACD,EAAE;IACF,GAAG;IACH,IAAI;IACJ,KAAK;IACL,MAAM;IACN,OAAO;IACP,QAAQ;IACR,SAAS,CAAC,CAAC;AAEjC,cAAc;AACd,MAAM,OAAO,SAAS;IAClB,YAAuB,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEvC,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,GAAG,KAAc,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtC,MAAM,CAAC,KAAgB;QAC7B,sDAAsD;QACtD,iDAAiD;QACjD,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;YACvB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE;YACrB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;SAC1B,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC;YACtB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE;YACtB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;YACxB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE;YACtB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;SAC3B,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC;QAElC,IAAI,GAAG,GAAG,OAAO,KAAK,EAAE,CAAC;QAEzB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,GAAG,IAAI,OAAO,CAAC;QAEf,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9B,GAAG,IAAI,OAAO,CAAC;QAEf,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,KAAgB;QAC5B,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YAChC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACzB,CAAC;IAEM,QAAQ,CAAC,KAAgB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACnC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;IAEM,MAAM,CAAC,KAAgB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAEM,WAAW,CAAC,KAAgB;QAC/B,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAEM,GAAG;QACN,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;CACJ;AAED,cAAc;AACd,MAAM,OAAO,MAAO,SAAQ,SAAS;IAC1B,KAAK,CAAC,KAAa;QACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,IAAI,CAAC,KAAa;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,IAAI,CAAC,GAAQ,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,UAAU,CACpB,OAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAC/C,UAAU,CACb,CAAC;IACN,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,UAAU,CAAC,GAAW,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACjE,kEAAkE;QAClE,6CAA6C;QAC7C,eAAe;QACf,mCAAmC;QACnC,gBAAgB;QAChB,0CAA0C;QAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,UAAU,CAAC,GAAW,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG;YAC/B,MAAM,KAAK,GAAG,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;gBACrC,mBAAmB,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAEvE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhB,IAAI,IAAI,KAAK,CAAC;SACjB;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,YAAY,CAAC,MAAyB;QAChD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG;YAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACxF;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,KAAa;QAC9C,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,KAAa;QACzC,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;CACJ;AAED,cAAc;AACd,MAAM,OAAO,KAAM,SAAQ,SAAS;IACzB,MAAM;QACT,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAAE;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,KAAY;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,IAAI,CAAC,KAAY;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,QAAQ,CAAC,KAAY;QACxB,gCAAgC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,SAAS,GAAG,UAAU;YACzB,CAAC,SAAS,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,IAAI,CAAC,GAAQ,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC,UAAU,CACnB,OAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAC/C,UAAU,CACb,CAAC;IACN,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,UAAU,CAAC,GAAW,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACjE,kEAAkE;QAClE,6CAA6C;QAC7C,eAAe;QACf,mCAAmC;QACnC,gBAAgB;QAChB,0CAA0C;QAC1C,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,UAAU,CAAC,GAAW,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACjE,mDAAmD;QACnD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAChC,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG;YAC5C,MAAM,KAAK,GAAG,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;gBACrC,mBAAmB,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhB,IAAI,IAAI,KAAK,CAAC;SACjB;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,YAAY,CAAC,MAAyB;QAChD,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG;YAC1C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACvF;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,QAAQ,CAAC,IAAW,EAAE,KAAY;QAC5C,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,GAAG,CAAC,IAAW,EAAE,KAAY;QACvC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;CACJ;AAED,cAAc;AACd,MAAM,OAAO,MAAM;IACf,YAAqB,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;QACpC,uBAAuB;QACvB,YAAY;QACZ,YAAY;QACZ,sBAAsB;IAC1B,CAAC;IAEM,IAAI;QACP,OAAO,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IAEM,GAAG;QACN,OAAO,IAAI,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAAE;QAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAAE;QAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAAE;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,KAAa;QACtB,sDAAsD;QACtD,iDAAiD;QACjD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE/B,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElB,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAElB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QAE3B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE1F,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;aACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAErD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,IAAI,CAAC,KAAa;QACrB,IAAI,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YAClC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YAClC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;QACD,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YAClC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;QAED,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,GAAG;QACN,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7H,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,KAAa;QAC9C,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,KAAa;QACzC,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,IAAI,CAAC,GAAQ,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,UAAU,CACpB,OAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAC/C,UAAU,CACb,CAAC;IACN,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,UAAU,CAAC,GAAW,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACjE,kEAAkE;QAClE,6CAA6C;QAC7C,eAAe;QACf,mCAAmC;QACnC,gBAAgB;QAChB,0CAA0C;QAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,UAAU,CAAC,GAAW,EAAE,UAAU,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC;QACjE,mDAAmD;QACnD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAE1B,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG;YAC5C,MAAM,KAAK,GAAG,mBAAmB,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;gBACrC,mBAAmB,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAClD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5F,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7E,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEhB,IAAI,IAAI,KAAK,CAAC;SACjB;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,CAAC;IAED,kBAAkB;IACX,MAAM,CAAC,YAAY,CAAC,MAAyB;QAChD,8DAA8D;QAC9D,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG;YAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACxF;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","file":"int.js","sourcesContent":["// Licensed to the Apache Software Foundation (ASF) under one\n// or more contributor license agreements.  See the NOTICE file\n// distributed with this work for additional information\n// regarding copyright ownership.  The ASF licenses this file\n// to you under the Apache License, Version 2.0 (the\n// \"License\"); you may not use this file except in compliance\n// with the License.  You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing,\n// software distributed under the License is distributed on an\n// \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n// KIND, either express or implied.  See the License for the\n// specific language governing permissions and limitations\n// under the License.\n\n/** @ignore */\nconst carryBit16 = 1 << 16;\n\n/** @ignore */\nfunction intAsHex(value: number): string {\n    if (value < 0) {\n        value = 0xFFFFFFFF + value + 1;\n    }\n    return `0x${value.toString(16)}`;\n}\n\n/** @ignore */\nconst kInt32DecimalDigits = 8;\n/** @ignore */\nconst kPowersOfTen = [1,\n                      10,\n                      100,\n                      1000,\n                      10000,\n                      100000,\n                      1000000,\n                      10000000,\n                      100000000];\n\n/** @ignore */\nexport class BaseInt64 {\n    constructor (protected buffer: Uint32Array) {}\n\n    public high(): number { return this.buffer[1]; }\n    public low (): number { return this.buffer[0]; }\n\n    protected _times(other: BaseInt64) {\n        // Break the left and right numbers into 16 bit chunks\n        // so that we can multiply them without overflow.\n        const L = new Uint32Array([\n            this.buffer[1] >>> 16,\n            this.buffer[1] & 0xFFFF,\n            this.buffer[0] >>> 16,\n            this.buffer[0] & 0xFFFF\n        ]);\n\n        const R = new Uint32Array([\n            other.buffer[1] >>> 16,\n            other.buffer[1] & 0xFFFF,\n            other.buffer[0] >>> 16,\n            other.buffer[0] & 0xFFFF\n        ]);\n\n        let product = L[3] * R[3];\n        this.buffer[0] = product & 0xFFFF;\n\n        let sum = product >>> 16;\n\n        product = L[2] * R[3];\n        sum += product;\n\n        product = (L[3] * R[2]) >>> 0;\n        sum += product;\n\n        this.buffer[0] += sum << 16;\n\n        this.buffer[1] = (sum >>> 0 < product ? carryBit16 : 0);\n\n        this.buffer[1] += sum >>> 16;\n        this.buffer[1] += L[1] * R[3] + L[2] * R[2] + L[3] * R[1];\n        this.buffer[1] += (L[0] * R[3] + L[1] * R[2] + L[2] * R[1] + L[3] * R[0]) << 16;\n\n        return this;\n      }\n\n    protected _plus(other: BaseInt64) {\n        const sum = (this.buffer[0] + other.buffer[0]) >>> 0;\n        this.buffer[1] += other.buffer[1];\n        if (sum < (this.buffer[0] >>> 0)) {\n          ++this.buffer[1];\n        }\n        this.buffer[0] = sum;\n    }\n\n    public lessThan(other: BaseInt64): boolean {\n        return this.buffer[1] < other.buffer[1] ||\n            (this.buffer[1] === other.buffer[1] && this.buffer[0] < other.buffer[0]);\n    }\n\n    public equals(other: BaseInt64): boolean {\n        return this.buffer[1] === other.buffer[1] && this.buffer[0] == other.buffer[0];\n    }\n\n    public greaterThan(other: BaseInt64): boolean {\n        return other.lessThan(this);\n    }\n\n    public hex(): string {\n        return `${intAsHex(this.buffer[1])} ${intAsHex(this.buffer[0])}`;\n    }\n}\n\n/** @ignore */\nexport class Uint64 extends BaseInt64 {\n    public times(other: Uint64): Uint64 {\n        this._times(other);\n        return this;\n    }\n\n    public plus(other: Uint64): Uint64 {\n        this._plus(other);\n        return this;\n    }\n\n    /** @nocollapse */\n    public static from(val: any, out_buffer = new Uint32Array(2)): Uint64 {\n        return Uint64.fromString(\n            typeof(val) === 'string' ? val : val.toString(),\n            out_buffer\n        );\n    }\n\n    /** @nocollapse */\n    public static fromNumber(num: number, out_buffer = new Uint32Array(2)): Uint64 {\n        // Always parse numbers as strings - pulling out high and low bits\n        // directly seems to lose precision sometimes\n        // For example:\n        //     > -4613034156400212000 >>> 0\n        //     721782784\n        // The correct lower 32-bits are 721782752\n        return Uint64.fromString(num.toString(), out_buffer);\n    }\n\n    /** @nocollapse */\n    public static fromString(str: string, out_buffer = new Uint32Array(2)): Uint64 {\n        const length = str.length;\n\n        let out = new Uint64(out_buffer);\n        for (let posn = 0; posn < length;) {\n            const group = kInt32DecimalDigits < length - posn ?\n                          kInt32DecimalDigits : length - posn;\n            const chunk = new Uint64(new Uint32Array([parseInt(str.substr(posn, group), 10), 0]));\n            const multiple = new Uint64(new Uint32Array([kPowersOfTen[group], 0]));\n\n            out.times(multiple);\n            out.plus(chunk);\n\n            posn += group;\n        }\n\n        return out;\n    }\n\n    /** @nocollapse */\n    public static convertArray(values: (string|number)[]): Uint32Array {\n        const data = new Uint32Array(values.length * 2);\n        for (let i = -1, n = values.length; ++i < n;) {\n            Uint64.from(values[i], new Uint32Array(data.buffer, data.byteOffset + 2 * i * 4, 2));\n        }\n        return data;\n    }\n\n    /** @nocollapse */\n    public static multiply(left: Uint64, right: Uint64): Uint64 {\n        let rtrn = new Uint64(new Uint32Array(left.buffer));\n        return rtrn.times(right);\n    }\n\n    /** @nocollapse */\n    public static add(left: Uint64, right: Uint64): Uint64 {\n        let rtrn = new Uint64(new Uint32Array(left.buffer));\n        return rtrn.plus(right);\n    }\n}\n\n/** @ignore */\nexport class Int64 extends BaseInt64 {\n    public negate(): Int64 {\n        this.buffer[0] = ~this.buffer[0] + 1;\n        this.buffer[1] = ~this.buffer[1];\n\n        if (this.buffer[0] == 0) { ++this.buffer[1]; }\n        return this;\n    }\n\n    public times(other: Int64): Int64 {\n        this._times(other);\n        return this;\n    }\n\n    public plus(other: Int64): Int64 {\n        this._plus(other);\n        return this;\n    }\n\n    public lessThan(other: Int64): boolean {\n        // force high bytes to be signed\n        const this_high = this.buffer[1] << 0;\n        const other_high = other.buffer[1] << 0;\n        return this_high < other_high ||\n            (this_high === other_high && this.buffer[0] < other.buffer[0]);\n    }\n\n    /** @nocollapse */\n    public static from(val: any, out_buffer = new Uint32Array(2)): Int64 {\n        return Int64.fromString(\n            typeof(val) === 'string' ? val : val.toString(),\n            out_buffer\n        );\n    }\n\n    /** @nocollapse */\n    public static fromNumber(num: number, out_buffer = new Uint32Array(2)): Int64 {\n        // Always parse numbers as strings - pulling out high and low bits\n        // directly seems to lose precision sometimes\n        // For example:\n        //     > -4613034156400212000 >>> 0\n        //     721782784\n        // The correct lower 32-bits are 721782752\n        return Int64.fromString(num.toString(), out_buffer);\n    }\n\n    /** @nocollapse */\n    public static fromString(str: string, out_buffer = new Uint32Array(2)): Int64 {\n        // TODO: Assert that out_buffer is 0 and length = 2\n        const negate = str.startsWith('-');\n        const length = str.length;\n\n        let out = new Int64(out_buffer);\n        for (let posn = negate ? 1 : 0; posn < length;) {\n            const group = kInt32DecimalDigits < length - posn ?\n                          kInt32DecimalDigits : length - posn;\n            const chunk = new Int64(new Uint32Array([parseInt(str.substr(posn, group), 10), 0]));\n            const multiple = new Int64(new Uint32Array([kPowersOfTen[group], 0]));\n\n            out.times(multiple);\n            out.plus(chunk);\n\n            posn += group;\n        }\n        return negate ? out.negate() : out;\n    }\n\n    /** @nocollapse */\n    public static convertArray(values: (string|number)[]): Uint32Array {\n        const data = new Uint32Array(values.length * 2);\n        for (let i = -1, n = values.length; ++i < n;) {\n            Int64.from(values[i], new Uint32Array(data.buffer, data.byteOffset + 2 * i * 4, 2));\n        }\n        return data;\n    }\n\n    /** @nocollapse */\n    public static multiply(left: Int64, right: Int64): Int64 {\n        let rtrn = new Int64(new Uint32Array(left.buffer));\n        return rtrn.times(right);\n    }\n\n    /** @nocollapse */\n    public static add(left: Int64, right: Int64): Int64 {\n        let rtrn = new Int64(new Uint32Array(left.buffer));\n        return rtrn.plus(right);\n    }\n}\n\n/** @ignore */\nexport class Int128 {\n    constructor (private buffer: Uint32Array) {\n        // buffer[3] MSB (high)\n        // buffer[2]\n        // buffer[1]\n        // buffer[0] LSB (low)\n    }\n\n    public high(): Int64 {\n        return new Int64(new Uint32Array(this.buffer.buffer, this.buffer.byteOffset + 8, 2));\n    }\n\n    public low(): Int64 {\n        return new Int64(new Uint32Array(this.buffer.buffer, this.buffer.byteOffset, 2));\n    }\n\n    public negate(): Int128 {\n        this.buffer[0] = ~this.buffer[0] + 1;\n        this.buffer[1] = ~this.buffer[1];\n        this.buffer[2] = ~this.buffer[2];\n        this.buffer[3] = ~this.buffer[3];\n\n        if (this.buffer[0] == 0) { ++this.buffer[1]; }\n        if (this.buffer[1] == 0) { ++this.buffer[2]; }\n        if (this.buffer[2] == 0) { ++this.buffer[3]; }\n        return this;\n    }\n\n    public times(other: Int128): Int128 {\n        // Break the left and right numbers into 32 bit chunks\n        // so that we can multiply them without overflow.\n        const L0 = new Uint64(new Uint32Array([this.buffer[3],  0]));\n        const L1 = new Uint64(new Uint32Array([this.buffer[2],  0]));\n        const L2 = new Uint64(new Uint32Array([this.buffer[1],  0]));\n        const L3 = new Uint64(new Uint32Array([this.buffer[0],  0]));\n\n        const R0 = new Uint64(new Uint32Array([other.buffer[3], 0]));\n        const R1 = new Uint64(new Uint32Array([other.buffer[2], 0]));\n        const R2 = new Uint64(new Uint32Array([other.buffer[1], 0]));\n        const R3 = new Uint64(new Uint32Array([other.buffer[0], 0]));\n\n        let product = Uint64.multiply(L3, R3);\n        this.buffer[0] = product.low();\n\n        let sum = new Uint64(new Uint32Array([product.high(), 0]));\n\n        product = Uint64.multiply(L2, R3);\n        sum.plus(product);\n\n        product = Uint64.multiply(L3, R2);\n        sum.plus(product);\n\n        this.buffer[1] = sum.low();\n\n        this.buffer[3] = (sum.lessThan(product) ? 1 : 0);\n\n        this.buffer[2] = sum.high();\n        let high = new Uint64(new Uint32Array(this.buffer.buffer, this.buffer.byteOffset + 8, 2));\n\n        high.plus(Uint64.multiply(L1, R3))\n            .plus(Uint64.multiply(L2, R2))\n            .plus(Uint64.multiply(L3, R1));\n        this.buffer[3] += Uint64.multiply(L0, R3)\n                        .plus(Uint64.multiply(L1, R2))\n                        .plus(Uint64.multiply(L2, R1))\n                        .plus(Uint64.multiply(L3, R0)).low();\n\n        return this;\n    }\n\n    public plus(other: Int128): Int128 {\n        let sums = new Uint32Array(4);\n        sums[3] = (this.buffer[3] + other.buffer[3]) >>> 0;\n        sums[2] = (this.buffer[2] + other.buffer[2]) >>> 0;\n        sums[1] = (this.buffer[1] + other.buffer[1]) >>> 0;\n        sums[0] = (this.buffer[0] + other.buffer[0]) >>> 0;\n\n        if (sums[0] < (this.buffer[0] >>> 0)) {\n            ++sums[1];\n        }\n        if (sums[1] < (this.buffer[1] >>> 0)) {\n            ++sums[2];\n        }\n        if (sums[2] < (this.buffer[2] >>> 0)) {\n            ++sums[3];\n        }\n\n        this.buffer[3] = sums[3];\n        this.buffer[2] = sums[2];\n        this.buffer[1] = sums[1];\n        this.buffer[0] = sums[0];\n\n        return this;\n    }\n\n    public hex(): string {\n        return `${intAsHex(this.buffer[3])} ${intAsHex(this.buffer[2])} ${intAsHex(this.buffer[1])} ${intAsHex(this.buffer[0])}`;\n    }\n\n    /** @nocollapse */\n    public static multiply(left: Int128, right: Int128): Int128 {\n        let rtrn = new Int128(new Uint32Array(left.buffer));\n        return rtrn.times(right);\n    }\n\n    /** @nocollapse */\n    public static add(left: Int128, right: Int128): Int128 {\n        let rtrn = new Int128(new Uint32Array(left.buffer));\n        return rtrn.plus(right);\n    }\n\n    /** @nocollapse */\n    public static from(val: any, out_buffer = new Uint32Array(4)): Int128 {\n        return Int128.fromString(\n            typeof(val) === 'string' ? val : val.toString(),\n            out_buffer\n        );\n    }\n\n    /** @nocollapse */\n    public static fromNumber(num: number, out_buffer = new Uint32Array(4)): Int128 {\n        // Always parse numbers as strings - pulling out high and low bits\n        // directly seems to lose precision sometimes\n        // For example:\n        //     > -4613034156400212000 >>> 0\n        //     721782784\n        // The correct lower 32-bits are 721782752\n        return Int128.fromString(num.toString(), out_buffer);\n    }\n\n    /** @nocollapse */\n    public static fromString(str: string, out_buffer = new Uint32Array(4)): Int128 {\n        // TODO: Assert that out_buffer is 0 and length = 4\n        const negate = str.startsWith('-');\n        const length = str.length;\n\n        let out = new Int128(out_buffer);\n        for (let posn = negate ? 1 : 0; posn < length;) {\n            const group = kInt32DecimalDigits < length - posn ?\n                          kInt32DecimalDigits : length - posn;\n            const chunk = new Int128(new Uint32Array([parseInt(str.substr(posn, group), 10), 0, 0, 0]));\n            const multiple = new Int128(new Uint32Array([kPowersOfTen[group], 0, 0, 0]));\n\n            out.times(multiple);\n            out.plus(chunk);\n\n            posn += group;\n        }\n\n        return negate ? out.negate() : out;\n    }\n\n    /** @nocollapse */\n    public static convertArray(values: (string|number)[]): Uint32Array {\n        // TODO: Distinguish between string and number at compile-time\n        const data = new Uint32Array(values.length * 4);\n        for (let i = -1, n = values.length; ++i < n;) {\n            Int128.from(values[i], new Uint32Array(data.buffer, data.byteOffset + 4 * 4 * i, 4));\n        }\n        return data;\n    }\n}\n"]}