edge-core-js 0.19.21 → 0.19.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-core.js","mappings":";;;;;;;;;;;;;;;;;AAAA;;AAEgC;;;;;;;;AAQhC;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+CAAS;;AAET;AACA;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAAS,GAAG,oBAAoB;;AAEhC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAAS,GAAG,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClFO;AAC4B;;AAEV;;;;;;;;;;;;;;;;;;;;AAoBqB;AACxB;AACgB;AAOtC;AACmB;AAMpB;AAKK;AACqC;AACI;AACZ;AAIlB;;AAEwB;AACZ;AACG;;AAED;AACT;AACe;;AAE5D;AACA;AACA;AACO;AACP;AACA,UAAU,0CAA0C;AACpD,UAAU,WAAW;;AAErB;AACA;AACA;AACA,oBAAoB,2DAAc;AAClC;AACA;AACA;AACA;AACA,oBAAoB,uDAAU;AAC9B;AACA;;AAEA;AACA,oBAAoB,4EAAiB;AACrC,oBAAoB,qEAAgB;AACpC,2BAA2B,8EAAoB;;AAE/C;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,0CAAQ;AAChB,WAAW,6CAAW;;AAEtB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,aAAa,+DAAgB;AAC7B,KAAK;AACL;AACA;AACA,cAAc,QAAQ;AACtB;AACA,UAAU,+DAA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A,sBAAsB,2DAAW;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kDAAS;AACzB;AACA;AACA;AACA;AACA,cAAc,2CAA2C;AACzD,kBAAkB;AAClB,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,wCAAwC;;AAElD;AACA;AACA;AACA,qBAAqB,sFAAuB;AAC5C;AACA;;AAEA;AACA;AACA,IAAI,sFAAuB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,kCAAkC;AAC5C,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc,uCAAuC;AACrD,2BAA2B,wFAAyB;AACpD;AACA;AACA;AACA;AACA,kDAAkD,aAAa;AAC/D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA,eAAe,2BAA2B;AAC1C,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,oBAAoB;AAC9B,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,oBAAoB;AAC9B,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe;AACf,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,oBAAoB;AAC9B,kBAAkB,sFAAuB;;AAEzC;AACA,UAAU,6BAA6B;AACvC,oBAAoB;AACpB;AACA,GAAG;;AAEH;AACA;AACA;AACA,eAAe;AACf,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;AClRA;;AAEgC;;;AAGkB;AAMzB;AAC+B;;;;;;;;AAQxD;AACA;AACA;AACA;AACA;;AAEO;AACP,cAAc,2DAAU;AACxB,qEAAqE,MAAM;AAC3E;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,WAAW;AACrB;AACA;;AAEA,iBAAiB;AACjB;AACA,mBAAmB,kEAAkB,KAAK,+DAAe;AACzD;AACA,oBAAoB,+DAAa;AACjC;AACA;AACA;AACA,aAAa,uBAAuB;AACpC,aAAa,uBAAuB;AACpC;AACA;AACA,SAAS,yDAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,sBAAsB,+DAAe;;AAErC;AACA,gBAAgB,2DAAU;AAC1B;AACA;AACA;;AAEA;AACA,MAAM,4DAAY;AAClB;AACA,oBAAoB,kEAAkB;AACtC,oBAAoB,2DAAW;AAC/B,WAAW,yDAAQ;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,uBAAuB;AACjC,UAAU,MAAM;AAChB;AACA,sCAAsC,qDAAgB,oBAAoB;AAC1E;;AAEA;AACA;AACA,UAAU,WAAW;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtJA,gCAAgC,+BAA+B,oBAAoB,WAAW,yBAAyB,mBAAmB,uBAAuB,QAAQ,2EAA2E,oBAAoB,kDAAkD,uBAAuB,qBAAqB,mDAAmD,6D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CA;AACA;AACA;AACA;AACA,qBAAqB,iEAAiB;AACtC,cAAc,wBAAwB;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA,uBAAuB,0DAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB,8EAAoB;AACrD;AACA,iBAAiB;AACjB,OAAO;AACP;;AAEA,qBAAqB,0DAAc;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wFAAyB;AACpD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA,mBAAmB,0DAAc;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,0DAAc;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,0DAAc;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH,eAAe,0DAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH,SAAS,0DAAc;AACvB;AACA;AACA,0BAA0B,8DAAY;AACtC;;AAEA;AACA;AACA,GAAG;;AAEH,aAAa,0DAAc;AAC3B;AACA;AACA;AACA;AACA;AACA,MAAM,8DAAa;AACnB;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,YAAY,8BAA8B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,0BAA0B;AAC1B;AACA;AACA,gBAAgB,mBAAmB;AACnC,iBAAiB;AACjB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA;AACA;AACA,gBAAgB,2BAA2B;AAC3C,oEAAoE;;AAEpE;AACA,YAAY,yDAAO;;AAEnB,0BAA0B;AAC1B,iBAAiB;AACjB;AACA;AACA,gBAAgB,oBAAoB;AACpC,oEAAoE;;AAEpE;AACA;;AAEA,gBAAgB,gCAAgC;AAChD,iBAAiB;AACjB;AACA;AACA;AACA,GAAG;;AAEH,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA,gBAAgB,yBAAyB;AACzC,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,yBAAyB;AACzB;AACA;AACA,gBAAgB,yBAAyB;AACzC,sBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAEM;;;;AAIP,GAAG,yDAAa;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa;AACb;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvYA,gCAAgC,+BAA+B,oBAAoB,WAAW,yBAAyB,mBAAmB,uBAAuB,QAAQ,2EAA2E,oBAAoB,kDAAkD,uBAAuB,qBAAqB,mDAAmD,6DAA6D,+BAA+B,eAAe;;AAE9c;;;;;;;;;;AAUG;AAIjB;;AAEiC;AACI;;AAE7E,yBAAyB,mEAAY,CAAC,oEAAkB;AACxD,wBAAwB,mEAAY,CAAC,mEAAiB;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA,gCAAgC,iDAAO;AACvC,EAAE,kDAAQ;AACV,qBAAqB,8CAAQ;AAC7B,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,sBAAsB,+EAAgB;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wBAAwB;;AAExD;AACA;;AAEO;AACP;AACA;;AAEO;AACP,UAAU,0DAA0D;;AAEpE;AACA;AACA,sBAAsB,gCAAgC;AACtD;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;;AAEO;AACP,UAAU,4DAA4D;AACtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,mCAAmC;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,UAAU,4DAA4D;AACtE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,UAAU,kBAAkB;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,QAAQ;AAClB,UAAU,oBAAoB;AAC9B,kBAAkB,sFAAuB;;AAEzC;AACA;;AAEA;AACA;AACA;;AAEA;AACA,qBAAqB,wFAAyB;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,UAAU,kBAAkB;AAC5B,UAAU,oBAAoB;AAC9B,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA,iBAAiB;AACjB,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA,iBAAiB;AACjB,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA;AACA,UAAU,QAAQ;AAClB,UAAU,oBAAoB;AAC9B,kBAAkB,sFAAuB;AACzC,UAAU,eAAe;;AAEzB;AACA;AACA,uDAAuD,uBAAuB;AAC9E;;;;;;;;;;;;;;;;;;;;;ACxPA;;AAE6C;AACG;AACX;;;AAGoB;;AAKjB;;AAExC;AACA;AACA;AACA,oBAAoB,mEAAY;AAChC,EAAE,kDAAQ;AACV,UAAU,8CAAQ;AAClB,GAAG;AACH;;AAEA;AACA;AACA;AACA,sBAAsB,mEAAY;AAClC,EAAE,kDAAQ;AACV,SAAS,8CAAQ;AACjB,UAAU,8CAAQ;AAClB,GAAG;AACH;;AAEO;AACP;AACA;AACA;AACA,UAAU,oBAAoB;AAC9B,kBAAkB,sFAAuB;;AAEzC;AACA;AACA,IAAI,wFAAyB;AAC7B;AACA,eAAe,kBAAkB;AACjC;AACA,OAAO,sBAAsB,GAAG,iBAAiB;;AAEjD;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,oBAAoB,kDAAS;AAC7B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;;AAEL;AACA;AACA,oBAAoB,oDAAW;AAC/B;AACA;AACA,2DAA2D,KAAK;AAChE;AACA,SAAS;AACT;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,2DAA2D,OAAO;AAClE;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sBAAsB;AAChD;AACA;AACA,oDAAoD,eAAe;AACnE,QAAQ;AACR,kEAAkE,QAAQ;AAC1E;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,EAAE,qDAAc;;AAEhB;AACA;;;;;;;;;;;;;;;;;;;;;;;;AClHA;;AAEoC;AACC;;;;;;;;AAQiB;AACe;AACF;AACT;;AAEW;;AAErE,6BAA6B,mDAAS,CAAC,+DAAmB;;;;;;;AAO1D;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,mBAAmB,cAAc,gBAAgB,MAAM;AACvD;AACA;AACA,kCAAkC,KAAK,WAAW,gBAAgB;AAClE;;AAEA,YAAY,oBAAoB;AAChC;;AAEA,aAAa;AACb,IAAI;AACJ;;AAEA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,YAAY;;AAEtB;AACA,QAAQ,4DAAW;;AAEnB,6BAA6B,qEAAmB;AAChD,yBAAyB,8DAAY;AACrC;AACA;AACA;;AAEA;AACA,UAAU,YAAY,EAAE,uEAAY;AACpC,qBAAqB,mEAAkB;;AAEvC;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,QAAQ,+DAAc;AACtB;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,MAAM,6DAAW;AACjB;AACA;AACA;AACA,YAAY,6DAAW;AACvB,WAAW;AACX,SAAS;AACT;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,0BAA0B,kEAAiB;;AAE3C;AACA;AACA;AACA,YAAY,QAAQ;AACpB;AACA,YAAY,+BAA+B;;AAE3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qDAAc;AAClB;;AAEA;AACA;AACA;AACA,EAAE,qDAAc;;AAEhB;AACA;;;;;;;;;;;;;;;;;;;;;;AC/IA,yCAAyC,mBAAmB,cAAc,OAAO,mBAAmB;;AAEnD;;;;;;;;;;;;AAYmB;AACF;;AAKvC;AACoB;;AAE/C;;AAEA;AACA;AACA;AACO,6BAA6B,4CAAU;AAC9C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAY,eAAe;AAC3B;AACA,MAAM,oDAAc;AACpB;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY,QAAQ;AACpB,YAAY,6CAA6C;AACzD;AACA;;AAEA;AACA,YAAY,QAAQ;AACpB,YAAY,6CAA6C;AACzD;AACA;;AAEA;AACA,YAAY,QAAQ;AACpB,YAAY,6CAA6C;AACzD;AACA;;AAEA;AACA,YAAY,sDAAsD;AAClE,0BAA0B,6DAAU;;AAEpC;AACA;AACA,iBAAiB;AACjB,KAAK;AACL;AACA;;AAEA;AACA,YAAY,sDAAsD;AAClE;AACA;AACA;AACA,oDAAoD,QAAQ;AAC5D;AACA,6BAA6B,6DAAU;AACvC;AACA;AACA,iBAAiB;AACjB,KAAK;;AAEL;AACA;AACA,cAAc,UAAU;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iFAAa;AACxC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;AACnB,OAAO;AACP;AACA;;AAEA;AACA,YAAY,sDAAsD;;AAElE;AACA;AACA,iBAAiB;AACjB,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA,UAAU,2EAAwB;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,+EAAgB;;AAExC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEO,yBAAyB,4CAAU;AAC1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,eAAe;AAC3B,YAAY,iBAAiB;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,qEAAkB;AAC7B;AACA;AACA,KAAK;AACL;;AAEA;AACA,UAAU,2EAAwB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/NA;;AAE4D;;AAEU;;;;;;;;;;;;AAYvB;AACuB;AACH;AAChB;AACS;AACG;AACT;AACU;AACtB;AACU;AACO;AAK7B;;AAEuB;;AAE9C;AACP;AACA,6BAA6B,gEAAiB;AAC9C;;AAEA;AACA,QAAQ,0CAAQ;AAChB,WAAW,6CAAW;;AAEtB;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA,eAAe;;AAEf;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,wBAAwB,4DAAW;AACnC;AACA;AACA;AACA;AACA;;AAEA,aAAa,kEAAW;AACxB,KAAK;;AAEL;AACA,aAAa,mEAAiB;AAC9B,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,6DAAW,uBAAuB,eAAe;AAC/E,aAAa,qEAAW;AACxB,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAmB;;AAEjC,wBAAwB,mEAAQ;AAChC,wBAA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;;;;;AC5BM;AACP;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,UAAU;AAC/C;;AAEA;AACA,cAAc,gBAAgB;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtEA,yCAAyC,mBAAmB,cAAc,OAAO,mBAAmB;;AAE/C;;AAEO;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT;AAKZ;AACS;AACmB;AACH;AACY;AAMtC;AACsC;AAOzC;;;AAGyC;;AAE5E;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,aAAa,0DAAU;AACvB,UAAU,kCAAkC;AAC5C;;AAEA,2BAA2B,6EAAoB;;AAE/C,wBAAwB,0FAA2B;;AAEnD;AACA;AACA;AACA,IAAI,qDAAc;AAClB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ,0CAAQ;AAChB,WAAW,6CAAW;;AAEtB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA,YAAY,gFAAoB;AAChC,KAAK;;AAEL;AACA;AACA,cAAc,aAAa;AAC3B;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,+CAA+C;AAC/C;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,yBAAyB,6EAAqB;AAC9C,UAAU,0DAA0D;AACpE;AACA;AACA;AACA,aAAa,gDAAG;AAChB,KAAK;AACL;AACA;AACA;AACA;AACA,yBAAyB,6EAAqB;AAC9C,UAAU,0DAA0D;AACpE;AACA;AACA;AACA,aAAa,gDAAG;AAChB,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA,YAAY,iFAAqB;AACjC,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,mBAAmB;AACnB,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA,cAAc,yCAAyC;AACvD,cAAc,8BAA8B;AAC5C,cAAc,eAAe;;AAE7B;AACA;AACA;AACA;AACA,yBAAyB,kEAAa;AACtC,YAAY,4EAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA,cAAc,qBAAqB;;AAEnC;AACA;AACA,mBAAmB,yBAAyB,kEAAa;AACzD,OAAO;AACP,KAAK;;AAEL;AACA,cAAc,kCAAkC;;AAEhD;AACA;AACA;AACA;AACA,yBAAyB,kEAAa;AACtC;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA,cAAc,kCAAkC;;AAEhD;AACA;AACA;AACA;AACA,yBAAyB,kEAAa;AACtC;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA,oBAAoB,2EAAgB;AACpC,sBAAsB,4EAAiB;;AAEvC;AACA;AACA;AACA,QAAQ;AACR;AACA,sCAAsC,wBAAwB;AAC9D;;AAEA;AACA;AACA,mBAAmB;AACnB,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,cAAc,kDAAkD;;AAEhE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc,8CAA8C;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,mCAAmC,uEAAW;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,8EAAkB,kBAAkB,sEAAU;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,cAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA,gBAAgB,sDAAsD;AACtE;;AAEA;AACA,cAAc,iCAAiC;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,0CAA0C,0EAAY;AACtD;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA,YAAY,8EAAkB;AAC9B;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,mBAAmB;AACnB,OAAO;AACP;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,YAAY,uFAA2B;AACvC;AACA;AACA;AACA,QAAQ,0EAAY;AACpB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,cAAc,mDAAmD;AACjE,0CAA0C,cAAc;;AAExD;AACA;AACA;AACA,iBAAiB;AACjB,OAAO;;AAEP;AACA;AACA,qBAAqB,gDAAG;AACxB,YAAY,gDAAG;AACf;AACA;AACA,oBAAoB,gDAAG,MAAM,gDAAG;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA,yBAAyB,gDAAG;AAC5B,KAAK;;AAEL;AACA;AACA;AACA;AACA,QAAQ,yEAAc;AACtB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,QAAQ,yEAAc;AACtB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,EAAE,qDAAc;;AAEhB;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU,kBAAkB;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oCAAoC;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,0DAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4EAAc;AACzB;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,0CAA0C,0EAAY;AACtD;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACtrBA;;AAEmD;AACxB;;;;;;;;AAQuB;AACuB;AAI9B;AACiB;AACiB;;;;;AAKvB;;AAEtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,gBAAgB;;AAE1B;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,SAAS;AAC3D;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,QAAQ;AACR,oDAAoD,SAAS;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA,UAAU,WAAW;;AAErB;AACA;AACA;AACA,IAAI,qEAAc;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAI;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAI;AACZ;AACA;AACA;;AAEA;AACA;AACA,MAAM,iEAAU;AAChB;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,WAAW;AACX;AACA,OAAO;AACP,KAAK;;AAEL;AACA,MAAM,gEAAU;AAChB,eAAe,SAAS,IAAI,aAAa;AACzC;AACA;AACA;AACA;AACA,uBAAuB;AACvB,WAAW;AACX;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA,MAAM,gEAAU;AAChB;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,sBAAsB,SAAS;;AAE/B;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,wFAAyB;AACxD;AACA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B,gCAAgC,0EAAiB;AACjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB,WAAW;AACX;AACA,OAAO;AACP,KAAK;;AAEL;AACA,MAAM,gEAAU;AAChB;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,WAAW;AACX;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4BAA4B;AAC3E;AACA;AACA;AACA;;AAEA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;;AAEvB;AACA;AACA;AACA;AACA;AACA,kBAAkB,wBAAwB;AAC1C,kBAAkB,SAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,oEAAO;AAC/B,YAAY,yDAAO;;AAEnB;AACA,yBAAyB,wFAAyB;AAClD;AACA;AACA;AACA;AACA,UAAU,6EAAkB;AAC5B;;AAEA;AACA,gBAAgB,QAAQ;AACxB,2BAA2B,0EAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;AACnB,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,MAAM,0CAAI;AACV,KAAK;AACL;AACA,MAAM,0CAAI;AACV,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP,UAAU,WAAW;;AAErB;AACA;AACA;AACA,oBAAoB,0FAA2B;AAC/C;AACA;AACA,MAAM,wEAAY;AAClB;;AAEA;AACA;AACA;AACA;AACA,aAAa,kEAAoB;AACjC,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtVA;;AAciB;;;;;;;AAO2C;;AAE5D;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,iBAAiB;;AAE3B;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW;AACX;;AAEA,kBAAkB,iDAAO;AACzB;AACA;AACA;AACA;;AAEO,qBAAqB,kDAAQ;AACpC,WAAW,oDAAU,CAAC,8CAAQ;AAC9B,YAAY,oDAAU,CAAC,8CAAQ;AAC/B,cAAc,+CAAS;;AAEvB;AACA,UAAU,kDAAQ;AAClB,cAAc,8CAAQ;AACtB,iBAAiB,8CAAQ;AACzB,kBAAkB,oDAAU,CAAC,8CAAQ;AACrC,GAAG;;AAEH;AACA,iBAAiB,8CAAQ;AACzB,sBAAsB,8CAAQ;AAC9B,sBAAsB,8CAAQ;AAC9B,kBAAkB,8CAAQ;AAC1B,iBAAiB,oDAAU,CAAC,8CAAQ;AACpC,CAAC;;AAED,uBAAuB,kDAAQ;AAC/B,SAAS,oDAAU,CAAC,8CAAQ;AAC5B,YAAY,oDAAU,CAAC,8CAAQ;AAC/B,kBAAkB,oDAAU,CAAC,+CAAK,CAAC,8CAAQ,KAAK;AAChD,QAAQ,oDAAU,CAAC,8CAAQ;AAC3B,SAAS,oDAAU,CAAC,8CAAQ;AAC5B,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,iDAAO,CAAC,8CAAQ;;AAE5C,0BAA0B,kDAAQ;AACzC,QAAQ,8CAAQ;AAChB,YAAY,+CAAS;AACrB,gBAAgB,8CAAQ;AACxB,cAAc,+CAAK;AACnB,IAAI,kDAAQ;AACZ;AACA,oBAAoB,oDAAU,CAAC,8CAAQ;AACvC,uBAAuB,oDAAU,CAAC,8CAAQ;AAC1C,KAAK;AACL;AACA,qBAAqB,oDAAU,CAAC,8CAAQ;AACxC,oBAAoB,oDAAU,CAAC,kDAAQ,YAAY,+DAAY;AAC/D,eAAe,oDAAU,CAAC,+DAAY;AACtC,UAAU,oDAAU;AACpB,IAAI,iDAAO;AACX,MAAM,kDAAQ;AACd,iBAAiB,8CAAQ;AACzB,gBAAgB,8CAAQ;AACxB,kBAAkB,8CAAQ;AAC1B,aAAa,oDAAU,CAAC,8CAAQ;AAChC,OAAO;AACP;AACA;AACA,UAAU,oDAAU,CAAC,8CAAQ;AAC7B,QAAQ,oDAAU;AAClB,CAAC;;AAEM,gCAAgC,kDAAQ;AAC/C,oBAAoB,8CAAQ;AAC5B,QAAQ,kDAAQ;AAChB,6BAA6B,8CAAQ;AACrC,aAAa,8CAAQ;AACrB,SAAS,8CAAQ;;AAEjB;AACA,oBAAoB,8CAAQ;AAC5B,WAAW,8CAAQ;AACnB,cAAc,8CAAQ;AACtB,UAAU,8CAAQ;AAClB,WAAW,8CAAQ;;AAEnB;AACA,gBAAgB,8CAAQ;AACxB,mBAAmB,8CAAQ;AAC3B,4BAA4B,8CAAQ;AACpC,gBAAgB,8CAAQ;AACxB,GAAG;AACH,SAAS,8CAAQ;AACjB,SAAS,kDAAQ;AACjB,kBAAkB,8CAAQ;AAC1B,cAAc,+CAAS;AACvB,mBAAmB,8CAAQ;AAC3B,GAAG;AACH,CAAC;;AAEM,4BAA4B,kDAAQ;AAC3C,OAAO,8CAAQ;AACf,WAAW,8CAAQ;AACnB,SAAS,kDAAQ;AACjB,iBAAiB,oDAAU,CAAC,+CAAS;AACrC,kBAAkB,oDAAU,CAAC,8CAAQ;AACrC,GAAG;AACH,QAAQ,kDAAQ;AAChB,mBAAmB,oDAAU,CAAC,8CAAQ;AACtC;AACA,GAAG;AACH,CAAC;;AAEM,wBAAwB,+CAAK;AACpC,EAAE,kDAAQ;AACV,eAAe,8CAAQ;AACvB,cAAc,8CAAQ;AACtB,GAAG;AACH;;AAEA;AACA;AACA;AACO,wBAAwB,kDAAQ;AACvC,cAAc,kDAAQ;AACtB,QAAQ,8CAAQ;AAChB,UAAU,+DAAY;AACtB,UAAU,8CAAQ;AAClB,GAAG;AACH,CAAC;;AAEM,yBAAyB,kDAAQ;AACxC,QAAQ,oDAAU,CAAC,8CAAQ;AAC3B,OAAO,oDAAU,CAAC,8CAAQ;AAC1B,CAAC;;AAEM,yBAAyB,kDAAQ;AACxC,cAAc,kDAAQ,CAAC,8CAAQ,EAAE,4CAAM;AACvC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;ACjSM;AACP;AACA;AACA;AACA,UAAU,8CAA8C;;AAExD;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,UAAU,eAAe;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kCAAkC;AAChD;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7FA,oDAAoD,mBAAmB,cAAc,OAAO,0BAA0B,+BAA+B,+BAA+B,oBAAoB,WAAW,yBAAyB,mBAAmB,uBAAuB,QAAQ,2EAA2E,oBAAoB,kDAAkD,uBAAuB,qBAAqB,mDAAmD,6DAA6D,+BAA+B,eAAe;;AAE5jB;AACT;;;;;;AAMQ;AACT;AACQ;AACW;AACtB;;AAML;AACqB;AACJ;AAatB;;;;AAItC;AACA;AACA;AACA;;AAEA,0BAA0B,mEAAY,CAAC,8EAAmB;AAC1D,0BAA0B,mEAAY,CAAC,8EAAmB;AAC1D,sBAAsB,mEAAY,CAAC,0EAAe;AAClD,8BAA8B,mEAAY,CAAC,kFAAuB;AAClE,wBAAwB,mEAAY,CAAC,4EAAiB;AACtD,uBAAuB,mEAAY,CAAC,2EAAgB;AACpD,uBAAuB,mEAAY,CAAC,2EAAgB;;AAEpD;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,kBAAkB;AAC5B,kBAAkB,sFAAuB;;AAEzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,wFAAyB;AAC5C;AACA,iBAAiB,wBAAwB,GAAG,SAAS;AACrD;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,kBAAkB,sFAAuB;;AAEzC;AACA;AACA,GAAG;;AAEH;AACA;AACA,eAAe;AACf,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,eAAe;AACf,GAAG;AACH;;AAEA;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,kBAAkB,sFAAuB;;AAEzC;AACA;;AAEA;;AAEA;AACA;AACA,eAAe;AACf,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,QAAQ,sDAAkB,OAAO,UAAU;AAC3C,OAAO;AACP;AACA;;AAEA;AACA;AACA,eAAe;AACf,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;AACA;AACA,YAAY,cAAc;;AAE1B;AACA;AACA,cAAc,cAAc,QAAQ,qEAAc,CAAC,0DAAU;AAC7D;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,WAAW;AACrB,kBAAkB,sFAAuB;AACzC,UAAU,WAAW;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC,6BAA6B;AAChE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,kCAAkC,6BAA6B;AAC/D;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,eAAe;AACf,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2FAA4B;AACnD;AACA,2GAA2G;;AAE3G;AACA,0BAA0B,kDAAS;;AAEnC;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC,uCAAuC;AACvC,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8BAA8B;AAC1C;AACA,qBAAqB,wFAAyB;AAC9C,qCAAqC;AACrC,4BAA4B;AAC5B,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;AACA;AACA,IAAI,wDAAe;AACnB;;AAEA;AACA,wBAAwB,wDAAe;AACvC,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;;AAEA;AACA;AACA,eAAe;AACf,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,UAAU,kBAAkB;AAC5B,kBAAkB,sFAAuB;;AAEzC;AACA;AACA,gBAAgB,kDAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,4BAA4B;AACtC,kBAAkB,sFAAuB;;AAEzC;AACA;AACA;AACA,wDAAwD,KAAK;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,UAAU,qBAAqB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,0DAAW;;AAE1B;AACA;AACA;AACA,eAAe;AACf,GAAG;AACH;AACA,qBAAqB,0EAAiB;AACtC;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,yCAAyC;AACnD,UAAU,wCAAwC;AAClD,UAAU,6CAA6C;AACvD,kBAAkB,sFAAuB;;AAEzC;;AAEA;AACA;AACA,IAAI,gFAAe;AACnB;AACA,MAAM,6EAAqB;AAC3B,UAAU,0DAA0D;AACpE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,2EAAY;AACpB,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,oCAAoC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU,qBAAqB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,GAAG;AACH;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACphBA,yCAAyC,mBAAmB,cAAc,OAAO;;;AAS5D;AACQ;;;;;;;;;;AAU+B;AACK;AACjB;AACc;AACpB;AAC2B;AACrB;AAIP;AAIE;AACqB;AAIzB;AACwB;AACe;AAIzC;AACc;;;;;;;;;;;;;;;AAenD;AACA,sBAAsB,mEAAY,CAAC,0EAAe;;AAE3C,oBAAoB,2DAAa;AACxC;AACA;AACA,YAAY,+BAA+B;AAC3C,YAAY,kCAAkC;AAC9C;;AAEA;AACA;AACA,iBAAiB,0DAAU;AAC3B,YAAY,6EAAgB;;AAE5B;AACA,cAAc,QAAQ;AACtB,iCAAiC,4FAA4B;AAC7D;AACA;AACA;AACA,0CAA0C,sGAAsC;AAChF;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,+EAAgB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,mBAAmB;AACnB,OAAO;;AAEP;AACA;AACA;AACA,mBAAmB,2FAA2B;;AAE9C;AACA,aAAa,oDAAO;AACpB;AACA,aAAa,iCAAiC,GAAG,0BAA0B;AAC3E;AACA;AACA;;AAEA;AACA,sFAAsF;AACtF;AACA,sFAAsF;AACtF,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,cAAc,eAAe;AAC7B,0CAA0C,cAAc;AACxD;AACA;AACA;AACA,mBAAmB;AACnB,OAAO;AACP;AACA;AACA,mBAAmB;AACnB,OAAO;AACP;AACA;AACA;AACA;AACA,uBAAuB;AACvB,WAAW;AACX,SAAS;AACT;AACA,MAAM;AACN;AACA;AACA;AACA,mBAAmB;AACnB,OAAO;AACP;;AAEA;AACA,IAAI,wEAAY;;AAEhB;AACA,IAAI,oFAAmB;;AAEvB,WAAW,qDAAW;AACtB,GAAG;;AAEH;AACA;AACA,YAAY,4BAA4B;AACxC;AACA,YAAY,SAAS;AACrB,YAAY,yCAAyC;AACrD;AACA,wBAAwB,+EAAgB,CAAC,0DAAU;;AAEnD,8BAA8B,+EAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,qDAAW;AACtB,GAAG;;AAEH;AACA,iBAAiB,yDAAW;AAC5B;AACA;;AAEA;AACA;AACA,kBAAkB,2CAA2C;AAC7D;AACA,kBAAkB,oBAAoB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA,yBAAyB;AACzB,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,kBAAkB,8BAA8B;AAChD;AACA,kBAAkB,SAAS;;AAE3B;AACA,mBAAmB,UAAU;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,iBAAiB;AACjB;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,aAAa,yDAAW;AACxB;AACA;AACA,gBAAgB,WAAW;AAC3B,cAAc,8EAAiB,CAAC,0DAAU;AAC1C;;AAEA;AACA,mBAAmB,wEAAgB;;AAEnC;AACA;AACA,kBAAkB,gCAAgC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB,YAAY;AACrC;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8EAAoB;;AAEhD;AACA,cAAc,gBAAgB;AAC9B;AACA,cAAc,+EAAmB;AACjC;AACA;AACA,cAAc,uDAAM;AACpB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,4BAA4B,8EAAoB;;AAEhD;AACA,cAAc,mCAAmC;AACjD;AACA,cAAc,oBAAoB;AAClC,cAAc,sBAAsB;AACpC;;AAEA;AACA;AACA,QAAQ,4CAAM;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,8BAA8B,wEAAa;AAC3C;AACA;AACA,gCAAgC,wBAAwB;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,2BAA2B,kEAAa;AACxC;AACA;AACA,0BAA0B,kEAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;AClZA,yCAAyC,mBAAmB,cAAc,OAAO,mBAAmB;;AAOjF;;;;;;;;;;;AAW+B;;AAEuB;;;AAGZ;;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuEO;;AAEP;;;;AAIA,GAAG,wDAAY;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,QAAQ;AAChE,GAAG;;AAEH,YAAY,0DAAc;AAC1B;AACA;AACA;AACA,aAAa,mFAAoB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAW;AACvB;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH,mBAAmB,0DAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uEAAuB;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA,WAAW,yDAAO;AAClB;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH,kBAAkB;AAClB;AACA;AACA,gBAAgB,iBAAiB;AACjC,sBAAsB;AACtB;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,cAAc,cAAc,kBAAkB;AAC9C;AACA;AACA,YAAY,aAAa;AACzB;AACA;AACA;AACA;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,sBAAsB;AACtB;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mCAAmC;AACnD;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,qBAAqB;AACrB;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA,cAAc,mBAAmB;AACjC;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH,SAAS,0DAAc;AACvB;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAK;AACrB,sBAAsB;AACtB;AACA;AACA;AACA;AACA,gBAAgB,MAAM;AACtB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH,mBAAmB;AACnB;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAEM;AACP;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEO;;;;AAIP,GAAG,yDAAa;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,uBAAuB;AAC3C,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;AChcA,yCAAyC,mBAAmB,cAAc,OAAO;;;;;;;AAOjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,oBAAoB;AACpB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,oBAAoB;AACpB,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AChEA;;AAE+C;;;;;;;AAOU;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA,QAAQ,0CAAQ;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,wBAAwB;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,uEAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,qDAAc;;AAEhB;AACA;;;;;;;;;;;;;;;;;;;;AC5DA;;AAE0C;;;AAGoB;;;;AAI9D;;AAEO;AACP;AACA,0BAA0B,0BAA0B;AACpD;;AAEO,iBAAiB,yDAAW;AACnC;AACA;AACA;AACA;AACA,oBAAoB;AACpB,QAAQ;;AAER;AACA;AACA;AACA;AACA,kCAAkC,oCAAoC;AACtE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD,OAAO;AAC7D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,+BAA+B,UAAU,UAAU,cAAc;AACjE;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,iBAAiB,wEAAgB;;AAEjC;AACA;AACA;AACA;AACA;AACA,uBAAuB,aAAa;AACpC;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI,4CAA4C;AAChD,IAAI;AACJ;;;;;;;;;;;;;;;;;AC1pBA;;AAEuC;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,YAAY,GAAG,kBAAkB,GAAG,gBAAgB;;AAExE;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;;AAEA,aAAa;AACb;;AAEA;AACA;;AAEO;;;AAGP,GAAG,sDAAe;AAClB;AACA,CAAC;;;;;;;;;;;;;;;;;;;;;AC9F4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAgD;AACtE;AACA;AACA,2BAA2B,2DAAO;AAClC;;AAEA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,gBAAgB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA,yCAAyC,kBAAkB,IAAI;AAC/D;AACA,IAAI;AACJ,IAAI,2DAAO;AACX;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HwD;;AAExD;AACA;AACA;;;;;;;;;;;;;;;;;AAiBA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,kEAAU;AAC/C;;AAEA;AACA;AACA,uCAAuC,kEAAU;AACjD;AACA;;AAEA;AACA;AACA;AACA,qCAAqC,kEAAU;AAC/C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc,oBAAoB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;ACzJA;;AAE2C;;;;;;;AAOS;;AAEpD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU;;AAEV;AACA;AACA,aAAa,0DAAiB;;AAE9B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACpDA,gCAAgC,+BAA+B,oBAAoB,WAAW,yBAAyB,mBAAmB,uBAAuB,QAAQ,2EAA2E,oBAAoB,kDAAkD,uBAAuB,qBAAqB,mDAAmD,6DAA6D,+BAA+B,eAAe;;AAEhe;;;;AAOG;;;AAGvC,2BAA2B,mDAAS,CAAC,wEAAiB;AACtD,gCAAgC,mDAAS,CAAC,6EAAsB;;;;AAIzD;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,oBAAoB;AACpB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;;AAE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;;AAExC;AACA,UAAU,8CAA8C;AACxD,mBAAmB,4DAAW;;AAE9B;AACA,gBAAgB,kEAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI,yEAAc;AAClB;AACA,yBAAyB,+DAAgB,UAAU;AACnD;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,oBAAoB,gEAAa,KAAK,iDAAY;AAClD,YAAY,8DAAW;AACvB;AACA;AACA,yBAAyB,6BAA6B;AACtD;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,eAAe;AACzB,qBAAqB,gDAAM;AAC3B,qBAAqB,gEAAc;;AAEnC;AACA,qBAAqB,iEAAW;AAChC;;AAEA;;AAEA;AACA;AACA;AACA,MAAM,4CAAK;AACX,KAAK;;AAEL;AACA,cAAc,sBAAsB;AACpC;AACA;AACA,iBAAiB,0DAAiB;AAClC,eAAe,4DAAiB;AAChC;;AAEA;AACA;AACA;AACA;;AAEA,wBAAwB,sDAAW,GAAG,sBAAsB;AAC5D;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,sBAAsB,2DAAY;;AAElC;AACA;AACA,6DAA6D,iBAAiB;;AAE9E;AACA;AACA;AACA;AACA,UAAU,qDAAgB,CAAC,iDAAY;AACvC;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,2DAAY;AAC9B;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,EAAE,qDAAc;;AAEhB;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9IwD;;;;;;;AAOxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;;AAEA,YAAY,yCAAyC;AACrD;AACA;;AAEO;AACP;AACA;AACA;AACA,kBAAkB,YAAY,EAAE,aAAa,IAAI,cAAc;AAC/D;;AAEO;AACP;AACA;AACA;AACA;AACA,YAAY,2BAA2B;;AAEvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEO;AACP,UAAU,uBAAuB;;AAEjC,SAAS,kEAAmB;AAC5B;AACA;AACA;AACA,sCAAsC,iCAAiC;AACvE,QAAQ;AACR,qBAAqB,SAAS,EAAE,kCAAkC;AAClE,gBAAgB,qCAAqC;AACrD;AACA,KAAK;AACL;AACA;AACA;AACA,iCAAiC,+BAA+B;AAChE,QAAQ;AACR,2BAA2B,eAAe,EAAE,kCAAkC;AAC9E,gBAAgB,sCAAsC;AACtD;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3FA;;AAEoC;;AAKG;AAKV;AACwB;;AAEd;AACM;AACmB;AACpB;;AAEG;AACF;;AAE7C,+BAA+B,mDAAS,CAAC,4EAAqB;AAC9D,8BAA8B,mDAAS,CAAC,2EAAoB;;;;;;;;AAQ5D;AACA;AACA;AACO;AACP;AACA;AACA;AACA,SAAS,iEAAY;AACrB;AACA;AACA;AACA,WAAW,2DAAU;AACrB;AACA;AACA,YAAY,qEAAoB;AAChC;AACA,OAAO;AACP,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAK;;AAEf;AACA;AACA,0CAA0C,iEAAY;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,+DAAO;AACf;AACA;AACA;AACA,QAAQ,6DAAe;AACvB;AACA;AACA;AACA,QAAQ,2DAAiB;AACzB;AACA;AACA,2BAA2B,qDAAW;;AAEtC;AACA;AACA,uBAAuB,+DAAO;AAC9B;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,oBAAoB,gEAAW;AAC/B,UAAU,mBAAmB;;AAE7B;AACA;AACA;AACA;;AAEA,oBAAoB;AACpB,QAAQ,2DAAU;;AAElB;AACA,QAAQ,0DAAS;AACjB;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACvKA;;AAE6C;AACoB;;AAER;;;;;;AAMD;;AAElB;AAC2B;AACd;AACO;;;;;;;;AAQnD,4BAA4B,kDAAQ;AAC3C,SAAS,8CAAQ;AACjB,YAAY,+DAAQ;AACpB,cAAc,yDAAY;AAC1B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B,UAAU,kCAAkC;;AAE5C;AACA,gBAAgB,qDAAU;AAC1B;AACA,qDAAqD,MAAM;AAC3D;;AAEA;AACA;AACA,gBAAgB,iEAAY;AAC5B;AACA;AACA,IAAI;;AAEJ;AACA,QAAQ,0DAAS;;AAEjB;AACA,oBAAoB,wDAAa;AACjC,gBAAgB,qDAAU;AAC1B;AACA,qDAAqD,MAAM;AAC3D;AACA,6BAA6B,oDAAS;AACtC,eAAe,qEAAW;AAC1B;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,6CAAM;AACV,IAAI,4CAAK;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY,WAAW;AACvB;AACA;AACA;AACA,IAAI,6CAAM;;AAEV;AACA;AACA;AACA;AACA,IAAI,6CAAM;AACV,IAAI,4CAAK;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI,6CAAM;AACV,IAAI,4CAAK;AACT;;AAEA,sBAAsB,oDAAS,OAAO,gBAAgB,SAAS;AAC/D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,WAAW,6CAAW;;AAEtB;AACA;AACA;AACA;AACA;AACA,SAAS,oDAAc;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzIA;;AAEwC;;;;;;;;;;AAUa;AACG;AACX;AACmB;AACS;AAC7B;AAKJ;;;;AAIxC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,sBAAsB,MAAM;AAC5B;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAgB,CAAC,kEAAU,CAAC,yDAAU;AAC9C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf,2CAA2C,qDAAgB;AAC3D,2CAA2C,qDAAgB;AAC3D;AACA;AACA;AACA,iCAAiC,iDAAY;AAC7C;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf;AACA,IAAI,+DAAO,KAAK,yDAAU;AAC1B;AACA;AACA;AACA;AACA,mBAAmB,iDAAY;AAC/B,uBAAuB,qDAAgB;AACvC;AACA;;AAEA;AACA;AACA,cAAc,uBAAuB;AACrC,aAAa,UAAU;AACvB,aAAa,UAAU;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA,iBAAiB;;AAEjB;AACA,YAAY,iBAAiB;AAC7B,sBAAsB,iDAAY;AAClC,6DAA6D,GAAG;AAChE;;AAEA;AACA;AACA;AACA;AACA;AACA,yCAAyC,GAAG,SAAS,MAAM,iBAAiB,SAAS;AACrF;AACA;AACA;AACA;AACA;AACA,2CAA2C,GAAG,IAAI,KAAK;AACvD;AACA;AACA;;AAEA;AACA,uBAAuB,kBAAkB;AACzC,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,UAAU,iBAAiB;;AAE3B;AACA;AACA;AACA,8BAA8B,8BAA8B;AAC5D,8BAA8B,8BAA8B;AAC5D;AACA,kCAAkC,iBAAiB;AACnD,kCAAkC,gCAAgC;AAClE;AACA,0CAA0C,8BAA8B;AACxE;AACA,sCAAsC,8BAA8B;AACpE,sCAAsC,8BAA8B;AACpE;AACA,2BAA2B,8BAA8B;AACzD;AACA,+BAA+B,8BAA8B;AAC7D;AACA,+BAA+B,8BAA8B;AAC7D,+BAA+B,8BAA8B;AAC7D;AACA,kCAAkC,8BAA8B;AAChE,kCAAkC,8BAA8B;AAChE;AACA,2BAA2B,iCAAiC;AAC5D;AACA,0BAA0B,gCAAgC;AAC1D,0BAA0B,gCAAgC;AAC1D;AACA,4BAA4B,gCAAgC;;AAE5D;AACA;AACA,gCAAgC,iBAAiB;AACjD,wBAAwB,iBAAiB;AACzC,oCAAoC,iBAAiB;AACrD,yBAAyB,8BAA8B;AACvD,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA,cAAc,4BAA4B;AAC1C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA,mDAAmD,SAAS,IAAI,SAAS;AACzE;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B;AACA,8BAA8B,IAAI;AAClC;;AAEA,kBAAkB,iDAAY;AAC9B,kBAAkB,iDAAY;AAC9B;AACA,IAAI,kEAAU,CAAC,yDAAU;AACzB,IAAI,kEAAU,CAAC,yDAAU;AACzB;;AAEA;AACA,8BAA8B,iDAAY;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,QAAQ,qDAAgB;AACxB;AACA;AACA,eAAe,qDAAgB;AAC/B,KAAK;AACL;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B,mBAAmB,mFAAoB;AACvC;AACA;AACA;;AAEA;AACA,sBAAsB,+EAAgB;AACtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,QAAQ,yDAAQ;AAChB,uBAAuB,sFAAqB;;AAE5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,UAAU,4BAA4B;AAC7D;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU,gBAAgB;AAC1B;AACA;AACA,qBAAqB,kCAAkC;AACvD,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,uCAAuC;;AAEjD;AACA;AACA;AACA;AACA,+DAA+D,SAAS;;AAExE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,YAAY,6EAAkB;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,yDAAQ;;AAEhB;AACA;AACA;AACA,yBAAyB,sFAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,UAAU,qBAAqB;;AAE/B;AACA;AACA;AACA;AACA,+DAA+D,SAAS;AACxE,mBAAmB,wFAAyB;AAC5C;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,+EAAgB;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1fA;;AAEoC;AACL;AACI;;AAMI;;;;;;;;;AAS2B;AACF;AACR;AACH;AACS;;AAEjB;;AAE7C,WAAW,oDAAW;AACtB;;AAEA,0BAA0B,mDAAS,CAAC,uEAAgB;AACpD,4BAA4B,mDAAS,CAAC,yEAAkB;;;;;;;;;;;;;;;;;;AAkBxD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;A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W;AAC/B;AACA;AACA;;AAEA;AACA;;AAEA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA,gBAAgB,WAAW;AAC3B;;AAEA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AC9HD;;AAEgC;;AAEkB;AACM;;AAEU;AAC3B;;;;AAIjB;;AAEtB;AACA;AACA;AACA;AACO;AACP,oBAAoB,4DAAW;AAC/B,UAAU,UAAU;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,UAAU,UAAU;AACpB;AACA;AACA,kBAAkB,qDAAU;AAC5B,MAAM,kEAAU;AAChB;AACA,gCAAgC;AAChC;AACA,uCAAuC,qDAAgB,UAAU;AACjE;;AAEA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,oBAAoB,4DAAW;AAC/B;AACA,6BAA6B,mEAAM,gBAAgB,mEAAU;AAC7D;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1DA;;AAYiB;AACkB;AACH;;AAQO;;;AAGQ;;AAEG;;AAElD;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,kDAAkD,8CAAS;AAC3D;AACA;AACA;AACA,MAAM;AACN,kCAAkC,KAAK,IAAI,cAAc;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,eAAe;AACzB,oBAAoB,gEAAW;;AAE/B,qDAAqD,8CAAS;AAC9D;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA,aAAa,gEAAW;AACxB,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,eAAe;AACzB,UAAU,2BAA2B;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,+DAAgB,UAAU;AACxC;AACA;;AAEA,aAAa,+CAA+C;AAC5D;;AAEO,qBAAqB,kDAAQ;AACpC;AACA,SAAS,8CAAQ;AACjB,WAAW,oDAAU,CAAC,4CAAM;AAC5B,aAAa,oDAAU,CAAC,4CAAM;AAC9B,WAAW,+DAAQ;AACnB,UAAU,oDAAU,CAAC,+DAAQ;AAC7B,YAAY,oDAAU,CAAC,8CAAQ;;AAE/B;AACA,UAAU,oDAAU,CAAC,+DAAQ;AAC7B,gBAAgB,oDAAU,CAAC,4CAAM;AACjC,cAAc,oDAAU,CAAC,8CAAQ;AACjC,mBAAmB,oDAAU,CAAC,iDAAO,CAAC,2EAAoB;AAC1D,aAAa,oDAAU,CAAC,8CAAQ;AAChC,eAAe,oDAAU,CAAC,+DAAQ;;AAElC;AACA,gBAAgB,oDAAU,CAAC,gEAAS;AACpC,aAAa,oDAAU,CAAC,gEAAS;;AAEjC;AACA,mBAAmB,oDAAU,CAAC,gEAAS;AACvC,oBAAoB,oDAAU,CAAC,iEAAU;AACzC,eAAe,oDAAU,CAAC,gEAAS;AACnC,mBAAmB,oDAAU,CAAC,iEAAU;;AAExC;AACA,WAAW,oDAAU;AACrB,IAAI,iDAAO;AACX;AACA;AACA,sBAAsB,kDAAQ;AAC9B,uCAAuC,2DAAY,UAAU,iDAAY;AACzE,OAAO;AACP,eAAe,qDAAgB;AAC/B;AACA;AACA,eAAe,oDAAU,CAAC,gEAAS;;AAEnC;AACA,gBAAgB,oDAAU,CAAC,+DAAQ;;AAEnC;AACA,YAAY,oDAAU,CAAC,iDAAO;AAC9B,YAAY,oDAAU,CAAC,iDAAO,CAAC,gEAAS;AACxC,eAAe,oDAAU,CAAC,gEAAS;AACnC,cAAc,oDAAU,CAAC,gEAAS;AAClC,cAAc,oDAAU,CAAC,gEAAS;AAClC,CAAC;AACD,sBAAsB,mDAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClM/B,yCAAyC,mBAAmB,cAAc,OAAO,mBAAmB;AACpG;AACA;AACA;;AAEoC;AACJ;;AAKO;;;;;AASV;AAC8C;AACnB;AACA;AACX;AACD;;AAO1B;AAC2B;AACM;AACP;;AAEO;;AAEnD,+BAA+B,mDAAS,CAAC,4EAAqB;;AAE9D;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU,+BAA+B;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,+DAAO;AACzB;;AAEA;AACA;AACA,uBAAuB,+DAAO;AAC9B;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,4BAA4B;;AAExC;AACA;AACA;AACA;AACA,qBAAqB,+DAAO;;AAE5B;AACA;AACA,MAAM,kEAAU;AAChB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA,eAAe,UAAU;AACzB;AACA,MAAM,kEAAU;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,+DAAO;AAC7B;AACA;AACA;AACA,yBAAyB,+DAAO;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,mEAAW;AAC3B;;AAEA;AACA;;AAEA;;AAEA;AACA,UAAU,0BAA0B;AACpC;AACA,oBAAoB,+DAAO;AAC3B,oBAAoB,kEAAU,UAAU,yDAAU;AAClD;AACA,gBAAgB,mEAAW;AAC3B,eAAe,qDAAgB;AAC/B;AACA,oBAAoB,qDAAW;AAC/B;;AAEA;AACA;AACA,oBAAoB,+DAAO;AAC3B,iBAAiB,yDAAe;AAChC;AACA,eAAe,qDAAgB;AAC/B,eAAe,qDAAgB;AAC/B;AACA,oBAAoB,qDAAW;AAC/B;;AAEA;AACA,kDAAkD,mEAAW;AAC7D,mBAAmB,uDAAa;AAChC,IAAI,uDAAa;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAAO;AAC5B;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2BAA2B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B,UAAU,oBAAoB;;AAE9B;AACA,SAAS,qDAAW;AACpB;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,yEAAc;AACjC,UAAU,4DAAU;AACpB;AACA,uBAAuB,gEAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iDAAY;AACtC;AACA;AACA;AACA,8BAA8B,iDAAY;AAC1C;AACA;AACA,QAAQ,4DAAS,8BAA8B;AAC/C;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,2DAAS;;AAEjB;AACA;AACA,YAAY,mBAAmB,EAAE,kEAAY;AAC7C,YAAY,KAAK;AACjB;AACA,yBAAyB,+DAAO;AAChC;AACA;AACA,WAAW,qDAAW;AACtB,qCAAqC,yBAAyB;AAC9D;AACA,iBAAiB,yEAAc;AAC/B,YAAY,4DAAU;AACtB;AACA,UAAU,2DAAS;AACnB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,6CAA6C;AACvD;AACA,IAAI,kEAAU;AACd;AACA;;AAEA,UAAU,YAAY,EAAE,kEAAY;AACpC;AACA;AACA,QAAQ,4DAAU;AAClB;AACA;AACA,aAAa,kEAAU;AACvB;AACA;AACA;AACA,gBAAgB,sDAAO;AACvB,gBAAgB,uDAAa,CAAC,sDAAO;AACrC,KAAK;AACL,4BAA4B,oBAAoB;AAChD;;AAEA;AACA;AACA,aAAa,kEAAU;AACvB;AACA;AACA;AACA,gBAAgB,sDAAO;AACvB,gBAAgB,sDAAO;AACvB,KAAK;AACL,4BAA4B,oBAAoB;AAChD;AACA,QAAQ,2DAAS;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,mBAAmB,EAAE,kEAAY;;AAE3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,yBAAyB;AACnC,8BAA8B;;AAE9B,UAAU,2CAA2C;AACrD;AACA;AACA;AACA;AACA,WAAW,qDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qDAAW;AACtB;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9jBA;;AAEoC;AACJ;;AAKO;;AAES;AACS;;AAEZ;AACoB;;;;AAIjE,4BAA4B,mDAAS,CAAC,yEAAkB;;AAExD;AACA;AACA;AACO;AACP,mCAAmC,0DAAI;AACvC;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,cAAc;AACxB;AACA;AACA,WAAW,0DAAI,CAAC,iDAAY,QAAQ,aAAa;AACjD;AACA,6BAA6B,0DAAI,CAAC,iDAAY,WAAW,aAAa;AACtE,mCAAmC,0DAAI;AACvC;;AAEO;AACP;AACA;AACA;AACA;AACA,UAAU,YAAY;AACtB,UAAU,kCAAkC;;AAE5C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,QAAQ,yDAAQ;AAChB;;AAEO;AACP;AACA;AACA;AACA,UAAU,YAAY;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,QAAQ,yDAAQ;AAChB;;AAEO;AACP;AACA;AACA;AACA,UAAU,YAAY;AACtB,UAAU,qBAAqB;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,QAAQ,yDAAQ;AAChB;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,kBAAkB,iEAAY;AAC9B;AACA;AACA,SAAS,2DAAU;AACnB,YAAY,eAAe,EAAE,4EAAiB;AAC9C;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,QAAQ;AAClB,UAAU,uBAAuB;;AAEjC,UAAU,mBAAmB,EAAE,iEAAY;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0DAAI;AACb;AACA;AACA;AACA;AACA;AACA,QAAQ,4DAAW;AACnB;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5KA;;AAEoC;;AAEoC;;AAEV;;AAEc;AACA;AACF;AAC9B;;;AAG5C,iCAAiC,mDAAS,CAAC,8EAAuB;AAClE,yBAAyB,mEAAU;;AAEnC;AACA,SAAS,gEAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,mBAAmB;AAC7B,oBAAoB,6DAAQ;;AAE5B,UAAU,+BAA+B;AACzC;AACA;AACA;AACA;AACA,4BAA4B,mEAAM;AAClC,mBAAmB,+DAAO;AAC1B,oBAAoB,wDAAa;AACjC;AACA,EAAE,2DAAS,8BAA8B;;AAEzC;AACA;AACA,UAAU,MAAM;AAChB,EAAE,qDAAS;;AAEX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAQ;;AAE5B;AACA;AACA;AACA,IAAI,iEAAY;AAChB,IAAI,mEAAM;AACV;AACA;AACA;AACA;AACA;AACA,SAAS,sDAAW;AACpB,YAAY,+BAA+B;AAC3C;AACA;AACA;AACA,8BAA8B,mEAAM;AACpC,WAAW,+DAAO;AAClB,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,UAAU,sBAAsB;;AAEhC;AACA,QAAQ,mDAAQ;AAChB;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,yBAAyB;AACnC;;AAEA;AACA;AACA,gCAAgC,mEAAM;;AAEtC;AACA,kBAAkB,yBAAyB;AAC3C;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA,UAAU,YAAY;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mDAAQ;AAChB;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAK;;AAEf;AACA,qBAAqB,qEAAQ;AAC7B,WAAW,mEAAM;AACjB,0BAA0B,+DAAO;AACjC,eAAe;AACf,KAAK;AACL,GAAG;;AAEH;AACA,sBAAsB,mEAAM;AAC5B,4BAA4B,+DAAO;AACnC,aAAa;AACb,GAAG;;AAEH;AACA;AACA,QAAQ,8BAA8B;AACtC,QAAQ;AACR;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrNA;;AAEoC;;AAEgC;;;AAGN;AACN;AACX;;AAEkB;AAClB;AACe;;;AAGtB;;AAEtC,6BAA6B,mDAAS,CAAC,0EAAmB;;AAE1D;AACA,eAAe,yDAAU,CAAC,gEAAW;AACrC,SAAS,kEAAU;AACnB;;AAEA;AACA,SAAS,kEAAU,CAAC,yDAAU;AAC9B;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,gBAAgB,qDAAU;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAQ;AAC5B;AACA;AACA;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;AACA;AACA;AACA,SAAS,sDAAW;AACpB;AACA;AACA;AACA,WAAW,+DAAO;AAClB,GAAG;AACH;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,sBAAsB;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oDAAS;AACnB;AACA;;AAEA;AACA,QAAQ,oDAAS;AACjB;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,kBAAkB;AAC5B;;AAEA;AACA,oBAAoB,6DAAQ;AAC5B;AACA;AACA;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;AACA;AACA,SAAS,oDAAW;AACpB;AACA,SAAS,2DAAU;AACnB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,UAAU,YAAY;;AAEtB;AACA,QAAQ,oDAAS;AACjB;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf,sBAAsB,+DAAO,KAAK,yDAAU;;AAE5C;AACA,YAAY,6CAA6C;AACzD,oBAAoB,+DAAO;AAC3B,uBAAuB,+DAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/PA;;AAEoC;;AAMG;;;;;AAKoC;AACnB;AACX;;AAEK;AACL;AACe;;;AAG5D,kCAAkC,mDAAS,CAAC,+EAAwB;;AAEpE;AACA,eAAe,yDAAU,CAAC,gEAAW;AACrC,SAAS,kEAAU;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,yDAAU;AAC3B,WAAW,kEAAU;AACrB,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAQ;;AAE5B;AACA;AACA;AACA;AACA;AACA,SAAS,sDAAW;AACpB;AACA;AACA;AACA,WAAW,+DAAO;AAClB,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,2DAAU;AACnB,YAAY,eAAe,EAAE,iFAAsB;AACnD;AACA;AACA;;AAEA;AACA,sBAAsB,mEAAW;AACjC,GAAG;AACH;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,sBAAsB;;AAEhC;AACA,QAAQ,mDAAQ;AAChB;;AAEO;AACP;AACA;AACA;AACA,UAAU,YAAY;;AAEtB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,QAAQ,mDAAQ;AAChB;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,kDAAkD;AAC5D,uBAAuB,+DAAO;AAC9B;AACA,IAAI,yDAAU;AACd;AACA;AACA,uBAAuB,+DAAO;AAC9B,0BAA0B,+DAAO;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEO;AACP;AACA;AACA,SAAS,mFAAwB;AACjC,UAAU,2DAAU,gCAAgC;AACpD;AACA;;;;;;;;;;;;;;;;;;;;;;AC/KA;;AAEoC;;AAKG;;;AAGqB;AACf;AACM;AACP;;;AAG5C,iCAAiC,mDAAS,CAAC,8EAAuB;;AAElE;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,YAAY,EAAE,iEAAY;AACpC,sBAAsB,2DAAU;AAChC,OAAO,uDAAY;AACnB;AACA,GAAG;AACH,uBAAuB,4DAAiB;AACxC;AACA;AACA,IAAI,yEAAc;AAClB;AACA,SAAS,0DAAS;AAClB;;;;;;;;;;;;;;;;;;;;ACrCA;;AAEyC;;;;;;;;;;;;;AAaF;;;;;;;;;;AAUvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,eAAe;;AAEzB;AACA;;AAEA;AACA;AACA,kBAAkB,oDAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA,2BAA2B,wDAAe;AAC1C;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,yDAAyD,cAAc;AACvE;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA,eAAe,0CAA0C;AACzD;;AAEA;AACA,eAAe,mDAAmD;AAClE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/FA;AACA,UAAU;AACV;AACA,cAAc;AACd,UAAU;AACV,UAAU;AACV;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC,gBAAgB,eAAe;AAC/B,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,8BAA8B;AAC9B;AACA,eAAe;AACf;AACA;AACA,eAAe;AACf;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,WAAW;AAClE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA,UAAU,kBAAkB;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA,YAAY,eAAe;AAC3B;;AAEA,YAAY,uBAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzF4C;;;AAGS;;AAED;AACG;AACA;;;AAGN;;AAEjD;;;;;;;;;;;;;;;;;;;;;;;AAuBA;AACA;AACA;AACA;AACO;;AAEA,kBAAkB,2DAAa;AACtC,UAAU;AACV,SAAS;AACT,UAAU;AACV,UAAU;AACV,QAAQ;AACR,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;ACnDD;;AAEqD;;;AAGQ;;AAEJ;AACQ;AAI1B;AACS;AACM;AAIjB;;;;;;;;;;;;;;;;;;;;;AAqB9B;AACP,aAAa;AACb;AACA;;AAEO,gBAAgB,wDAAY;AACnC;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA,mCAAmC,WAAW;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH,YAAY,sDAAU,CAAC,uEAAc;;AAErC;AACA;AACA,GAAG;;AAEH;AACA,mBAAmB,kBAAkB;AACrC,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH,wBAAwB,2EAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH,UAAU;AACV,eAAe;AACf,OAAO;AACP,SAAS;AACT,gBAAgB;AAChB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AC/GD;;AAEiD;AACL;AACW;AAC5B;;;;;;;;AAQuB;AACE;AACO;AAChB;AACoB;;AAE/D;;AAEA;AACA;AACA,oDAAoD,cAAc;AAClE,MAAM,0CAAO;;AAEb;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,wBAAwB,GAAG,gEAAkB;AAC7C;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,kDAAW,CAAC,qDAAO;;AAEnC;AACA,eAAe,uDAAU;AACzB;AACA;AACA,GAAG;AACH,cAAc,oDAAO;;AAErB;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,kEAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,uBAAuB,yEAAY;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,gEAAc,GAAG,sBAAsB;;AAElE;AACA,mBAAmB;AACnB,qBAAqB,yDAAW;AAChC;AACA,IAAI,yDAAW;AACf,MAAM,qDAAS;AACf;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,0CAAI;AAChB;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP,mEAAmE;AACnE;AACA;;;;;;;;;;;;;;;;;;;;ACzIA;;AAOqB;AACW;;;AAGa;;;;;;;;;;;;AAY7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEO,eAAe,2DAAa;AACnC;AACA,YAAY,UAAU;AACtB;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,yDAAU;AAChC,sBAAsB,iDAAY;AAClC;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,SAAS,aAAa,QAAQ,EAAE,QAAQ,EAAE,QAAQ,WAAW,QAAQ;AAC3F;AACA;AACA,OAAO;AACP;;AAEA;AACA,WAAW,qDAAW;AACtB,GAAG;;AAEH;AACA,YAAY,UAAU;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ,IAAI,QAAQ,IAAI,OAAO;AAC9D;AACA;AACA,iCAAiC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,KAAK;AAC3E,iBAAiB;AACjB,OAAO;AACP;;AAEA;AACA;AACA,WAAW,qDAAW;AACtB;AACA,CAAC;;;;;;;;;;;;;;;;;;;;;;AC9K4C;;;AAG7C;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,uCAAuC,yDAAU;;AAEjD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AChEqC;;AAEqB;;AAEiB;AAC9B;;AAEtC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,sBAAsB,oEAAS;AAC/B,qBAAqB,+DAAO;AAC5B,KAAK;;AAEL;AACA;AACA;AACA,sBAAsB,oEAAS;AAC/B,qBAAqB,mEAAW;AAChC,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,uBAAuB,+DAAO;AAC9B;AACA,KAAK;;AAEL;AACA,gCAAgC,yDAAU;AAC1C;AACA;AACA,EAAE,qDAAc;AAChB;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACpDA;;AAEwD;;AAExB;;;AAGoB;AACL;AACM;;;;;;AAMrD;;;;;;;AAOA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,sBAAsB,wDAAe;AACrC;AACA,eAAe,+DAAgB,CAAC,8DAAM,CAAC,8DAAM;AAC7C;AACA,yBAAyB,wDAAe;AACxC,sBAAsB,wDAAe;AACrC,kBAAkB,mEAAc;AAChC;AACA;AACA,IAAI,sDAAa;AACjB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,qBAAqB;AACrB;AACA;AACA,qBAAqB,kCAAkC;AACvD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,uCAAuC;;AAEjD;;;AAGA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH,yBAAyB,qDAAgB;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oEAAoE,SAAS;AAC7E,GAAG;;AAEH;AACA,UAAU,YAAY,SAAS;;AAE/B;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpKA;;AAEyC;AACT;AACK;;;AAGU;;AAEoB;;;AAG5D;AACP;AACA;AACA;AACA,UAAU,wBAAwB;;AAElC,kBAAkB,iDAAY;AAC9B,kBAAkB,iDAAY;;AAE9B,gBAAgB,uDAAa;AAC7B,uBAAuB,wDAAe;AACtC;AACA,eAAe,+DAAgB,CAAC,iDAAY;AAC5C;AACA,EAAE,qDAAc;;AAEhB,uBAAuB,wDAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,cAAc,UAAU;AACxB,cAAc,WAAW;AACzB;AACA,0BAA0B,SAAS,iBAAiB,iBAAiB,IAAI;AACzE;AACA,UAAU;AACV;AACA;AACA,KAAK;AACL,IAAI;AACJ;;AAEO;AACP;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,gBAAgB;;AAE1B,SAAS,kDAAQ,sBAAsB,WAAW;AAClD,OAAO,iBAAiB;AACxB;AACA;AACA,mBAAmB;AACnB,OAAO;AACP;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACpEwD;AAIzB;;;;;;;;;;;AAWxB;AACP;AACA;AACA;AACA,UAAU,iBAAiB;;AAE3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,8EAAuB;AACpC,KAAK;;AAEL;AACA,aAAa,mFAA4B;AACzC,KAAK;;AAEL;AACA,YAAY,sEAAiB;AAC7B;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3CuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BvC;AACA;AACA;AACA;;;AAGA,GAAG,sDAAe;AAClB;AACA;AACA,cAAc,UAAU;AACxB;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA,cAAc,kCAAkC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACO;AACP,YAAY;AACZ;AACA;AACA;AACA;AACA,cAAc,mBAAmB;AACjC,oBAAoB;AACpB,qDAAqD,qBAAqB;AAC1E;AACA;;AAEA;AACA,cAAc,KAAK;AACnB;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrFwD;AACH;;AAEA;;AAE9C;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,SAAS,mEAAc;AACvB;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS,+DAAgB,CAAC,kEAAU,CAAC,yDAAU;AAC/C;;;;;;;;;;;;;;;;;;;;;AClDA;;AAEoC;AACC;;AAaR;AACuB;;;AAGpD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,UAAU,6BAA6B,oBAAoB;AAC3D,UAAU,MAAM;;AAEhB;AACA,UAAU,6BAA6B;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,MAAM;AACN;;AAEA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,wBAAwB,UAAU;AAClC;AACA,WAAW;AACX;AACA,wBAAwB,UAAU,mBAAmB,cAAc;AACnE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS,8DAAY;AACrB;AACA;AACA;AACA;AACA,WAAW,iBAAiB,yBAAyB,eAAe,mBAAmB,mBAAmB;AAC1G;;AAEA;AACA;AACA;AACA;AACA,aAAa,oDAAc;AAC3B,KAAK;AACL;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,iCAAiC;AAC7C,YAAY,iCAAiC;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,2EAA0B;AAC7C,mBAAmB,2EAA0B;AAC7C;AACA,aAAa,+CAAE;AACf;AACA,mBAAmB,2EAA0B;AAC7C,mBAAmB,2EAA0B;AAC7C;AACA,aAAa,+CAAE;AACf;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,8EAA6B;AACnC,MAAM,yEAAwB;AAC9B,MAAM,2EAA0B;AAChC,MAAM,2EAA0B;AAChC,MAAM,2EAA0B;AAChC,MAAM,yEAAwB;AAC9B;AACA;;;;;;;;;;;;;;;;ACvKA;;;;;;;;;;;;AAYO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;AAcA;AACA,sBAAsB,YAAY;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpFA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB,UAAU;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9EA,yCAAyC,mBAAmB,cAAc,OAAO;;;AAGjD;;AAEgD;;;AAGhF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;AASA;AACA;AACA;AACO;AACP;;;;AAIA,uBAAuB;AACvB;AACA;AACA;AACA;AACA,QAAQ;AACR,8BAA8B,KAAK;AACnC;AACA;AACA,MAAM;AACN,cAAc,2BAA2B;AACzC,4BAA4B,iDAAiD;AAC7E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;;;;;;;;;AASA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,sEAAiB;;AAErC;AACA;AACA,uBAAuB,qDAAgB;AACvC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qDAAgB;AAC3C;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,2EAAsB;AAC1C;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;;;;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,mBAAmB,cAAc,KAAK,WAAW;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;;;;;;;AC3XA;;AAWiB;;AAQY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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CA;AACA;AACA;AACA;;AAEA;AACA,eAAe,kDAAM;AACrB,OAAO,sDAAU;AACjB;AACA;;AAEA;AACA;AACA,OAAO,sDAAU;AACjB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU,kDAAM;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAgB;AAC5B,iBAAiB,qDAAgB;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;;;;;;;;;;;;;;;;;;;;;;ACpIA;;AAEuC;AAC8B;;;;AAIrE;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM;AACf;;AAEO;AACP;AACA,yBAAyB,iEAAgB;AACzC,WAAW,kEAAiB;AAC5B,IAAI;AACJ;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA,iBAAiB,sDAAW;AAC5B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC/BA;;AAE4B;;AAErB;AACP,eAAe,mDAAW,CAAC,qDAAW;AACtC;AACA;;AAEO;AACP,eAAe,mDAAW,CAAC,uDAAa;AACxC;AACA;;AAEO;AACP,eAAe,mDAAW,CAAC,uDAAa;AACxC;AACA;;AAEO;AACP,eAAe,qDAAa;AAC5B;AACA;;;;;;;;;;;;;;;;;;;;ACtBA;;AAEsC;;AAE/B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACO;AACP;AACA;AACA;AACA;AACA,eAAe,oDAAQ;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,sCAAsC;AAChD;;AAEA;AACA;;AAEA;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC1EA;;AAEgC;;AAEzB;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;;AAErC,IAAI,gDAAQ;AACZ;AACA;AACA,KAAK;AACL,GAAG;AACH;;;;;;;;;;;;;;;;ACtBA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;;AAEA;AACA,kBAAkB,YAAY;AAC9B;AACA;;;;;;;;;;;;;;;;;;;ACbA;;AAE0B;;AAE1B,oBAAoB,6CAAK;AACzB;AACA;;AAEO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;AChDA;;AAEoC;;;;;AAKpC;AACA;AACA;AACA;;;;;;AAMO;AACP,kBAAkB,mDAAS;AAC3B;AACA;AACA;AACA;AACA,QAAQ;AACR,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACrCA;;;;;;;;;;;;;;;;;;;;AAoBA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,UAAU,sBAAsB;;AAEhC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB;AACnB,cAAc,eAAe;AAC7B;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrEA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,kCAAkC,GAAG;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;ACjGA;;AAEO;AACP;AACA;;;;;;;;;;;;;;;;;;;;ACFA;;AAEA;AACA;;AAEA;AACA;;;;;;;;AAQA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;ACjEA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;;;;;;;;;;ACjDa;;AAEb;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C;;AAE1C,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gCAAgC,kBAAkB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;AACA,0BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wBAAwB,aAAa;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA;AACA,cAAc;AACd,gCAAgC,cAAc;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2CAA2C,QAAQ;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,YAAY;AACpC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA,wBAAwB,YAAY;AACpC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA,wBAAwB,YAAY;AACpC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;;AAEA,4BAA4B,QAAQ;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,uBAAuB;AAC/C;AACA;;AAEA,4BAA4B,QAAQ;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;AACA;;AAEA,4BAA4B;;AAE5B;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,4BAA4B,sBAAsB;AAClD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wBAAwB,sBAAsB;AAC9C;;AAEA,4BAA4B,sBAAsB;AAClD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;;AAEnD;AACA;AACA;;AAEA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA6B,YAAY;AACzC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mBAAmB;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC;;AAEhC;AACA,2BAA2B;;AAE3B;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,QAAQ,IAA8B;AACtC;;AAEA;AACA;AACA;AACA,MAAM,KAAK,EAYN;;;AAGL,CAAC;;;;;;;;;;;;ACjyBD;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEb,wBAAwB,2EAA2E,kCAAkC,wBAAwB,OAAO,kCAAkC,mIAAmI;;AAEzU,kDAAkD,0CAA0C;;AAE5F,eAAe,mBAAO,CAAC,yEAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,mBAAO,CAAC,yGAAmC;;AAEhE,gBAAgB,mBAAO,CAAC,0CAAO;AAC/B;;AAEA,qBAAqB,uEAAsB;AAC3C;AACA;;AAEA,mDAAmD,kGAAmC;AACtF,uCAAuC,mBAAO,CAAC,oDAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,mBAAO,CAAC,6FAA6B;;AAExD;AACA;AACA,EAAE;AACF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB;AACpB;AACA;;AAEA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA,iBAAiB,OAAO,eAAe,OAAO;AAC9C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB;;AAEpB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,EAAE;AACF;;;AAGA;AACA,sEAAsE,aAAa;AACnF;AACA;;AAEA;AACA;;AAEA,gBAAgB;;AAEhB;;AAEA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;;AAGH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;;AAGH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,0DAA0D;;AAE1D;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA,sCAAsC;AACtC;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA,6FAA6F,eAAe;AAC5G;AACA;;AAEA;AACA;;AAEA;AACA,6FAA6F,eAAe;AAC5G;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA,6FAA6F,eAAe;AAC5G;AACA;;AAEA;AACA;;AAEA;AACA,6FAA6F,eAAe;AAC5G;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;;AAER;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;;AAEpB;;AAEA,sBAAsB,iBAAiB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA,yEAAyE,eAAe;AACxF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;;;;ACtnBA;AACA;AACa;;AAEb,iCAAiC,gBAAgB,sBAAsB,OAAO,uDAAuD,mCAAmC,0DAA0D,sFAAsF,iEAAiE,MAAM,iCAAiC,4CAA4C,KAAK;;AAEjd,4CAA4C,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;;AAEpM,kDAAkD,0CAA0C;;AAE5F,4CAA4C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD;;AAE/P,8DAA8D,sEAAsE,8DAA8D;;AAElM,kDAAkD,0EAA0E,eAAe;;AAE3I,wCAAwC,uBAAuB,yFAAyF;;AAExJ,2CAA2C,+DAA+D,6EAA6E,yEAAyE,eAAe,uDAAuD,GAAG;;AAEzU,mCAAmC,gEAAgE,sDAAsD,+DAA+D,mCAAmC,6EAA6E,qCAAqC,iDAAiD,8BAA8B,qBAAqB,0EAA0E,qDAAqD,eAAe,yEAAyE,GAAG,2CAA2C;;AAEttB,sCAAsC,wEAAwE,0CAA0C,8CAA8C,MAAM,uEAAuE,IAAI,eAAe,YAAY;;AAElT,2CAA2C,kCAAkC,kCAAkC,OAAO,wDAAwD,gBAAgB,uBAAuB,kDAAkD,kCAAkC,uDAAuD,sBAAsB;;AAEtX,iCAAiC;;AAEjC,iCAAiC,4EAA4E,iBAAiB,aAAa;;AAE3I,8BAA8B,gGAAgG,mDAAmD;;AAEjL,wBAAwB,2EAA2E,kCAAkC,wBAAwB,OAAO,kCAAkC,mIAAmI;;AAEzU,eAAe,mBAAO,CAAC,0CAAO;AAC9B;;AAEA,gBAAgB,mBAAO,CAAC,iEAAW;AACnC,iEAAiE;;;AAGjE;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA,uEAAuE;AACvE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,sBAAsB,OAAO,WAAW,OAAO,gBAAgB,OAAO;;AAEtE;AACA;AACA;AACA,UAAU;;;AAGV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,qEAAqE;AACrE,oCAAoC,aAAa,IAAI,aAAa;;AAElE;AACA;AACA,oDAAoD;AACpD;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc,cAAc;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,QAAQ;;;AAGR,mBAAmB;;AAEnB;AACA,sBAAsB;AACtB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,QAAQ;;;AAGR,mBAAmB;;AAEnB;AACA,sBAAsB;AACtB,MAAM;AACN;AACA,uCAAuC;AACvC;AACA;;AAEA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA,UAAU;;;AAGV,qBAAqB;AACrB;;AAEA;AACA;AACA,2BAA2B;AAC3B,QAAQ;AACR;AACA;AACA;AACA,oBAAoB;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN,UAAU,OAAO,WAAW,OAAO;AACnC;AACA;AACA,YAAY,OAAO,WAAW,OAAO,yBAAyB,OAAO;AACrE;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,oDAAoD;;AAEpD;AACA;AACA,UAAU;AACV;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,UAAU;;;AAGV;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;;;AAGN,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;;;;;;;;;;;ACpfA;AACA;;AAEA;;AAEA;;AAEA;AACa,CAAC;AACd;AACA;AACA;AACA;;AAEA,wBAAwB,2EAA2E,kCAAkC,wBAAwB,OAAO,kCAAkC,mIAAmI;;AAEzU,kDAAkD,0CAA0C;;AAE5F,kDAAkD,0EAA0E,eAAe;;AAE3I,wCAAwC,uBAAuB,yFAAyF;;AAExJ,8BAA8B,gGAAgG,mDAAmD;;AAEjL,2CAA2C,+DAA+D,6EAA6E,yEAAyE,eAAe,uDAAuD,GAAG;;AAEzU,iCAAiC,4EAA4E,iBAAiB,aAAa;;AAE3I,gBAAgB;;AAEhB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;;;AAGF;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,mBAAO,CAAC,wDAAW;AACxD,+DAA+D;;AAE/D;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;;;AAGJ;AACA;AACA,CAAC;AACD;AACA;AACA,iCAAiC,mBAAO,CAAC,0CAAO;AAChD;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA,CAAC;AACD;AACA,sEAAsE,aAAa;AACnF;AACA;;AAEA,qCAAqC,mBAAO,CAAC,wDAAW;AACxD;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;AACD,oBAAoB;;;;;;;;;;;AClMpB;AACA;AACa;;AAEb,kCAAkC;;AAElC,8BAA8B;;AAE9B,yCAAyC,eAAe,eAAe,gBAAgB,oBAAoB,MAAM,0CAA0C,+BAA+B,aAAa,qBAAqB,uCAAuC,cAAc,WAAW,YAAY,UAAU,MAAM,mDAAmD,UAAU,sBAAsB;;AAE3Y,gCAAgC;;AAEhC,wBAAwB,2EAA2E,kCAAkC,wBAAwB,OAAO,kCAAkC,mIAAmI;;AAEzU;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA,uCAAuC,mBAAO,CAAC,oDAAW;AAC1D;AACA;AACA;AACA,gDAAgD,mBAAO,CAAC,8CAAQ;;AAEhE;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,uEAAsB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,wCAAwC,SAAS;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA,IAAI;;;AAGJ;;AAEA,SAAS,kBAAkB;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kBAAkB,wBAAwB;AAC1C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,oBAAoB;AACtC,0BAA0B;AAC1B;AACA;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AYA;;;AACA,SAAStG,kBAAT,CAA6BwG,EAA7B,EAAiC;AAC/B,SAAO,OAAOjG,MAAP,KAAkB,WAAlB,GAAgCkG,sBAAhC,GAAyDD,EAAhE;AACD;;AAED,SAASC,sBAAT,GAAmC;AACjC,QAAM,IAAIlJ,KAAJ,CAAU,sBAAV,CAAN;AACD;;;;;;;;;;ACzjED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,qBAAqB;AACvC;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,mBAAmB;AACvC,yCAAyC,mBAAmB;AAC5D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,oBAAoB,0CAA0C;AAC9D;AACA,oCAAoC,QAAQ;;AAE5C;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,mBAAmB;AACvC;AACA;;AAEA,qCAAqC,kBAAkB;AACvD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrFY;;AAEZ,kBAAkB;AAClB,mBAAmB;AACnB,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA,mCAAmC,SAAS;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,SAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,UAAU;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrJA;AACA;AACA;AACA,SAAS,mBAAO,CAAC,6CAAO;;AAExB;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gBAAgB;;AAEhB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kEAAkE,aAAa;AAC/E;AACA;;AAEA;AACA;AACA;;AAEA;AACA,yDAAyD,gEAAgE;AACzH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;;AAE4E;AACxF;;;;;;;;;;;AC1bA;AACA;AACA;;AAEA,aAAa,sFAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChHA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN,eAAe,mDAAwB;AACvC;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA,yCAAyC,QAAQ;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,YAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA,0DAA0D,mBAAmB;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,sBAAsB;AAC7D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,SAAS;AACjC;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,4BAA4B;AAC9C;AACA;;AAEA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,MAAM;AACN,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;;AAEA,aAAa,eAAe;AAC5B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,gBAAgB;AACtC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;;AAEA,sBAAsB,OAAO;AAC7B;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,GAAG;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,WAAW;AAC/B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS;AAC7B;;AAEA,mCAAmC;AACnC,uCAAuC;AACvC;;AAEA;AACA,sBAAsB,OAAO;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;;AAEA;AACA,8BAA8B,cAAc;AAC5C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,QAAQ;AACxC;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,sBAAsB,sCAAsC;AAC5D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,QAAQ;AAChC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B,mCAAmC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gCAAgC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,kCAAkC,QAAQ;AAC1C;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;ACr3GhC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,iBAAiB,mBAAO,CAAC,qBAAQ;AACjC;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;;AChEa;;AAEb,mBAAmB,mBAAO,CAAC,4DAAe;;AAE1C,eAAe,mBAAO,CAAC,6CAAI;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACda;;AAEb,WAAW,mBAAO,CAAC,4DAAe;AAClC,mBAAmB,mBAAO,CAAC,4DAAe;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,SAAS,UAAU;AACvC,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,4CAA4C,kBAAkB;AAC9D,EAAE;AACF,CAAC,oBAAoB;AACrB;;;;;;;;;;;AC9CA,aAAa,sFAA6B;AAC1C,gBAAgB,0FAA2B;AAC3C,oBAAoB,gHAAuC;AAC3D,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AClGa;;AAEb,8CAA6C,EAAE,aAAa,EAAC;;AAE7D;AACA;AACA;AACA;AACA;;AAEA;AACA,wEAAwE,aAAa;AACrF;AACA;;AAEA;AACA,oBAAoB,mBAAmB;AACvC;AACA,MAAM;;;AAGN;AACA;;AAEA,qBAAqB,oBAAoB;AACzC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sBAAsB,iBAAiB;AACvC;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,IAAI;;;AAGJ;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,EAAE;;AAEF;;AAEA;AACA,uEAAuE,aAAa;AACpF;AACA;;AAEA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA,eAAe;AACf,iBAAiB;AACjB,eAAe;AACf,cAAc;AACd,gBAAgB;AAChB,cAAc;AACd,aAAa;AACb,eAAe;AACf,cAAc;AACd,cAAc;AACd,gBAAgB;AAChB,gBAAgB;AAChB,kBAAkB;AAClB,gBAAgB;AAChB,mBAAmB;AACnB,iBAAiB;AACjB,eAAe;AACf,iBAAiB;;;;;;;;;;;;;AC/PL;AACZ,eAAe,mBAAO,CAAC,6DAAU;AACjC,UAAU,mBAAO,CAAC,gDAAO;AACzB,gBAAgB,mBAAO,CAAC,oDAAW;AACnC,UAAU,mBAAO,CAAC,8CAAQ;;AAE1B,WAAW,mBAAO,CAAC,wDAAa;;AAEhC;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY,MAAM;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACnDY;AACZ;AACA,qBAAqB,MAAM;AAC3B;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU,MAAM;AAChB;;AAEA;AACA,yBAAyB,gBAAgB;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA,YAAY,MAAM;AAClB,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;;;;;;;;;;;AC7BY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,4DAAa;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD,UAAU;AACV;AACA,UAAU;AACV,8EAA8E;AAC9E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,qBAAqB;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,uCAAuC,0BAA0B;AACjE;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,+BAA+B,0BAA0B,eAAe;AACxE;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iDAAiD,aAAa;;AAE9D;;AAEA,CAAC,IAAI;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,kBAAe;AACf,aAAa,mCAAmC,OAAO;AACvD,eAAe;AACf,eAAe;AACf,gBAAgB;AAChB;;;;;;;;;;;ACziBA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC7hCD,YAAY,mBAAO,CAAC,wDAAa;AACjC,UAAU,mBAAO,CAAC,wCAAK;AACvB,WAAW,mBAAO,CAAC,qDAAQ;;AAE3B;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA,EAAE;AACF;AACA;;AAEA,YAAY;AACZ,eAAe;AACf,cAAc;AACd,aAAa;AACb,iBAAiB;;;;;;;;;;;;ACzCJ;;AAEb,WAAW,mBAAO,CAAC,wDAAa;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,+BAA+B;AAChE;AACA,uBAAuB;AACvB;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;;ACzDa;;AAEb,8CAA6C,EAAE,aAAa,EAAC;;AAE7D,cAAc,mBAAO,CAAC,oDAAS;;AAE/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;;AAE/B,aAAa;;AAEb,aAAa;;AAEb;AACA;AACA,2BAA2B;AAC3B;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,oBAAoB;AACtC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA,QAAQ;;;AAGR;;AAEA,8DAA8D,4BAA4B;AAC1F;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB;;AAEtB,wEAAwE;;AAExE;;AAEA,gEAAgE,4BAA4B;AAC5F;AACA;;AAEA;;AAEA,kEAAkE;AAClE;;AAEA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;;AAEtC,mEAAmE;;AAEnE;;AAEA,8DAA8D,4BAA4B;AAC1F;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB;;AAEtB,6DAA6D;;AAE7D;;AAEA,gEAAgE,4BAA4B;AAC5F;AACA;;AAEA;;AAEA,sDAAsD;AACtD;;AAEA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb,aAAa;AACb;;AAEA;AACA;AACA,2BAA2B;AAC3B;AACA,IAAI;;;AAGJ,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB,wBAAwB;AACxB,gBAAgB;AAChB,iBAAiB;AACjB,mBAAmB;AACnB,kBAAkB;AAClB,oBAAoB;AACpB,kBAAkB;AAClB,+BAA+B;AAC/B,8BAA8B;AAC9B,wBAAwB;AACxB,yBAAyB;AACzB,wBAAwB;AACxB,uBAAuB;AACvB,sBAAsB;AACtB,8BAA8B;AAC9B,6BAA6B;AAC7B,uBAAuB;AACvB,mBAAmB;AACnB,gBAAgB;AAChB,kBAAkB;AAClB,qBAAqB;AACrB,uBAAuB;AACvB;;;;;;;;;;;;AC/2Ba;;AAEb,8CAA6C,EAAE,aAAa,EAAC;;AAE7D,eAAe,mBAAO,CAAC,sDAAU;AACjC,iBAAiB,mBAAO,CAAC,wEAAa;AACtC,YAAY,mBAAO,CAAC,8CAAQ;AAC5B,aAAa,mBAAO,CAAC,mDAAS;AAC9B,cAAc,mBAAO,CAAC,oDAAS;;AAE/B,qCAAqC,4DAA4D;;AAEjG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb,aAAa;AACb;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,GAAG;;AAE3C;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;;AAEJ,mCAAmC,KAAK;AACxC;;AAEA;AACA;;AAEA;AACA,6CAA6C,QAAQ;AACrD;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;;AAGD;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA,CAAC;;;;;AAKD;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;;;;;;AAMA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU,qDAAqD;AAC/D,UAAU,iDAAiD;;AAE3D;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;;AAEA,SAAS,QAAQ,EAAE,SAAS,WAAW,iBAAiB,KAAK,YAAY;;AAEzE;;AAEA;AACA;AACA,wBAAwB,QAAQ,EAAE,SAAS,SAAS,gBAAgB,IAAI,aAAa;AACrF;;AAEA;;AAEA;AACA;AACA,wBAAwB,QAAQ,EAAE,SAAS,SAAS,gBAAgB,IAAI,sBAAsB;AAC9F;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,OAAO;AACxC;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AAUA,iCAAiC;AACjC;AACA,U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A;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,QAAQ;AACxB;;AAEA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,WAAW;AAC7B,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;;;;;;;;;;;AC5Xa;;AAEb,YAAY,mBAAO,CAAC,+DAAU;AAC9B,SAAS,mBAAO,CAAC,6CAAO;AACxB,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,kEAAQ;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AClba;;AAEb;;AAEA,aAAa,mBAAO,CAAC,kEAAQ;AAC7B,cAAc,mBAAO,CAAC,oEAAS;AAC/B,aAAa,mBAAO,CAAC,kEAAQ;AAC7B,gBAAgB,mBAAO,CAAC,wEAAW;;;;;;;;;;;;ACPtB;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,kEAAQ;;AAE3B,YAAY,mBAAO,CAAC,+DAAU;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB,wCAAwC;AACxC,gBAAgB;;AAEhB,sBAAsB,iBAAiB;AACvC;;AAEA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACjLa;;AAEb,YAAY,mBAAO,CAAC,+DAAU;AAC9B,SAAS,mBAAO,CAAC,6CAAO;AACxB,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,kEAAQ;;AAE3B;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,cAAc;AACpB,MAAM,cAAc;AACpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,mBAAmB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sBAAsB,WAAW;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACz6Ba;;AAEb;;AAEA,WAAW,mBAAO,CAAC,mDAAS;AAC5B,YAAY,mBAAO,CAAC,oEAAS;AAC7B,YAAY,mBAAO,CAAC,8DAAS;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,QAAQ,mBAAO,CAAC,8FAAyB;AACzC,EAAE;AACF;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC7MY;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,eAAe,mBAAO,CAAC,4DAAW;AAClC,YAAY,mBAAO,CAAC,+DAAU;AAC9B,aAAa,mBAAO,CAAC,iEAAW;AAChC,WAAW,mBAAO,CAAC,gDAAS;AAC5B;;AAEA,cAAc,mBAAO,CAAC,6DAAO;AAC7B,gBAAgB,mBAAO,CAAC,yEAAa;;AAErC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,0CAA0C;AACrE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClPa;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,YAAY,mBAAO,CAAC,+DAAU;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,aAAa;;AAEb,WAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACxHa;;AAEb,SAAS,mBAAO,CAAC,6CAAO;;AAExB,YAAY,mBAAO,CAAC,+DAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrKa;;AAEb,WAAW,mBAAO,CAAC,mDAAS;AAC5B,aAAa,mBAAO,CAAC,iEAAW;AAChC,YAAY,mBAAO,CAAC,+DAAU;AAC9B;AACA;AACA,cAAc,mBAAO,CAAC,gEAAO;AAC7B,gBAAgB,mBAAO,CAAC,4EAAa;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,UAAU,cAAc;AACxB,UAAU,sBAAsB;AAChC,YAAY,WAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gCAAgC;AAC9D;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,wBAAwB;AAClC,UAAU,4BAA4B;AACtC,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACrHa;;AAEb,YAAY,mBAAO,CAAC,+DAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,QAAQ;AAClB;AACA,UAAU,aAAa;AACvB,UAAU,OAAO;AACjB,UAAU,aAAa;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;;AAEA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AC9Fa;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,YAAY,mBAAO,CAAC,+DAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,OAAO;AACjB,UAAU,qBAAqB;AAC/B,UAAU,oBAAoB;AAC9B,UAAU,iBAAiB;AAC3B,UAAU,cAAc;AACxB,UAAU,cAAc;AACxB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;AC3wBa;;AAEb;AACA,SAAS,mBAAO,CAAC,6CAAO;AACxB,gBAAgB,mBAAO,CAAC,wEAAqB;AAC7C,eAAe,mBAAO,CAAC,wFAA2B;;AAElD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACrHA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;;AAEA;AACA,oDAAoD,iBAAiB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC7Ca;;AAEb,kDAAkD,0CAA0C;;AAE5F,cAAc,mBAAO,CAAC,qEAAiB;AACvC,WAAW,mBAAO,CAAC,+EAA6B;AAChD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yBAAyB;AACpC;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ;AACtB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;AACL;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;AACL;AACA;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;AACL;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;AACL;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;AACL;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;AACL;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;AACL;AACA;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;AACL;AACA;AACA;AACA;AACA,mBAAmB,MAAM;AACzB,KAAK;;AAEL;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB,cAAc;AACd;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,QAAQ;AACrB;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;;AAGA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,aAAa,SAAS;AACtB,cAAc;AACd;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,CAAC;;AAED;;;;;;;;;;;ACpUa;;AAEb,qGAAqG,qBAAqB,mBAAmB;;AAE7I,uBAAuB,mBAAO,CAAC,2CAAQ;AACvC,gBAAgB,mBAAO,CAAC,uDAAW;AACnC,aAAa,mBAAO,CAAC,qDAAQ;AAC7B,UAAU,mBAAO,CAAC,wCAAK;AACvB,SAAS,mBAAO,CAAC,6CAAO;AACxB,iBAAiB,mBAAO,CAAC,0DAAa;AACtC,aAAa,sFAA6B;AAC1C,uBAAuB,mBAAO,CAAC,0DAAY;;AAE3C;AACA;AACA,SAAS,IAAI;AACb;AACA,mBAAmB;;AAEnB;AACA;AACA,SAAS,IAAI;AACb;AACA,kBAAkB;;AAElB;AACA;AACA,SAAS,QAAQ;AACjB;AACA,wBAAwB;AACxB,mBAAmB;;AAEnB;AACA;AACA,SAAS,QAAQ;AACjB;AACA,sBAAsB;AACtB,iBAAiB;;AAEjB;AACA;AACA,SAAS,QAAQ;AACjB;AACA,6BAA6B;AAC7B,wBAAwB;;AAExB;AACA;AACA,SAAS,QAAQ;AACjB;AACA,2BAA2B;AAC3B,sBAAsB;;AAEtB;AACA;AACA,SAAS,QAAQ;AACjB;AACA,uBAAuB;AACvB,kBAAkB;;AAElB;AACA;AACA,SAAS,QAAQ;AACjB;AACA,qBAAqB;AACrB,gBAAgB;;AAEhB;AACA;AACA,SAAS;AACT;AACA,UAAU;;AAEV;AACA;AACA,SAAS;AACT;AACA,WAAW;;AAEX;AACA;AACA,SAAS;AACT;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA,qBAAqB,GAAG,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA,WAAW,qBAAqB;AAChC,YAAY;AACZ;AACA,aAAa,GAAG,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,gBAAgB;AAChB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA,mBAAmB;AACnB;AACA;;AAEA;AACA;AACA,WAAW,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AAW,QAAQ;AACnB,YAAY;AACZ;AACA,oBAAoB;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,YAAY;AACZ;;AAEA,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACA,gBAAgB;AAChB;AACA;AACA,IAAI;AACJ;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;;;;;;;;;;;;AC1sBa;;AAEb,oBAAoB,mBAAO,CAAC,oEAAiB;AAC7C,qBAAqB,mBAAO,CAAC,sEAAkB;;AAE/C;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;;AAEA,aAAa,MAAM;AACnB;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA,SAAS,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA,wBAAwB,MAAM;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA,sBAAsB;;AAEtB;AACA;AACA;;AAEA,SAAS,OAAO;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB,MAAM;;AAEtB;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,WAAW,GAAG,WAAW;AACtC;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB;;AAEnB,kBAAkB,mBAAmB;AACrC;AACA,gCAAgC;AAChC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA,oBAAoB,SAAS;AAC7B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;;AAEA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;;AAEA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,8DAA8D,YAAY;AAC1E;AACA,8DAA8D,YAAY;AAC1E;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,qCAAqC,YAAY;AACjD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;;;;;;;;;;AChfA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,oCAAoC,OAAO;AAC3C;AACA;AACA;;AAEA;;;;;;;;;;;ACbA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpBa;;AAEb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;;AAEA,+EAA+E,sCAAsC;;AAErH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACnDa;;AAEb,qBAAqB,mBAAO,CAAC,wEAAkB;;AAE/C;;;;;;;;;;;;ACJa;;AAEb;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,8CAA8C;AAChF,GAAG;AACH;;AAEA;AACA;AACA;AACA,UAAU;AACV,GAAG;AACH,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,IAAI;AACJ;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,EAAE;AACF;;AAEA,iBAAiB,mBAAO,CAAC,wDAAa;;AAEtC,uDAAuD,uBAAuB;;AAE9E;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAqD;AACrD,GAAG;AACH,gDAAgD;AAChD,GAAG;AACH,sDAAsD;AACtD,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,4DAAe;AAClC,aAAa,mBAAO,CAAC,4CAAK;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzUa;;AAEb;AACA,oBAAoB,mBAAO,CAAC,oDAAS;;AAErC;AACA,yCAAyC;AACzC,qCAAqC;AACrC,8CAA8C;AAC9C,0CAA0C;;AAE1C;AACA;;;;;;;;;;;;ACZa;;AAEb;AACA;AACA,2FAA2F;AAC3F,4CAA4C;;AAE5C;AACA;AACA;AACA,gCAAgC;;AAEhC,kEAAkE;AAClE,qEAAqE;;AAErE;AACA,iCAAiC;AACjC;AACA,uCAAuC;;AAEvC,2DAA2D;AAC3D,+DAA+D;;AAE/D;AACA;AACA,oBAAoB,gBAAgB;AACpC,2EAA2E;;AAE3E,yGAAyG;;AAEzG;AACA,6CAA6C;;AAE7C,8DAA8D;;AAE9D;AACA;AACA,uEAAuE;AACvE;;AAEA;AACA;;;;;;;;;;;;ACzCa;;AAEb,WAAW,mBAAO,CAAC,4DAAe;;AAElC;;;;;;;;;;;;;ACJY;AACZ,gBAAgB,0FAA2B;AAC3C,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA;;AAEA,oBAAoB,MAAM;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,2CAA2C,MAAM;AACjD;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA,OAAO,MAAM;AACb;AACA,OAAO,MAAM,4BAA4B,MAAM;;AAE/C;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,WAAW;AACtD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AClFA;;AAEA,aAAa,mBAAO,CAAC,8DAAc;AACnC,cAAc,mBAAO,CAAC,gEAAe;AACrC,WAAW,mBAAO,CAAC,0DAAY;AAC/B,cAAc,mBAAO,CAAC,gEAAe;AACrC,YAAY,mBAAO,CAAC,4DAAa;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACda;;AAEb,YAAY,mBAAO,CAAC,yDAAS;AAC7B,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;;AAEA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,oBAAoB;AACpC;AACA;;AAEA;AACA;;;;;;;;;;;;AC3Fa;;AAEb,YAAY,mBAAO,CAAC,yDAAS;AAC7B,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,oBAAoB;AAC/C;;AAEA,cAAc,gBAAgB;AAC9B;AACA;;AAEA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AC9Ca;;AAEb,YAAY,mBAAO,CAAC,yDAAS;AAC7B,aAAa,mBAAO,CAAC,2DAAU;;AAE/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjJa;;AAEb,6FAAiC;AACjC,mGAAqC;AACrC,mGAAqC;AACrC,mGAAqC;AACrC,mGAAqC;;;;;;;;;;;;ACNxB;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,4DAAW;AAChC,gBAAgB,mBAAO,CAAC,+DAAU;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;;AAEA,QAAQ,cAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzEa;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,yDAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5Ba;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,4DAAW;AAChC,gBAAgB,mBAAO,CAAC,+DAAU;AAClC,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxGa;;AAEb,YAAY,mBAAO,CAAC,0DAAU;;AAE9B,aAAa,mBAAO,CAAC,yDAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClCa;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,4DAAW;AAChC,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA,SAAS,cAAc;AACvB,gDAAgD;AAChD;AACA,4BAA4B;AAC5B;AACA,kDAAkD;AAClD;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC;AACrC,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzUa;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,YAAY;;AAEZ;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;;;;;;;;;;;AChDD;;AAEb,aAAa,mBAAO,CAAC,wEAAqB;AAC1C,eAAe,mBAAO,CAAC,6DAAU;;AAEjC,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA,IAAI;AACJ,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA,yBAAyB,gBAAgB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;;AAEA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA,gBAAgB;;;;;;;;;;;;ACrRH;;AAEb,WAAW,mBAAO,CAAC,mDAAS;AAC5B,YAAY,mBAAO,CAAC,wFAA2B;AAC/C,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;;AAEA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChHA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA;AACA,SAAS,WAAW;;AAEpB;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA,SAAS,WAAW;;AAEpB;AACA;AACA,SAAS,UAAU;;AAEnB;AACA;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1Ba;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED,2DAA2D;;AAE3D;;;;;;;;;;;;AC9Ba;;AAEb;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,wCAAwC;AACxC,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/BA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACZa;;AAEb;;AAEA;AACA;AACA;;;;;;;;;;;;ACNa;;AAEb,eAAe,mBAAO,CAAC,oDAAW;AAClC,aAAa,mBAAO,CAAC,oEAAmB;;AAExC,qBAAqB,mBAAO,CAAC,iEAAkB;AAC/C,kBAAkB,mBAAO,CAAC,qDAAY;AACtC,WAAW,mBAAO,CAAC,6CAAQ;;AAE3B;;AAEA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;ACnBa;;AAEb,qBAAqB,mBAAO,CAAC,iEAAkB;;AAE/C;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTa;;AAEb,aAAa,mBAAO,CAAC,oEAAmB;AACxC,kBAAkB,mBAAO,CAAC,qDAAY;;AAEtC;;AAEA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,EAAE;AACF;AACA;;;;;;;;;;;;ACfa;;AAEb,cAAc,mBAAO,CAAC,gDAAS;AAC/B,2BAA2B,mBAAO,CAAC,8EAAwB;AAC3D,gBAAgB,mBAAO,CAAC,kEAAqB;;AAE7C;AACA,iBAAiB,mBAAO,CAAC,wDAAa;AACtC;;AAEA;;AAEA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAO,CAAC,oHAA8C;AACjE,4CAA4C;AAC5C;AACA;AACA,gBAAgB,qBAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY;AACjB;AACA,EAAE;AACF;AACA;;AAEA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;;;;;;;;;;;;AC5DY;AACZ,iBAAiB,mBAAO,CAAC,yDAAW,EAAE,mBAAO,CAAC,yDAAc;;;;;;;;;;;;ACDhD;AACZ,mBAAmB,mBAAO,CAAC,yDAAU;AACrC,kBAAkB,mBAAO,CAAC,uDAAS;;AAEnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AC3BY;AACZ,aAAa,sFAA6B;AAC1C,gBAAgB,0FAA2B;AAC3C,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;ACnFY;AACZ,aAAa,sFAA6B;AAC1C,gBAAgB,0FAA2B;AAC3C,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;AC1EY;AACZ;;AAEA,aAAa;AACb,sBAAsB,YAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1LY;AACZ,aAAa,sFAA6B;AAC1C,kBAAkB,mBAAO,CAAC,+EAAuB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACrEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACVa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA,IAAI;AACJ,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,gBAAgB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/Da;;AAEb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjBa;;AAEb,aAAa,mBAAO,CAAC,oEAAmB;AACxC,eAAe,mBAAO,CAAC,oDAAW;;AAElC,qBAAqB,mBAAO,CAAC,oEAAkB;AAC/C,kBAAkB,mBAAO,CAAC,wDAAY;AACtC,WAAW,mBAAO,CAAC,gDAAQ;;AAE3B;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;ACjBa;;AAEb,qBAAqB,mBAAO,CAAC,oEAAkB;;AAE/C;AACA;AACA;;;;;;;;;;;;ACNa;;AAEb,kBAAkB,mBAAO,CAAC,wDAAY;AACtC,aAAa,mBAAO,CAAC,oEAAmB;;AAExC;AACA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA,EAAE;AACF;AACA;;;;;;;;;;;;ACba;;AAEb;AACA;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,gEAAe,GAAG;AACxC;AACA,2CAA2C,gBAAgB;AAC3D,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;;AAEA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzHa;;AAEb;AACA,aAAa,mBAAO,CAAC,gEAAe;;AAEpC;AACA,6CAA6C,sBAAsB,EAAE,mBAAO,CAAC,sEAAkB;;AAE/F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC/Ba;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChBA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,MAAM;AACN;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC;;AAEtC;AACA;AACA;;AAEA,4BAA4B;AAC5B;AACA;AACA;AACA,6BAA6B;;;;;;;;;;;;ACvLhB;;AAEb,gDAAgD,0DAA0D,2CAA2C;;AAErJ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA,EAAE;;;AAGF;AACA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,oBAAoB;;;;;;;;;;;;;AC9HpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACb;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;;AAEA,eAAe,mBAAO,CAAC,kFAAoB;;AAE3C,eAAe,mBAAO,CAAC,kFAAoB;;AAE3C,mBAAO,CAAC,6DAAU;;AAElB;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,GAAG;;AAEJ;AACA;AACA,yCAAyC;AACzC;;AAEA,EAAE,OAAO;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;;;AAGA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC1ID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEb;;AAEA,gBAAgB,mBAAO,CAAC,oFAAqB;;AAE7C,mBAAO,CAAC,6DAAU;;AAElB;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEb;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,SAAS,mFAA8B;;AAEvC;AACA;AACA;AACA;;AAEA;;;AAGA,aAAa,mBAAO,CAAC,wGAA2B;AAChD;;;AAGA,aAAa,4EAAwB;;AAErC,oBAAoB,qBAAM;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA,gBAAgB,mBAAO,CAAC,mBAAM;;AAE9B;;AAEA;AACA;AACA,EAAE;AACF;AACA;AACA;;;AAGA,iBAAiB,mBAAO,CAAC,0GAAgC;;AAEzD,kBAAkB,mBAAO,CAAC,kGAA4B;;AAEtD,eAAe,mBAAO,CAAC,8FAA0B;AACjD;;AAEA,qBAAqB,gGAA0B;AAC/C;AACA;AACA;AACA,4FAA4F;;;AAG5F;AACA;AACA;;AAEA,mBAAO,CAAC,6DAAU;;AAElB;AACA;;AAEA;AACA;AACA;AACA,gGAAgG;AAChG;AACA;AACA;;AAEA,yEAAyE,mFAAmF;AAC5J;;AAEA;AACA,qBAAqB,mBAAO,CAAC,8EAAkB;AAC/C,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA,0EAA0E;AAC1E;;AAEA;AACA,mFAAmF;AACnF;;AAEA,2FAA2F;AAC3F;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;;AAEA,oBAAoB;AACpB;;AAEA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB,gDAAgD;;AAEhD,4CAA4C;;AAE5C,0BAA0B;AAC1B;AACA;;AAEA,4DAA4D;;AAE5D,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA,wCAAwC,iHAAwC;AAChF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,8EAAkB;AAC/C,iEAAiE;AACjE;;AAEA;AACA,oEAAoE;;AAEpE;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;;;AAGA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA,GAAG;;;AAGH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,+FAA+F;AAC/F,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;;AAEA;AACA;AACA,4FAA4F;AAC5F,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,IAAI;AACJ;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,gDAAgD;AAChD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;;;AAGH;AACA,sCAAsC,iHAAwC;AAC9E;AACA,yCAAyC;;AAEzC,uEAAuE;;AAEvE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;;AAGH;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;;;AAGA;AACA;AACA;;AAEA;AACA;AACA,4EAA4E;AAC5E,IAAI;;;AAGJ;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;;AAEA;AACA;AACA,6DAA6D;AAC7D;AACA;;AAEA,+BAA+B;;AAE/B;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,uBAAuB;;AAEvB,uDAAuD;;AAEvD;;AAEA,wBAAwB;AACxB;;AAEA;AACA;;AAEA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD;;AAEjD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,OAAO;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,IAAI,OAAO;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;AACF;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,gEAAgE,OAAO,oBAAoB,OAAO;AAClG;AACA,wBAAwB,OAAO,iBAAiB;AAChD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ,2CAA2C;;AAE3C;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;;;AAGJ,0BAA0B;;AAE1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL,2CAA2C;;AAE3C;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,SAAS;AAC7B;AACA;AACA,OAAO;AACP;;AAEA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA,kEAAkE;;AAElE;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR,QAAQ,OAAO;AACf;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO;AACX;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO;AACX;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;;;AAGA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,OAAO;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA,2DAA2D;;AAE3D,4EAA4E;;AAE5E;;AAEA;AACA;AACA;AACA;AACA,GAAG,GAAG;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;;;AAGJ,kBAAkB,yBAAyB;AAC3C;AACA,IAAI;AACJ;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C,mBAAO,CAAC,gHAAmC;AACrF;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC,GAAG;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,GAAG;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA,mDAAmD,+DAA+D;AAClH;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI,OAAO;AACX;AACA;;AAEA;AACA,0DAA0D;;AAE1D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,oGAAyB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,OAAO;AACxC;AACA;;AAEA;AACA;;;;;;;;;;;ACnmCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEb;;AAEA,qBAAqB,gGAA0B;AAC/C;AACA;AACA;AACA;;AAEA,aAAa,mBAAO,CAAC,8EAAkB;;AAEvC,mBAAO,CAAC,6DAAU;;AAElB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,2CAA2C;AAC3C;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,gEAAgB;AACrC;AACA;;AAEA;;AAEA,aAAa,mBAAO,CAAC,wGAA2B;AAChD;;;AAGA,aAAa,4EAAwB;;AAErC,oBAAoB,qBAAM;;AAE1B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,mBAAO,CAAC,kGAA4B;;AAEtD,eAAe,mBAAO,CAAC,8FAA0B;AACjD;;AAEA,qBAAqB,gGAA0B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,mBAAO,CAAC,6DAAU;;AAElB;;AAEA;AACA,qBAAqB,mBAAO,CAAC,8EAAkB;AAC/C,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA,0EAA0E;AAC1E;;AAEA;AACA,mFAAmF;AACnF;AACA;;AAEA,2FAA2F;;AAE3F,4BAA4B;;AAE5B,0BAA0B;;AAE1B,uBAAuB;;AAEvB,sBAAsB;;AAEtB,yBAAyB;;AAEzB,0BAA0B;AAC1B;AACA;;AAEA;AACA,kCAAkC;AAClC;AACA;;AAEA,4DAA4D;AAC5D;AACA;;AAEA,mBAAmB;;AAEnB,wBAAwB;;AAExB,mBAAmB;AACnB;AACA;AACA;;AAEA,oBAAoB;AACpB;AACA;;AAEA,iCAAiC;;AAEjC;AACA;AACA,KAAK;;;AAGL,uBAAuB;;AAEvB;AACA;AACA,mCAAmC;AACnC;;AAEA,sBAAsB;AACtB;;AAEA,4BAA4B;;AAE5B,6BAA6B;;AAE7B,gDAAgD;;AAEhD,4CAA4C;;AAE5C,iCAAiC;AACjC;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,IAAI;AACJ,CAAC,KAAK;AACN;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,EAAE;AACF;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,8EAAkB,GAAG;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oEAAoE;;AAEpE;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;;AAGF;AACA;AACA;;AAEA;AACA,6CAA6C;;AAE7C;AACA,EAAE,OAAO;AACT,EAAE;AACF;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA,IAAI,OAAO;AACX;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,GAAG;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD;;AAEhD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wEAAwE,sDAAsD;AAC9H;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI,OAAO,mBAAmB;AAC9B;;AAEA,IAAI,OAAO;AACX;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,gCAAgC;AAChC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,MAAM,OAAO;AACb,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,EAAE;;;AAGF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2EAA2E;AAC3E;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA,0EAA0E;;AAE1E;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,OAAO;AACb,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAwB,OAAO,cAAc;AAC7C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;;;AAGA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACxrBa;;AAEb;;AAEA,4CAA4C,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;;AAEpM,eAAe,mBAAO,CAAC,6FAAiB;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,EAAE,OAAO;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA,iEAAiE;AACjE;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA,YAAY;AACZ;AACA;AACA,SAAS;AACT,OAAO;AACP,MAAM;AACN;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL,GAAG;AACH,CAAC;;AAED;AACA;;AAEA,yFAAyF;AACzF;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;;;;;;;;;;AC9Ma;;AAEb,2CAA2C,gCAAgC,oCAAoC,oDAAoD,8DAA8D,iEAAiE,GAAG,kCAAkC;;AAEvU,iCAAiC,gBAAgB,sBAAsB,OAAO,uDAAuD,aAAa,uDAAuD,4CAA4C,KAAK,6CAA6C,6EAA6E,OAAO,iDAAiD,mFAAmF,OAAO;;AAEtgB,4CAA4C,kBAAkB,kCAAkC,oEAAoE,KAAK,OAAO,oBAAoB;;AAEpM,kDAAkD,0CAA0C;;AAE5F,4CAA4C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD;;AAE/P,8DAA8D,sEAAsE,8DAA8D;;AAElM,eAAe,mBAAO,CAAC,8CAAQ;AAC/B;;AAEA,gBAAgB,mBAAO,CAAC,mBAAM;AAC9B;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;;AAEN,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM;;AAEN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0CAA0C;AAC1C;;AAEA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;;AAEN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C;AAC3C,YAAY;AACZ;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;;AAEN,GAAG;AACH;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA,CAAC;;;;;;;;;;;;ACjNY,CAAC;;AAEd;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,QAAQ,OAAO;AACf,QAAQ;AACR;AACA,QAAQ,OAAO;AACf;AACA;;AAEA;AACA,IAAI;AACJ;;;AAGA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,OAAO;AACf,QAAQ;AACR;AACA,QAAQ,OAAO;AACf,QAAQ;AACR,QAAQ,OAAO;AACf;AACA,MAAM;AACN,MAAM,OAAO;AACb;AACA,MAAM;AACN,MAAM,OAAO;AACb;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wFAAwF;AACxF;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxGA;AACA;AACa;;AAEb,iCAAiC,iIAA2D;;AAE5F;AACA;AACA;AACA;AACA;;AAEA,wEAAwE,aAAa;AACrF;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;ACvGA;AACA;AACA;;;;;;;;;;;;ACFA;AACA;AACa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,sGAAgC;AACrD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,+BAA+B,mBAAO,CAAC,6FAAiB;AACxD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yEAAyE,aAAa;AACtF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;;;;;;;;;;;AChGa;;AAEb,4BAA4B,4HAAsD;;AAElF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;AACA;;;;;;;;;;AC1BA,kGAA+C;;;;;;;;;;;;;;;;;;;ACA/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,UAAU;AACV;AACA;AACA;AACA,KAAK;AACL;;AAEA,+BAA+B,iBAAiB;;AAEhD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2DAA2D;;AAE3D;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,mBAAmB;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iBAAiB;AAChD;;AAEA;AACA;AACA;AACA;;AAEA;AACA,6DAA6D,yBAAyB;;AAEtF;AACA;AACA,mCAAmC,qBAAqB;AACxD;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAwB;;AAExB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gDAAgD,iBAAiB;AACjE;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA,mDAAmD;AACnD;;AAEA;AACA;AACA;;AAEmE;AACnE;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3RA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,cAAc;AACd;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA,OAAO;;;AAGP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;AACF;AACA;;;;;;AAMA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;;;;;AAMD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;AAQD;AACA,kBAAkB,sBAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gBAAgB,gBAAgB;AACnE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,sDAAsD,sCAAsC;AAC5F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4JAA4J;AAC5J;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;;AAEA,sKAAsK;AACtK;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,2KAA2K;AAC3K;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,2KAA2K;AAC3K;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,2IAA2I;AAC3I;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,mKAAmK;AACnK;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,sCAAsC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gKAAgK;AAChK;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;;AAEA;AACA;AACA,8KAA8K;AAC9K;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,2KAA2K;AAC3K;;AAEA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEmL;AACnL;;;;;;;;;;;;;;;;;ACr5BA,oDAAoD,gBAAgB,sBAAsB,OAAO,2BAA2B,0BAA0B,yDAAyD,iCAAiC;;AAEhN;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,UAAU;AACvB;AACe;AACf,yEAAyE,aAAa;AACtF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,kBAAkB,sDAAa;;AAE/B,wBAAwB;AACxB;AACA,OAAO;AACP;AACA;AACA;;;;;;;;;;;;;;;AC/CA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACe;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AC9C4C;AACQ;AACd;;AAEtC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+CAA+C,0DAAgB;;AAE/D;AACA;AACA;;AAEA,OAAO,mEAAa;AACpB,mEAAmE;AACnE;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,MAAM,0DAAgB,EAAE;;AAEpE;AACA;AACA;;AAEA;AACA,oCAAoC,YAAY;AAChD,+HAA+H,0DAAgB;AAC/I;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB;AACA;AACe;AACf;AACA;AACA,kBAAkB,wBAAwB;AAC1C;;AAEA,QAAQ,IAAqC;AAC7C;AACA,QAAQ,0DAAO;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,IAAqC;AAC3C;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,QAAQ,IAAqC;AAC7C;AACA;AACA,QAAQ,0DAAO;AACf;AACA;;AAEA;AACA;AACA,qBAAqB,8BAA8B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACjIA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,UAAU;AACvB;AACA;AACA;;AAEe;AACf,mEAAmE,aAAa;AAChF;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;AC/BoD;AACP;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB;AACA;AACA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA,EAAiB;AACjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,KAAK;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,eAAe,UAAU;AACzB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA,SAAS,mEAAa;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,wBAAwB;AACvC;;AAEA;AACA;AACA,eAAe,YAAY;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;AACA,KAAK,OAAO,yDAAY;AACxB;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,aAAa,wBAAwB;;AAErC;AACA;AACA;AACA;AACA;AACA,GAAG,QAAQ,yDAAY;AACvB;;;;;;;;;;;;;;;;;;;;;;;;;ACvPwC;AACQ;AACM;AACN;AAChB;AACM;;AAEtC;AACA;AACA;AACA;AACA;;AAEA,IAAI,KAAqC;AACzC,EAAE,0DAAO;AACT;;;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;ACpBa;;AAEb,8CAA6C,EAAE,aAAa,EAAC;;AAE7D;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,2BAA2B;AAC/C;AACA;AACA,IAAI;;;AAGJ;AACA;AACA,IAAI;;;AAGJ;;AAEA;AACA,WAAW;;AAEX;AACA;AACA;AACA,IAAI;;;AAGJ,wGAAwG;;AAExG,gBAAgB;;AAEhB,kBAAkB;;AAElB,mBAAmB;;AAEnB,mBAAmB,UAAU;AAC7B;AACA;;AAEA;AACA;AACA,MAAM;;;AAGN;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB,kBAAkB;;AAElB,kBAAkB,iBAAiB;AACnC;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd,cAAc;AACd,iBAAiB;AACjB,cAAc;AACd,iBAAiB;AACjB,aAAa;;;;;;;;;;;;;AC1LD;AACZ,eAAe,mBAAO,CAAC,6DAAU;AACjC,eAAe,mBAAO,CAAC,oDAAW;;AAElC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,kBAAkB,QAAQ;;AAE1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,qDAAqD;AACrD,qDAAqD;AACrD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,uDAAuD;AACvD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;;AAEtD;AACA;AACA;AACA,qDAAqD;AACrD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,sDAAsD;;AAEtD;AACA;AACA;AACA,sDAAsD;AACtD,uDAAuD;AACvD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,uDAAuD;AACvD,qDAAqD;AACrD,sDAAsD;;AAEtD;AACA;AACA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,uDAAuD;AACvD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,qDAAqD;AACrD,sDAAsD;;AAEtD;AACA;AACA;AACA,qDAAqD;AACrD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;;AAEtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qDAAqD;AACrD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,qDAAqD;AACrD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,sDAAsD;AACtD,sDAAsD;;AAEtD;AACA;AACA;AACA,qDAAqD;AACrD,uDAAuD;AACvD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,uDAAuD;AACvD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;;AAEtD;AACA;AACA;AACA,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,uDAAuD;AACvD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;;AAEtD;AACA;AACA;AACA,sDAAsD;AACtD,qDAAqD;AACrD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,qDAAqD;AACrD,uDAAuD;AACvD,sDAAsD;;AAEtD;AACA;AACA;AACA,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;AACvD,qDAAqD;AACrD,sDAAsD;AACtD,qDAAqD;AACrD,sDAAsD;AACtD,qDAAqD;AACrD,qDAAqD;AACrD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,sDAAsD;AACtD,uDAAuD;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,MAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AClSA,eAAe,mBAAO,CAAC,qDAAQ;AAC/B,eAAe,sFAA6B;AAC5C;AACA;AACA;AACA;AACA,WAAW,6BAA6B;AACxC,aAAa,QAAQ;AACrB;AACA,cAAc;AACd;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B,WAAW,6BAA6B;AACxC,aAAa,OAAO;AACpB;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrOA;AACA;AACA,aAAa,mBAAO,CAAC,8CAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA,EAAE,cAAc;AAChB;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AChEa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;;AAEA,6BAA6B,QAAQ;AACrC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,4BAA4B,QAAQ;AACpC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,cAAc,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,qBAAqB;AACzC,oBAAoB,iBAAiB;AACrC,+BAA+B,cAAc;;AAE7C;AACA,oBAAoB,QAAQ;AAC5B,oBAAoB,qBAAqB;;AAEzC;AACA;AACA,qCAAqC,iBAAiB;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,QAAQ;AAC5B;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,6CAA6C;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC;AACjC;AACA;;AAEA;AACA;AACA;;AAEA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;;AAEA,8CAA8C;;AAE9C,uCAAuC;AACvC,uCAAuC;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,2CAA2C;AAC3C,2CAA2C;;AAE3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oCAAoC;AACpC;;AAEA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,OAAO;AAC9C;;AAEA,uEAAuE;;AAEvE,uEAAuE;AACvE;;AAEA;;AAEA;;AAEA;AACA;AACA,yCAAyC;AACzC,oCAAoC,WAAW,wBAAwB;AACvE;AACA,uEAAuE;AACvE;;AAEA,uCAAuC,OAAO;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA;;AAEA,qEAAqE;AACrE;;AAEA;;AAEA;;AAEA;AACA;AACA,yCAAyC;AACzC,oCAAoC,WAAW,sBAAsB;AACrE,qEAAqE;AACrE;AACA,qEAAqE;AACrE,qEAAqE;AACrE;;AAEA,uCAAuC,OAAO;AAC9C;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;;AAEA;AACA;AACA;;AAEA,qEAAqE;;AAErE,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;;AAEA;;AAEA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ,IAA+B;AACvC;;AAEA;AACA;AACA;AACA,MAAM,KAAK,EAYN;;AAEL,CAAC;;;;;;;;;;;;ACncW;AACZ,iBAAiB,mBAAO,CAAC,oDAAO,EAAE,mBAAO,CAAC,sEAAgB;;;;;;;;;;;;;ACD9C;AACZ;;AAEA;AACA,eAAe;AACf;AACA;;AAEA,iBAAiB;AACjB;AACA;;AAEA,gBAAgB;AAChB,OAAO,MAAM;AACb;;AAEA,kBAAkB;AAClB;AACA;;AAEA,gBAAgB;AAChB;AACA;;AAEA,gBAAgB;AAChB;AACA;;AAEA;AACA,sBAAsB;AACtB;AACA;;AAEA,uBAAuB;AACvB;AACA;;AAEA,sBAAsB;AACtB;AACA;;AAEA,0BAA0B;AAC1B;AACA;;;;;;;;;;;;AC3CY;AACZ,aAAa,sFAA6B;AAC1C,YAAY,mBAAO,CAAC,4CAAO;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA,gCAAgC,uDAAuD;;AAEvF;AACA,gCAAgC,uDAAuD;;AAEvF;AACA;;AAEA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;;AAEA,WAAW;AACX;;AAEA,0BAA0B;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,oCAAoC;AAC/C,mBAAmB,aAAa;AAChC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,oCAAoC;AAC/C,mBAAmB,aAAa;AAChC;AACA;AACA;AACA;;AAEA;AACA,SAAS,kCAAkC;AAC3C;AACA;AACA;AACA;;AAEA;AACA,SAAS,kCAAkC;AAC3C;AACA;AACA;AACA;;AAEA,WAAW;AACX;;;;;;;;;;;;AChMY;AACZ,aAAa,sFAA6B;AAC1C,iBAAiB,mBAAO,CAAC,0DAAa;AACtC,SAAS,mBAAO,CAAC,6CAAO;AACxB,SAAS,mFAAsB;;AAE/B,eAAe,mBAAO,CAAC,oEAAkB;;AAEzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,OAAO,cAAc;AAC3C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB,OAAO,cAAc;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA;;AAEA,wBAAwB;AACxB;AACA;;AAEA;AACA;;AAEA,wBAAwB;AACxB;AACA;AACA;;AAEA,4BAA4B;AAC5B;AACA;;AAEA;AACA;;AAEA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,0BAA0B;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;;AAEA;AACA;;AAEA,wBAAwB;AACxB;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;;AAEA,yBAAyB;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,yBAAyB;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wBAAwB;AACxB;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA;;AAEA;AACA,kBAAkB,kBAAkB;AACpC;;AAEA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;;AAEA,WAAW;AACX;;AAEA,uBAAuB;AACvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,yCAAyC;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc;AACd,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qCAAqC,6BAA6B;AAClE;;AAEA,eAAe;AACf,gBAAgB;;AAEhB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA,YAAY;AACZ;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;ACnQY;AACZ,aAAa,mBAAO,CAAC,wDAAU;AAC/B,UAAU,mBAAO,CAAC,kDAAO;AACzB,eAAe,mBAAO,CAAC,mEAAiB;;AAExC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,sBAAsB,uBAAuB;AAC7C;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACpPa;;AAEb,8CAA6C,EAAE,aAAa,EAAC;;AAE7D;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yCAAyC,SAAS;;AAElD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wDAAwD,0BAA0B;AAClF;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,yDAAyD,4BAA4B;AACrF;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,wEAAwE,4BAA4B;AACpG;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,wBAAwB;AACxB,4BAA4B;AAC5B;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,iDAAiD;;AAEjD,gBAAgB;;AAEhB,oBAAoB,uBAAuB;AAC3C;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;;;AAGN;AACA,GAAG;AACH;AACA;AACA;;AAEA,oBAAoB,iBAAiB;AACrC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA,qEAAqE;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4DAA4D,0BAA0B;AACtF;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB;AACzB,yBAAyB;AACzB,kBAAkB;AAClB,gBAAgB;AAChB,gBAAgB;;;;;;;;;;;AC9UhB,aAAa,sFAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uBAAuB,gBAAgB;AACvC;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;AChFA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAc,mBAAO,CAAC,2CAAO;AAC7B,eAAe,mBAAO,CAAC,6CAAQ;AAC/B,iBAAiB,mBAAO,CAAC,iDAAU;AACnC,iBAAiB,mBAAO,CAAC,iDAAU;AACnC,iBAAiB,mBAAO,CAAC,iDAAU;AACnC,iBAAiB,mBAAO,CAAC,iDAAU;;;;;;;;;;;ACdnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,sFAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,sFAA6B;;AAE1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,6DAAU;AACjC,aAAa,mBAAO,CAAC,iDAAU;AAC/B,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,sFAA6B;;AAE1C;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,sFAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B,SAAS,QAAQ;;AAEjB,kBAAkB,QAAQ;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACtIA,eAAe,mBAAO,CAAC,6DAAU;AACjC,aAAa,mBAAO,CAAC,iDAAU;AAC/B,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,sFAA6B;;AAE1C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACxDA,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,sFAA6B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,SAAS,SAAS;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,SAAS;AAC3B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAS,mFAA8B;AACvC,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA,kBAAkB,mBAAO,CAAC,uGAAyC;AACnE,kBAAkB,mBAAO,CAAC,uGAAyC;AACnE,gBAAgB,mBAAO,CAAC,mGAAuC;AAC/D,mBAAmB,mBAAO,CAAC,yGAA0C;AACrE,qBAAqB,mBAAO,CAAC,6GAA4C;AACzE,kBAAkB,mBAAO,CAAC,mIAAuD;AACjF,kBAAkB,mBAAO,CAAC,yHAAkD;;AAE5E;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;;;;;;;;;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,sFAA6B;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;ACvSA,oBAAoB,mBAAO,CAAC,oEAAiB;;AAE7C;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,iBAAiB;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;ACbA;AACqC;;AAErC;;AAEA;AACA;AACA,EAAE;AACF;AACA,EAAE,gBAAgB,qBAAM;AACxB,SAAS,qBAAM;AACf,EAAE,SAAS,IAA6B;AACxC;AACA,EAAE,KAAK,EAEN;;AAED,aAAa,wDAAQ;AACrB,+DAAe,MAAM,EAAC;;;;;;;;;;;;;;;;AClBP;AACf;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;;;;;;;;;;;ACfA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,aAAa,UAAU;AACvB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA,SAAS,qBAAM;AACf,IAAI;AACJ;AACA;AACA,YAAY,qBAAM;AAClB;AACA;AACA;;;;;;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACLA;AACA;;AAEa;;AAEb,wBAAwB,mBAAO,CAAC,0DAAc;AAC9C,0BAA0B,mBAAO,CAAC,4EAAuB;AACzD,sBAAsB,mBAAO,CAAC,oEAAmB;AACjD,mBAAmB,mBAAO,CAAC,8DAAgB;;AAE3C;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA,yBAAyB;AACzB,2BAA2B;AAC3B,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;;AAGzB;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;;AC3UD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,wBAAwB,SAAS;AACjC;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa,OAAO,oBAAoB,OAAO;AAC/C;AACA;;AAEA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,OAAO;AACjB;AACA,QAAQ,SAAS,OAAO;AACxB;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;AAEA,IAAI,OAAO;AACX,iBAAiB,OAAO;AACxB,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;;AAGf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4CAA4C,KAAK;;AAEjD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;AACA,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;AAGA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,WAAW;AACX;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA,kGAA0C;;AAE1C;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA;AACA,gBAAgB;AAChB,sBAAsB;;AAEtB;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA,cAAc;AACd,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA,eAAe;AACf,2BAA2B;;AAE3B;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB,kHAAgD;;AAEhD;AACA;AACA;;;AAGA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA,WAAW;AACX;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,WAAW,UAAU;AACrB;AACA,qGAAsC;;AAEtC,eAAe;AACf;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,iBAAiB;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;;AAEL;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,OAAO,qCAAqC;AACxE,4BAA4B,OAAO,sDAAsD;AACzF;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;;;;;;;;;;;AC1sBN;;AAEb,cAAc,mBAAO,CAAC,gDAAS;AAC/B,2BAA2B,mBAAO,CAAC,8EAAwB;AAC3D,gBAAgB,mBAAO,CAAC,kEAAqB;;AAE7C;AACA,iBAAiB,mBAAO,CAAC,wDAAa;AACtC;;AAEA;;AAEA;AACA;AACA,WAAW,mBAAO,CAAC,oHAA8C;AACjE,4CAA4C;AAC5C;AACA;AACA,aAAa,qBAAM;AACnB,iBAAiB,qBAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,EAAE;AACF;AACA;;AAEA,mBAAmB,mBAAO,CAAC,8DAAgB;;AAE3C;AACA,6BAA6B;AAC7B,wBAAwB;AACxB;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvDiC;;AAEjC;AACA;AACA,oBAAoB,sBAAsB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC;;AAExC,gFAAgF,qCAAqC;AACrH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;;;AAGV;AACA;;AAEA,0BAA0B,iBAAiB;AAC3C;;AAEA;AACA;;AAEA,8BAA8B,OAAO;AACrC;AACA;AACA;;AAEA;AACA;;AAEA;AACA,UAAU;;;AAGV;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA,iDAAiD,sDAAsD,8DAA8D,wDAAwD,oDAAoD,mDAAmD;;AAEpU;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,qDAAgB;;AAE7B;AACA,aAAa,qDAAgB;;AAE7B;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,gBAAgB;AAC1C;AACA;;AAEA;AACA,UAAU;;;AAGV;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,wBAAwB;;AAExB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,aAAa,iDAAY;;AAEzB;AACA;AACA;AACA;;AAEA,aAAa,iDAAY;;AAEzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;;;AAGV;AACA;AACA;AACA;;AAEA;;AAEA,0BAA0B,gBAAgB;AAC1C;AACA;AACA;;AAEA;AACA,UAAU;;;AAGV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,qDAAqD;AACrD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C;;;AAG9C;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;;AAEnC;;AAEA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;;AAEA;;AAEA,qDAAqD,8BAA8B;AACnF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2EAA2E;;AAE3E,qDAAqD,8BAA8B;AACnF;AACA;AACA,IAAI;;;AAGJ;;AAEA;AACA,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sDAAsD,+BAA+B;AACrF;AACA;AACA,IAAI;;;AAGJ;AACA;AACA,IAAI;;;AAGJ;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,kDAAkD,0BAA0B;AAC5E;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,wBAAwB;AAC1C,8EAA8E,qCAAqC;AACnH;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,IAAI;;;AAGJ,uDAAuD,+BAA+B;AACtF;AACA;AACA;AACA;AACA,IAAI;;;AAGJ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,wEAAwE,aAAa;AACrF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;;AAEzE;AACA;AACA,sBAAsB;;AAEtB;AACA,4BAA4B;;AAE5B;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,gCAAgC;AAC7F;AACA;AACA,QAAQ;;;AAGR,6DAA6D,gCAAgC;AAC7F;AACA;AACA;AACA,MAAM;;;AAGN;AACA;AACA,6DAA6D,gCAAgC;AAC7F;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;;;AAGR,6DAA6D,gCAAgC;AAC7F;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;;AAGA;AACA,4DAA4D,gCAAgC;AAC5F;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,UAAU;AACV,gCAAgC;AAChC;AACA;AACA,MAAM;;;AAGN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA;;AAEA,0DAA0D,+BAA+B;AACzF;AACA;AACA,MAAM;;;AAGN;AACA,8DAA8D,iCAAiC;AAC/F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;;;AAGA;AACA,4DAA4D,gCAAgC;AAC5F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B;;AAE7B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP;;;AAGA;AACA;AACA;;AAEA;AACA,CAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC,IAAI;;AAEL;AACA;AACA;AACA;;AAEqI;AACrI;;;;;;;;;;;;ACpwCa;;AAEb,8CAA6C,EAAE,aAAa,EAAC;;AAE7D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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CA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;;;;;WCVA,8CAA8C;;;;;WCA9C;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACJA;;AAEuB;;AAEK;AACI;AACA;AACa;AACA;;AAOlB;;;;;;AAM0B;;;AAGrD;AACA;AACA;AACA;AACA,QAAQ,mEAAgB;AACxB;AACA,SAAS;AACT,YAAY,wCAAM;AAClB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,QAAQ,mEAAgB;AACxB;AACA,SAAS;AACT,YAAY,wCAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA,4BAA4B,6DAAkB;AAC9C;AACA;;AAEA;AACA,UAAU,OAAO;AACjB;AACA,IAAI,kEAAmB;AACvB;AACA;;AAEA;AACA;AACA,uCAAuC,kEAAmB;AAC1D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,kDAAQ;AAC7B,UAAU,uDAAa;AACvB,aAAa,iDAAY;AACzB,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,0BAA0B,iDAAY;AACtC,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,UAAU,qDAAgB;AAC1B;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,UAAU,qDAAgB;AAC1B,UAAU,qDAAgB;AAC1B;AACA;AACA;AACA;AACA;AACA,wBAAwB,iDAAY;AACpC,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,gDAAgD,wDAAiB;AACjE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,oDAAc;AAChC;AACA;AACA;AACA,WAAW,0DAAW,GAAG,cAAc;AACvC,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4DAAa,GAAG,cAAc;AACzC;AACA,CAAC;AACD","sources":["webpack://edge-core-js/./src/client-side.js","webpack://edge-core-js/./src/core/account/account-api.js","webpack://edge-core-js/./src/core/account/account-cleaners.js","webpack://edge-core-js/./src/core/account/account-files.js","webpack://edge-core-js/./src/core/account/account-init.js","webpack://edge-core-js/./src/core/account/account-pixie.js","webpack://edge-core-js/./src/core/account/account-reducer.js","webpack://edge-core-js/./src/core/account/custom-tokens.js","webpack://edge-core-js/./src/core/account/data-store-api.js","webpack://edge-core-js/./src/core/account/lobby-api.js","webpack://edge-core-js/./src/core/account/plugin-api.js","webpack://edge-core-js/./src/core/context/context-api.js","webpack://edge-core-js/./src/core/context/context-pixie.js","webpack://edge-core-js/./src/core/context/internal-api.js","webpack://edge-core-js/./src/core/core.js","webpack://edge-core-js/./src/core/currency/currency-pixie.js","webpack://edge-core-js/./src/core/currency/currency-reducer.js","webpack://edge-core-js/./src/core/currency/currency-selectors.js","webpack://edge-core-js/./src/core/currency/wallet/currency-wallet-api.js","webpack://edge-core-js/./src/core/currency/wallet/currency-wallet-callbacks.js","webpack://edge-core-js/./src/core/currency/wallet/currency-wallet-cleaners.js","webpack://edge-core-js/./src/core/currency/wallet/currency-wallet-export.js","webpack://edge-core-js/./src/core/currency/wallet/currency-wallet-files.js","webpack://edge-core-js/./src/core/currency/wallet/currency-wallet-pixie.js","webpack://edge-core-js/./src/core/currency/wallet/currency-wallet-reducer.js","webpack://edge-core-js/./src/core/currency/wallet/enabled-tokens.js","webpack://edge-core-js/./src/core/exchange/exchange-api.js","webpack://edge-core-js/./src/core/exchange/exchange-pixie.js","webpack://edge-core-js/./src/core/exchange/exchange-reducer.js","webpack://edge-core-js/./src/core/exchange/exchange-selectors.js","webpack://edge-core-js/./src/core/fake/fake-db.js","webpack://edge-core-js/./src/core/fake/fake-io.js","webpack://edge-core-js/./src/core/fake/fake-responses.js","webpack://edge-core-js/./src/core/fake/fake-server.js","webpack://edge-core-js/./src/core/fake/fake-world.js","webpack://edge-core-js/./src/core/log/log.js","webpack://edge-core-js/./src/core/login/create.js","webpack://edge-core-js/./src/core/login/edge.js","webpack://edge-core-js/./src/core/login/keys.js","webpack://edge-core-js/./src/core/login/lobby.js","webpack://edge-core-js/./src/core/login/login-fetch.js","webpack://edge-core-js/./src/core/login/login-messages.js","webpack://edge-core-js/./src/core/login/login-reducer.js","webpack://edge-core-js/./src/core/login/login-selectors.js","webpack://edge-core-js/./src/core/login/login-stash.js","webpack://edge-core-js/./src/core/login/login.js","webpack://edge-core-js/./src/core/login/otp.js","webpack://edge-core-js/./src/core/login/password.js","webpack://edge-core-js/./src/core/login/pin2.js","webpack://edge-core-js/./src/core/login/recovery2.js","webpack://edge-core-js/./src/core/login/vouchers.js","webpack://edge-core-js/./src/core/plugins/plugins-actions.js","webpack://edge-core-js/./src/core/plugins/plugins-reducer.js","webpack://edge-core-js/./src/core/plugins/plugins-selectors.js","webpack://edge-core-js/./src/core/root-pixie.js","webpack://edge-core-js/./src/core/root-reducer.js","webpack://edge-core-js/./src/core/root.js","webpack://edge-core-js/./src/core/scrypt/scrypt-pixie.js","webpack://edge-core-js/./src/core/scrypt/scrypt-selectors.js","webpack://edge-core-js/./src/core/storage/encrypt-disklet.js","webpack://edge-core-js/./src/core/storage/repo.js","webpack://edge-core-js/./src/core/storage/storage-actions.js","webpack://edge-core-js/./src/core/storage/storage-api.js","webpack://edge-core-js/./src/core/storage/storage-reducer.js","webpack://edge-core-js/./src/core/storage/storage-selectors.js","webpack://edge-core-js/./src/core/swap/swap-api.js","webpack://edge-core-js/./src/io/react-native/native-bridge.js","webpack://edge-core-js/./src/io/react-native/polyfills.js","webpack://edge-core-js/./src/types/error.js","webpack://edge-core-js/./src/types/fake-types.js","webpack://edge-core-js/./src/types/server-cleaners.js","webpack://edge-core-js/./src/types/types.js","webpack://edge-core-js/./src/util/compare.js","webpack://edge-core-js/./src/util/crypto/crypto.js","webpack://edge-core-js/./src/util/crypto/ethereum.js","webpack://edge-core-js/./src/util/crypto/hashes.js","webpack://edge-core-js/./src/util/crypto/hotp.js","webpack://edge-core-js/./src/util/crypto/scrypt.js","webpack://edge-core-js/./src/util/crypto/verify.js","webpack://edge-core-js/./src/util/encoding.js","webpack://edge-core-js/./src/util/file-helpers.js","webpack://edge-core-js/./src/util/periodic-task.js","webpack://edge-core-js/./src/util/promise.js","webpack://edge-core-js/./src/util/snooze.js","webpack://edge-core-js/./src/util/updateQueue.js","webpack://edge-core-js/./src/util/util.js","webpack://edge-core-js/./node_modules/aes-js/index.js","webpack://edge-core-js/./node_modules/array-filter/index.js","webpack://edge-core-js/./node_modules/assert/build/assert.js","webpack://edge-core-js/./node_modules/assert/build/internal/assert/assertion_error.js","webpack://edge-core-js/./node_modules/assert/build/internal/errors.js","webpack://edge-core-js/./node_modules/assert/build/internal/util/comparisons.js","webpack://edge-core-js/./node_modules/buffer/index.js","webpack://edge-core-js/./node_modules/base-x/index.js","webpack://edge-core-js/./node_modules/base64-js/index.js","webpack://edge-core-js/./node_modules/biggystring/lib/index.es.js","webpack://edge-core-js/./node_modules/bip66/index.js","webpack://edge-core-js/./node_modules/bn.js/lib/bn.js","webpack://edge-core-js/./node_modules/brorand/index.js","webpack://edge-core-js/./node_modules/call-bind/callBound.js","webpack://edge-core-js/./node_modules/call-bind/index.js","webpack://edge-core-js/./node_modules/cipher-base/index.js","webpack://edge-core-js/./node_modules/cleaners/lib/index.js","webpack://edge-core-js/./node_modules/create-hash/browser.js","webpack://edge-core-js/./node_modules/create-hash/make-hash.js","webpack://edge-core-js/./node_modules/create-hash/md5.js","webpack://edge-core-js/./node_modules/cross-fetch/dist/browser-ponyfill.js","webpack://edge-core-js/./node_modules/currency-codes/data.js","webpack://edge-core-js/./node_modules/currency-codes/index.js","webpack://edge-core-js/./node_modules/define-properties/index.js","webpack://edge-core-js/./node_modules/disklet/lib/disklet.web.js","webpack://edge-core-js/./node_modules/edge-sync-client/lib/index.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/curve/base.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/curve/index.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/curve/short.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/curves.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/ec/index.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/ec/key.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack://edge-core-js/./node_modules/elliptic/lib/elliptic/utils.js","webpack://edge-core-js/./node_modules/es6-object-assign/index.js","webpack://edge-core-js/./node_modules/ethereumjs-tx/es5/index.js","webpack://edge-core-js/./node_modules/ethereumjs-util/dist/index.js","webpack://edge-core-js/./node_modules/ethjs-util/lib/index.js","webpack://edge-core-js/./node_modules/events/events.js","webpack://edge-core-js/./node_modules/first-match/index.js","webpack://edge-core-js/./node_modules/foreach/index.js","webpack://edge-core-js/./node_modules/function-bind/implementation.js","webpack://edge-core-js/./node_modules/function-bind/index.js","webpack://edge-core-js/./node_modules/get-intrinsic/index.js","webpack://edge-core-js/./node_modules/has-symbols/index.js","webpack://edge-core-js/./node_modules/has-symbols/shams.js","webpack://edge-core-js/./node_modules/has/src/index.js","webpack://edge-core-js/./node_modules/hash-base/index.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/common.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/hmac.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/ripemd.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/sha.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/sha/1.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/sha/224.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/sha/256.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/sha/384.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/sha/512.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/sha/common.js","webpack://edge-core-js/./node_modules/hash.js/lib/hash/utils.js","webpack://edge-core-js/./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack://edge-core-js/./node_modules/ieee754/index.js","webpack://edge-core-js/./node_modules/inherits/inherits_browser.js","webpack://edge-core-js/./node_modules/is-arguments/index.js","webpack://edge-core-js/./node_modules/is-generator-function/index.js","webpack://edge-core-js/./node_modules/is-hex-prefixed/src/index.js","webpack://edge-core-js/./node_modules/is-nan/implementation.js","webpack://edge-core-js/./node_modules/is-nan/index.js","webpack://edge-core-js/./node_modules/is-nan/polyfill.js","webpack://edge-core-js/./node_modules/is-nan/shim.js","webpack://edge-core-js/./node_modules/is-typed-array/index.js","webpack://edge-core-js/./node_modules/keccak/js.js","webpack://edge-core-js/./node_modules/keccak/lib/api/index.js","webpack://edge-core-js/./node_modules/keccak/lib/api/keccak.js","webpack://edge-core-js/./node_modules/keccak/lib/api/shake.js","webpack://edge-core-js/./node_modules/keccak/lib/keccak-state-unroll.js","webpack://edge-core-js/./node_modules/keccak/lib/keccak.js","webpack://edge-core-js/./node_modules/minimalistic-assert/index.js","webpack://edge-core-js/./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack://edge-core-js/./node_modules/nub/index.js","webpack://edge-core-js/./node_modules/object-is/implementation.js","webpack://edge-core-js/./node_modules/object-is/index.js","webpack://edge-core-js/./node_modules/object-is/polyfill.js","webpack://edge-core-js/./node_modules/object-is/shim.js","webpack://edge-core-js/./node_modules/object-keys/implementation.js","webpack://edge-core-js/./node_modules/object-keys/index.js","webpack://edge-core-js/./node_modules/object-keys/isArguments.js","webpack://edge-core-js/./node_modules/process/browser.js","webpack://edge-core-js/./node_modules/readable-stream/errors-browser.js","webpack://edge-core-js/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://edge-core-js/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://edge-core-js/./node_modules/readable-stream/lib/_stream_readable.js","webpack://edge-core-js/./node_modules/readable-stream/lib/_stream_transform.js","webpack://edge-core-js/./node_modules/readable-stream/lib/_stream_writable.js","webpack://edge-core-js/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://edge-core-js/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://edge-core-js/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://edge-core-js/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://edge-core-js/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://edge-core-js/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://edge-core-js/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://edge-core-js/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://edge-core-js/./node_modules/redux-keto/lib/redux-keto.es.js","webpack://edge-core-js/./node_modules/redux-pixies/lib/redux-pixies.es.js","webpack://edge-core-js/./node_modules/redux/es/applyMiddleware.js","webpack://edge-core-js/./node_modules/redux/es/bindActionCreators.js","webpack://edge-core-js/./node_modules/redux/es/combineReducers.js","webpack://edge-core-js/./node_modules/redux/es/compose.js","webpack://edge-core-js/./node_modules/redux/es/createStore.js","webpack://edge-core-js/./node_modules/redux/es/index.js","webpack://edge-core-js/./node_modules/redux/es/utils/warning.js","webpack://edge-core-js/./node_modules/rfc4648/lib/index.js","webpack://edge-core-js/./node_modules/ripemd160/index.js","webpack://edge-core-js/./node_modules/rlp/index.js","webpack://edge-core-js/./node_modules/safe-buffer/index.js","webpack://edge-core-js/./node_modules/scrypt-js/scrypt.js","webpack://edge-core-js/./node_modules/secp256k1/elliptic.js","webpack://edge-core-js/./node_modules/secp256k1/lib/assert.js","webpack://edge-core-js/./node_modules/secp256k1/lib/der.js","webpack://edge-core-js/./node_modules/secp256k1/lib/elliptic/index.js","webpack://edge-core-js/./node_modules/secp256k1/lib/index.js","webpack://edge-core-js/./node_modules/serverlet/lib/index.js","webpack://edge-core-js/./node_modules/sha.js/hash.js","webpack://edge-core-js/./node_modules/sha.js/index.js","webpack://edge-core-js/./node_modules/sha.js/sha.js","webpack://edge-core-js/./node_modules/sha.js/sha1.js","webpack://edge-core-js/./node_modules/sha.js/sha224.js","webpack://edge-core-js/./node_modules/sha.js/sha256.js","webpack://edge-core-js/./node_modules/sha.js/sha384.js","webpack://edge-core-js/./node_modules/sha.js/sha512.js","webpack://edge-core-js/./node_modules/stream-browserify/index.js","webpack://edge-core-js/./node_modules/string_decoder/lib/string_decoder.js","webpack://edge-core-js/./node_modules/strip-hex-prefix/src/index.js","webpack://edge-core-js/./node_modules/symbol-observable/es/index.js","webpack://edge-core-js/./node_modules/symbol-observable/es/ponyfill.js","webpack://edge-core-js/./node_modules/util-deprecate/browser.js","webpack://edge-core-js/./node_modules/util/support/isBufferBrowser.js","webpack://edge-core-js/./node_modules/util/support/types.js","webpack://edge-core-js/./node_modules/util/util.js","webpack://edge-core-js/./node_modules/which-typed-array/index.js","webpack://edge-core-js/./node_modules/yaob/lib/yaob.js","webpack://edge-core-js/./node_modules/yavent/lib/index.js","webpack://edge-core-js/ignored|/Users/samholmes/Developer/edge-core-js/node_modules/bn.js/lib|buffer","webpack://edge-core-js/ignored|/Users/samholmes/Developer/edge-core-js/node_modules/brorand|crypto","webpack://edge-core-js/ignored|/Users/samholmes/Developer/edge-core-js/node_modules/readable-stream/lib/internal/streams|util","webpack://edge-core-js/ignored|/Users/samholmes/Developer/edge-core-js/node_modules/readable-stream/lib|util","webpack://edge-core-js/./node_modules/available-typed-arrays/index.js","webpack://edge-core-js/./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","webpack://edge-core-js/./node_modules/cleaners/lib/index.mjs","webpack://edge-core-js/./node_modules/edge-sync-client/lib/index.mjs","webpack://edge-core-js/./node_modules/lodash-es/_Symbol.js","webpack://edge-core-js/./node_modules/lodash-es/_baseGetTag.js","webpack://edge-core-js/./node_modules/lodash-es/_freeGlobal.js","webpack://edge-core-js/./node_modules/lodash-es/_getPrototype.js","webpack://edge-core-js/./node_modules/lodash-es/_getRawTag.js","webpack://edge-core-js/./node_modules/lodash-es/_objectToString.js","webpack://edge-core-js/./node_modules/lodash-es/_overArg.js","webpack://edge-core-js/./node_modules/lodash-es/_root.js","webpack://edge-core-js/./node_modules/lodash-es/isObjectLike.js","webpack://edge-core-js/./node_modules/lodash-es/isPlainObject.js","webpack://edge-core-js/./node_modules/rfc4648/lib/index.mjs","webpack://edge-core-js/./node_modules/serverlet/lib/index.mjs","webpack://edge-core-js/./node_modules/yavent/lib/index.mjs","webpack://edge-core-js/webpack/bootstrap","webpack://edge-core-js/webpack/runtime/compat get default export","webpack://edge-core-js/webpack/runtime/define property getters","webpack://edge-core-js/webpack/runtime/global","webpack://edge-core-js/webpack/runtime/harmony module decorator","webpack://edge-core-js/webpack/runtime/hasOwnProperty shorthand","webpack://edge-core-js/webpack/runtime/make namespace object","webpack://edge-core-js/webpack/runtime/node module decorator","webpack://edge-core-js/./src/io/react-native/react-native-worker.js"],"sourcesContent":["// \n\nimport { shareData } from 'yaob'\n\n\n\n\n\n\n\n/**\n * Client-side EdgeAccount methods.\n */\nexport class AccountSync {\n \n\n getFirstWalletInfo(type) {\n const out = this.allKeys.find(\n info => info.type === type\n )\n return out\n }\n\n getWalletInfo(id) {\n const out = this.allKeys.find(\n info => info.id === id\n )\n return out\n }\n\n listWalletIds() {\n return this.allKeys.map(info => info.id)\n }\n}\nshareData(AccountSync.prototype, 'AccountSync')\n\n/**\n * Verifies that a password meets our suggested rules.\n */\nexport function checkPasswordRules(password) {\n const tooShort = password.length < 10\n const noNumber = !/[0-9]/.test(password)\n const noLowerCase = !/[a-z]/.test(password)\n const noUpperCase = !/[A-Z]/.test(password)\n\n // Quick & dirty password strength estimation:\n const charset =\n (/[0-9]/.test(password) ? 10 : 0) +\n (/[A-Z]/.test(password) ? 26 : 0) +\n (/[a-z]/.test(password) ? 26 : 0) +\n (/[^0-9A-Za-z]/.test(password) ? 30 : 0)\n const secondsToCrack = Math.pow(charset, password.length) / 1e6\n\n return {\n secondsToCrack,\n tooShort,\n noNumber,\n noLowerCase,\n noUpperCase,\n passed:\n password.length >= 16 ||\n !(tooShort || noNumber || noUpperCase || noLowerCase)\n }\n}\nshareData({ checkPasswordRules })\n\n/**\n * Normalizes a username, and checks for invalid characters.\n * TODO: Support a wider character range via Unicode normalization.\n */\nexport function fixUsername(username) {\n const out = username\n .toLowerCase()\n .replace(/[ \\f\\r\\n\\t\\v]+/g, ' ')\n .replace(/ $/, '')\n .replace(/^ /, '')\n\n for (let i = 0; i < out.length; ++i) {\n const c = out.charCodeAt(i)\n if (c < 0x20 || c > 0x7e) {\n throw new Error('Bad characters in username')\n }\n }\n return out\n}\nshareData({ fixUsername })\n","\n\n\nimport { base32 } from 'rfc4648'\nimport { bridgifyObject, onMethod, watchMethod } from 'yaob'\n\nimport { AccountSync } from '../../client-side.js'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { signEthereumTransaction } from '../../util/crypto/ethereum.js'\nimport { base58 } from '../../util/encoding.js'\nimport { makeExchangeCache } from '../exchange/exchange-api.js'\nimport {\n createCurrencyWallet,\n listSplittableWalletTypes,\n makeKeysKit,\n makeStorageKeyInfo,\n splitWalletInfo\n} from '../login/keys.js'\nimport { applyKit } from '../login/login.js'\nimport {\n cancelOtpReset,\n disableOtp,\n enableOtp,\n repairOtp\n} from '../login/otp.js'\nimport {\n changePassword,\n checkPassword,\n deletePassword\n} from '../login/password.js'\nimport { changePin, checkPin2, deletePin } from '../login/pin2.js'\nimport { changeRecovery, deleteRecovery } from '../login/recovery2.js'\nimport { changeVoucherStatus } from '../login/vouchers.js'\nimport {\n findCurrencyPluginId,\n getCurrencyTools\n} from '../plugins/plugins-selectors.js'\n\nimport { makeStorageWalletApi } from '../storage/storage-api.js'\nimport { fetchSwapQuote } from '../swap/swap-api.js'\nimport { changeWalletStates } from './account-files.js'\n\nimport { makeDataStoreApi } from './data-store-api.js'\nimport { makeLobbyApi } from './lobby-api.js'\nimport { CurrencyConfig, SwapConfig } from './plugin-api.js'\n\n/**\n * Creates an unwrapped account API object around an account state object.\n */\nexport function makeAccountApi(ai, accountId) {\n const accountState = () => ai.props.state.accounts[accountId]\n const { accountWalletInfo, loginType, loginTree } = accountState()\n const { username } = loginTree\n\n // Plugin config API's:\n const currencyConfigs = {}\n for (const pluginId of Object.keys(ai.props.state.plugins.currency)) {\n const api = new CurrencyConfig(ai, accountId, pluginId)\n currencyConfigs[pluginId] = api\n }\n const swapConfigs = {}\n for (const pluginId of Object.keys(ai.props.state.plugins.swap)) {\n const api = new SwapConfig(ai, accountId, pluginId)\n swapConfigs[pluginId] = api\n }\n\n // Specialty API's:\n const rateCache = makeExchangeCache(ai)\n const dataStore = makeDataStoreApi(ai, accountId)\n const storageWalletApi = makeStorageWalletApi(ai, accountWalletInfo)\n\n function lockdown() {\n if (ai.props.state.hideKeys) {\n throw new Error('Not available when `hideKeys` is enabled')\n }\n }\n\n const out = {\n on: onMethod,\n watch: watchMethod,\n\n // Data store:\n get id() {\n return storageWalletApi.id\n },\n get type() {\n return storageWalletApi.type\n },\n get keys() {\n lockdown()\n return storageWalletApi.keys\n },\n get disklet() {\n lockdown()\n return storageWalletApi.disklet\n },\n get localDisklet() {\n lockdown()\n return storageWalletApi.localDisklet\n },\n async sync() {\n await storageWalletApi.sync()\n },\n\n // Basic login information:\n get appId() {\n return accountState().login.appId\n },\n get created() {\n return accountState().login.created\n },\n get lastLogin() {\n return accountState().login.lastLogin\n },\n get loggedIn() {\n return accountState() != null\n },\n get loginKey() {\n lockdown()\n return base58.stringify(accountState().login.loginKey)\n },\n get recoveryKey() {\n lockdown()\n const { login } = accountState()\n return login.recovery2Key != null\n ? base58.stringify(login.recovery2Key)\n : undefined\n },\n get rootLoginId() {\n lockdown()\n return base58.stringify(loginTree.loginId)\n },\n get username() {\n if (username == null) throw new Error('Missing username')\n return username\n },\n\n // Speciality API's:\n get currencyConfig() {\n return currencyConfigs\n },\n get swapConfig() {\n return swapConfigs\n },\n get rateCache() {\n return rateCache\n },\n get dataStore() {\n return dataStore\n },\n\n // What login method was used?\n get edgeLogin() {\n const { loginTree } = accountState()\n return loginTree.loginKey == null\n },\n keyLogin: loginType === 'keyLogin',\n newAccount: loginType === 'newAccount',\n passwordLogin: loginType === 'passwordLogin',\n pinLogin: loginType === 'pinLogin',\n recoveryLogin: loginType === 'recoveryLogin',\n\n // Change or create credentials:\n async changePassword(password) {\n lockdown()\n await changePassword(ai, accountId, password)\n },\n async changePin(opts\n\n\n) {\n lockdown()\n const { pin, enableLogin } = opts\n return changePin(ai, accountId, pin, enableLogin).then(() => {\n const { login } = accountState()\n return login.pin2Key ? base58.stringify(login.pin2Key) : ''\n })\n },\n async changeRecovery(\n questions,\n answers\n ) {\n lockdown()\n return changeRecovery(ai, accountId, questions, answers).then(() => {\n const { loginTree } = accountState()\n if (!loginTree.recovery2Key) {\n throw new Error('Missing recoveryKey')\n }\n return base58.stringify(loginTree.recovery2Key)\n })\n },\n\n // Verify existing credentials:\n async checkPassword(password) {\n lockdown()\n const { loginTree } = accountState()\n return checkPassword(ai, loginTree, password)\n },\n async checkPin(pin) {\n lockdown()\n const { login, loginTree } = accountState()\n\n // Try to check the PIN locally, then fall back on the server:\n return login.pin != null\n ? pin === login.pin\n : checkPin2(ai, loginTree, pin)\n },\n\n // Remove credentials:\n async deletePassword() {\n lockdown()\n await deletePassword(ai, accountId)\n },\n async deletePin() {\n lockdown()\n await deletePin(ai, accountId)\n },\n async deleteRecovery() {\n lockdown()\n await deleteRecovery(ai, accountId)\n },\n\n // OTP:\n get otpKey() {\n lockdown()\n const { loginTree } = accountState()\n return loginTree.otpKey != null\n ? base32.stringify(loginTree.otpKey, { pad: false })\n : undefined\n },\n get otpResetDate() {\n lockdown()\n const { loginTree } = accountState()\n return loginTree.otpResetDate\n },\n async cancelOtpReset() {\n lockdown()\n await cancelOtpReset(ai, accountId)\n },\n async enableOtp(timeout = 7 * 24 * 60 * 60) {\n lockdown()\n await enableOtp(ai, accountId, timeout)\n },\n async disableOtp() {\n lockdown()\n await disableOtp(ai, accountId)\n },\n async repairOtp(otpKey) {\n lockdown()\n await repairOtp(ai, accountId, base32.parse(otpKey, { loose: true }))\n },\n\n // 2fa bypass voucher approval / rejection:\n get pendingVouchers() {\n const { login } = accountState()\n return login.pendingVouchers\n },\n async approveVoucher(voucherId) {\n return changeVoucherStatus(ai, loginTree, {\n approvedVouchers: [voucherId]\n })\n },\n async rejectVoucher(voucherId) {\n return changeVoucherStatus(ai, loginTree, {\n rejectedVouchers: [voucherId]\n })\n },\n\n // Edge login approval:\n async fetchLobby(lobbyId) {\n lockdown()\n return makeLobbyApi(ai, accountId, lobbyId)\n },\n\n // Login management:\n async logout() {\n ai.props.dispatch({ type: 'LOGOUT', payload: { accountId } })\n },\n\n // Master wallet list:\n get allKeys() {\n return ai.props.state.hideKeys\n ? ai.props.state.accounts[accountId].allWalletInfosClean\n : ai.props.state.accounts[accountId].allWalletInfosFull\n },\n async changeWalletStates(walletStates) {\n await changeWalletStates(ai, accountId, walletStates)\n },\n async createWallet(walletType, keys) {\n const { login, loginTree } = accountState()\n\n if (keys == null) {\n // Use the currency plugin to create the keys:\n const pluginId = findCurrencyPluginId(\n ai.props.state.plugins.currency,\n walletType\n )\n const tools = await getCurrencyTools(ai, pluginId)\n keys = await tools.createPrivateKey(walletType)\n }\n\n const walletInfo = makeStorageKeyInfo(ai, walletType, keys)\n const kit = makeKeysKit(ai, login, walletInfo)\n await applyKit(ai, loginTree, kit)\n return walletInfo.id\n },\n getFirstWalletInfo: AccountSync.prototype.getFirstWalletInfo,\n getWalletInfo: AccountSync.prototype.getWalletInfo,\n listWalletIds: AccountSync.prototype.listWalletIds,\n async splitWalletInfo(\n walletId,\n newWalletType\n ) {\n return splitWalletInfo(ai, accountId, walletId, newWalletType)\n },\n async listSplittableWalletTypes(walletId) {\n return listSplittableWalletTypes(ai, accountId, walletId)\n },\n\n // Currency wallets:\n get activeWalletIds() {\n return ai.props.state.accounts[accountId].activeWalletIds\n },\n get archivedWalletIds() {\n return ai.props.state.accounts[accountId].archivedWalletIds\n },\n get hiddenWalletIds() {\n return ai.props.state.accounts[accountId].hiddenWalletIds\n },\n get currencyWallets() {\n return ai.props.output.accounts[accountId].currencyWallets\n },\n async createCurrencyWallet(\n type,\n opts = {}\n ) {\n return createCurrencyWallet(ai, accountId, type, opts)\n },\n async waitForCurrencyWallet(walletId) {\n return new Promise(resolve => {\n const check = () => {\n const wallet = this.currencyWallets[walletId]\n if (wallet != null) {\n resolve(wallet)\n unsubscribe()\n }\n }\n const unsubscribe = this.watch('currencyWallets', check)\n check()\n })\n },\n\n async signEthereumTransaction(\n walletId,\n transaction\n ) {\n ai.props.log.warn('Edge is signing: ', transaction)\n const { allWalletInfosFull } = accountState()\n const walletInfo = allWalletInfosFull.find(info => info.id === walletId)\n if (\n walletInfo == null ||\n walletInfo.keys == null ||\n typeof walletInfo.keys.ethereumKey !== 'string'\n ) {\n throw new Error('Cannot find the requested private key in the account')\n }\n return signEthereumTransaction(walletInfo.keys.ethereumKey, transaction)\n },\n\n async fetchSwapQuote(\n request,\n opts\n ) {\n return fetchSwapQuote(ai, accountId, request, opts)\n }\n }\n bridgifyObject(out)\n\n return out\n}\n","// \n\nimport {\n\n asArray,\n asBoolean,\n asMap,\n asNumber,\n asObject,\n asOptional,\n asString\n} from 'cleaners'\n\nimport { asBase16 } from '../../types/server-cleaners.js'\n\nimport { asJsonObject } from '../../util/file-helpers.js'\n\n\n// ---------------------------------------------------------------------\n// building-block types\n// ---------------------------------------------------------------------\n\nconst asEdgeDenomination = asObject({\n multiplier: asString,\n name: asString,\n symbol: asOptional(asString)\n})\n\nconst asEdgeToken = asObject({\n currencyCode: asString,\n denominations: asArray(asEdgeDenomination),\n displayName: asString,\n networkLocation: asOptional(asJsonObject)\n})\n\nconst asSwapSettings = asObject({\n enabled: asOptional(asBoolean, true)\n}).withRest\n\n// ---------------------------------------------------------------------\n// file types\n// ---------------------------------------------------------------------\n\n/**\n * An Airbitz Bitcoin wallet, which includes the private key & state.\n */\nexport const asLegacyWalletFile = asObject({\n SortIndex: asOptional(asNumber, 0),\n Archived: asOptional(asBoolean, false),\n BitcoinSeed: asBase16,\n MK: asBase16,\n SyncKey: asBase16\n}).withRest\n\n/**\n * An Edge wallet state file. The keys are stored in the login server.\n */\nexport const asWalletStateFile = asObject({\n id: asString,\n archived: asOptional(asBoolean),\n deleted: asOptional(asBoolean),\n hidden: asOptional(asBoolean),\n sortIndex: asOptional(asNumber)\n})\n\n/**\n * Stores settings for currency and swap plugins.\n */\nexport const asPluginSettingsFile = asObject({\n // Currency plugins:\n userSettings: asOptional(asMap(asJsonObject), {}),\n\n // Swap plugins:\n swapSettings: asOptional(asMap(asSwapSettings), {})\n}).withRest\n\n/**\n * The settings file managed by the GUI.\n */\nexport const asGuiSettingsFile = asObject({\n customTokens: asArray(\n asObject({\n contractAddress: asString,\n currencyCode: asString,\n currencyName: asString,\n denomination: asString,\n denominations: asArray(asEdgeDenomination),\n isVisible: asOptional(asBoolean, true),\n multiplier: asString,\n walletType: asOptional(asString, 'wallet:ethereum')\n })\n )\n})\n\nexport const asCustomTokensFile = asObject({\n customTokens: asObject(asObject(asEdgeToken))\n})\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// \n\nimport { justFiles } from 'disklet'\nimport { base64 } from 'rfc4648'\n\n\n\n\n\n\nimport { makeJsonFile } from '../../util/file-helpers.js'\nimport { makeKeyInfo } from '../login/keys.js'\n\nimport {\n getStorageWalletDisklet,\n hashStorageWalletFilename\n} from '../storage/storage-selectors.js'\nimport {\n asLegacyWalletFile,\n asPluginSettingsFile,\n asWalletStateFile\n} from './account-cleaners.js'\n\n\nconst legacyWalletFile = makeJsonFile(asLegacyWalletFile)\nconst walletStateFile = makeJsonFile(asWalletStateFile)\nconst pluginSettingsFile = makeJsonFile(asPluginSettingsFile)\n\nconst PLUGIN_SETTINGS_FILE = 'PluginSettings.json'\n\n\n\n\n\n\n/**\n * Returns true if `Object.assign(a, b)` would alter `a`.\n */\nfunction different(a, b) {\n for (const key of Object.keys(b)) {\n if (a[key] !== b[key]) {\n return true\n }\n }\n return false\n}\n\n/**\n * Loads the legacy wallet list from the account folder.\n */\nasync function loadWalletList(disklet) {\n const walletInfos = []\n const walletStates = {}\n const paths = justFiles(await disklet.list('Wallets'))\n await Promise.all(\n paths.map(async path => {\n const clean = await legacyWalletFile.load(disklet, path)\n if (clean == null) return\n\n const keys = {\n bitcoinKey: base64.stringify(clean.BitcoinSeed),\n dataKey: base64.stringify(clean.MK),\n format: 'bip32',\n syncKey: base64.stringify(clean.SyncKey)\n }\n\n const keyInfo = makeKeyInfo('wallet:bitcoin', keys, clean.MK)\n walletInfos.push(keyInfo)\n walletStates[keyInfo.id] = {\n sortIndex: clean.SortIndex,\n archived: clean.Archived,\n deleted: false,\n hidden: false\n }\n })\n )\n return { walletInfos, walletStates }\n}\n\n/**\n * Loads the modern key state list from the account folder.\n */\nasync function loadWalletStates(disklet) {\n const out = {}\n const paths = justFiles(await disklet.list('Keys'))\n await Promise.all(\n paths.map(async path => {\n const clean = await walletStateFile.load(disklet, path)\n if (clean == null) return\n const { id, archived, deleted, hidden, sortIndex } = clean\n out[id] = { archived, deleted, hidden, sortIndex }\n })\n )\n\n return out\n}\n\n/**\n * Loads the keyStates and legacy wallet list,\n * diffs them with the current keyStates and legacy wallet list,\n * and returns true if there are any changes.\n */\nexport async function loadAllWalletStates(\n ai,\n accountId\n) {\n const accountState = ai.props.state.accounts[accountId]\n const { accountWalletInfo, accountWalletInfos } = accountState\n\n // Read legacy files from all Airbitz repos:\n const legacyLists = await Promise.all(\n accountWalletInfos.map(info =>\n loadWalletList(getStorageWalletDisklet(ai.props.state, info.id))\n )\n )\n\n // Read states from the primary Edge repo:\n const newStates = await loadWalletStates(\n getStorageWalletDisklet(ai.props.state, accountWalletInfo.id)\n )\n\n // Merge all that information together:\n const legacyWalletInfos = [].concat(\n ...legacyLists.map(files => files.walletInfos)\n )\n const legacyWalletStates = legacyLists.map(\n files => files.walletStates\n )\n const walletStates = Object.assign({}, ...legacyWalletStates, newStates)\n\n ai.props.dispatch({\n type: 'ACCOUNT_KEYS_LOADED',\n payload: {\n accountId,\n legacyWalletInfos,\n walletStates\n }\n })\n}\n\n/**\n * Changes the wallet states within an account.\n */\nexport async function changeWalletStates(\n ai,\n accountId,\n newStates\n) {\n const { accountWalletInfo, walletStates } = ai.props.state.accounts[accountId]\n const disklet = getStorageWalletDisklet(ai.props.state, accountWalletInfo.id)\n\n // Find the changes between the new states and the old states:\n const toWrite = {}\n for (const id of Object.keys(newStates)) {\n if (walletStates[id] == null) {\n // We don't have this id, so everything is new:\n toWrite[id] = newStates[id]\n } else if (different(walletStates[id], newStates[id])) {\n // We already have this id, so only update if it has changed:\n toWrite[id] = { ...walletStates[id], ...newStates[id] }\n }\n }\n\n // If there are no changes, do nothing:\n const walletIds = Object.keys(toWrite)\n if (!walletIds.length) return\n\n await Promise.all(\n walletIds.map(async walletId => {\n const { archived, deleted, hidden, sortIndex } = toWrite[walletId]\n const walletIdHash = hashStorageWalletFilename(\n ai.props.state,\n accountWalletInfo.id,\n walletId\n )\n await walletStateFile.save(disklet, `Keys/${walletIdHash}.json`, {\n archived,\n deleted,\n hidden,\n id: walletId,\n sortIndex\n })\n })\n )\n\n ai.props.dispatch({\n type: 'ACCOUNT_CHANGED_WALLET_STATES',\n payload: { accountId, walletStates: { ...walletStates, ...toWrite } }\n })\n}\n\n/**\n * Changes a currency plugin's settings within an account.\n */\nexport async function changePluginUserSettings(\n ai,\n accountId,\n pluginId,\n userSettings\n) {\n const { accountWalletInfo } = ai.props.state.accounts[accountId]\n const disklet = getStorageWalletDisklet(ai.props.state, accountWalletInfo.id)\n\n // Write the new state to disk:\n const clean = await pluginSettingsFile.load(disklet, PLUGIN_SETTINGS_FILE)\n await pluginSettingsFile.save(disklet, PLUGIN_SETTINGS_FILE, {\n ...clean,\n userSettings: {\n ...ai.props.state.accounts[accountId].userSettings,\n [pluginId]: userSettings\n }\n })\n\n // Update Redux:\n ai.props.dispatch({\n type: 'ACCOUNT_PLUGIN_SETTINGS_CHANGED',\n payload: {\n accountId,\n pluginId,\n userSettings: { ...userSettings }\n }\n })\n}\n\n/**\n * Enables or disables swap plugins.\n */\nexport async function changeSwapSettings(\n ai,\n accountId,\n pluginId,\n swapSettings\n) {\n const { accountWalletInfo } = ai.props.state.accounts[accountId]\n const disklet = getStorageWalletDisklet(ai.props.state, accountWalletInfo.id)\n\n // Write the new state to disk:\n const clean = await pluginSettingsFile.load(disklet, PLUGIN_SETTINGS_FILE)\n await pluginSettingsFile.save(disklet, PLUGIN_SETTINGS_FILE, {\n ...clean,\n swapSettings: {\n ...ai.props.state.accounts[accountId].swapSettings,\n [pluginId]: swapSettings\n }\n })\n\n // Update Redux:\n ai.props.dispatch({\n type: 'ACCOUNT_SWAP_SETTINGS_CHANGED',\n payload: { accountId, pluginId, swapSettings }\n })\n}\n\n/**\n * Loads the settings for all the currency plugins within an account.\n */\nexport async function reloadPluginSettings(\n ai,\n accountId\n) {\n const { accountWalletInfo } = ai.props.state.accounts[accountId]\n const disklet = getStorageWalletDisklet(ai.props.state, accountWalletInfo.id)\n\n const clean = await pluginSettingsFile.load(disklet, PLUGIN_SETTINGS_FILE)\n const { userSettings, swapSettings } = _nullishCoalesce(clean, () => ( {\n userSettings: {},\n swapSettings: {}\n }))\n\n // Add the final list to Redux:\n ai.props.dispatch({\n type: 'ACCOUNT_PLUGIN_SETTINGS_LOADED',\n payload: { accountId, userSettings, swapSettings }\n })\n}\n","// \n\nimport { base64 } from 'rfc4648'\n\n\nimport { makeCreateKit } from '../login/create.js'\nimport {\n findFirstKey,\n makeAccountType,\n makeKeysKit,\n makeStorageKeyInfo\n} from '../login/keys.js'\nimport { applyKit, searchTree } from '../login/login.js'\n\n\n\n\n\n\n\nfunction checkLogin(login) {\n if (login == null || login.loginKey == null) {\n throw new Error('Incomplete login')\n }\n}\n\nexport function findAppLogin(loginTree, appId) {\n const out = searchTree(loginTree, login => login.appId === appId)\n if (!out) throw new Error(`Internal error: cannot find login for ${appId}`)\n return out\n}\n\n/**\n * Creates a child login under the provided login, with the given appId.\n */\nasync function createChildLogin(\n ai,\n loginTree,\n login,\n appId,\n wantRepo = true\n) {\n const { username } = loginTree\n checkLogin(login)\n if (username == null) throw new Error('Cannot create child: missing username')\n\n const opts = { pin: loginTree.pin }\n if (wantRepo) {\n opts.keyInfo = makeStorageKeyInfo(ai, makeAccountType(appId))\n }\n const kit = await makeCreateKit(ai, login, appId, username, opts)\n const parentKit = {\n serverPath: kit.serverPath,\n server: kit.server,\n login: { children: [kit.login] },\n stash: { children: [kit.stash] },\n loginId: login.loginId\n }\n return applyKit(ai, loginTree, parentKit)\n}\n\n/**\n * Ensures that the loginTree contains an account for the specified appId.\n * @return A `Promise`, which will resolve to a loginTree that does have\n * the requested account.\n */\nexport async function ensureAccountExists(\n ai,\n loginTree,\n appId\n) {\n const accountType = makeAccountType(appId)\n\n // If there is no app login, make that:\n const login = searchTree(loginTree, login => login.appId === appId)\n if (login == null) {\n return createChildLogin(ai, loginTree, loginTree, appId, true)\n }\n\n // Otherwise, make the repo:\n if (findFirstKey(login.keyInfos, accountType) == null) {\n checkLogin(login)\n const keyInfo = makeStorageKeyInfo(ai, accountType)\n const keysKit = makeKeysKit(ai, login, keyInfo)\n return applyKit(ai, loginTree, keysKit)\n }\n\n // Everything is fine, so do nothing:\n return loginTree\n}\n\n/**\n * Creates an `EdgeAccount` API object.\n */\nexport async function makeAccount(\n ai,\n appId,\n loginTree,\n loginType,\n opts\n) {\n const { pauseWallets = false } = opts\n const { log } = ai.props\n log.warn(\n `Login: decrypted keys for user ${base64.stringify(loginTree.loginId)}`\n )\n\n loginTree = await ensureAccountExists(ai, loginTree, appId)\n log.warn('Login: account exists for appId')\n const { username } = loginTree\n if (username == null) throw new Error('Cannot log in: missing username')\n\n // Add the login to redux:\n const rootLogin = loginTree.loginKey != null\n ai.props.dispatch({\n type: 'LOGIN',\n payload: {\n appId,\n username,\n loginKey: rootLogin\n ? loginTree.loginKey\n : findAppLogin(loginTree, appId).loginKey,\n pauseWallets,\n rootLogin,\n loginType\n }\n })\n\n return waitForAccount(ai, ai.props.state.lastAccountId)\n}\n\n/**\n * Waits for the account API to appear and returns it.\n */\nexport function waitForAccount(\n ai,\n accountId\n) {\n const out = ai.waitFor(\n (props) => {\n const accountState = props.state.accounts[accountId]\n if (accountState.loadFailure != null) throw accountState.loadFailure\n\n const accountOutput = props.output.accounts[accountId]\n if (accountOutput != null && accountOutput.accountApi != null) {\n return accountOutput.accountApi\n }\n }\n )\n return out\n}\n"," function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// \n\nimport {\n\n\n combinePixies,\n filterPixie,\n mapPixie,\n stopUpdates\n} from 'redux-pixies'\nimport { close, emit, update } from 'yaob'\n\nimport {\n\n\n\n\n asMaybeOtpError\n} from '../../types/types.js'\nimport { makePeriodicTask } from '../../util/periodic-task.js'\nimport { snooze } from '../../util/snooze.js'\nimport { syncAccount } from '../login/login.js'\nimport { waitForPlugins } from '../plugins/plugins-selectors.js'\nimport { toApiInput } from '../root-pixie.js'\nimport {\n addStorageWallet,\n syncStorageWallet\n} from '../storage/storage-actions.js'\nimport { makeAccountApi } from './account-api.js'\nimport { loadAllWalletStates, reloadPluginSettings } from './account-files.js'\nimport { initialCustomTokens } from './account-reducer.js'\nimport {\n loadBuiltinTokens,\n loadCustomTokens,\n saveCustomTokens\n} from './custom-tokens.js'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst accountPixie = combinePixies({\n accountApi(input) {\n return {\n destroy() {\n // The Pixie library stops updating props after destruction,\n // so we are stuck seeing the logged-in state. Fix that:\n const hack = input.props\n hack.state = { accounts: {} }\n\n const { accountOutput } = input.props\n if (accountOutput == null) return\n const { accountApi } = accountOutput\n if (accountApi == null) return\n\n update(accountApi)\n close(accountApi)\n close(accountApi.dataStore)\n close(accountApi.rateCache)\n const { currencyConfig, swapConfig } = accountApi\n for (const pluginId of Object.keys(currencyConfig)) {\n close(currencyConfig[pluginId])\n }\n for (const pluginId of Object.keys(swapConfig)) {\n close(swapConfig[pluginId])\n }\n },\n\n async update() {\n const ai = toApiInput(input)\n const { accountId, accountState, log } = input.props\n const { accountWalletInfos } = accountState\n\n async function loadAllFiles() {\n await Promise.all([\n loadAllWalletStates(ai, accountId),\n loadCustomTokens(ai, accountId),\n reloadPluginSettings(ai, accountId)\n ])\n }\n\n try {\n // Wait for the currency plugins (should already be loaded by now):\n await waitForPlugins(ai)\n await loadBuiltinTokens(ai, accountId)\n log.warn('Login: currency plugins exist')\n\n // Start the repo:\n await Promise.all(\n accountWalletInfos.map(info => addStorageWallet(ai, info))\n )\n log.warn('Login: synced account repos')\n\n await loadAllFiles()\n log.warn('Login: loaded files')\n\n // Create the API object:\n input.onOutput(makeAccountApi(ai, accountId))\n log.warn('Login: complete')\n } catch (error) {\n input.props.dispatch({\n type: 'ACCOUNT_LOAD_FAILED',\n payload: { accountId, error }\n })\n }\n\n return stopUpdates\n }\n }\n },\n\n // Starts & stops the sync timer for this account:\n syncTimer: filterPixie(\n (input) => {\n async function doDataSync() {\n const ai = toApiInput(input)\n const { accountId, accountState } = input.props\n const { accountWalletInfos } = accountState\n\n if (input.props.state.accounts[accountId] == null) return\n const changeLists = await Promise.all(\n accountWalletInfos.map(info => syncStorageWallet(ai, info.id))\n )\n const changes = [].concat(...changeLists)\n if (changes.length) {\n await Promise.all([\n reloadPluginSettings(ai, accountId),\n loadAllWalletStates(ai, accountId)\n ])\n }\n }\n\n async function doLoginSync() {\n const { accountId } = input.props\n await syncAccount(toApiInput(input), accountId)\n }\n\n // We don't report sync failures, since that could be annoying:\n const dataTask = makePeriodicTask(doDataSync, 30 * 1000)\n const loginTask = makePeriodicTask(doLoginSync, 30 * 1000, {\n onError(error) {\n // Only send OTP errors to the GUI:\n const otpError = asMaybeOtpError(error)\n if (otpError != null) input.props.onError(otpError)\n }\n })\n\n return {\n update() {\n const { accountOutput } = input.props\n if (accountOutput == null) return\n const { accountApi } = accountOutput\n if (accountApi == null) return\n\n // Start once the EdgeAccount API exists:\n dataTask.start({ wait: true })\n loginTask.start({ wait: true })\n },\n\n destroy() {\n dataTask.stop()\n loginTask.stop()\n }\n }\n },\n props => (props.state.paused ? undefined : props)\n ),\n\n /**\n * Watches for changes to the token state, and writes those to disk.\n *\n * The pixie system ensures that multiple `update` calls will not occur\n * at once. This way, if the GUI makes dozens of calls to `addCustomToken`,\n * we will consolidate those down to a single write to disk.\n */\n tokenSaver(input) {\n let lastTokens = initialCustomTokens\n\n return async function update() {\n const { accountId, accountState } = input.props\n\n const { customTokens } = accountState\n if (customTokens !== lastTokens && lastTokens !== initialCustomTokens) {\n await saveCustomTokens(toApiInput(input), accountId).catch(error =>\n input.props.onError(error)\n )\n await snooze(100) // Rate limiting\n }\n lastTokens = customTokens\n }\n },\n\n watcher(input) {\n let lastState\n // let lastWallets\n let lastExchangeState\n\n return () => {\n const { accountState, accountOutput } = input.props\n if (accountState == null || accountOutput == null) return\n const { accountApi } = accountOutput\n\n // TODO: Remove this once update detection is reliable:\n if (accountApi != null) update(accountApi)\n\n // General account state:\n if (lastState !== accountState) {\n lastState = accountState\n if (accountApi != null) {\n // TODO: Put this back once we solve the race condition:\n // update(accountApi)\n const { currencyConfig, swapConfig } = accountApi\n for (const pluginId of Object.keys(currencyConfig)) {\n update(currencyConfig[pluginId])\n }\n for (const pluginId of Object.keys(swapConfig)) {\n update(swapConfig[pluginId])\n }\n }\n }\n\n // Wallet list:\n // TODO: Why don't we always detect `currencyWallets` updates?\n // if (lastWallets !== input.props.output.currency.wallets) {\n // lastWallets = input.props.output.currency.wallets\n // if (accountOutput.accountApi != null) update(accountOutput.accountApi)\n // }\n\n // Exchange:\n if (lastExchangeState !== input.props.state.exchangeCache) {\n lastExchangeState = input.props.state.exchangeCache\n if (accountApi != null) {\n emit(accountApi.rateCache, 'update', undefined)\n }\n }\n }\n },\n\n currencyWallets(input) {\n let lastActiveWalletIds\n\n return () => {\n const { accountOutput, accountState } = input.props\n const { activeWalletIds } = accountState\n let dirty = lastActiveWalletIds !== activeWalletIds\n lastActiveWalletIds = activeWalletIds\n\n let lastOut = {}\n if (accountOutput != null && accountOutput.currencyWallets != null) {\n lastOut = accountOutput.currencyWallets\n }\n\n const out = {}\n const { wallets } = input.props.output.currency\n for (const walletId of activeWalletIds) {\n const api = _optionalChain([wallets, 'access', _ => _[walletId], 'optionalAccess', _2 => _2.walletApi])\n if (api !== lastOut[walletId]) dirty = true\n if (api != null) out[walletId] = api\n }\n\n if (dirty) input.onOutput(out)\n }\n }\n})\n\nexport const accounts = mapPixie(\n accountPixie,\n (props) => props.state.accountIds,\n (props, accountId) => ({\n ...props,\n accountId,\n accountState: props.state.accounts[accountId],\n accountOutput: props.output.accounts[accountId]\n })\n)\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// \n\nimport {\n\n buildReducer,\n filterReducer,\n memoizeReducer\n} from 'redux-keto'\n\n\n\n\n\n\n\n\n\nimport { compare } from '../../util/compare.js'\nimport { ethereumKeyToAddress } from '../../util/crypto/ethereum.js'\n\nimport {\n findFirstKey,\n getAllWalletInfos,\n makeAccountType\n} from '../login/keys.js'\nimport { makeLoginTree } from '../login/login.js'\n\n\n\n\n\nimport { maybeFindCurrencyPluginId } from '../plugins/plugins-selectors.js'\n\nimport { findAppLogin } from './account-init.js'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport const initialCustomTokens = {}\n\nconst accountInner\n\n\n\n = buildReducer({\n accountWalletInfo: memoizeReducer(\n (next) => next.self.appId,\n (next) => next.self.login,\n (appId, login) => {\n const type = makeAccountType(appId)\n const accountWalletInfo = findFirstKey(login.keyInfos, type)\n if (accountWalletInfo == null) {\n throw new Error(`Cannot find a \"${type}\" repo`)\n }\n return accountWalletInfo\n }\n ),\n\n accountWalletInfos: memoizeReducer(\n (next) => next.self.appId,\n (next) => next.self.login,\n (appId, login) => {\n // Wallets created in Edge that then log into Airbitz or BitcoinPay\n // might end up with wallets stored in the wrong account repo.\n // This code attempts to locate those repos.\n const walletTypes = [makeAccountType(appId)]\n if (appId === '') walletTypes.push('account:repo:co.airbitz.wallet', '')\n return login.keyInfos.filter(info => walletTypes.indexOf(info.type) >= 0)\n }\n ),\n\n allWalletInfosFull: memoizeReducer(\n (next) => next.self.login,\n (next) => next.self.legacyWalletInfos,\n (next) => next.self.walletStates,\n (\n login,\n legacyWalletInfos,\n walletStates\n ) => {\n const values = getAllWalletInfos(login, legacyWalletInfos)\n const { walletInfos, appIdMap } = values\n\n return walletInfos.map(info => ({\n appId: getLast(appIdMap[info.id]),\n appIds: appIdMap[info.id],\n archived: false,\n deleted: false,\n hidden: false,\n sortIndex: walletInfos.length,\n ...walletStates[info.id],\n ...info\n }))\n }\n ),\n\n allWalletInfosClean: memoizeReducer(\n (next) => next.self.allWalletInfosFull,\n (walletInfos) =>\n walletInfos.map(info => {\n const keys =\n info.type === 'wallet:ethereum' &&\n typeof info.keys.ethereumKey === 'string'\n ? { ethereumAddress: ethereumKeyToAddress(info.keys.ethereumKey) }\n : {}\n return { ...info, keys }\n })\n ),\n\n currencyWalletIds: memoizeReducer(\n (next) => next.self.walletInfos,\n (next) => next.root.plugins.currency,\n (walletInfos, plugins) =>\n Object.keys(walletInfos)\n .filter(walletId => {\n const info = walletInfos[walletId]\n const pluginId = maybeFindCurrencyPluginId(plugins, info.type)\n return !info.deleted && pluginId != null\n })\n .sort((walletId1, walletId2) => {\n const info1 = walletInfos[walletId1]\n const info2 = walletInfos[walletId2]\n return info1.sortIndex - info2.sortIndex\n })\n ),\n\n activeWalletIds: memoizeReducer(\n (next) => next.self.walletInfos,\n (next) => next.self.currencyWalletIds,\n (next) => next.self.keysLoaded,\n (walletInfos, ids, keysLoaded) =>\n keysLoaded ? ids.filter(id => !walletInfos[id].archived) : []\n ),\n\n archivedWalletIds: memoizeReducer(\n (next) => next.self.walletInfos,\n (next) => next.self.currencyWalletIds,\n (next) => next.self.keysLoaded,\n (walletInfos, ids, keysLoaded) =>\n keysLoaded ? ids.filter(id => walletInfos[id].archived) : []\n ),\n\n hiddenWalletIds: memoizeReducer(\n (next) => next.self.walletInfos,\n (next) => next.self.currencyWalletIds,\n (next) => next.self.keysLoaded,\n (walletInfos, ids, keysLoaded) =>\n keysLoaded ? ids.filter(id => walletInfos[id].hidden) : []\n ),\n\n keysLoaded(state = false, action) {\n return action.type === 'ACCOUNT_KEYS_LOADED' ? true : state\n },\n\n legacyWalletInfos(state = [], action) {\n return action.type === 'ACCOUNT_KEYS_LOADED'\n ? action.payload.legacyWalletInfos\n : state\n },\n\n walletInfos: memoizeReducer(\n (next) => next.self.allWalletInfosFull,\n (walletInfos) => {\n const out = {}\n for (const info of walletInfos) {\n out[info.id] = info\n }\n return out\n }\n ),\n\n walletStates(state = {}, action) {\n return action.type === 'ACCOUNT_CHANGED_WALLET_STATES' ||\n action.type === 'ACCOUNT_KEYS_LOADED'\n ? action.payload.walletStates\n : state\n },\n\n pauseWallets(state = false, action) {\n return action.type === 'LOGIN' ? action.payload.pauseWallets : state\n },\n\n appId(state = '', action) {\n return action.type === 'LOGIN' ? action.payload.appId : state\n },\n\n loadFailure(state = null, action) {\n return action.type === 'ACCOUNT_LOAD_FAILED' ? action.payload.error : state\n },\n\n login: memoizeReducer(\n (next) => next.self.appId,\n (next) => next.self.loginTree,\n (appId, loginTree) => findAppLogin(loginTree, appId)\n ),\n\n loginKey(state = new Uint8Array(0), action) {\n return action.type === 'LOGIN' ? action.payload.loginKey : state\n },\n\n loginTree: memoizeReducer(\n (next) => next.self.appId,\n (next) => next.self.loginKey,\n (next) => next.self.rootLogin,\n (next) => next.root.login.stashes[next.self.username],\n (appId, loginKey, rootLogin, stashTree) =>\n makeLoginTree(stashTree, loginKey, rootLogin ? '' : appId)\n ),\n\n loginType(state = 'newAccount', action) {\n return action.type === 'LOGIN' ? action.payload.loginType : state\n },\n\n rootLogin(state = true, action) {\n return action.type === 'LOGIN' ? action.payload.rootLogin : state\n },\n\n username(state = '', action) {\n return action.type === 'LOGIN' ? action.payload.username : state\n },\n\n allTokens(\n state = {},\n action,\n next,\n prev\n ) {\n const { builtinTokens, customTokens } = next.self\n\n // Roll our own `memoizeReducer` implementation,\n // so we can minimize our diff as much as possible:\n if (\n prev.self == null ||\n builtinTokens !== prev.self.builtinTokens ||\n customTokens !== prev.self.customTokens\n ) {\n const out = { ...state }\n for (const pluginId of Object.keys(next.root.plugins.currency)) {\n if (\n prev.self == null ||\n builtinTokens[pluginId] !== prev.self.builtinTokens[pluginId] ||\n customTokens[pluginId] !== prev.self.customTokens[pluginId]\n ) {\n out[pluginId] = {\n ...customTokens[pluginId],\n ...builtinTokens[pluginId]\n }\n }\n }\n return out\n }\n return state\n },\n\n builtinTokens(state = {}, action) {\n switch (action.type) {\n case 'ACCOUNT_BUILTIN_TOKENS_LOADED': {\n const { pluginId, tokens } = action.payload\n return { ...state, [pluginId]: tokens }\n }\n }\n return state\n },\n\n customTokens(\n state = initialCustomTokens,\n action\n ) {\n switch (action.type) {\n case 'ACCOUNT_CUSTOM_TOKENS_LOADED': {\n const { customTokens } = action.payload\n return customTokens\n }\n case 'ACCOUNT_CUSTOM_TOKEN_ADDED': {\n const { pluginId, tokenId, token } = action.payload\n const oldList = _nullishCoalesce(state[pluginId], () => ( {}))\n\n // Has anything changed?\n if (compare(oldList[tokenId], token)) return state\n\n const newList = { ...oldList, [tokenId]: token }\n return { ...state, [pluginId]: newList }\n }\n case 'ACCOUNT_CUSTOM_TOKEN_REMOVED': {\n const { pluginId, tokenId } = action.payload\n const oldList = _nullishCoalesce(state[pluginId], () => ( {}))\n\n // Has anything changed?\n if (oldList[tokenId] == null) return state\n\n const { [tokenId]: unused, ...newList } = oldList\n return { ...state, [pluginId]: newList }\n }\n }\n return state\n },\n\n swapSettings(state = {}, action) {\n switch (action.type) {\n case 'ACCOUNT_PLUGIN_SETTINGS_LOADED':\n return action.payload.swapSettings\n\n case 'ACCOUNT_SWAP_SETTINGS_CHANGED': {\n const { pluginId, swapSettings } = action.payload\n const out = { ...state }\n out[pluginId] = swapSettings\n return out\n }\n }\n return state\n },\n\n userSettings(state = {}, action) {\n switch (action.type) {\n case 'ACCOUNT_PLUGIN_SETTINGS_CHANGED': {\n const { pluginId, userSettings } = action.payload\n const out = { ...state }\n out[pluginId] = userSettings\n return out\n }\n\n case 'ACCOUNT_PLUGIN_SETTINGS_LOADED':\n return action.payload.userSettings\n }\n return state\n }\n})\n\nexport const accountReducer\n\n\n\n = filterReducer(\n accountInner,\n (action, next) => {\n if (\n /^ACCOUNT_/.test(action.type) &&\n action.payload != null &&\n action.payload.accountId === next.id\n ) {\n return action\n }\n\n if (action.type === 'LOGIN' && next.root.lastAccountId === next.id) {\n return action\n }\n\n return { type: 'UPDATE_NEXT' }\n }\n)\n\nfunction getLast(array) {\n return array[array.length - 1]\n}\n"," function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// \n\nimport { asMaybe, asObject, asString } from 'cleaners'\n\n\n\n\n\n\n\n\n\nimport { makeJsonFile } from '../../util/file-helpers.js'\nimport {\n getCurrencyTools,\n maybeFindCurrencyPluginId\n} from '../plugins/plugins-selectors.js'\n\nimport { getStorageWalletDisklet } from '../storage/storage-selectors.js'\nimport { asCustomTokensFile, asGuiSettingsFile } from './account-cleaners.js'\n\nconst customTokensFile = makeJsonFile(asCustomTokensFile)\nconst guiSettingsFile = makeJsonFile(asGuiSettingsFile)\nconst CUSTOM_TOKENS_FILE = 'CustomTokens.json'\nconst GUI_SETTINGS_FILE = 'Settings.json'\n\n/**\n * The `networkLocation` field is untyped,\n * but many currency plugins will put a contract address in there.\n */\nconst asMaybeContractLocation = asMaybe(\n asObject({\n contractAddress: asString\n })\n)\n\n/**\n * We need to validate the token before we can add it.\n *\n * If the plugin has a `getTokenId` method, just use that.\n *\n * Otherwise, we need to call `EdgeCurrencyEngine.addCustomToken`\n * to validate the contract address, and then guess the tokenId from that.\n */\nexport async function getTokenId(\n ai,\n pluginId,\n token\n) {\n // The normal code path:\n const tools = await getCurrencyTools(ai, pluginId)\n if (tools.getTokenId != null) {\n return await tools.getTokenId(token)\n }\n\n // Find an engine (any engine) to validate our token:\n const engine = findEngine(ai, pluginId)\n if (engine == null) {\n throw new Error(\n 'A wallet must exist before adding tokens to a legacy currency plugin'\n )\n }\n\n // Validate the token:\n const tokenInfo = makeTokenInfo(token)\n if (tokenInfo == null) {\n throw new Error(\n 'A token must have a contract address to be added to a legacy currency plugin'\n )\n }\n await engine.addCustomToken({ ...tokenInfo, ...token })\n\n return contractToTokenId(tokenInfo.contractAddress)\n}\n\nexport function contractToTokenId(contractAddress) {\n return contractAddress.toLowerCase().replace(/^0x/, '')\n}\n\nexport function upgradeTokenInfo(info) {\n const { currencyCode, currencyName, contractAddress, multiplier } = info\n\n return {\n currencyCode,\n denominations: [{ multiplier, name: currencyCode }],\n displayName: currencyName,\n networkLocation: { contractAddress }\n }\n}\n\nfunction upgradeMetaTokens(metaTokens) {\n const out = {}\n for (const metaToken of metaTokens) {\n const { contractAddress } = metaToken\n if (contractAddress == null) continue\n out[contractToTokenId(contractAddress)] = {\n currencyCode: metaToken.currencyCode,\n denominations: metaToken.denominations,\n displayName: metaToken.currencyName,\n networkLocation: { contractAddress: metaToken.contractAddress }\n }\n }\n return out\n}\n\nexport function makeMetaToken(token) {\n const { currencyCode, displayName, denominations, networkLocation } = token\n const cleanLocation = asMaybeContractLocation(networkLocation)\n\n return {\n currencyCode,\n currencyName: displayName,\n denominations,\n contractAddress: _optionalChain([cleanLocation, 'optionalAccess', _ => _.contractAddress])\n }\n}\n\nexport function makeMetaTokens(tokens = {}) {\n const out = []\n for (const tokenId of Object.keys(tokens)) {\n out.push(makeMetaToken(tokens[tokenId]))\n }\n return out\n}\n\nexport function makeTokenInfo(token) {\n const { currencyCode, displayName, denominations, networkLocation } = token\n const cleanLocation = asMaybeContractLocation(networkLocation)\n if (cleanLocation == null) return\n\n return {\n currencyCode,\n currencyName: displayName,\n multiplier: denominations[0].multiplier,\n contractAddress: cleanLocation.contractAddress\n }\n}\n\nexport async function loadBuiltinTokens(\n ai,\n accountId\n) {\n const { dispatch, state } = ai.props\n\n // Load builtin tokens:\n await Promise.all(\n Object.keys(state.plugins.currency).map(async pluginId => {\n const plugin = state.plugins.currency[pluginId]\n const tokens =\n plugin.getBuiltinTokens == null\n ? upgradeMetaTokens(plugin.currencyInfo.metaTokens)\n : await plugin.getBuiltinTokens()\n dispatch({\n type: 'ACCOUNT_BUILTIN_TOKENS_LOADED',\n payload: { accountId, pluginId, tokens }\n })\n })\n )\n}\n\nfunction findEngine(ai, pluginId) {\n for (const walletId of Object.keys(ai.props.state.currency.wallets)) {\n const walletOutput = ai.props.output.currency.wallets[walletId]\n if (\n walletOutput != null &&\n walletOutput.engine != null &&\n ai.props.state.currency.wallets[walletId].pluginId === pluginId\n ) {\n return walletOutput.engine\n }\n }\n}\n\nasync function loadGuiTokens(\n ai,\n accountId\n) {\n const { state } = ai.props\n const { accountWalletInfo } = state.accounts[accountId]\n const disklet = getStorageWalletDisklet(state, accountWalletInfo.id)\n\n const file = await guiSettingsFile.load(disklet, GUI_SETTINGS_FILE)\n if (file == null) return {}\n\n const out = {}\n for (const guiToken of file.customTokens) {\n if (!guiToken.isVisible) continue\n\n // Find the plugin:\n const pluginId = maybeFindCurrencyPluginId(\n state.plugins.currency,\n guiToken.walletType\n )\n if (pluginId == null) continue\n if (out[pluginId] == null) out[pluginId] = {}\n\n // Add it to the list:\n const tokenId = contractToTokenId(guiToken.contractAddress)\n out[pluginId][tokenId] = {\n currencyCode: guiToken.currencyCode,\n denominations: guiToken.denominations,\n displayName: guiToken.currencyName,\n networkLocation: {\n contractAddress: guiToken.contractAddress\n }\n }\n }\n return out\n}\n\nexport async function loadCustomTokens(\n ai,\n accountId\n) {\n const { dispatch, state } = ai.props\n const { accountWalletInfo } = state.accounts[accountId]\n const disklet = getStorageWalletDisklet(state, accountWalletInfo.id)\n\n // Load the file:\n const file = await customTokensFile.load(disklet, CUSTOM_TOKENS_FILE)\n if (file != null) {\n const { customTokens } = file\n dispatch({\n type: 'ACCOUNT_CUSTOM_TOKENS_LOADED',\n payload: { accountId, customTokens }\n })\n } else {\n // Fall back on the legacy file:\n const customTokens = await loadGuiTokens(ai, accountId)\n dispatch({\n type: 'ACCOUNT_CUSTOM_TOKENS_LOADED',\n payload: { accountId, customTokens }\n })\n }\n}\n\nexport async function saveCustomTokens(\n ai,\n accountId\n) {\n const { state } = ai.props\n const { accountWalletInfo } = state.accounts[accountId]\n const disklet = getStorageWalletDisklet(state, accountWalletInfo.id)\n const { customTokens } = ai.props.state.accounts[accountId]\n\n // Refresh the file:\n const file = await customTokensFile.load(disklet, CUSTOM_TOKENS_FILE)\n customTokensFile.save(disklet, CUSTOM_TOKENS_FILE, { ...file, customTokens })\n}\n","// \n\nimport { asObject, asString } from 'cleaners'\nimport { justFiles, justFolders } from 'disklet'\nimport { bridgifyObject } from 'yaob'\n\n\nimport { makeJsonFile } from '../../util/file-helpers.js'\n\nimport {\n getStorageWalletDisklet,\n hashStorageWalletFilename\n} from '../storage/storage-selectors.js'\n\n/**\n * Each data store folder has a \"Name.json\" file with this format.\n */\nconst storeIdFile = makeJsonFile(\n asObject({\n name: asString\n })\n)\n\n/**\n * The items saved in a data store have this format.\n */\nconst storeItemFile = makeJsonFile(\n asObject({\n key: asString,\n data: asString\n })\n)\n\nexport function makeDataStoreApi(\n ai,\n accountId\n) {\n const { accountWalletInfo } = ai.props.state.accounts[accountId]\n const disklet = getStorageWalletDisklet(ai.props.state, accountWalletInfo.id)\n\n // Path manipulation:\n const hashName = (data) =>\n hashStorageWalletFilename(ai.props.state, accountWalletInfo.id, data)\n const getStorePath = (storeId) =>\n `Plugins/${hashName(storeId)}`\n const getItemPath = (storeId, itemId) =>\n `${getStorePath(storeId)}/${hashName(itemId)}.json`\n\n const out = {\n async deleteItem(storeId, itemId) {\n await disklet.delete(getItemPath(storeId, itemId))\n },\n\n async deleteStore(storeId) {\n await disklet.delete(getStorePath(storeId))\n },\n\n async listItemIds(storeId) {\n const itemIds = []\n const paths = justFiles(await disklet.list(getStorePath(storeId)))\n await Promise.all(\n paths.map(async path => {\n const clean = await storeItemFile.load(disklet, path)\n if (clean != null) itemIds.push(clean.key)\n })\n )\n return itemIds\n },\n\n async listStoreIds() {\n const storeIds = []\n const paths = justFolders(await disklet.list('Plugins'))\n await Promise.all(\n paths.map(async path => {\n const clean = await storeIdFile.load(disklet, `${path}/Name.json`)\n if (clean != null) storeIds.push(clean.name)\n })\n )\n return storeIds\n },\n\n async getItem(storeId, itemId) {\n const clean = await storeItemFile.load(\n disklet,\n getItemPath(storeId, itemId)\n )\n if (clean == null) throw new Error(`No item named \"${itemId}\"`)\n return clean.data\n },\n\n async setItem(\n storeId,\n itemId,\n value\n ) {\n // Set up the plugin folder, if needed:\n const namePath = `${getStorePath(storeId)}/Name.json`\n const clean = await storeIdFile.load(disklet, namePath)\n if (clean == null) {\n await storeIdFile.save(disklet, namePath, { name: storeId })\n } else if (clean.name !== storeId) {\n throw new Error(`Warning: folder name doesn't match for ${storeId}`)\n }\n\n // Set up the actual item:\n await storeItemFile.save(disklet, getItemPath(storeId, itemId), {\n key: itemId,\n data: value\n })\n }\n }\n bridgifyObject(out)\n\n return out\n}\n","// \n\nimport { uncleaner } from 'cleaners'\nimport { bridgifyObject } from 'yaob'\n\n\n\n\n\n\n\nimport { asLobbyLoginPayload } from '../login/edge.js'\nimport { fetchLobbyRequest, sendLobbyReply } from '../login/lobby.js'\nimport { sanitizeLoginStash, syncAccount } from '../login/login.js'\nimport { getStashById } from '../login/login-selectors.js'\n\nimport { ensureAccountExists, findAppLogin } from './account-init.js'\n\nconst wasLobbyLoginPayload = uncleaner(asLobbyLoginPayload)\n\n\n\n\n\n\nconst infoServerUri = 'https://info1.edge.app'\n\n/**\n * Translate an appId into a user-presentable icon and string.\n */\nexport async function fetchAppIdInfo(\n ai,\n appId\n) {\n try {\n const url = `${infoServerUri}/v1/appIdInfo/${appId}`\n const response = await ai.props.io.fetch(url)\n if (!response.ok) {\n throw new Error(`Fetching ${url} returned ${response.status}`)\n }\n\n const { appName, imageUrl } = await response.json()\n if (!appName) throw new Error(`No appName in appId lookup response.`)\n\n return { displayImageUrl: imageUrl, displayName: appName }\n } catch (e) {\n ai.props.onError(e)\n\n // If we can't find the info, just show the appId as a fallback:\n return { displayName: appId }\n }\n}\n\n/**\n * Performs an edge login, approving the request in the provided lobby JSON.\n */\nasync function approveLoginRequest(\n ai,\n accountId,\n appId,\n lobbyId,\n lobbyJson\n) {\n const { loginTree } = ai.props.state.accounts[accountId]\n\n // Ensure that the login object & account repo exist:\n await syncAccount(ai, accountId)\n\n const newLoginTree = await ensureAccountExists(ai, loginTree, appId)\n const requestedLogin = findAppLogin(newLoginTree, appId)\n if (!requestedLogin) {\n throw new Error('Failed to create the requested login object')\n }\n\n // Create a sanitized login stash object:\n const { stashTree } = getStashById(ai, loginTree.loginId)\n const loginStash = sanitizeLoginStash(stashTree, appId)\n\n // Send the reply:\n const replyData = wasLobbyLoginPayload({\n appId,\n loginKey: requestedLogin.loginKey,\n loginStash\n })\n await sendLobbyReply(ai, lobbyId, lobbyJson, replyData).then(() => {\n let timeout\n const accountApi = ai.props.output.accounts[accountId].accountApi\n if (accountApi != null) {\n accountApi.on('close', () => {\n if (timeout != null) clearTimeout(timeout)\n })\n }\n\n timeout = setTimeout(() => {\n timeout = undefined\n syncAccount(ai, accountId)\n .then(() => {\n timeout = setTimeout(() => {\n timeout = undefined\n syncAccount(ai, accountId).catch(e => ai.props.onError(e))\n }, 20000)\n })\n .catch(e => ai.props.onError(e))\n }, 10000)\n })\n}\n\n/**\n * Fetches the contents of a lobby and returns them as an EdgeLobby API.\n */\nexport async function makeLobbyApi(\n ai,\n accountId,\n lobbyId\n) {\n // Look up the lobby on the server:\n const lobbyJson = await fetchLobbyRequest(ai, lobbyId)\n\n // If the lobby has a login request, set up that API:\n let loginRequest\n if (lobbyJson.loginRequest != null) {\n const { appId } = lobbyJson.loginRequest\n if (typeof appId !== 'string') throw new TypeError('Invalid login request')\n const { displayName, displayImageUrl } = await fetchAppIdInfo(ai, appId)\n\n // Make the API:\n loginRequest = {\n appId,\n displayName,\n displayImageUrl,\n approve() {\n return approveLoginRequest(ai, accountId, appId, lobbyId, lobbyJson)\n }\n }\n bridgifyObject(loginRequest)\n }\n\n const out = {\n loginRequest\n }\n bridgifyObject(out)\n\n return out\n}\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// \n\nimport { Bridgeable, bridgifyObject } from 'yaob'\n\n\n\n\n\n\n\n\n\n\n\nimport { uniqueStrings } from '../currency/wallet/enabled-tokens.js'\nimport { getCurrencyTools } from '../plugins/plugins-selectors.js'\n\nimport {\n changePluginUserSettings,\n changeSwapSettings\n} from './account-files.js'\nimport { getTokenId } from './custom-tokens.js'\n\nconst emptyTokens = {}\n\n/**\n * Access to an individual currency plugin's methods.\n */\nexport class CurrencyConfig extends Bridgeable {\n \n \n \n\n \n\n constructor(ai, accountId, pluginId) {\n super()\n this._ai = ai\n this._accountId = accountId\n this._pluginId = pluginId\n\n const { otherMethods } = ai.props.state.plugins.currency[pluginId]\n if (otherMethods != null) {\n bridgifyObject(otherMethods)\n this.otherMethods = otherMethods\n } else {\n this.otherMethods = {}\n }\n }\n\n get currencyInfo() {\n return this._ai.props.state.plugins.currency[this._pluginId].currencyInfo\n }\n\n get allTokens() {\n const { state } = this._ai.props\n const { _accountId: accountId, _pluginId: pluginId } = this\n return state.accounts[accountId].allTokens[pluginId]\n }\n\n get builtinTokens() {\n const { state } = this._ai.props\n const { _accountId: accountId, _pluginId: pluginId } = this\n return state.accounts[accountId].builtinTokens[pluginId]\n }\n\n get customTokens() {\n const { state } = this._ai.props\n const { _accountId: accountId, _pluginId: pluginId } = this\n return _nullishCoalesce(state.accounts[accountId].customTokens[pluginId], () => ( emptyTokens))\n }\n\n async addCustomToken(token) {\n const { _accountId: accountId, _ai: ai, _pluginId: pluginId } = this\n const tokenId = await getTokenId(ai, pluginId, token)\n\n ai.props.dispatch({\n type: 'ACCOUNT_CUSTOM_TOKEN_ADDED',\n payload: { accountId, pluginId, tokenId, token }\n })\n return tokenId\n }\n\n async changeCustomToken(tokenId, token) {\n const { _accountId: accountId, _ai: ai, _pluginId: pluginId } = this\n const oldToken =\n ai.props.state.accounts[accountId].customTokens[pluginId][tokenId]\n if (oldToken == null) {\n throw new Error(`There is no token with id \"${tokenId}\"`)\n }\n const newTokenId = await getTokenId(ai, pluginId, token)\n ai.props.dispatch({\n type: 'ACCOUNT_CUSTOM_TOKEN_ADDED',\n payload: { accountId, pluginId, tokenId: newTokenId, token }\n })\n\n // Do we need to tweak enabled tokens?\n if (oldToken.currencyCode !== token.currencyCode) {\n const { wallets } = ai.props.state.currency\n for (const walletId of Object.keys(wallets)) {\n const walletState = wallets[walletId]\n if (\n walletState.accountId !== accountId ||\n walletState.pluginId !== pluginId ||\n walletState.enabledTokens.indexOf(oldToken.currencyCode) < 0\n ) {\n continue\n }\n\n // We rely on redux to check for actual differences,\n // and to trigger the matching disk & engine updates if needed:\n ai.props.dispatch({\n type: 'CURRENCY_WALLET_ENABLED_TOKENS_CHANGED',\n payload: {\n walletId,\n currencyCodes: uniqueStrings(\n [...walletState.enabledTokens, token.currencyCode],\n [oldToken.currencyCode]\n )\n }\n })\n }\n }\n\n // Remove the old token if the tokenId changed:\n if (newTokenId !== tokenId) {\n ai.props.dispatch({\n type: 'ACCOUNT_CUSTOM_TOKEN_REMOVED',\n payload: { accountId, pluginId, tokenId }\n })\n }\n }\n\n async removeCustomToken(tokenId) {\n const { _accountId: accountId, _ai: ai, _pluginId: pluginId } = this\n\n ai.props.dispatch({\n type: 'ACCOUNT_CUSTOM_TOKEN_REMOVED',\n payload: { accountId, pluginId, tokenId }\n })\n }\n\n get userSettings() {\n const accountState = this._ai.props.state.accounts[this._accountId]\n return accountState.userSettings[this._pluginId]\n }\n\n async changeUserSettings(settings) {\n await changePluginUserSettings(\n this._ai,\n this._accountId,\n this._pluginId,\n settings\n )\n }\n\n async importKey(\n userInput,\n opts = {}\n ) {\n const tools = await getCurrencyTools(this._ai, this._pluginId)\n\n if (tools.importPrivateKey == null) {\n throw new Error('This wallet does not support importing keys')\n }\n const keys = await tools.importPrivateKey(userInput, opts.keyOptions)\n return { ...keys, imported: true }\n }\n}\n\nexport class SwapConfig extends Bridgeable {\n \n \n \n\n constructor(ai, accountId, pluginId) {\n super()\n this._ai = ai\n this._accountId = accountId\n this._pluginId = pluginId\n }\n\n get enabled() {\n const { swapSettings } = this._ai.props.state.accounts[this._accountId]\n const { enabled = true } =\n swapSettings[this._pluginId] != null ? swapSettings[this._pluginId] : {}\n return enabled\n }\n\n get needsActivation() {\n const plugin = this._ai.props.state.plugins.swap[this._pluginId]\n if (plugin.checkSettings == null) return false\n\n const accountState = this._ai.props.state.accounts[this._accountId]\n const settings = accountState.userSettings[this._pluginId] || {}\n return !!plugin.checkSettings(settings).needsActivation\n }\n\n get swapInfo() {\n return this._ai.props.state.plugins.swap[this._pluginId].swapInfo\n }\n\n get userSettings() {\n const accountState = this._ai.props.state.accounts[this._accountId]\n return accountState.userSettings[this._pluginId]\n }\n\n async changeEnabled(enabled) {\n const account = this._ai.props.state.accounts[this._accountId]\n return changeSwapSettings(this._ai, this._accountId, this._pluginId, {\n ...account.swapSettings[this._pluginId],\n enabled\n })\n }\n\n async changeUserSettings(settings) {\n await changePluginUserSettings(\n this._ai,\n this._accountId,\n this._pluginId,\n settings\n )\n }\n}\n","// \n\nimport { bridgifyObject, onMethod, watchMethod } from 'yaob'\n\nimport { checkPasswordRules, fixUsername } from '../../client-side.js'\n\n\n\n\n\n\n\n\n\n\n\nimport { base58 } from '../../util/encoding.js'\nimport { findAppLogin, makeAccount } from '../account/account-init.js'\nimport { createLogin, usernameAvailable } from '../login/create.js'\nimport { requestEdgeLogin } from '../login/edge.js'\nimport { makeLoginTree, syncLogin } from '../login/login.js'\nimport { fetchLoginMessages } from '../login/login-messages.js'\nimport { getStash } from '../login/login-selectors.js'\nimport { removeStash, saveStash } from '../login/login-stash.js'\nimport { resetOtp } from '../login/otp.js'\nimport { loginPassword } from '../login/password.js'\nimport { findPin2Stash, loginPin2 } from '../login/pin2.js'\nimport {\n getQuestions2,\n listRecoveryQuestionChoices,\n loginRecovery2\n} from '../login/recovery2.js'\n\nimport { EdgeInternalStuff } from './internal-api.js'\n\nexport function makeContextApi(ai) {\n const appId = ai.props.state.login.appId\n const $internalStuff = new EdgeInternalStuff(ai)\n let pauseTimer\n\n const out = {\n on: onMethod,\n watch: watchMethod,\n\n appId,\n\n async close() {\n ai.props.close()\n },\n\n $internalStuff,\n\n fixUsername,\n\n get localUsers() {\n return ai.props.state.login.localUsers\n },\n\n async listUsernames() {\n return Object.keys(ai.props.state.login.stashes)\n },\n\n async deleteLocalAccount(username) {\n // Safety check:\n const fixedName = fixUsername(username)\n for (const accountId of ai.props.state.accountIds) {\n if (ai.props.state.accounts[accountId].username === fixedName) {\n throw new Error('Cannot remove logged-in user')\n }\n }\n\n return removeStash(ai, username)\n },\n\n async usernameAvailable(username) {\n return usernameAvailable(ai, username)\n },\n\n async createAccount(\n username,\n password,\n pin,\n opts = {}\n ) {\n const loginTree = await createLogin(ai, username, opts, { password, pin })\n return makeAccount(ai, appId, loginTree, 'newAccount', opts)\n },\n\n async loginWithKey(\n username,\n loginKey,\n opts = {}\n ) {\n const { now = new Date() } = opts\n\n const stashTree = getStash(ai, username)\n const loginTree = makeLoginTree(stashTree, base58.parse(loginKey), appId)\n stashTree.lastLogin = now\n saveStash(ai, stashTree).catch(() => {})\n\n // Since we logged in offline, update the stash in the background:\n syncLogin(ai, loginTree, findAppLogin(loginTree, appId)).catch(e =>\n ai.props.onError(e)\n )\n\n return makeAccount(ai, appId, loginTree, 'keyLogin', opts)\n },\n\n async loginWithPassword(\n username,\n password,\n opts = {}\n ) {\n const loginTree = await loginPassword(ai, username, password, opts)\n return makeAccount(ai, appId, loginTree, 'passwordLogin', opts)\n },\n\n checkPasswordRules,\n\n async pinLoginEnabled(username) {\n const loginStash = getStash(ai, username)\n return findPin2Stash(loginStash, appId) != null\n },\n\n async loginWithPIN(\n username,\n pin,\n opts = {}\n ) {\n const loginTree = await loginPin2(ai, appId, username, pin, opts)\n return makeAccount(ai, appId, loginTree, 'pinLogin', opts)\n },\n\n async loginWithRecovery2(\n recovery2Key,\n username,\n answers,\n opts = {}\n ) {\n const loginTree = await loginRecovery2(\n ai,\n base58.parse(recovery2Key),\n username,\n answers,\n opts\n )\n return makeAccount(ai, appId, loginTree, 'recoveryLogin', opts)\n },\n\n async fetchRecovery2Questions(\n recovery2Key,\n username\n ) {\n return getQuestions2(ai, base58.parse(recovery2Key), username)\n },\n\n async listRecoveryQuestionChoices() {\n return listRecoveryQuestionChoices(ai)\n },\n\n async requestEdgeLogin(\n opts\n ) {\n return requestEdgeLogin(ai, appId, opts)\n },\n\n async requestOtpReset(\n username,\n otpResetToken\n ) {\n return resetOtp(ai, username, otpResetToken)\n },\n\n async fetchLoginMessages() {\n return fetchLoginMessages(ai)\n },\n\n get paused() {\n return ai.props.state.paused\n },\n\n async changePaused(\n paused,\n opts = {}\n ) {\n const { secondsDelay = 0 } = opts\n\n // If a timer is already running, stop that:\n if (pauseTimer != null) {\n clearTimeout(pauseTimer)\n pauseTimer = undefined\n }\n\n // If the state is the same, do nothing:\n if (ai.props.state.paused === paused) return\n\n // Otherwise, make the change:\n if (secondsDelay === 0) {\n ai.props.dispatch({ type: 'PAUSE', payload: paused })\n } else {\n pauseTimer = setTimeout(() => {\n pauseTimer = undefined\n ai.props.dispatch({ type: 'PAUSE', payload: paused })\n }, secondsDelay * 1000)\n }\n },\n\n get logSettings() {\n return ai.props.state.logSettings\n },\n\n async changeLogSettings(settings) {\n const newSettings = { ...ai.props.state.logSettings, ...settings }\n ai.props.dispatch({ type: 'CHANGE_LOG_SETTINGS', payload: newSettings })\n }\n }\n bridgifyObject(out)\n\n return out\n}\n","// \n\nimport { combinePixies, stopUpdates } from 'redux-pixies'\nimport { close, update } from 'yaob'\n\n\n\nimport { makeContextApi } from './context-api.js'\n\n\n\n\n\nexport const context = combinePixies({\n api(ai) {\n return {\n destroy() {\n close(ai.props.output.context.api)\n },\n update() {\n ai.onOutput(makeContextApi(ai))\n return stopUpdates\n }\n }\n },\n\n watcher(ai) {\n let lastLocalUsers, lastPaused, lastLogSettings\n\n return () => {\n if (\n lastLocalUsers !== ai.props.state.login.localUsers ||\n lastPaused !== ai.props.state.paused ||\n lastLogSettings !== ai.props.state.logSettings\n ) {\n lastLocalUsers = ai.props.state.login.localUsers\n lastPaused = ai.props.state.paused\n lastLogSettings = ai.props.state.logSettings\n if (ai.props.output.context.api != null) {\n update(ai.props.output.context.api)\n }\n }\n }\n }\n})\n","\n\n\nimport { Bridgeable, bridgifyObject, close, emit, update } from 'yaob'\n\n\n\n\n\n\n\n\n\n\nimport {\n\n fetchLobbyRequest,\n makeLobby,\n sendLobbyReply\n} from '../login/lobby.js'\nimport { loginFetch } from '../login/login-fetch.js'\nimport { hashUsername } from '../login/login-selectors.js'\n\nimport { makeRepoPaths, syncRepo } from '../storage/repo.js'\n\n/**\n * The requesting side of an Edge login lobby.\n * The `replies` property will update as replies come in.\n */\nclass EdgeLobby extends Bridgeable\n\n\n\n\n\n {\n \n \n\n constructor(lobby) {\n super()\n this._lobby = lobby\n\n this._cleanups = [\n lobby.close,\n lobby.on('reply', reply => update(this, 'replies')),\n lobby.on('error', error => emit(this, 'error', error))\n ]\n }\n\n get lobbyId() {\n return this._lobby.lobbyId\n }\n\n get replies() {\n return this._lobby.replies\n }\n\n close() {\n this._cleanups.forEach(f => f())\n close(this)\n }\n}\n\n/**\n * A secret internal API which has some goodies for the CLI\n * and for unit testing.\n */\nexport class EdgeInternalStuff extends Bridgeable {\n \n\n constructor(ai) {\n super()\n this._ai = ai\n }\n\n authRequest(\n method,\n path,\n body\n ) {\n return loginFetch(this._ai, method, path, body)\n }\n\n hashUsername(username) {\n return hashUsername(this._ai, username)\n }\n\n async makeLobby(\n lobbyRequest,\n period = 1000\n ) {\n const lobby = await makeLobby(this._ai, lobbyRequest, period)\n return new EdgeLobby(lobby)\n }\n\n fetchLobbyRequest(lobbyId) {\n return fetchLobbyRequest(this._ai, lobbyId)\n }\n\n async sendLobbyReply(\n lobbyId,\n lobbyRequest,\n replyData\n ) {\n await sendLobbyReply(this._ai, lobbyId, lobbyRequest, replyData)\n }\n\n async syncRepo(syncKey) {\n const { io, syncClient } = this._ai.props\n const paths = makeRepoPaths(io, syncKey, new Uint8Array(0))\n return syncRepo(syncClient, paths, { lastSync: 0, lastHash: undefined })\n }\n\n async getRepoDisklet(\n syncKey,\n dataKey\n ) {\n const { io } = this._ai.props\n const paths = makeRepoPaths(io, syncKey, dataKey)\n bridgifyObject(paths.disklet)\n return paths.disklet\n }\n}\n\n/**\n * Our public Flow types don't include the internal stuff,\n * so this function hacks around Flow to retrieve it.\n */\nexport function getInternalStuff(context) {\n const flowHack = context\n return flowHack.$internalStuff\n}\n","// \n\nexport { makeFakeIo } from './fake/fake-io.js'\nexport { makeFakeWorld } from './fake/fake-world.js'\nexport {\n addEdgeCorePlugins,\n lockEdgeCorePlugins\n} from './plugins/plugins-actions.js'\nexport { closeEdge, makeContext } from './root.js'\n","// \n\nimport { combinePixies, mapPixie } from 'redux-pixies'\n\n\nimport {\n\n\n walletPixie\n} from './wallet/currency-wallet-pixie.js'\n\n\n\n\n\nexport const currency = combinePixies({\n wallets: mapPixie(\n walletPixie,\n (props) => props.state.currency.currencyWalletIds,\n (props, walletId) => ({\n ...props,\n walletId,\n walletState: props.state.currency.wallets[walletId],\n walletOutput: props.output.currency.wallets[walletId]\n })\n )\n})\n","// \n\nimport { buildReducer, mapReducer } from 'redux-keto'\n\n\n\nimport {\n\n currencyWalletReducer\n} from './wallet/currency-wallet-reducer.js'\n\n\n\n\n\n\nexport const currency\n\n\n\n = buildReducer({\n currencyWalletIds(state, action, next) {\n // Optimize the common case:\n if (next.accountIds.length === 1) {\n const id = next.accountIds[0]\n return next.accounts[id].activeWalletIds\n }\n\n const allIds = next.accountIds.map(\n accountId => next.accounts[accountId].activeWalletIds\n )\n return [].concat(...allIds)\n },\n\n wallets: mapReducer(\n currencyWalletReducer,\n (props) => props.currency.currencyWalletIds\n )\n})\n","\n\n\n\n\n\n\n\n\n\nexport function getCurrencyMultiplier(\n plugins,\n customTokens = {},\n currencyCode\n) {\n const pluginIds = Object.keys(plugins)\n for (const pluginId of pluginIds) {\n const info = plugins[pluginId].currencyInfo\n for (const denomination of info.denominations) {\n if (denomination.name === currencyCode) {\n return denomination.multiplier\n }\n }\n }\n\n for (const pluginId of pluginIds) {\n const info = plugins[pluginId].currencyInfo\n for (const token of info.metaTokens) {\n for (const denomination of token.denominations) {\n if (denomination.name === currencyCode) {\n return denomination.multiplier\n }\n }\n }\n }\n\n for (const tokenId of Object.keys(customTokens)) {\n const token = customTokens[tokenId]\n for (const denomination of token.denominations) {\n if (denomination.name === currencyCode) {\n return denomination.multiplier\n }\n }\n }\n\n return '1'\n}\n\nexport function waitForCurrencyWallet(\n ai,\n walletId\n) {\n const out = ai.waitFor(\n (props) => {\n // If the wallet id doesn't even exist, bail out:\n if (props.state.currency.wallets[walletId] == null) {\n throw new Error(`Wallet id ${walletId} does not exist in this account`)\n }\n\n // Return the error if one exists:\n const { engineFailure } = props.state.currency.wallets[walletId]\n if (engineFailure != null) throw engineFailure\n\n // Return the API if that exists:\n if (props.output.currency.wallets[walletId] != null) {\n return props.output.currency.wallets[walletId].walletApi\n }\n }\n )\n return out\n}\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// \n\nimport { add, div, lte, mul, sub } from 'biggystring'\n\nimport { bridgifyObject, onMethod, watchMethod } from 'yaob'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { mergeDeeply } from '../../../util/util.js'\nimport {\n contractToTokenId,\n makeMetaTokens,\n upgradeTokenInfo\n} from '../../account/custom-tokens.js'\nimport { toApiInput } from '../../root-pixie.js'\nimport { makeStorageWalletApi } from '../../storage/storage-api.js'\nimport { getCurrencyMultiplier } from '../currency-selectors.js'\nimport { makeCurrencyWalletCallbacks } from './currency-wallet-callbacks.js'\nimport {\n\n asEdgeTxSwap,\n packMetadata,\n unpackMetadata\n} from './currency-wallet-cleaners.js'\nimport { dateFilter, searchStringFilter } from './currency-wallet-export.js'\nimport {\n loadTxFiles,\n renameCurrencyWallet,\n setCurrencyWalletFiat,\n setCurrencyWalletTxMetadata,\n setupNewTxMetadata\n} from './currency-wallet-files.js'\n\n\nimport { tokenIdsToCurrencyCodes, uniqueStrings } from './enabled-tokens.js'\n\nconst fakeMetadata = {\n bizId: 0,\n category: '',\n exchangeAmount: {},\n name: '',\n notes: ''\n}\n\n// The EdgeTransaction.spendTargets type, but non-null:\n\n\n/**\n * Creates an `EdgeCurrencyWallet` API object.\n */\nexport function makeCurrencyWalletApi(\n input,\n engine,\n tools,\n publicWalletInfo\n) {\n const ai = toApiInput(input)\n const { accountId, pluginId, walletInfo } = input.props.walletState\n const plugin = input.props.state.plugins.currency[pluginId]\n\n const storageWalletApi = makeStorageWalletApi(ai, walletInfo)\n\n const fakeCallbacks = makeCurrencyWalletCallbacks(input)\n\n let otherMethods = {}\n if (engine.otherMethods != null) {\n otherMethods = engine.otherMethods\n bridgifyObject(otherMethods)\n }\n\n function lockdown() {\n if (ai.props.state.hideKeys) {\n throw new Error('Not available when `hideKeys` is enabled')\n }\n }\n\n const out = {\n on: onMethod,\n watch: watchMethod,\n\n // Data store:\n get id() {\n return storageWalletApi.id\n },\n get type() {\n return storageWalletApi.type\n },\n get keys() {\n lockdown()\n return storageWalletApi.keys\n },\n publicWalletInfo,\n get disklet() {\n return storageWalletApi.disklet\n },\n get localDisklet() {\n return storageWalletApi.localDisklet\n },\n async sync() {\n await storageWalletApi.sync()\n },\n\n // Wallet keys:\n get displayPrivateSeed() {\n lockdown()\n return input.props.walletState.displayPrivateSeed\n },\n get displayPublicSeed() {\n return input.props.walletState.displayPublicSeed\n },\n\n // Wallet name:\n get name() {\n return input.props.walletState.name\n },\n async renameWallet(name) {\n await renameCurrencyWallet(input, name)\n },\n\n // Currency info:\n get currencyConfig() {\n const { accountApi } = input.props.output.accounts[accountId]\n return accountApi.currencyConfig[pluginId]\n },\n get currencyInfo() {\n return plugin.currencyInfo\n },\n async validateMemo(memo) {\n if (tools.validateMemo == null) return { passed: true }\n return await tools.validateMemo(memo)\n },\n async nativeToDenomination(\n nativeAmount,\n currencyCode\n ) {\n const multiplier = getCurrencyMultiplier(\n { [pluginId]: input.props.state.plugins.currency[pluginId] },\n input.props.state.accounts[accountId].customTokens[pluginId],\n currencyCode\n )\n return div(nativeAmount, multiplier, multiplier.length)\n },\n async denominationToNative(\n denominatedAmount,\n currencyCode\n ) {\n const multiplier = getCurrencyMultiplier(\n { [pluginId]: input.props.state.plugins.currency[pluginId] },\n input.props.state.accounts[accountId].customTokens[pluginId],\n currencyCode\n )\n return mul(denominatedAmount, multiplier)\n },\n\n // Fiat currency option:\n get fiatCurrencyCode() {\n return input.props.walletState.fiat\n },\n async setFiatCurrencyCode(fiatCurrencyCode) {\n await setCurrencyWalletFiat(input, fiatCurrencyCode)\n },\n\n // Chain state:\n get balances() {\n return input.props.walletState.balances\n },\n\n get blockHeight() {\n return input.props.walletState.height\n },\n\n get syncRatio() {\n return input.props.walletState.syncRatio\n },\n\n // Running state:\n get paused() {\n return input.props.walletState.paused\n },\n async changePaused(paused) {\n input.props.dispatch({\n type: 'CURRENCY_WALLET_CHANGED_PAUSED',\n payload: { walletId: input.props.walletId, paused }\n })\n },\n\n // Tokens:\n get enabledTokenIds() {\n return input.props.walletState.enabledTokenIds\n },\n\n async changeEnabledTokenIds(tokenIds) {\n const { dispatch, state, walletId, walletState } = input.props\n const { builtinTokens, customTokens } = state.accounts[accountId]\n const { currencyInfo } = walletState\n\n dispatch({\n type: 'CURRENCY_WALLET_ENABLED_TOKENS_CHANGED',\n payload: {\n walletId,\n currencyCodes: uniqueStrings(\n tokenIdsToCurrencyCodes(\n builtinTokens[pluginId],\n customTokens[pluginId],\n currencyInfo,\n tokenIds\n )\n )\n }\n })\n },\n\n // Deprecated tokens:\n async changeEnabledTokens(currencyCodes) {\n const { dispatch, walletId } = input.props\n\n dispatch({\n type: 'CURRENCY_WALLET_ENABLED_TOKENS_CHANGED',\n payload: { walletId, currencyCodes: uniqueStrings(currencyCodes) }\n })\n },\n\n async enableTokens(currencyCodes) {\n const { dispatch, walletId, walletState } = input.props\n\n dispatch({\n type: 'CURRENCY_WALLET_ENABLED_TOKENS_CHANGED',\n payload: {\n walletId,\n currencyCodes: uniqueStrings([\n ...walletState.enabledTokens,\n ...currencyCodes\n ])\n }\n })\n },\n\n async disableTokens(currencyCodes) {\n const { dispatch, walletId, walletState } = input.props\n\n dispatch({\n type: 'CURRENCY_WALLET_ENABLED_TOKENS_CHANGED',\n payload: {\n walletId,\n currencyCodes: uniqueStrings(walletState.enabledTokens, currencyCodes)\n }\n })\n },\n\n async getEnabledTokens() {\n return input.props.walletState.enabledTokens\n },\n\n async addCustomToken(tokenInfo) {\n const token = upgradeTokenInfo(tokenInfo)\n const tokenId = contractToTokenId(tokenInfo.contractAddress)\n\n // Ask the plugin to validate this:\n if (tools.getTokenId != null) {\n await tools.getTokenId(token)\n } else {\n // This is not ideal, since the pixie will add it too:\n await engine.addCustomToken({ ...token, ...tokenInfo })\n }\n\n ai.props.dispatch({\n type: 'ACCOUNT_CUSTOM_TOKEN_ADDED',\n payload: { accountId, pluginId, tokenId, token }\n })\n },\n\n // Transactions:\n async getNumTransactions(\n opts = {}\n ) {\n return engine.getNumTransactions(opts)\n },\n\n async getTransactions(\n opts = {}\n ) {\n const { currencyCode = plugin.currencyInfo.currencyCode } = opts\n\n let state = input.props.walletState\n if (!state.gotTxs[currencyCode]) {\n const txs = await engine.getTransactions({\n currencyCode: opts.currencyCode\n })\n fakeCallbacks.onTransactionsChanged(txs)\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_GOT_TXS',\n payload: {\n walletId: input.props.walletId,\n currencyCode\n }\n })\n state = input.props.walletState\n }\n\n // Txid array of all txs\n const txids = state.txids\n // Merged tx data from metadata files and blockchain data\n const txs = state.txs\n const { startIndex = 0, startEntries = txids.length } = opts\n // Decrypted metadata files\n const files = state.files\n // A sorted list of transaction based on chronological order\n // these are tx id hashes merged between blockchain and cache some tx id hashes\n // some may have been dropped by the blockchain\n const sortedTransactions = state.sortedTransactions.sortedList\n // create map of tx id hashes to their order (cardinality)\n const mappedUnfilteredIndexes = {}\n sortedTransactions.forEach((item, index) => {\n mappedUnfilteredIndexes[item] = index\n })\n // we need to make sure that after slicing, the total txs number is equal to opts.startEntries\n // slice, verify txs in files, if some are dropped and missing, do it again recursively\n let searchedTxs = 0\n let counter = 0\n const out = []\n while (searchedTxs < startEntries) {\n // take a slice from sorted transactions that begins at current index and goes until however many are left\n const slicedTransactions = sortedTransactions.slice(\n startIndex + startEntries * counter,\n startIndex + startEntries * (counter + 1)\n )\n\n // break loop if slicing starts beyond length of array\n if (slicedTransactions.length === 0) break\n\n // filter the transactions\n const missingTxIdHashes = slicedTransactions.filter(txidHash => {\n // remove any that do not have a file\n return !files[txidHash]\n })\n // load files into state\n const missingFiles = await loadTxFiles(input, missingTxIdHashes)\n Object.assign(files, missingFiles)\n // give txs the unfilteredIndex\n\n for (const txidHash of slicedTransactions) {\n const file = files[txidHash]\n if (file == null) continue\n const tempTx = txs[file.txid]\n // skip irrelevant transactions - txs that are not in the files (dropped)\n if (\n !tempTx ||\n (!tempTx.nativeAmount[currencyCode] &&\n !tempTx.networkFee[currencyCode])\n ) {\n // exit block if there is no transaction or no amount / no fee\n continue\n }\n const tx = {\n ...tempTx,\n unfilteredIndex: mappedUnfilteredIndexes[txidHash]\n }\n // add this tx / file to the output\n const edgeTx = combineTxWithFile(input, tx, file, currencyCode)\n if (searchStringFilter(edgeTx, opts) && dateFilter(edgeTx, opts)) {\n out.push(edgeTx)\n }\n searchedTxs++\n }\n counter++\n }\n return out\n },\n\n async getReceiveAddress(\n opts = {}\n ) {\n const freshAddress = await engine.getFreshAddress(opts)\n const receiveAddress = {\n metadata: fakeMetadata,\n nativeAmount: '0',\n publicAddress: freshAddress.publicAddress,\n legacyAddress: freshAddress.legacyAddress,\n segwitAddress: freshAddress.segwitAddress\n }\n return receiveAddress\n },\n\n async saveReceiveAddress(\n receiveAddress\n ) {\n // TODO: Address metadata\n },\n\n async lockReceiveAddress(\n receiveAddress\n ) {\n // TODO: Address metadata\n },\n\n async makeSpend(spendInfo) {\n const { currencyInfo } = input.props.walletState\n const {\n currencyCode = currencyInfo.currencyCode,\n privateKeys,\n spendTargets = [],\n noUnconfirmed = false,\n networkFeeOption = 'standard',\n customNetworkFee,\n rbfTxid,\n metadata,\n swapData,\n otherParams\n } = spendInfo\n\n const cleanTargets = []\n const savedTargets = []\n for (const target of spendTargets) {\n const { publicAddress, nativeAmount = '0', otherParams = {} } = target\n if (publicAddress == null) continue\n\n // Handle legacy spenders:\n let { memo = target.uniqueIdentifier } = target\n if (memo == null && typeof otherParams.uniqueIdentifier === 'string') {\n memo = otherParams.uniqueIdentifier\n }\n\n // Support legacy currency plugins:\n if (memo != null) {\n otherParams.uniqueIdentifier = memo\n }\n\n cleanTargets.push({\n memo,\n nativeAmount,\n otherParams,\n publicAddress,\n uniqueIdentifier: memo\n })\n savedTargets.push({\n currencyCode,\n memo,\n nativeAmount,\n publicAddress,\n uniqueIdentifier: memo\n })\n }\n\n if (cleanTargets.length === 0) {\n throw new TypeError('The spend has no destination')\n }\n if (privateKeys != null) {\n throw new TypeError('Only sweepPrivateKeys takes private keys')\n }\n\n const tx = await engine.makeSpend({\n currencyCode,\n spendTargets: cleanTargets,\n noUnconfirmed,\n networkFeeOption,\n customNetworkFee,\n rbfTxid,\n metadata,\n otherParams\n })\n tx.networkFeeOption = networkFeeOption\n tx.requestedCustomFee = customNetworkFee\n tx.spendTargets = savedTargets\n if (metadata != null) tx.metadata = metadata\n if (swapData != null) tx.swapData = asEdgeTxSwap(swapData)\n if (input.props.state.login.deviceDescription != null)\n tx.deviceDescription = input.props.state.login.deviceDescription\n\n return tx\n },\n\n async sweepPrivateKeys(spendInfo) {\n if (!engine.sweepPrivateKeys) {\n return Promise.reject(\n new Error('Sweeping this currency is not supported.')\n )\n }\n return engine.sweepPrivateKeys(spendInfo)\n },\n\n async signTx(tx) {\n return engine.signTx(tx)\n },\n\n async broadcastTx(tx) {\n return engine.broadcastTx(tx)\n },\n\n async saveTx(tx) {\n await setupNewTxMetadata(input, tx)\n await engine.saveTx(tx)\n fakeCallbacks.onTransactionsChanged([tx])\n },\n\n get stakingStatus() {\n return input.props.walletState.stakingStatus\n },\n\n async resyncBlockchain() {\n ai.props.dispatch({\n type: 'CURRENCY_ENGINE_CLEARED',\n payload: { walletId: input.props.walletId }\n })\n await engine.resyncBlockchain()\n },\n\n async dumpData() {\n return await engine.dumpData()\n },\n\n async getPaymentProtocolInfo(\n paymentProtocolUrl\n ) {\n if (!engine.getPaymentProtocolInfo) {\n throw new Error(\n \"'getPaymentProtocolInfo' is not implemented on wallets of this type\"\n )\n }\n return engine.getPaymentProtocolInfo(paymentProtocolUrl)\n },\n\n async saveTxMetadata(\n txid,\n currencyCode,\n metadata\n ) {\n await setCurrencyWalletTxMetadata(\n input,\n txid,\n currencyCode,\n packMetadata(metadata, input.props.walletState.fiat),\n fakeCallbacks\n )\n },\n\n async getMaxSpendable(spendInfo) {\n if (typeof engine.getMaxSpendable === 'function') {\n return await engine.getMaxSpendable(spendInfo)\n }\n const { currencyCode, networkFeeOption, customNetworkFee } = spendInfo\n const balance = engine.getBalance({ currencyCode })\n\n // Copy all the spend targets, setting the amounts to 0\n // but keeping all other information so we can get accurate fees:\n const spendTargets = spendInfo.spendTargets.map(spendTarget => {\n return { ...spendTarget, nativeAmount: '0' }\n })\n\n // The range of possible values includes `min`, but not `max`.\n function getMax(min, max) {\n const diff = sub(max, min)\n if (lte(diff, '1')) {\n return Promise.resolve(min)\n }\n const mid = add(min, div(diff, '2'))\n\n // Try the average:\n spendTargets[0].nativeAmount = mid\n return engine\n .makeSpend({\n currencyCode,\n spendTargets,\n networkFeeOption,\n customNetworkFee\n })\n .then(good => getMax(mid, max))\n .catch(bad => getMax(min, mid))\n }\n\n return getMax('0', add(balance, '1'))\n },\n\n async parseUri(uri, currencyCode) {\n return tools.parseUri(\n uri,\n currencyCode,\n makeMetaTokens(\n input.props.state.accounts[accountId].customTokens[pluginId]\n )\n )\n },\n\n async encodeUri(options) {\n return tools.encodeUri(\n options,\n makeMetaTokens(\n input.props.state.accounts[accountId].customTokens[pluginId]\n )\n )\n },\n\n otherMethods\n }\n bridgifyObject(out)\n\n return out\n}\n\nexport function combineTxWithFile(\n input,\n tx,\n file,\n currencyCode\n) {\n const wallet = input.props.walletOutput.walletApi\n const walletCurrency = input.props.walletState.currencyInfo.currencyCode\n const walletFiat = input.props.walletState.fiat\n\n const flowHack = tx\n const { unfilteredIndex } = flowHack\n\n // Copy the tx properties to the output:\n const out = {\n confirmations: tx.confirmations,\n blockHeight: tx.blockHeight,\n date: tx.date,\n ourReceiveAddresses: tx.ourReceiveAddresses,\n signedTx: tx.signedTx,\n txid: tx.txid,\n otherParams: { ...tx.otherParams, unfilteredIndex },\n\n amountSatoshi: Number(_nullishCoalesce(tx.nativeAmount[currencyCode], () => ( '0'))),\n nativeAmount: _nullishCoalesce(tx.nativeAmount[currencyCode], () => ( '0')),\n networkFee: _nullishCoalesce(tx.networkFee[currencyCode], () => ( '0')),\n parentNetworkFee: tx.networkFee[walletCurrency],\n currencyCode,\n wallet,\n metadata: {}\n }\n\n // If we have a file, use it to override the defaults:\n if (file != null) {\n if (file.creationDate < out.date) out.date = file.creationDate\n\n const merged = mergeDeeply(\n file.currencies[walletCurrency],\n file.currencies[currencyCode]\n )\n if (merged.metadata != null) {\n out.metadata = {\n ...out.metadata,\n ...unpackMetadata(merged.metadata, walletFiat)\n }\n }\n\n if (file.feeRateRequested != null) {\n if (typeof file.feeRateRequested === 'string') {\n out.networkFeeOption = file.feeRateRequested\n } else {\n out.networkFeeOption = 'custom'\n out.requestedCustomFee = file.feeRateRequested\n }\n }\n out.feeRateUsed = file.feeRateUsed\n\n if (file.payees != null) {\n out.spendTargets = file.payees.map(payee => ({\n currencyCode: payee.currency,\n memo: payee.tag,\n nativeAmount: payee.amount,\n publicAddress: payee.address,\n uniqueIdentifier: payee.tag\n }))\n }\n\n if (file.swap != null) out.swapData = asEdgeTxSwap(file.swap)\n if (typeof file.secret === 'string') out.txSecret = file.secret\n if (file.deviceDescription != null)\n out.deviceDescription = file.deviceDescription\n }\n\n return out\n}\n","// \n\nimport { isPixieShutdownError } from 'redux-pixies'\nimport { emit } from 'yaob'\n\n\n\n\n\n\n\nimport { compare } from '../../../util/compare.js'\nimport { enableTestMode, pushUpdate } from '../../../util/updateQueue.js'\nimport {\n getStorageWalletLastChanges,\n hashStorageWalletFilename\n} from '../../storage/storage-selectors.js'\nimport { combineTxWithFile } from './currency-wallet-api.js'\nimport { loadAllFiles, setupNewTxMetadata } from './currency-wallet-files.js'\n\n\n\n\nimport { mergeTx } from './currency-wallet-reducer.js'\n\nlet throttleRateLimitMs = 5000\n\n/**\n * Wraps a transaction-accepting callback with throttling logic.\n * Returns a function that can be called at high frequency, and batches its\n * inputs to only call the real callback every 5 seconds.\n */\nfunction makeThrottledTxCallback(\n input,\n callback\n) {\n const { log, walletId } = input.props\n\n let delayCallback = false\n let lastCallbackTime = 0\n let pendingTxs = []\n\n return (txArray) => {\n if (delayCallback) {\n log(`throttledTxCallback delay, walletId: ${walletId}`)\n pendingTxs.push(...txArray)\n } else {\n const now = Date.now()\n if (now - lastCallbackTime > throttleRateLimitMs) {\n lastCallbackTime = now\n callback(txArray)\n } else {\n log(`throttledTxCallback delay, walletId: ${walletId}`)\n delayCallback = true\n pendingTxs = txArray\n setTimeout(() => {\n lastCallbackTime = Date.now()\n callback(pendingTxs)\n delayCallback = false\n pendingTxs = []\n }, throttleRateLimitMs)\n }\n }\n }\n}\n\n/**\n * Returns a callback structure suitable for passing to a currency engine.\n */\nexport function makeCurrencyWalletCallbacks(\n input\n) {\n const { walletId } = input.props\n\n // If this is a unit test, lower throttling to something testable:\n if (walletId === 'narfavJN4rp9ZzYigcRj1i0vrU2OAGGp4+KksAksj54=') {\n throttleRateLimitMs = 25\n enableTestMode()\n }\n\n const throtteldOnTxChanged = makeThrottledTxCallback(\n input,\n (txArray) => {\n if (\n input.props.walletOutput != null &&\n input.props.walletOutput.walletApi != null\n ) {\n emit(input.props.walletOutput.walletApi, 'transactionsChanged', txArray)\n }\n }\n )\n\n const throttledOnNewTx = makeThrottledTxCallback(\n input,\n (txArray) => {\n if (\n input.props.walletOutput != null &&\n input.props.walletOutput.walletApi != null\n ) {\n emit(input.props.walletOutput.walletApi, 'newTransactions', txArray)\n }\n }\n )\n\n return {\n onAddressesChecked(ratio) {\n pushUpdate({\n id: walletId,\n action: 'onAddressesChecked',\n updateFunc: () => {\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_SYNC_RATIO',\n payload: { ratio, walletId }\n })\n }\n })\n },\n\n onBalanceChanged(currencyCode, balance) {\n pushUpdate({\n id: `${walletId}==${currencyCode}`,\n action: 'onBalanceChanged',\n updateFunc: () => {\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_BALANCE',\n payload: { balance, currencyCode, walletId }\n })\n }\n })\n },\n\n // DEPRECATE: After all currency plugins implement new Confirmations API\n onBlockHeightChanged(height) {\n pushUpdate({\n id: walletId,\n action: 'onBlockHeightChanged',\n updateFunc: () => {\n // Update transaction confirmation status\n const { txs: reduxTxs } = input.props.walletState\n const txsHack = Object.values(reduxTxs)\n const reduxTxsArray = txsHack\n for (const reduxTx of reduxTxsArray) {\n if (\n reduxTx.confirmations !== 'confirmed' &&\n reduxTx.confirmations !== 'dropped'\n ) {\n const {\n requiredConfirmations\n } = input.props.walletState.currencyInfo\n const { height } = input.props.walletState\n\n reduxTx.confirmations = validateConfirmations(\n reduxTx,\n height,\n requiredConfirmations\n )\n\n // Recreate the EdgeTransaction object\n const txidHash = hashStorageWalletFilename(\n input.props.state,\n walletId,\n reduxTx.txid\n )\n const { files } = input.props.walletState\n const changedTx = combineTxWithFile(\n input,\n reduxTx,\n files[txidHash],\n reduxTx.currencyCode\n )\n\n // Dispatch event to update the redux transaction object\n input.props.dispatch({\n type: 'CHANGE_MERGE_TX',\n payload: { tx: reduxTx }\n })\n // Dispatch event to update the EdgeTransaction object\n throtteldOnTxChanged([changedTx])\n }\n }\n\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_HEIGHT',\n payload: { height, walletId }\n })\n }\n })\n },\n\n onStakingStatusChanged(stakingStatus) {\n pushUpdate({\n id: walletId,\n action: 'onStakingStatusChanged',\n updateFunc: () => {\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_STAKING',\n payload: { stakingStatus, walletId }\n })\n }\n })\n },\n\n onTransactionsChanged(txs) {\n // Sanity-check incoming transactions:\n if (!txs) return\n for (const tx of txs) {\n if (\n typeof tx.txid !== 'string' ||\n typeof tx.date !== 'number' ||\n typeof tx.networkFee !== 'string' ||\n typeof tx.blockHeight !== 'number' ||\n typeof tx.nativeAmount !== 'string' ||\n typeof tx.ourReceiveAddresses !== 'object'\n ) {\n input.props.onError(\n new Error(`Plugin sent bogus tx: ${JSON.stringify(tx, null, 2)}`)\n )\n return\n }\n }\n\n // Grab stuff from redux:\n const { state } = input.props\n const {\n fileNames,\n fileNamesLoaded,\n txs: reduxTxs\n } = input.props.walletState\n const defaultCurrency = input.props.walletState.currencyInfo.currencyCode\n\n const txidHashes = {}\n const changed = []\n const created = []\n for (const tx of txs) {\n const { txid } = tx\n\n // DEPRECATE: After all currency plugins implement new Confirmations API\n if (\n tx.confirmations !== 'confirmed' &&\n tx.confirmations !== 'dropped'\n ) {\n const { requiredConfirmations } = input.props.walletState.currencyInfo\n const { height } = input.props.walletState\n\n tx.confirmations = validateConfirmations(\n tx,\n height,\n requiredConfirmations\n )\n }\n\n // Verify that something has changed:\n const reduxTx = mergeTx(tx, defaultCurrency, reduxTxs[txid])\n if (compare(reduxTx, reduxTxs[txid])) continue\n\n // Ensure the transaction has metadata:\n const txidHash = hashStorageWalletFilename(state, walletId, txid)\n const isNew =\n tx.spendTargets != null ||\n (fileNamesLoaded && fileNames[txidHash] == null)\n if (isNew) {\n setupNewTxMetadata(input, tx).catch(e => input.props.onError(e))\n }\n\n // Build the final transaction to show the user:\n const { files } = input.props.walletState\n const combinedTx = combineTxWithFile(\n input,\n reduxTx,\n files[txidHash],\n tx.currencyCode\n )\n if (isNew) created.push(combinedTx)\n else if (files[txidHash] != null) changed.push(combinedTx)\n txidHashes[txidHash] = combinedTx.date\n }\n\n // Tell everyone who cares:\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_TXS',\n payload: { txs, walletId, txidHashes }\n })\n if (changed.length) throtteldOnTxChanged(changed)\n if (created.length) throttledOnNewTx(created)\n },\n onAddressChanged() {\n emit(input.props.walletOutput.walletApi, 'addressChanged', undefined)\n },\n onWcNewContractCall(payload) {\n emit(input.props.walletOutput.walletApi, 'wcNewContractCall', payload)\n },\n onTxidsChanged() {}\n }\n}\n\n/**\n * Monitors a currency wallet for changes and fires appropriate callbacks.\n */\nexport function watchCurrencyWallet(input) {\n const { walletId } = input.props\n\n let lastChanges\n function checkChangesLoop(props) {\n // Check for data changes:\n const changes = getStorageWalletLastChanges(props.state, walletId)\n if (changes !== lastChanges) {\n lastChanges = changes\n loadAllFiles(input).catch(e => input.props.onError(e))\n }\n\n input\n .nextProps()\n .then(checkChangesLoop)\n .catch(e => {\n if (!isPixieShutdownError(e)) input.props.onError(e)\n })\n }\n checkChangesLoop(input.props)\n}\n\nconst validateConfirmations = (\n tx,\n blockHeight,\n requiredConfirmations = 1 // Default confirmation rule is 1 block\n) => {\n // If tx block height is 0, this means it's not yet mined in a block,\n // so block confirmations is 0.\n const blockConfirmations =\n tx.blockHeight === 0 ? 0 : 1 + blockHeight - tx.blockHeight\n /*\n A negative number of block confirmations means the wallet's block \n height has not caught up with the transaction's block height, or the\n transaction is mined in a block which is apart of an chain fork.\n Either way, the transaction is considered unconfirmed.\n */\n const confirmations =\n blockConfirmations >= requiredConfirmations\n ? 'confirmed'\n : blockConfirmations <= 0\n ? 'unconfirmed'\n : blockConfirmations\n return confirmations\n}\n","// \n\nimport {\n\n asArray,\n asBoolean,\n asEither,\n asMap,\n asNull,\n asNumber,\n asObject,\n asOptional,\n asString,\n asValue\n} from 'cleaners'\n\n\n\n\n\n\nimport { asJsonObject } from '../../../util/file-helpers.js'\n\n/**\n * The on-disk metadata format,\n * which has a mandatory `exchangeAmount` table and no `amountFiat`.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// ---------------------------------------------------------------------\n// building-block cleaners\n// ---------------------------------------------------------------------\n\n/**\n * Turns user-provided metadata into its on-disk format.\n */\nexport function packMetadata(\n raw,\n walletFiat\n) {\n const clean = asDiskMetadata(raw)\n\n if (typeof raw.amountFiat === 'number') {\n clean.exchangeAmount[walletFiat] = raw.amountFiat\n }\n\n return clean\n}\n\n/**\n * Turns on-disk metadata into the user-facing format.\n */\nexport function unpackMetadata(\n raw,\n walletFiat\n) {\n const clean = asDiskMetadata(raw)\n const { exchangeAmount } = clean\n\n // Delete corrupt amounts that exceed the Javascript number range:\n for (const currency of Object.keys(exchangeAmount)) {\n if (/e/.test(String(exchangeAmount[currency]))) {\n delete exchangeAmount[currency]\n }\n }\n\n return { ...clean, amountFiat: exchangeAmount[walletFiat] }\n}\n\nconst asFeeRate = asValue(\n 'high',\n 'standard',\n 'low'\n)\n\nexport const asEdgeTxSwap = asObject({\n orderId: asOptional(asString),\n orderUri: asOptional(asString),\n isEstimate: asBoolean,\n\n // The EdgeSwapInfo from the swap plugin:\n plugin: asObject({\n pluginId: asString,\n displayName: asString,\n supportEmail: asOptional(asString)\n }),\n\n // Address information:\n payoutAddress: asString,\n payoutCurrencyCode: asString,\n payoutNativeAmount: asString,\n payoutWalletId: asString,\n refundAddress: asOptional(asString)\n})\n\nconst asDiskMetadata = asObject({\n bizId: asOptional(asNumber),\n category: asOptional(asString),\n exchangeAmount: asOptional(asMap(asNumber), {}),\n name: asOptional(asString),\n notes: asOptional(asString)\n})\n\n// ---------------------------------------------------------------------\n// file cleaners\n// ---------------------------------------------------------------------\n\n/**\n * This uses currency codes, since we cannot break the data on disk.\n * To fix this one day, we can either migrate to a new file name,\n * or we can use `asEither` to switch between this format\n * and some new format based on token ID's.\n */\nexport const asEnabledTokensFile = asArray(asString)\n\nexport const asTransactionFile = asObject({\n txid: asString,\n internal: asBoolean,\n creationDate: asNumber,\n currencies: asMap(\n asObject({\n metadata: asDiskMetadata,\n nativeAmount: asOptional(asString),\n providerFeeSent: asOptional(asString)\n })\n ),\n deviceDescription: asOptional(asString),\n feeRateRequested: asOptional(asEither(asFeeRate, asJsonObject)),\n feeRateUsed: asOptional(asJsonObject),\n payees: asOptional(\n asArray(\n asObject({\n address: asString,\n amount: asString,\n currency: asString,\n tag: asOptional(asString)\n })\n )\n ),\n secret: asOptional(asString),\n swap: asOptional(asEdgeTxSwap)\n})\n\nexport const asLegacyTransactionFile = asObject({\n airbitzFeeWanted: asNumber,\n meta: asObject({\n amountFeeAirBitzSatoshi: asNumber,\n balance: asNumber,\n fee: asNumber,\n\n // Metadata:\n amountCurrency: asNumber,\n bizId: asNumber,\n category: asString,\n name: asString,\n notes: asString,\n\n // Obsolete/moved fields:\n attributes: asNumber,\n amountSatoshi: asNumber,\n amountFeeMinersSatoshi: asNumber,\n airbitzFee: asNumber\n }),\n ntxid: asString,\n state: asObject({\n creationDate: asNumber,\n internal: asBoolean,\n malleableTxId: asString\n })\n})\n\nexport const asLegacyAddressFile = asObject({\n seq: asNumber, // index\n address: asString,\n state: asObject({\n recycleable: asOptional(asBoolean, true),\n creationDate: asOptional(asNumber, 0)\n }),\n meta: asObject({\n amountSatoshi: asOptional(asNumber, 0) // requestAmount\n // TODO: Normal EdgeMetadata\n }).withRest\n})\n\nexport const asLegacyMapFile = asMap(\n asObject({\n timestamp: asNumber,\n txidHash: asString\n })\n)\n\n/**\n * Public keys cached in the wallet's local storage.\n */\nexport const asPublicKeyFile = asObject({\n walletInfo: asObject({\n id: asString,\n keys: asJsonObject,\n type: asString\n })\n})\n\nexport const asWalletFiatFile = asObject({\n fiat: asOptional(asString),\n num: asOptional(asNumber)\n})\n\nexport const asWalletNameFile = asObject({\n walletName: asEither(asString, asNull)\n})\n","\n\n\n\n\n\n\nexport function dateFilter(\n tx,\n opts\n) {\n const { startDate = -Infinity, endDate = Date.now() } = opts\n\n if (tx.date * 1000 >= startDate && tx.date * 1000 < endDate) return true\n return false\n}\n\nexport function searchStringFilter(\n tx,\n opts\n) {\n const { searchString } = opts\n\n if (searchString != null && searchString !== '') {\n // Sanitize search string\n let cleanString = searchString\n .toLowerCase()\n .replace('.', '')\n .replace(',', '')\n // Remove leading zeroes\n for (let i = 0; i < cleanString.length; i++) {\n if (cleanString[i] !== '0') {\n cleanString = cleanString.substring(i)\n break\n }\n }\n\n function checkNullTypeAndIndex(value) {\n if (\n value == null ||\n (typeof value !== 'string' && typeof value !== 'number')\n )\n return false\n if (\n value\n .toString()\n .toLowerCase()\n .replace('.', '')\n .replace(',', '')\n .indexOf(cleanString) < 0\n )\n return false\n return true\n }\n\n if (checkNullTypeAndIndex(tx.nativeAmount)) return true\n if (tx.metadata != null) {\n const {\n category = '',\n name = '',\n notes = '',\n exchangeAmount = {}\n } = tx.metadata\n if (\n checkNullTypeAndIndex(category) ||\n checkNullTypeAndIndex(name) ||\n checkNullTypeAndIndex(notes) ||\n (tx.wallet != null &&\n checkNullTypeAndIndex(exchangeAmount[tx.wallet.fiatCurrencyCode]))\n )\n return true\n }\n if (tx.swapData != null && tx.swapData.plugin != null) {\n const { displayName = '', pluginId = '' } = tx.swapData.plugin\n if (checkNullTypeAndIndex(displayName) || checkNullTypeAndIndex(pluginId))\n return true\n }\n if (tx.spendTargets != null) {\n for (const target of tx.spendTargets) {\n const { publicAddress = '', memo = '' } = target\n if (checkNullTypeAndIndex(publicAddress) || checkNullTypeAndIndex(memo))\n return true\n }\n }\n if (tx.ourReceiveAddresses.length > 0) {\n for (const address of tx.ourReceiveAddresses) {\n if (checkNullTypeAndIndex(address)) return true\n }\n }\n if (checkNullTypeAndIndex(tx.txid)) return true\n return false\n }\n return true\n}\n"," async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// \n\nimport { number as currencyFromNumber } from 'currency-codes'\nimport { justFiles, navigateDisklet } from 'disklet'\n\n\n\n\n\nimport { makeJsonFile } from '../../../util/file-helpers.js'\nimport { mergeDeeply } from '../../../util/util.js'\nimport { fetchAppIdInfo } from '../../account/lobby-api.js'\nimport { getExchangeRate } from '../../exchange/exchange-selectors.js'\nimport { toApiInput } from '../../root-pixie.js'\n\nimport {\n getStorageWalletDisklet,\n getStorageWalletLocalDisklet,\n hashStorageWalletFilename\n} from '../../storage/storage-selectors.js'\nimport { getCurrencyMultiplier } from '../currency-selectors.js'\nimport { combineTxWithFile } from './currency-wallet-api.js'\nimport {\n\n\n\n asEnabledTokensFile,\n asLegacyAddressFile,\n asLegacyMapFile,\n asLegacyTransactionFile,\n asTransactionFile,\n asWalletFiatFile,\n asWalletNameFile,\n packMetadata\n} from './currency-wallet-cleaners.js'\n\n\n\nconst CURRENCY_FILE = 'Currency.json'\nconst ENABLED_TOKENS_FILE = 'EnabledTokens.json'\nconst LEGACY_MAP_FILE = 'fixedLegacyFileNames.json'\nconst WALLET_NAME_FILE = 'WalletName.json'\n\nconst enabledTokensFile = makeJsonFile(asEnabledTokensFile)\nconst legacyAddressFile = makeJsonFile(asLegacyAddressFile)\nconst legacyMapFile = makeJsonFile(asLegacyMapFile)\nconst legacyTransactionFile = makeJsonFile(asLegacyTransactionFile)\nconst transactionFile = makeJsonFile(asTransactionFile)\nconst walletFiatFile = makeJsonFile(asWalletFiatFile)\nconst walletNameFile = makeJsonFile(asWalletNameFile)\n\n/**\n * Updates the enabled tokens on a wallet.\n */\nexport async function changeEnabledTokens(\n input,\n currencyCodes\n) {\n const { state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n await enabledTokensFile.save(disklet, ENABLED_TOKENS_FILE, currencyCodes)\n}\n\n/**\n * Converts a LegacyTransactionFile to a TransactionFile.\n */\nfunction fixLegacyFile(\n file,\n walletCurrency,\n walletFiat\n) {\n const out = {\n creationDate: file.state.creationDate,\n currencies: {},\n internal: file.state.internal,\n txid: file.state.malleableTxId\n }\n const exchangeAmount = {}\n exchangeAmount[walletFiat] = file.meta.amountCurrency\n out.currencies[walletCurrency] = {\n metadata: {\n bizId: file.meta.bizId,\n category: file.meta.category,\n exchangeAmount,\n name: file.meta.name,\n notes: file.meta.notes\n },\n providerFeeSent: file.meta.amountFeeAirBitzSatoshi.toFixed()\n }\n\n return out\n}\n\nfunction getTxFileName(\n state,\n keyId,\n creationDate,\n txid\n) {\n const txidHash = hashStorageWalletFilename(state, keyId, txid)\n return {\n fileName: `${creationDate.toFixed(0)}-${txidHash}.json`,\n txidHash\n }\n}\n\n/**\n * Changes a wallet's name.\n */\nexport async function renameCurrencyWallet(\n input,\n name\n) {\n const { dispatch, state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n await walletNameFile.save(disklet, WALLET_NAME_FILE, {\n walletName: name\n })\n\n dispatch({\n type: 'CURRENCY_WALLET_NAME_CHANGED',\n payload: { name, walletId }\n })\n}\n\n/**\n * Changes a wallet's fiat currency code.\n */\nexport async function setCurrencyWalletFiat(\n input,\n fiatCurrencyCode\n) {\n const { dispatch, state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n if (!/^iso:/.test(fiatCurrencyCode)) {\n throw new TypeError('Fiat currency codes must start with `iso:`')\n }\n\n await walletFiatFile.save(disklet, CURRENCY_FILE, {\n fiat: fiatCurrencyCode,\n num: undefined\n })\n\n dispatch({\n type: 'CURRENCY_WALLET_FIAT_CHANGED',\n payload: { fiatCurrencyCode, walletId }\n })\n}\n\nasync function loadEnabledTokensFile(\n input\n) {\n const { dispatch, state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n const clean = await enabledTokensFile.load(disklet, ENABLED_TOKENS_FILE)\n if (clean == null) return\n\n // Future currencyCode to tokenId logic will live here.\n\n dispatch({\n type: 'CURRENCY_WALLET_ENABLED_TOKENS_CHANGED',\n payload: { walletId: input.props.walletId, currencyCodes: clean }\n })\n}\n\n/**\n * Loads the wallet fiat currency file.\n */\nasync function loadFiatFile(input) {\n const { dispatch, state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n const clean = await walletFiatFile.load(disklet, CURRENCY_FILE)\n let fiatCurrencyCode = 'iso:USD'\n if (clean != null) {\n if (clean.fiat != null) {\n fiatCurrencyCode = clean.fiat\n } else if (clean.num != null) {\n fiatCurrencyCode = `iso:${\n currencyFromNumber(`000${clean.num}`.slice(-3)).code\n }`\n }\n }\n\n dispatch({\n type: 'CURRENCY_WALLET_FIAT_CHANGED',\n payload: { fiatCurrencyCode, walletId }\n })\n}\n\n/**\n * Loads the wallet name file.\n */\nasync function loadNameFile(input) {\n const { dispatch, state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n const clean = await walletNameFile.load(disklet, WALLET_NAME_FILE)\n let name = null\n if (clean == null || clean.walletName == null) {\n // If a wallet has no name file, try to pick a name based on the appId:\n const { appIds = [] } = input.props.walletState.walletInfo\n\n const appId = appIds.find(appId => appId !== '')\n if (appId != null) {\n const { displayName } = await fetchAppIdInfo(toApiInput(input), appId)\n name = displayName\n }\n } else {\n name = clean.walletName\n }\n\n dispatch({\n type: 'CURRENCY_WALLET_NAME_CHANGED',\n payload: {\n name: typeof name === 'string' ? name : null,\n walletId\n }\n })\n}\n\n/**\n * Loads transaction metadata files.\n */\nexport async function loadTxFiles(\n input,\n txIdHashes\n) {\n const { walletId } = input.props\n const disklet = getStorageWalletDisklet(input.props.state, walletId)\n const { dispatch } = input.props\n const walletCurrency = input.props.walletState.currencyInfo.currencyCode\n const fileNames = input.props.walletState.fileNames\n const walletFiat = input.props.walletState.fiat\n\n const out = {}\n await Promise.all(\n txIdHashes.map(async txidHash => {\n if (fileNames[txidHash] == null) return\n const path = `Transactions/${fileNames[txidHash].fileName}`\n const clean = await legacyTransactionFile.load(disklet, path)\n if (clean == null) return\n out[txidHash] = fixLegacyFile(clean, walletCurrency, walletFiat)\n })\n )\n await Promise.all(\n txIdHashes.map(async txidHash => {\n if (fileNames[txidHash] == null) return\n const path = `transaction/${fileNames[txidHash].fileName}`\n const clean = await transactionFile.load(disklet, path)\n if (clean == null) return\n out[txidHash] = clean\n })\n )\n\n dispatch({\n type: 'CURRENCY_WALLET_FILES_LOADED',\n payload: { files: out, walletId }\n })\n return out\n}\n\n/**\n * Return the legacy file names in the new format.\n * If they in the legacy format, convert them to the new format\n * and cache them on disk\n */\nasync function getLegacyFileNames(\n state,\n walletId,\n disklet\n) {\n // Load the cache, if it exists:\n const localDisklet = getStorageWalletLocalDisklet(state, walletId)\n const legacyMap =\n await _asyncNullishCoalesce((await legacyMapFile.load(localDisklet, LEGACY_MAP_FILE)), async () => ( {}))\n\n // Get the real legacy file names:\n const legacyFileNames = justFiles(await disklet.list())\n\n const newFormatFileNames = {}\n const missingLegacyFiles = []\n for (let i = 0; i < legacyFileNames.length; i++) {\n const fileName = legacyFileNames[i]\n const fileNameMap = legacyMap[fileName]\n // If we haven't converted it, then open the legacy file and convert it to the new format\n if (fileNameMap) {\n const { timestamp, txidHash } = fileNameMap\n newFormatFileNames[txidHash] = { creationDate: timestamp, fileName }\n } else {\n missingLegacyFiles.push(fileName)\n }\n }\n const convertFileNames = missingLegacyFiles.map(async legacyFileName => {\n const clean = await legacyTransactionFile.load(disklet, legacyFileName)\n if (clean == null) return\n const { creationDate, malleableTxId } = clean.state\n const fileName = legacyFileName\n const txidHash = hashStorageWalletFilename(state, walletId, malleableTxId)\n newFormatFileNames[txidHash] = { creationDate, fileName }\n legacyMap[fileName] = { timestamp: creationDate, txidHash }\n })\n\n if (convertFileNames.length) {\n await Promise.all(convertFileNames)\n // Cache the new results\n await legacyMapFile\n .save(localDisklet, LEGACY_MAP_FILE, legacyMap)\n .catch(() => {})\n }\n return newFormatFileNames\n}\n\n/**\n * Loads transaction metadata file names.\n */\nasync function loadTxFileNames(input) {\n const { dispatch, state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n // Legacy transactions files:\n const txFileNames = await getLegacyFileNames(\n state,\n walletId,\n navigateDisklet(disklet, 'Transactions')\n )\n\n // New transactions files:\n const listing = await navigateDisklet(disklet, 'transaction').list()\n for (const fileName of justFiles(listing)) {\n const prefix = fileName.split('.json')[0]\n const split = prefix.split('-')\n const [creationDatePart, txidHash] = split\n const creationDate = parseInt(creationDatePart)\n\n // Create entry in the txFileNames for the txidHash if it doesn't exist\n // or the creation date is older than the existing one\n if (\n txFileNames[txidHash] == null ||\n creationDate < txFileNames[txidHash].creationDate\n ) {\n txFileNames[txidHash] = { creationDate, fileName }\n }\n }\n\n dispatch({\n type: 'CURRENCY_WALLET_FILE_NAMES_LOADED',\n payload: { txFileNames, walletId }\n })\n}\n\n/**\n * Loads address metadata files.\n */\nasync function loadAddressFiles(input) {\n const { state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n // Save the results to our state:\n const out = []\n const paths = justFiles(await disklet.list('Addresses'))\n await Promise.all(\n paths.map(async path => {\n const clean = await legacyAddressFile.load(disklet, path)\n if (clean == null) return\n if (clean.address === '' || clean.state.recycleable) return\n out.push(clean.address)\n })\n )\n\n // Load these addresses into the engine:\n const engine = _optionalChain([input, 'access', _ => _.props, 'access', _2 => _2.walletOutput, 'optionalAccess', _3 => _3.engine])\n if (engine != null) await engine.addGapLimitAddresses(out)\n}\n\n/**\n * Updates the wallet in response to data syncs.\n */\nexport async function loadAllFiles(input) {\n await loadEnabledTokensFile(input)\n await loadFiatFile(input)\n await loadNameFile(input)\n await loadTxFileNames(input)\n await loadAddressFiles(input)\n}\n\n/**\n * Changes a wallet's metadata.\n */\nexport async function setCurrencyWalletTxMetadata(\n input,\n txid,\n currencyCode,\n metadata,\n fakeCallbacks\n) {\n const { dispatch, state, walletId } = input.props\n const disklet = getStorageWalletDisklet(state, walletId)\n\n // Find the tx:\n const tx = input.props.walletState.txs[txid]\n if (!tx) {\n throw new Error(`Setting metatdata for missing tx ${txid}`)\n }\n\n const files = input.props.walletState.files\n // Get the txidHash for this txid\n let oldTxidHash = ''\n for (const hash of Object.keys(files)) {\n if (files[hash].txid === txid) {\n oldTxidHash = hash\n break\n }\n }\n\n // Load the old file:\n const oldFile = input.props.walletState.files[oldTxidHash]\n const creationDate =\n oldFile == null ? Date.now() / 1000 : oldFile.creationDate\n\n // Set up the new file:\n const { fileName, txidHash } = getTxFileName(\n state,\n walletId,\n creationDate,\n txid\n )\n const newFile = {\n txid,\n internal: false,\n creationDate,\n currencies: {}\n }\n newFile.currencies[currencyCode] = {\n metadata\n }\n const json = mergeDeeply(oldFile, newFile)\n\n // Save the new file:\n dispatch({\n type: 'CURRENCY_WALLET_FILE_CHANGED',\n payload: { creationDate, fileName, json, txid, txidHash, walletId }\n })\n await transactionFile.save(disklet, 'transaction/' + fileName, json)\n const callbackTx = combineTxWithFile(input, tx, json, currencyCode)\n fakeCallbacks.onTransactionsChanged([callbackTx])\n}\n\n/**\n * Sets up metadata for an incoming transaction.\n */\nexport async function setupNewTxMetadata(\n input,\n tx\n) {\n const { dispatch, walletState, state, walletId } = input.props\n const { accountId, fiat = 'iso:USD', pluginId } = walletState\n const { currencyCode, spendTargets, swapData, txid } = tx\n const disklet = getStorageWalletDisklet(state, walletId)\n\n const creationDate = Date.now() / 1000\n\n // Calculate the exchange rate:\n const rate =\n getExchangeRate(state, currencyCode, fiat, () => 1) /\n parseFloat(\n getCurrencyMultiplier(\n { [pluginId]: input.props.state.plugins.currency[pluginId] },\n input.props.state.accounts[accountId].customTokens[pluginId],\n currencyCode\n )\n )\n const nativeAmount = tx.nativeAmount\n const exchangeAmount = rate * Number(nativeAmount)\n\n // Set up metadata:\n const metadata =\n tx.metadata != null\n ? packMetadata(tx.metadata, fiat)\n : { exchangeAmount: {} }\n metadata.exchangeAmount[fiat] = exchangeAmount\n\n // Basic file template:\n const json = {\n txid,\n internal: true,\n creationDate,\n currencies: {},\n swap: swapData\n }\n json.currencies[currencyCode] = { metadata, nativeAmount }\n\n // Set up the fee metadata:\n if (tx.networkFeeOption != null) {\n json.feeRateRequested =\n tx.networkFeeOption === 'custom'\n ? tx.requestedCustomFee\n : tx.networkFeeOption\n }\n json.feeRateUsed = tx.feeRateUsed\n\n // Set up payees:\n if (spendTargets != null) {\n json.payees = spendTargets.map(target => ({\n currency: target.currencyCode,\n address: target.publicAddress,\n amount: target.nativeAmount,\n tag: target.memo\n }))\n\n // Only write device description if it's a spend\n if (tx.deviceDescription != null)\n json.deviceDescription = tx.deviceDescription\n }\n if (typeof tx.txSecret === 'string') json.secret = tx.txSecret\n\n // Save the new file:\n const { fileName, txidHash } = getTxFileName(\n state,\n walletId,\n creationDate,\n txid\n )\n dispatch({\n type: 'CURRENCY_WALLET_FILE_CHANGED',\n payload: { creationDate, fileName, json, txid, txidHash, walletId }\n })\n await transactionFile.save(disklet, 'transaction/' + fileName, json)\n}\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }\n\n\nimport {\n\n\n combinePixies,\n filterPixie,\n stopUpdates\n} from 'redux-pixies'\nimport { update } from 'yaob'\n\n\n\n\n\n\n\n\n\nimport { makeJsonFile } from '../../../util/file-helpers.js'\nimport { makePeriodicTask } from '../../../util/periodic-task.js'\nimport { snooze } from '../../../util/snooze.js'\nimport { makeTokenInfo } from '../../account/custom-tokens.js'\nimport { makeLog } from '../../log/log.js'\nimport { getCurrencyTools } from '../../plugins/plugins-selectors.js'\nimport { toApiInput } from '../../root-pixie.js'\nimport {\n addStorageWallet,\n syncStorageWallet\n} from '../../storage/storage-actions.js'\nimport {\n getStorageWalletLocalDisklet,\n makeStorageWalletLocalEncryptedDisklet\n} from '../../storage/storage-selectors.js'\nimport { makeCurrencyWalletApi } from './currency-wallet-api.js'\nimport {\n makeCurrencyWalletCallbacks,\n watchCurrencyWallet\n} from './currency-wallet-callbacks.js'\nimport { asPublicKeyFile } from './currency-wallet-cleaners.js'\nimport { changeEnabledTokens, loadAllFiles } from './currency-wallet-files.js'\nimport {\n\n initialEnabledTokens\n} from './currency-wallet-reducer.js'\nimport { uniqueStrings } from './enabled-tokens.js'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst PUBLIC_KEY_CACHE = 'publicKey.json'\nconst publicKeyFile = makeJsonFile(asPublicKeyFile)\n\nexport const walletPixie = combinePixies({\n // Creates the engine for this wallet:\n engine: (input) => async () => {\n const { state, walletId, walletState } = input.props\n const { accountId, pluginId, walletInfo } = walletState\n const plugin = state.plugins.currency[pluginId]\n\n try {\n // Start the data sync:\n const ai = toApiInput(input)\n await addStorageWallet(ai, walletInfo)\n\n // Grab the freshly-synced repos:\n const { state } = input.props\n const walletLocalDisklet = getStorageWalletLocalDisklet(\n state,\n walletInfo.id\n )\n const walletLocalEncryptedDisklet = makeStorageWalletLocalEncryptedDisklet(\n state,\n walletInfo.id,\n input.props.io\n )\n\n // Derive the public keys:\n const tools = await getCurrencyTools(ai, pluginId)\n const publicWalletInfo = await getPublicWalletInfo(\n walletInfo,\n walletLocalDisklet,\n tools\n )\n const mergedWalletInfo = {\n id: walletInfo.id,\n type: walletInfo.type,\n keys: { ...walletInfo.keys, ...publicWalletInfo.keys }\n }\n input.props.dispatch({\n type: 'CURRENCY_WALLET_PUBLIC_INFO',\n payload: { walletInfo: publicWalletInfo, walletId }\n })\n\n // Start the engine:\n const accountState = state.accounts[accountId]\n const engine = await plugin.makeCurrencyEngine(mergedWalletInfo, {\n callbacks: makeCurrencyWalletCallbacks(input),\n\n // Wallet-scoped IO objects:\n log: makeLog(\n input.props.logBackend,\n `${plugin.currencyInfo.currencyCode}-${walletInfo.id.slice(0, 2)}`\n ),\n walletLocalDisklet,\n walletLocalEncryptedDisklet,\n\n // User settings:\n customTokens: _nullishCoalesce(accountState.customTokens[pluginId], () => ( {})),\n enabledTokenIds: input.props.walletState.enabledTokenIds,\n userSettings: _nullishCoalesce(accountState.userSettings[pluginId], () => ( {}))\n })\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_SEEDS',\n payload: {\n displayPrivateSeed: engine.getDisplayPrivateSeed(),\n displayPublicSeed: engine.getDisplayPublicSeed(),\n walletId\n }\n })\n input.onOutput(engine)\n\n // Grab initial state:\n const { currencyCode } = plugin.currencyInfo\n const balance = engine.getBalance({ currencyCode })\n const height = engine.getBlockHeight()\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_BALANCE',\n payload: { balance, currencyCode, walletId }\n })\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_HEIGHT',\n payload: { height, walletId }\n })\n if (engine.getStakingStatus != null) {\n engine.getStakingStatus().then(stakingStatus => {\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_CHANGED_STAKING',\n payload: { stakingStatus, walletId }\n })\n })\n }\n } catch (error) {\n input.props.onError(error)\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_FAILED',\n payload: { error, walletId }\n })\n }\n\n // Reload our data from disk:\n loadAllFiles(input).catch(e => input.props.onError(e))\n\n // Fire callbacks when our state changes:\n watchCurrencyWallet(input)\n\n return stopUpdates\n },\n\n // Creates the API object:\n walletApi: (input) => async () => {\n const { walletOutput, walletState } = input.props\n if (walletOutput == null) return\n const { engine } = walletOutput\n const { nameLoaded, pluginId, publicWalletInfo } = walletState\n if (engine == null || publicWalletInfo == null || !nameLoaded) return\n const tools = await getCurrencyTools(toApiInput(input), pluginId)\n\n const currencyWalletApi = makeCurrencyWalletApi(\n input,\n engine,\n tools,\n publicWalletInfo\n )\n input.onOutput(currencyWalletApi)\n\n return stopUpdates\n },\n\n // Starts & stops the engine for this wallet:\n engineStarted: filterPixie(\n (input) => {\n let startupPromise\n\n return {\n update() {\n const { log, walletId, walletOutput, walletState } = input.props\n if (walletOutput == null) return\n const { engine, walletApi } = walletOutput\n if (\n walletApi == null ||\n !walletState.fiatLoaded ||\n !walletState.fileNamesLoaded ||\n walletState.engineStarted\n ) {\n return\n }\n\n if (engine != null && startupPromise == null) {\n log(`${walletId} startEngine`)\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_STARTED',\n payload: { walletId }\n })\n\n // Turn synchronous errors into promise rejections:\n startupPromise = Promise.resolve()\n .then(() => engine.startEngine())\n .catch(e => input.props.onError(e))\n }\n },\n\n destroy() {\n const { log, walletId, walletOutput } = input.props\n if (walletOutput == null) return\n const { engine } = walletOutput\n\n if (engine != null && startupPromise != null) {\n log(`${walletId} killEngine`)\n\n // Wait for `startEngine` to finish if that is still going:\n startupPromise\n .then(() => engine.killEngine())\n .catch(e => input.props.onError(e))\n .then(() =>\n input.props.dispatch({\n type: 'CURRENCY_ENGINE_STOPPED',\n payload: { walletId }\n })\n )\n .catch(() => {})\n }\n }\n }\n },\n props =>\n props.state.paused || props.walletState.paused ? undefined : props\n ),\n\n syncTimer: filterPixie(\n (input) => {\n async function doSync() {\n const { walletId } = input.props\n await syncStorageWallet(toApiInput(input), walletId)\n }\n\n // We don't report sync failures, since that could be annoying:\n const task = makePeriodicTask(doSync, 30 * 1000)\n\n return {\n update() {\n const { state, walletId, walletOutput } = input.props\n if (walletOutput == null) return\n\n // Start once the wallet has loaded & finished its initial sync:\n if (\n state.storageWallets[walletId] != null &&\n state.storageWallets[walletId].status.lastSync > 0\n ) {\n task.start({ wait: true })\n }\n },\n\n destroy() {\n task.stop()\n }\n }\n },\n props =>\n props.state.paused || props.walletState.paused ? undefined : props\n ),\n\n /**\n * Watches for changes to the token state, and writes those to disk.\n *\n * The pixie system ensures that multiple `update` calls will not occur\n * at once. This way, if the GUI makes dozens of quick token changes,\n * we will consolidate those down to a single write to disk.\n */\n tokenSaver(input) {\n let lastEnabledTokens = initialEnabledTokens\n\n return async function update() {\n const { enabledTokens } = input.props.walletState\n if (enabledTokens !== lastEnabledTokens && enabledTokens != null) {\n await changeEnabledTokens(input, enabledTokens).catch(error =>\n input.props.onError(error)\n )\n await snooze(100) // Rate limiting\n }\n lastEnabledTokens = enabledTokens\n }\n },\n\n watcher(input) {\n let lastState\n let lastSettings = {}\n let lastTokens = {}\n let lastEnabledTokens = initialEnabledTokens\n\n return async () => {\n const { state, walletState, walletOutput } = input.props\n if (walletState == null || walletOutput == null) return\n const { engine, walletApi } = walletOutput\n const { accountId, pluginId } = walletState\n const accountState = state.accounts[accountId]\n\n // Update API object:\n if (lastState !== walletState && walletApi != null) {\n update(walletApi)\n }\n lastState = walletState\n\n // Update engine settings:\n const userSettings = _nullishCoalesce(accountState.userSettings[pluginId], () => ( lastSettings))\n if (lastSettings !== userSettings && engine != null) {\n engine.changeUserSettings(userSettings)\n }\n lastSettings = userSettings\n\n // Update the custom tokens:\n const customTokens = _nullishCoalesce(accountState.customTokens[pluginId], () => ( lastTokens))\n if (lastTokens !== customTokens && engine != null) {\n if (engine.changeCustomTokens != null) {\n engine.changeCustomTokens(customTokens)\n } else {\n for (const tokenId of Object.keys(customTokens)) {\n const token = customTokens[tokenId]\n if (token === lastTokens[tokenId]) continue\n const tokenInfo = makeTokenInfo(token)\n if (tokenInfo == null) continue\n await engine\n .addCustomToken({ ...tokenInfo, ...token })\n .catch(e => input.props.onError(e))\n }\n }\n }\n lastTokens = customTokens\n\n // Update enabled tokens:\n const { enabledTokens } = walletState\n if (lastEnabledTokens !== enabledTokens && engine != null) {\n if (engine.changeEnabledTokenIds != null) {\n await engine\n .changeEnabledTokenIds(walletState.enabledTokenIds)\n .catch(e => input.props.onError(e))\n } else {\n await engine\n .disableTokens(uniqueStrings(lastEnabledTokens, enabledTokens))\n .catch(e => input.props.onError(e))\n await engine\n .enableTokens(uniqueStrings(enabledTokens, lastEnabledTokens))\n .catch(e => input.props.onError(e))\n }\n }\n lastEnabledTokens = enabledTokens\n }\n }\n})\n\n/**\n * Attempts to load/derive the wallet public keys.\n */\nasync function getPublicWalletInfo(\n walletInfo,\n disklet,\n tools\n) {\n // Try to load the cache:\n const publicKeyCache = await publicKeyFile.load(disklet, PUBLIC_KEY_CACHE)\n if (publicKeyCache != null) return publicKeyCache.walletInfo\n\n // Derive the public keys:\n let publicKeys = {}\n try {\n publicKeys = await tools.derivePublicKey(walletInfo)\n } catch (e) {}\n const publicWalletInfo = {\n id: walletInfo.id,\n type: walletInfo.type,\n keys: publicKeys\n }\n\n // Save the cache if it's not empty:\n if (Object.keys(publicKeys).length > 0) {\n await publicKeyFile.save(disklet, PUBLIC_KEY_CACHE, {\n walletInfo: publicWalletInfo\n })\n }\n\n return publicWalletInfo\n}\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// \n\nimport {\n\n buildReducer,\n filterReducer,\n memoizeReducer\n} from 'redux-keto'\n\n\n\n\n\n\n\n\n\n\nimport { compare } from '../../../util/compare.js'\n\nimport { findCurrencyPluginId } from '../../plugins/plugins-selectors.js'\n\n\nimport { currencyCodesToTokenIds } from './enabled-tokens.js'\n\n/** Maps from txid hash to file creation date & path. */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport const initialEnabledTokens = []\n\nconst currencyWalletInner\n\n\n\n = buildReducer({\n accountId(state, action, next) {\n if (state != null) return state\n for (const accountId of Object.keys(next.root.accounts)) {\n const account = next.root.accounts[accountId]\n for (const walletId of Object.keys(account.walletInfos)) {\n if (walletId === next.id) return accountId\n }\n }\n throw new Error(`Cannot find account for walletId ${next.id}`)\n },\n\n pluginId: memoizeReducer(\n next => next.root.login.walletInfos[next.id].type,\n next => next.root.plugins.currency,\n (walletType, plugins) => {\n return findCurrencyPluginId(plugins, walletType)\n }\n ),\n\n paused(\n state,\n action,\n next\n ) {\n return state == null\n ? next.root.accounts[next.self.accountId].pauseWallets\n : action.type === 'CURRENCY_WALLET_CHANGED_PAUSED'\n ? action.payload.paused\n : state\n },\n\n currencyInfo(\n state,\n action,\n next\n ) {\n if (state) return state\n const { pluginId } = next.self\n return next.root.plugins.currency[pluginId].currencyInfo\n },\n\n displayPrivateSeed(state = null, action) {\n return action.type === 'CURRENCY_ENGINE_CHANGED_SEEDS'\n ? action.payload.displayPrivateSeed\n : state\n },\n\n displayPublicSeed(state = null, action) {\n return action.type === 'CURRENCY_ENGINE_CHANGED_SEEDS'\n ? action.payload.displayPublicSeed\n : state\n },\n\n enabledTokenIds: memoizeReducer(\n (next) =>\n next.root.accounts[next.self.accountId].builtinTokens[next.self.pluginId],\n (next) =>\n next.root.accounts[next.self.accountId].customTokens[next.self.pluginId],\n (next) => next.self.currencyInfo,\n (next) => next.self.enabledTokens,\n currencyCodesToTokenIds\n ),\n\n enabledTokens(\n state = initialEnabledTokens,\n action\n ) {\n if (action.type === 'CURRENCY_WALLET_ENABLED_TOKENS_CHANGED') {\n const { currencyCodes } = action.payload\n // Check for actual changes:\n currencyCodes.sort((a, b) => (a === b ? 0 : a > b ? 1 : -1))\n if (!compare(currencyCodes, state)) return currencyCodes\n }\n return state\n },\n\n engineFailure(state = null, action) {\n return action.type === 'CURRENCY_ENGINE_FAILED'\n ? action.payload.error\n : state\n },\n\n engineStarted(state = false, action) {\n return action.type === 'CURRENCY_ENGINE_STARTED'\n ? true\n : action.type === 'CURRENCY_ENGINE_STOPPED'\n ? false\n : state\n },\n\n fiat(state = '', action) {\n return action.type === 'CURRENCY_WALLET_FIAT_CHANGED'\n ? action.payload.fiatCurrencyCode\n : state\n },\n\n fiatLoaded(state = false, action) {\n return action.type === 'CURRENCY_WALLET_FIAT_CHANGED' ? true : state\n },\n\n files(state = {}, action) {\n switch (action.type) {\n case 'CURRENCY_WALLET_FILE_CHANGED': {\n const { json, txidHash } = action.payload\n const out = { ...state }\n out[txidHash] = json\n return out\n }\n case 'CURRENCY_WALLET_FILES_LOADED': {\n const { files } = action.payload\n return {\n ...state,\n ...files\n }\n }\n }\n return state\n },\n\n sortedTransactions(\n state = { txidHashes: {}, sortedList: [] },\n action\n ) {\n const { txidHashes } = state\n switch (action.type) {\n case 'CURRENCY_ENGINE_CHANGED_TXS': {\n return sortTxs(txidHashes, action.payload.txidHashes)\n }\n case 'CURRENCY_WALLET_FILE_NAMES_LOADED': {\n const { txFileNames } = action.payload\n const newTxidHashes = {}\n for (const txidHash of Object.keys(txFileNames)) {\n newTxidHashes[txidHash] = txFileNames[txidHash].creationDate\n }\n return sortTxs(txidHashes, newTxidHashes)\n }\n }\n return state\n },\n\n fileNames(state = {}, action) {\n switch (action.type) {\n case 'CURRENCY_WALLET_FILE_NAMES_LOADED': {\n const { txFileNames } = action.payload\n return {\n ...state,\n ...txFileNames\n }\n }\n case 'CURRENCY_WALLET_FILE_CHANGED': {\n const { fileName, creationDate, txidHash } = action.payload\n if (!state[txidHash] || creationDate < state[txidHash].creationDate) {\n state[txidHash] = { creationDate, fileName }\n }\n return state\n }\n }\n return state\n },\n\n fileNamesLoaded(state = false, action) {\n return action.type === 'CURRENCY_WALLET_FILE_NAMES_LOADED' ? true : state\n },\n\n syncRatio(state = 0, action) {\n switch (action.type) {\n case 'CURRENCY_ENGINE_CHANGED_SYNC_RATIO': {\n return action.payload.ratio\n }\n case 'CURRENCY_ENGINE_CLEARED': {\n return 0\n }\n }\n return state\n },\n\n balances(state = {}, action) {\n if (action.type === 'CURRENCY_ENGINE_CHANGED_BALANCE') {\n const out = { ...state }\n out[action.payload.currencyCode] = action.payload.balance\n return out\n }\n return state\n },\n\n height(state = 0, action) {\n return action.type === 'CURRENCY_ENGINE_CHANGED_HEIGHT'\n ? action.payload.height\n : state\n },\n\n name(state = null, action) {\n return action.type === 'CURRENCY_WALLET_NAME_CHANGED'\n ? action.payload.name\n : state\n },\n\n nameLoaded(state = false, action) {\n return action.type === 'CURRENCY_WALLET_NAME_CHANGED' ? true : state\n },\n\n stakingStatus(\n state = { stakedAmounts: [] },\n action\n ) {\n return action.type === 'CURRENCY_ENGINE_CHANGED_STAKING'\n ? action.payload.stakingStatus\n : state\n },\n\n txids: memoizeReducer(\n (next) => next.self.txs,\n (txs) => Object.keys(txs)\n ),\n\n txs(\n state = {},\n action,\n next\n ) {\n switch (action.type) {\n case 'CHANGE_MERGE_TX': {\n const { tx } = action.payload\n const out = { ...state }\n out[tx.txid] = tx\n return out\n }\n case 'CURRENCY_ENGINE_CHANGED_TXS': {\n const { txs } = action.payload\n const defaultCurrency = next.self.currencyInfo.currencyCode\n const out = { ...state }\n for (const tx of txs) {\n out[tx.txid] = mergeTx(tx, defaultCurrency, out[tx.txid])\n }\n return out\n }\n case 'CURRENCY_ENGINE_CLEARED':\n return {}\n }\n\n return state\n },\n\n gotTxs(state = {}, action) {\n if (action.type === 'CURRENCY_ENGINE_GOT_TXS') {\n state[action.payload.currencyCode] = true\n }\n return state\n },\n\n walletInfo(state, action, next) {\n return next.root.login.walletInfos[next.id]\n },\n\n publicWalletInfo(state = null, action) {\n return action.type === 'CURRENCY_WALLET_PUBLIC_INFO'\n ? action.payload.walletInfo\n : state\n }\n})\n\nexport function sortTxs(\n txidHashes,\n newHashes\n)\n\n\n {\n for (const newTxidHash of Object.keys(newHashes)) {\n const newTime = newHashes[newTxidHash]\n if (!txidHashes[newTxidHash] || newTime < txidHashes[newTxidHash]) {\n txidHashes[newTxidHash] = newTime\n }\n }\n const sortedList = Object.keys(txidHashes).sort(\n (txidHash1, txidHash2) => {\n if (txidHashes[txidHash1] > txidHashes[txidHash2]) return -1\n if (txidHashes[txidHash1] < txidHashes[txidHash2]) return 1\n return 0\n }\n )\n return { sortedList, txidHashes }\n}\n\nexport const currencyWalletReducer\n\n\n\n = filterReducer(\n currencyWalletInner,\n (action, next) => {\n return /^CURRENCY_/.test(action.type) &&\n action.payload != null &&\n action.payload.walletId === next.id\n ? action\n : { type: 'UPDATE_NEXT' }\n }\n)\n\nconst defaultTx = {\n confirmations: 'unconfirmed',\n currencyCode: '',\n blockHeight: 0,\n date: 0,\n ourReceiveAddresses: [],\n signedTx: '',\n txid: '',\n nativeAmount: {},\n networkFee: {},\n providerFee: {}\n}\n\n/**\n * Merges a new incoming transaction with an existing transaction.\n */\nexport function mergeTx(\n tx,\n defaultCurrency,\n oldTx = defaultTx\n) {\n const currencyCode =\n tx.currencyCode != null ? tx.currencyCode : defaultCurrency\n const out = {\n confirmations: _nullishCoalesce(tx.confirmations, () => ( 'unconfirmed')),\n currencyCode,\n blockHeight: tx.blockHeight,\n date: tx.date,\n ourReceiveAddresses: tx.ourReceiveAddresses,\n signedTx: tx.signedTx,\n txid: tx.txid,\n otherParams: tx.otherParams,\n\n nativeAmount: { ...oldTx.nativeAmount },\n networkFee: { ...oldTx.networkFee }\n }\n\n out.nativeAmount[currencyCode] = tx.nativeAmount\n out.networkFee[currencyCode] =\n tx.networkFee != null ? tx.networkFee.toString() : '0'\n\n if (tx.parentNetworkFee != null) {\n out.networkFee[defaultCurrency] = String(tx.parentNetworkFee)\n }\n\n return out\n}\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }\n\n\n\n\n\n\nfunction flipTokenMap(\n tokens\n) {\n const out = {}\n for (const tokenId of Object.keys(tokens)) {\n const token = tokens[tokenId]\n out[token.currencyCode] = tokenId\n }\n return out\n}\n\nexport function currencyCodesToTokenIds(\n builtinTokens = {},\n customTokens = {},\n currencyInfo,\n currencyCodes\n) {\n const builtinIds = flipTokenMap(builtinTokens)\n const customIds = flipTokenMap(customTokens)\n\n const out = []\n for (const currencyCode of currencyCodes) {\n const tokenId = _nullishCoalesce(customIds[currencyCode], () => ( builtinIds[currencyCode]))\n if (tokenId != null) out.push(tokenId)\n }\n return out\n}\n\nexport function tokenIdsToCurrencyCodes(\n builtinTokens = {},\n customTokens = {},\n currencyInfo,\n tokenIds\n) {\n const out = []\n for (const tokenId of tokenIds) {\n const token = _nullishCoalesce(customTokens[tokenId], () => ( builtinTokens[tokenId]))\n if (token != null) out.push(token.currencyCode)\n }\n return out\n}\n\n/**\n * Returns the unique items of an array,\n * optionally removing the items in `omit`.\n */\nexport function uniqueStrings(array, omit = []) {\n const table = {}\n for (const item of omit) table[item] = true\n\n const out = []\n for (const item of array) {\n if (table[item]) continue\n table[item] = true\n out.push(item)\n }\n return out\n}\n","// \n\nimport { bridgifyObject, onMethod } from 'yaob'\n\n\n\n\n\n\nimport { getExchangeRate } from './exchange-selectors.js'\n\nconst biasDefaults = {\n edgeRates: 0.15,\n nomics: 0.1,\n coincap: -0.05,\n coinbase: -0.1,\n coinmonitor: -0.2,\n wazirx: -0.15,\n constantRate: -0.25\n}\n\n/**\n * Creates an unwrapped exchange cache API object.\n */\nexport function makeExchangeCache(ai) {\n const out = {\n on: onMethod,\n\n async convertCurrency(\n fromCurrency,\n toCurrency,\n amount = 1,\n opts = {}\n ) {\n const { biases = biasDefaults } = opts\n\n function getPairCost(\n source,\n age,\n inverse\n ) {\n // The age curve goes from 0 to 1, with 1 being infinitely old.\n // The curve reaches half way (0.5) at 30 seconds in:\n const ageCurve = age / (30 + age)\n const bias = biases[source] != null ? biases[source] : 0\n return ageCurve + bias + (inverse ? 1.1 : 1)\n }\n\n const rate = getExchangeRate(\n ai.props.state,\n fromCurrency,\n toCurrency,\n getPairCost\n )\n return amount * rate\n }\n }\n bridgifyObject(out)\n\n return out\n}\n","// \n\nimport { filterPixie } from 'redux-pixies'\n\n\nimport { makePeriodicTask } from '../../util/periodic-task.js'\n\n\n\nconst savedRateHints = []\n\nexport function addHint(fromCurrency, toCurrency) {\n if (isNewPair(fromCurrency, toCurrency, savedRateHints))\n savedRateHints.push({ fromCurrency, toCurrency })\n}\n\nexport const exchange = filterPixie(\n (input) => {\n async function gatherHints() {\n const {\n rateHintCache,\n currency: { wallets }\n } = input.props.state\n\n for (const walletId of Object.keys(wallets)) {\n const fiat = wallets[walletId].fiat\n for (const cc of Object.keys(wallets[walletId].balances)) {\n if (isNewPair(cc, fiat, savedRateHints))\n savedRateHints.push({ fromCurrency: cc, toCurrency: fiat })\n }\n }\n\n // No hints in memory or in cache, return defaults\n if (savedRateHints.length === 0 && rateHintCache.length === 0) {\n return DEFAULT_RATE_HINTS\n }\n\n // No hints in memory and wallets haven't loaded, return hints on disk\n if (savedRateHints.length === 0 && rateHintCache.length > 0) {\n return rateHintCache\n }\n\n // Else, use hints in memory and add to disk cache if they're new\n try {\n const newHints = savedRateHints.filter(hint =>\n isNewPair(hint.fromCurrency, hint.toCurrency, rateHintCache)\n )\n if (newHints.length > 0) {\n await input.props.io.disklet.setText(\n 'rateHintCache.json',\n JSON.stringify(rateHintCache.concat(newHints))\n )\n input.props.dispatch({\n type: 'UPDATE_RATE_HINT_CACHE',\n payload: {\n rateHintCache: rateHintCache.concat(newHints)\n }\n })\n input.props.log('Update rateHintCache.json success')\n }\n } catch (error) {\n input.props.log.error('Update rateHintCache.json error', error)\n input.props.onError(new Error('Failed to write rateHintCache'))\n }\n return savedRateHints\n }\n\n function dispatchPairs(pairs, source) {\n input.props.log.warn(`Exchange rates updated (${source})`)\n if (pairs.length > 0) {\n input.props.dispatch({\n type: 'EXCHANGE_PAIRS_FETCHED',\n payload: pairs\n })\n }\n }\n\n async function doFetch() {\n // Quit early if there is nothing to do:\n const pluginIds = Object.keys(input.props.state.plugins.rate)\n if (pluginIds.length === 0) return\n\n const hintPairs = await gatherHints()\n\n // Gather pairs for up to five seconds, then send what we have:\n let wait = true\n let waitingPairs = []\n function sendWaitingPairs(done = false) {\n wait = false\n dispatchPairs(waitingPairs, done ? 'complete' : 'some pending')\n }\n const waitTimeout = setTimeout(sendWaitingPairs, 5000)\n\n // Initiate all requests:\n let finishedPairs = 0\n const timestamp = Date.now() / 1000\n const promises = pluginIds.map(pluginId => {\n const plugin = input.props.state.plugins.rate[pluginId]\n return fetchPluginRates(plugin, hintPairs, pluginId, timestamp)\n .then(pairs => {\n if (wait) waitingPairs = [...waitingPairs, ...pairs]\n else dispatchPairs(pairs, pluginId)\n })\n .catch(error => {\n input.props.log.error(\n `Rate provider ${pluginId} failed: ${String(error)}`\n )\n })\n .then(() => {\n // There is no need to keep waiting if all plugins are done:\n if (wait && ++finishedPairs >= pluginIds.length) {\n clearTimeout(waitTimeout)\n sendWaitingPairs(true)\n }\n })\n })\n\n // Wait for everyone to finish before doing another round:\n await Promise.all(promises)\n }\n\n // We don't report errors here, since the `doFetch` function does that:\n const task = makePeriodicTask(doFetch, 30 * 1000)\n\n return {\n update(props) {\n // Kick off the initial fetch if we don't already have one running\n // and the plugins are ready:\n if (props.state.plugins.locked) {\n task.start({ wait: false })\n }\n },\n\n destroy() {\n task.stop()\n }\n }\n },\n props => (props.state.paused ? undefined : props)\n)\n\n/**\n * Fetching exchange rates can fail in exciting ways,\n * so performs a fetch with maximum paranoia.\n */\nfunction fetchPluginRates(\n plugin,\n hintPairs,\n source,\n timestamp\n) {\n try {\n return plugin.fetchRates(hintPairs).then(pairs =>\n pairs.map(pair => {\n const { fromCurrency, toCurrency, rate } = pair\n if (\n typeof fromCurrency !== 'string' ||\n typeof toCurrency !== 'string' ||\n typeof rate !== 'number'\n ) {\n throw new TypeError('Invalid data format')\n }\n return {\n fromCurrency,\n toCurrency,\n rate,\n source,\n timestamp\n }\n })\n )\n } catch (error) {\n return Promise.reject(error)\n }\n}\n\nfunction isNewPair(\n fromCurrency,\n toCurrency,\n pairs\n) {\n for (const pair of pairs) {\n if (pair.fromCurrency === fromCurrency && pair.toCurrency === toCurrency)\n return false\n }\n return true\n}\n\nexport const DEFAULT_RATE_HINTS = [\n { fromCurrency: 'BTC', toCurrency: 'iso:AED' },\n { fromCurrency: 'BTC', toCurrency: 'iso:AFN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ALL' },\n { fromCurrency: 'BTC', toCurrency: 'iso:AMD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ANG' },\n { fromCurrency: 'BTC', toCurrency: 'iso:AOA' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ARS' },\n { fromCurrency: 'BTC', toCurrency: 'iso:AUD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:AWG' },\n { fromCurrency: 'BTC', toCurrency: 'iso:AZN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BAM' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BBD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BDT' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BGN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BIF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BMD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BND' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BOB' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BRL' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BSD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BTN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BWP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BYN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:BZD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CAD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CDF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CHF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CLP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CNY' },\n { fromCurrency: 'BTC', toCurrency: 'iso:COP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CRC' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CUC' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CUP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CVE' },\n { fromCurrency: 'BTC', toCurrency: 'iso:CZK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:DJF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:DKK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:DOP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:DZD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:EGP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ERN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ETB' },\n { fromCurrency: 'BTC', toCurrency: 'iso:EUR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:FJD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:FKP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GBP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GEL' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GGP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GHS' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GIP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GMD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GNF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GTQ' },\n { fromCurrency: 'BTC', toCurrency: 'iso:GYD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:HKD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:HNL' },\n { fromCurrency: 'BTC', toCurrency: 'iso:HRK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:HTG' },\n { fromCurrency: 'BTC', toCurrency: 'iso:HUF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:IDR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ILS' },\n { fromCurrency: 'BTC', toCurrency: 'iso:IMP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:INR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:IQD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:IRR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ISK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:JEP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:JMD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:JOD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:JPY' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KES' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KGS' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KHR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KMF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KPW' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KRW' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KWD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KYD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:KZT' },\n { fromCurrency: 'BTC', toCurrency: 'iso:LAK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:LBP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:LKR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:LRD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:LSL' },\n { fromCurrency: 'BTC', toCurrency: 'iso:LYD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MAD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MDL' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MGA' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MKD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MMK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MNT' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MOP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MRO' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MRU' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MUR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MWK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MXN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MYR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:MZN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:NAD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:NGN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:NIO' },\n { fromCurrency: 'BTC', toCurrency: 'iso:NOK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:NPR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:NZD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:OMR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:PAB' },\n { fromCurrency: 'BTC', toCurrency: 'iso:PEN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:PGK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:PHP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:PKR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:PLN' },\n { fromCurrency: 'BTC', toCurrency: 'iso:PRB' },\n { fromCurrency: 'BTC', toCurrency: 'iso:PYG' },\n { fromCurrency: 'BTC', toCurrency: 'iso:QAR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:RON' },\n { fromCurrency: 'BTC', toCurrency: 'iso:RSD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:RUB' },\n { fromCurrency: 'BTC', toCurrency: 'iso:RWF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SAR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SBD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SCR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SDG' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SEK' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SGD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SHP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SLL' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SOS' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SRD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SSP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:STD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SYP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:SZL' },\n { fromCurrency: 'BTC', toCurrency: 'iso:THB' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TJS' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TMT' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TND' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TOP' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TRY' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TTD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TVD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TWD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:TZS' },\n { fromCurrency: 'BTC', toCurrency: 'iso:UAH' },\n { fromCurrency: 'BTC', toCurrency: 'iso:UGX' },\n { fromCurrency: 'BTC', toCurrency: 'iso:USD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:UYU' },\n { fromCurrency: 'BTC', toCurrency: 'iso:UZS' },\n { fromCurrency: 'BTC', toCurrency: 'iso:VEF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:VND' },\n { fromCurrency: 'BTC', toCurrency: 'iso:VUV' },\n { fromCurrency: 'BTC', toCurrency: 'iso:WST' },\n { fromCurrency: 'BTC', toCurrency: 'iso:XAF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:XCD' },\n { fromCurrency: 'BTC', toCurrency: 'iso:XOF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:XPF' },\n { fromCurrency: 'BTC', toCurrency: 'iso:YER' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ZAR' },\n { fromCurrency: 'BTC', toCurrency: 'iso:ZMW' },\n { fromCurrency: 'BCH', toCurrency: 'iso:AED' },\n { fromCurrency: 'BCH', toCurrency: 'iso:AFN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ALL' },\n { fromCurrency: 'BCH', toCurrency: 'iso:AMD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ANG' },\n { fromCurrency: 'BCH', toCurrency: 'iso:AOA' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ARS' },\n { fromCurrency: 'BCH', toCurrency: 'iso:AUD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:AWG' },\n { fromCurrency: 'BCH', toCurrency: 'iso:AZN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BAM' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BBD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BDT' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BGN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BIF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BMD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BND' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BOB' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BRL' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BSD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BTN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BWP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BYN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:BZD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CAD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CDF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CHF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CLP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CNY' },\n { fromCurrency: 'BCH', toCurrency: 'iso:COP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CRC' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CUC' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CUP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CVE' },\n { fromCurrency: 'BCH', toCurrency: 'iso:CZK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:DJF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:DKK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:DOP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:DZD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:EGP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ERN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ETB' },\n { fromCurrency: 'BCH', toCurrency: 'iso:EUR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:FJD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:FKP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GBP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GEL' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GGP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GHS' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GIP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GMD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GNF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GTQ' },\n { fromCurrency: 'BCH', toCurrency: 'iso:GYD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:HKD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:HNL' },\n { fromCurrency: 'BCH', toCurrency: 'iso:HRK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:HTG' },\n { fromCurrency: 'BCH', toCurrency: 'iso:HUF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:IDR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ILS' },\n { fromCurrency: 'BCH', toCurrency: 'iso:IMP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:INR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:IQD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:IRR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ISK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:JEP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:JMD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:JOD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:JPY' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KES' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KGS' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KHR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KMF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KPW' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KRW' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KWD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KYD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:KZT' },\n { fromCurrency: 'BCH', toCurrency: 'iso:LAK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:LBP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:LKR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:LRD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:LSL' },\n { fromCurrency: 'BCH', toCurrency: 'iso:LYD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MAD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MDL' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MGA' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MKD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MMK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MNT' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MOP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MRO' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MRU' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MUR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MWK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MXN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MYR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:MZN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:NAD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:NGN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:NIO' },\n { fromCurrency: 'BCH', toCurrency: 'iso:NOK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:NPR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:NZD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:OMR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:PAB' },\n { fromCurrency: 'BCH', toCurrency: 'iso:PEN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:PGK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:PHP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:PKR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:PLN' },\n { fromCurrency: 'BCH', toCurrency: 'iso:PRB' },\n { fromCurrency: 'BCH', toCurrency: 'iso:PYG' },\n { fromCurrency: 'BCH', toCurrency: 'iso:QAR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:RON' },\n { fromCurrency: 'BCH', toCurrency: 'iso:RSD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:RUB' },\n { fromCurrency: 'BCH', toCurrency: 'iso:RWF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SAR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SBD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SCR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SDG' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SEK' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SGD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SHP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SLL' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SOS' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SRD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SSP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:STD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SYP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:SZL' },\n { fromCurrency: 'BCH', toCurrency: 'iso:THB' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TJS' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TMT' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TND' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TOP' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TRY' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TTD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TVD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TWD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:TZS' },\n { fromCurrency: 'BCH', toCurrency: 'iso:UAH' },\n { fromCurrency: 'BCH', toCurrency: 'iso:UGX' },\n { fromCurrency: 'BCH', toCurrency: 'iso:USD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:UYU' },\n { fromCurrency: 'BCH', toCurrency: 'iso:UZS' },\n { fromCurrency: 'BCH', toCurrency: 'iso:VEF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:VND' },\n { fromCurrency: 'BCH', toCurrency: 'iso:VUV' },\n { fromCurrency: 'BCH', toCurrency: 'iso:WST' },\n { fromCurrency: 'BCH', toCurrency: 'iso:XAF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:XCD' },\n { fromCurrency: 'BCH', toCurrency: 'iso:XOF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:XPF' },\n { fromCurrency: 'BCH', toCurrency: 'iso:YER' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ZAR' },\n { fromCurrency: 'BCH', toCurrency: 'iso:ZMW' },\n { fromCurrency: 'ETH', toCurrency: 'iso:AED' },\n { fromCurrency: 'ETH', toCurrency: 'iso:AFN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ALL' },\n { fromCurrency: 'ETH', toCurrency: 'iso:AMD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ANG' },\n { fromCurrency: 'ETH', toCurrency: 'iso:AOA' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ARS' },\n { fromCurrency: 'ETH', toCurrency: 'iso:AUD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:AWG' },\n { fromCurrency: 'ETH', toCurrency: 'iso:AZN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BAM' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BBD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BDT' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BGN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BIF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BMD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BND' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BOB' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BRL' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BSD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BTN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BWP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BYN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:BZD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CAD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CDF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CHF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CLP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CNY' },\n { fromCurrency: 'ETH', toCurrency: 'iso:COP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CRC' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CUC' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CUP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CVE' },\n { fromCurrency: 'ETH', toCurrency: 'iso:CZK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:DJF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:DKK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:DOP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:DZD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:EGP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ERN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ETB' },\n { fromCurrency: 'ETH', toCurrency: 'iso:EUR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:FJD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:FKP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GBP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GEL' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GGP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GHS' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GIP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GMD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GNF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GTQ' },\n { fromCurrency: 'ETH', toCurrency: 'iso:GYD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:HKD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:HNL' },\n { fromCurrency: 'ETH', toCurrency: 'iso:HRK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:HTG' },\n { fromCurrency: 'ETH', toCurrency: 'iso:HUF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:IDR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ILS' },\n { fromCurrency: 'ETH', toCurrency: 'iso:IMP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:INR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:IQD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:IRR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ISK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:JEP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:JMD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:JOD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:JPY' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KES' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KGS' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KHR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KMF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KPW' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KRW' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KWD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KYD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:KZT' },\n { fromCurrency: 'ETH', toCurrency: 'iso:LAK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:LBP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:LKR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:LRD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:LSL' },\n { fromCurrency: 'ETH', toCurrency: 'iso:LYD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MAD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MDL' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MGA' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MKD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MMK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MNT' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MOP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MRO' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MRU' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MUR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MWK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MXN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MYR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:MZN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:NAD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:NGN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:NIO' },\n { fromCurrency: 'ETH', toCurrency: 'iso:NOK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:NPR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:NZD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:OMR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:PAB' },\n { fromCurrency: 'ETH', toCurrency: 'iso:PEN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:PGK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:PHP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:PKR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:PLN' },\n { fromCurrency: 'ETH', toCurrency: 'iso:PRB' },\n { fromCurrency: 'ETH', toCurrency: 'iso:PYG' },\n { fromCurrency: 'ETH', toCurrency: 'iso:QAR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:RON' },\n { fromCurrency: 'ETH', toCurrency: 'iso:RSD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:RUB' },\n { fromCurrency: 'ETH', toCurrency: 'iso:RWF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SAR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SBD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SCR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SDG' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SEK' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SGD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SHP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SLL' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SOS' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SRD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SSP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:STD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SYP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:SZL' },\n { fromCurrency: 'ETH', toCurrency: 'iso:THB' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TJS' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TMT' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TND' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TOP' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TRY' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TTD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TVD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TWD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:TZS' },\n { fromCurrency: 'ETH', toCurrency: 'iso:UAH' },\n { fromCurrency: 'ETH', toCurrency: 'iso:UGX' },\n { fromCurrency: 'ETH', toCurrency: 'iso:USD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:UYU' },\n { fromCurrency: 'ETH', toCurrency: 'iso:UZS' },\n { fromCurrency: 'ETH', toCurrency: 'iso:VEF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:VND' },\n { fromCurrency: 'ETH', toCurrency: 'iso:VUV' },\n { fromCurrency: 'ETH', toCurrency: 'iso:WST' },\n { fromCurrency: 'ETH', toCurrency: 'iso:XAF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:XCD' },\n { fromCurrency: 'ETH', toCurrency: 'iso:XOF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:XPF' },\n { fromCurrency: 'ETH', toCurrency: 'iso:YER' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ZAR' },\n { fromCurrency: 'ETH', toCurrency: 'iso:ZMW' }\n]\n","// \n\nimport { combineReducers } from 'redux'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction addRoute(\n routes,\n from,\n to,\n pair\n) {\n if (!routes[from]) routes[from] = {}\n if (!routes[from][to]) routes[from][to] = []\n routes[from][to].push(pair)\n}\n\n/**\n * Currency rates reducer.\n * The raw state is just a list of currency pairs, each having a\n * `fromCurrency`, `toCurrency`, `rate`, `source`, and `timestamp` field.\n *\n * Based on this raw state, we also derive a map of unique id's.\n * This is used to remove duplicates when we add new pairs to the state.\n * If a new pair has the same identity as an existing pair,\n * we use the mapped index to stomp over the old pair.\n *\n * Finally, we store a routing table, which is is just the pairs list\n * indexed by currency. The routing table has twice as many entries\n * as the pair list, since each pair works both ways.\n */\nfunction rates(\n state = { ids: {}, pairs: [], routes: {} },\n action\n) {\n if (action.type === 'EXCHANGE_PAIRS_FETCHED') {\n let ids = state.ids\n const pairs = [...state.pairs]\n\n // Update the id map and pairs array:\n for (const pair of action.payload) {\n const id = `${pair.source},${pair.fromCurrency},${pair.toCurrency}`\n\n // Have we ever seen this one before?\n const i = ids[id]\n if (i == null) {\n // Copy-on-write ids list:\n if (ids === state.ids) ids = { ...state.ids }\n ids[id] = pairs.length\n pairs.push(pair)\n } else {\n pairs[i] = pair\n }\n }\n\n // Populate the routes table:\n let routes = state.routes\n if (pairs.length !== state.pairs.length) {\n routes = {}\n for (let i = 0; i < pairs.length; ++i) {\n addRoute(routes, pairs[i].fromCurrency, pairs[i].toCurrency, i)\n addRoute(routes, pairs[i].toCurrency, pairs[i].fromCurrency, i)\n }\n }\n\n return { ids, pairs, routes }\n }\n\n return state\n}\n\nexport const exchangeCache\n\n\n = combineReducers({\n rates\n})\n","\n\n\n\nimport { addHint } from './exchange-pixie.js'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Recursively searches for the best exchange rate.\n */\nfunction searchRoutes(\n search,\n fromCurrency,\n parentRate,\n blacklist\n) {\n // If we reach our target, we are done:\n if (fromCurrency === search.toCurrency) {\n search.bestRate = parentRate\n }\n\n // Never re-visit the same currency:\n blacklist = { ...blacklist }\n blacklist[fromCurrency] = true\n\n // Iterate over all the currencies we can convert to from here:\n for (const currency of Object.keys(search.routes[fromCurrency])) {\n // Skip this currency if it is on the blacklist:\n if (blacklist[currency]) continue\n\n // Of all the pairs that bring us to this currency, find the best one:\n let ourRate = { rate: 0, cost: Infinity }\n const indices = search.routes[fromCurrency][currency]\n for (const i of indices) {\n const pair = search.pairs[i]\n const inverse = pair.fromCurrency !== fromCurrency\n const cost =\n parentRate.cost +\n search.getPairCost(pair.source, search.now - pair.timestamp, inverse)\n\n // Save this rate if it has a better score:\n if (cost < ourRate.cost) {\n const rate = inverse\n ? parentRate.rate / pair.rate\n : parentRate.rate * pair.rate\n ourRate = { rate, cost }\n }\n }\n\n // Only recurse if we have a better score:\n if (ourRate.cost < search.bestRate.cost) {\n searchRoutes(search, currency, ourRate, blacklist)\n }\n }\n}\n\nfunction isFiatCode(currencyCode) {\n return /^iso:/.test(currencyCode)\n}\n\n/**\n * Create routes to USD if no deep routes to fiat exist. Helpful for hard\n * coded crypto/crypto exchange rates.\n */\nfunction createDeepFiatRoutes(\n search,\n fromCurrency\n) {\n const newHints = []\n for (const fromRoute of Object.keys(search.routes[fromCurrency])) {\n for (const deepRoute of Object.keys(search.routes[fromRoute])) {\n if (isFiatCode(deepRoute)) return\n newHints.push({ fromCurrency: fromRoute, toCurrency: 'iso:USD' })\n }\n }\n newHints.forEach(hint => addHint(hint.fromCurrency, hint.toCurrency))\n}\n\n/**\n * Looks up the best available exchange rate.\n * @param {*} getPairCost a function that assigns scores to currency pairs.\n * Higher scores are worse. The scores add, so longer paths have higher costs\n * than shorter paths. The signature is `(source, age, inverse) => cost`.\n */\nexport function getExchangeRate(\n state,\n fromCurrency,\n toCurrency,\n getPairCost\n) {\n const { routes, pairs } = state.exchangeCache.rates\n const search = {\n now: Date.now() / 1000,\n routes,\n pairs,\n toCurrency,\n getPairCost,\n bestRate: { rate: 0, cost: Infinity }\n }\n\n // Only search if the endpoints exist:\n if (search.routes[fromCurrency] && search.routes[toCurrency]) {\n searchRoutes(search, fromCurrency, { rate: 1, cost: 0 }, {})\n if (!isFiatCode(fromCurrency)) createDeepFiatRoutes(search, fromCurrency)\n } else {\n addHint(fromCurrency, toCurrency)\n }\n\n return search.bestRate.rate\n}\n","\n\n\n\n\n\n\n\n\n\nimport { verifyData } from '../../util/crypto/verify.js'\n\n/**\n * A barcode-login lobby stored in the fake database.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Emulates the Airbitz login server database.\n */\nexport class FakeDb {\n \n \n \n\n constructor() {\n this.lobbies = {}\n this.logins = []\n this.repos = {}\n }\n\n getLoginById(loginId) {\n return this.logins.find(login => verifyData(login.loginId, loginId))\n }\n\n getLoginByPin2Id(pin2Id) {\n return this.logins.find(\n login => login.pin2Id != null && verifyData(login.pin2Id, pin2Id)\n )\n }\n\n getLoginByRecovery2Id(recovery2Id) {\n return this.logins.find(\n login =>\n login.recovery2Id != null && verifyData(login.recovery2Id, recovery2Id)\n )\n }\n\n getLoginsByParent(parent) {\n return this.logins.filter(child => child.parentId === parent.loginId)\n }\n\n insertLogin(login) {\n this.logins.push(login)\n }\n\n // Dumping & restoration --------------------------------------------\n\n setupFakeUser(user) {\n const setupLogin = (dump) => {\n const { children, ...rest } = dump\n this.insertLogin(rest)\n for (const child of children) {\n child.parentId = dump.loginId\n setupLogin(child)\n }\n }\n setupLogin(user.server)\n\n // Create fake repos:\n for (const syncKey of Object.keys(user.repos)) {\n this.repos[syncKey] = { ...user.repos[syncKey] }\n }\n }\n\n dumpLogin(login) {\n const makeTree = (login) => ({\n ...login,\n children: this.getLoginsByParent(login).map(login => makeTree(login))\n })\n return makeTree(login)\n }\n}\n\n/**\n * Recursively builds up a login reply tree,\n * which the server sends back in response to a v2 login request.\n */\nexport function makeLoginPayload(db, login) {\n const children = db\n .getLoginsByParent(login)\n .map(child => makeLoginPayload(db, child))\n\n return {\n // Identity:\n appId: login.appId,\n created: login.created,\n loginId: login.loginId,\n\n // Nested logins:\n children,\n parentBox: login.parentBox,\n\n // Login methods:\n passwordAuthBox: login.passwordAuthBox,\n passwordAuthSnrp: login.passwordAuthSnrp,\n passwordBox: login.passwordBox,\n passwordKeySnrp: login.passwordKeySnrp,\n pin2Box: login.pin2Box,\n pin2KeyBox: login.pin2KeyBox,\n pin2TextBox: login.pin2TextBox,\n question2Box: login.question2Box,\n recovery2Box: login.recovery2Box,\n recovery2KeyBox: login.recovery2KeyBox,\n otpKey: login.otpKey,\n otpResetDate: login.otpResetDate,\n otpTimeout: login.otpTimeout,\n pendingVouchers: makePendingVouchers(login),\n loginAuthBox: login.loginAuthBox,\n\n // Resources:\n keyBoxes: login.keyBoxes,\n mnemonicBox: login.mnemonicBox,\n rootKeyBox: login.rootKeyBox,\n syncKeyBox: login.syncKeyBox\n }\n}\n\nexport function makePendingVouchers(login) {\n return login.vouchers\n .filter(voucher => voucher.status === 'pending')\n .map(voucher => ({\n activates: voucher.activates,\n created: voucher.created,\n deviceDescription: voucher.deviceDescription,\n ip: voucher.ip,\n ipDescription: voucher.ipDescription,\n voucherId: voucher.voucherId\n }))\n}\n","// \n\nimport { makeMemoryDisklet } from 'disklet'\n\n\n\n\n\n\nimport { scrypt } from '../../util/crypto/scrypt.js'\n\n/**\n * Generates deterministic \"random\" data for unit-testing.\n */\nfunction makeFakeRandom() {\n let seed = 0\n\n return (bytes) => {\n const out = new Uint8Array(bytes)\n\n for (let i = 0; i < bytes; ++i) {\n // Simplest numbers that give a full-period generator with\n // a good mix of high & low values within the first few bytes:\n seed = (5 * seed + 3) & 0xff\n out[i] = seed\n }\n\n return out\n }\n}\n\nconst fakeFetch = () => {\n return Promise.reject(new Error('Fake network error'))\n}\n\n/**\n * Creates a simulated io context object.\n */\nexport function makeFakeIo() {\n const out = {\n // Crypto:\n random: makeFakeRandom(),\n scrypt,\n\n // Local io:\n console,\n disklet: makeMemoryDisklet(),\n\n // Networking:\n fetch: fakeFetch\n }\n return out\n}\n"," function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// \n\nimport { uncleaner } from 'cleaners'\n\n\n\nimport {\n asOtpErrorPayload,\n asPasswordErrorPayload\n} from '../../types/server-cleaners.js'\n\n\nconst wasOtpErrorPayload = uncleaner(asOtpErrorPayload)\nconst wasPasswordErrorPayload = uncleaner(asPasswordErrorPayload)\n\n\n\nexport const statusCodes = {\n success: {\n code: 0,\n httpStatus: 200,\n message: 'Success'\n },\n error: {\n code: 1,\n httpStatus: 503,\n message: 'Error'\n },\n accountExists: {\n code: 2,\n httpStatus: 401,\n message: 'Account already exists'\n },\n noAccount: {\n code: 3,\n httpStatus: 401,\n message: 'No account'\n },\n invalidPassword: {\n code: 4,\n httpStatus: 401,\n message: 'Invalid Password'\n },\n invalidAnswers: {\n code: 5,\n httpStatus: 401,\n message: 'Invalid Answers'\n },\n invalidApiKey: {\n code: 6,\n httpStatus: 401,\n message: 'Invalid API Key'\n },\n // pinThrottled: {code: 7, httpStatus: , message: 401, 'Pin Throttled'}\n invalidOtp: {\n code: 8,\n httpStatus: 401,\n message: 'Invalid OTP'\n },\n conflict: {\n code: 10,\n httpStatus: 409,\n message: 'Conflicting change'\n },\n obsolete: {\n code: 1000,\n httpStatus: 410,\n message: 'Obsolete API'\n },\n\n // Variants of the \"success\" status code:\n created: {\n code: 0,\n httpStatus: 201,\n message: 'Account created'\n },\n\n // Variants of the \"error\" status code:\n invalidRequest: {\n code: 1,\n httpStatus: 401,\n message: 'Invalid request'\n },\n notFound: {\n code: 1,\n httpStatus: 404,\n message: 'Not found'\n },\n\n // Variants of the \"noAccount\" status code:\n noLobby: {\n code: 3,\n httpStatus: 404,\n message: 'Not found'\n },\n\n // Variants of the \"conflict\" error code:\n invalidAppId: {\n code: 10,\n httpStatus: 401,\n message: 'A login with the same appId already exists'\n }\n}\n\n/**\n * Construct an HttpResponse object with a JSON body.\n */\nexport function jsonResponse(\n body,\n opts = {}\n) {\n const { status = 200, headers = {} } = opts\n return Promise.resolve({\n status,\n headers: { 'content-type': 'application/json', ...headers },\n body: JSON.stringify(body)\n })\n}\n\n/**\n * A generic success or failure response.\n */\nexport function statusResponse(\n statusCode = statusCodes.success,\n message = statusCode.message\n) {\n const { code, httpStatus } = statusCode\n const body = { status_code: code, message }\n return jsonResponse(body, { status: httpStatus })\n}\n\n/**\n * A success response, with payload.\n */\nexport function payloadResponse(\n payload,\n statusCode = statusCodes.success,\n message = statusCode.message\n) {\n const { code, httpStatus } = statusCode\n const body = { status_code: code, message, results: payload }\n return jsonResponse(body, { status: httpStatus })\n}\n\n/**\n * An OTP failure response.\n */\nexport function otpErrorResponse(\n login,\n opts\n\n\n = {}\n) {\n const { reason = 'otp', voucher } = opts\n return payloadResponse(\n wasOtpErrorPayload({\n login_id: login.loginId,\n otp_reset_auth: login.otpResetAuth,\n otp_timeout_date: login.otpResetDate,\n reason,\n voucher_auth: _optionalChain([voucher, 'optionalAccess', _ => _.voucherAuth]),\n voucher_activates: _optionalChain([voucher, 'optionalAccess', _2 => _2.activates]),\n voucher_id: _optionalChain([voucher, 'optionalAccess', _3 => _3.voucherId])\n }),\n statusCodes.invalidOtp\n )\n}\n\n/**\n * A password failure, with timeout.\n */\nexport function passwordErrorResponse(wait) {\n return payloadResponse(\n wasPasswordErrorPayload({\n wait_seconds: wait\n }),\n statusCodes.invalidPassword\n )\n}\n","// \n\nimport { asMap, asMaybe, asObject, uncleaner } from 'cleaners'\nimport {\n\n\n\n\n pickMethod,\n pickPath\n} from 'serverlet'\n\n\nimport {\n asChangeOtpPayload,\n asChangePasswordPayload,\n asChangePin2Payload,\n asChangeRecovery2Payload,\n asChangeSecretPayload,\n asChangeVouchersPayload,\n asCreateKeysPayload,\n asCreateLoginPayload,\n asEdgeBox,\n asEdgeLobbyReply,\n asEdgeLobbyRequest,\n asLobbyPayload,\n asLoginPayload,\n asLoginRequestBody,\n asMessagesPayload,\n asOtpResetPayload,\n asRecovery2InfoPayload,\n asUsernameInfoPayload\n} from '../../types/server-cleaners.js'\n\n\n\n\nimport { checkTotp } from '../../util/crypto/hotp.js'\nimport { verifyData } from '../../util/crypto/verify.js'\nimport { utf8 } from '../../util/encoding.js'\nimport { addHiddenProperties, softCat } from '../../util/util.js'\nimport { userIdSnrp } from '../scrypt/scrypt-selectors.js'\nimport {\n\n\n\n\n makeLoginPayload,\n makePendingVouchers\n} from './fake-db.js'\nimport {\n jsonResponse,\n otpErrorResponse,\n passwordErrorResponse,\n payloadResponse,\n statusCodes,\n statusResponse\n} from './fake-responses.js'\n\nconst wasLobbyPayload = uncleaner(asLobbyPayload)\nconst wasLoginPayload = uncleaner(asLoginPayload)\nconst wasMessagesPayload = uncleaner(asMessagesPayload)\nconst wasOtpResetPayload = uncleaner(asOtpResetPayload)\nconst wasRecovery2InfoPayload = uncleaner(asRecovery2InfoPayload)\nconst wasUsernameInfoPayload = uncleaner(asUsernameInfoPayload)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Authentication middleware: ----------------------------------------------\n\nconst withApiKey = (\n server\n) => async request => {\n const { json } = request\n const body = asMaybe(asLoginRequestBody)(json)\n if (body == null) return statusResponse(statusCodes.invalidRequest)\n return await server({ ...request, body, payload: body.data })\n}\n\nconst withValidOtp\n\n = server => async request => {\n const { body, login } = request\n const { otp, voucherAuth, voucherId } = body\n\n // Deactivated OTP is fine:\n const { otpKey } = login\n if (otpKey == null) return await server(request)\n\n // A valid OTP is good:\n if (otp != null && checkTotp(otpKey, otp, { spread: 2 })) {\n return await server(request)\n }\n\n // An approved voucher is good:\n if (voucherAuth != null && voucherId != null) {\n const voucher = login.vouchers.find(\n voucher => voucher.voucherId === voucherId\n )\n if (\n voucher != null &&\n voucher.status === 'approved' &&\n verifyData(voucherAuth, voucher.voucherAuth)\n ) {\n return await server(request)\n }\n }\n\n login.otpResetAuth = 'Super secret reset token'\n const voucher = {\n activates: new Date('2020-01-01T00:00:00Z'),\n created: new Date('2020-01-08T00:00:00Z'),\n deviceDescription: 'A phone',\n ip: 'localhost',\n ipDescription: 'here',\n loginId: login.loginId,\n status: 'pending',\n voucherAuth: Uint8Array.from([0xaa, 0xbb]),\n voucherId: `voucher-${login.vouchers.length}`\n }\n login.vouchers.push(voucher)\n return otpErrorResponse(login, { voucher })\n}\n\nconst handleMissingCredentials = request =>\n statusResponse(statusCodes.invalidRequest)\n\n/**\n * Verifies that the request contains valid v2 authentication.\n */\nconst withLogin2 = (\n server,\n fallback = handleMissingCredentials\n) => request => {\n const { db, body } = request\n const {\n loginAuth,\n loginId,\n passwordAuth,\n pin2Auth,\n pin2Id,\n recovery2Auth,\n recovery2Id,\n userId\n } = body\n\n // Token login:\n if (loginId != null && loginAuth != null) {\n const login = db.getLoginById(loginId)\n if (login == null) {\n return statusResponse(statusCodes.noAccount)\n }\n if (login.loginAuth == null || !verifyData(loginAuth, login.loginAuth)) {\n return passwordErrorResponse(0)\n }\n return withValidOtp(server)({ ...request, login })\n }\n\n // Password login:\n if (userId != null && passwordAuth != null) {\n const login = db.getLoginById(userId)\n if (login == null) {\n return statusResponse(statusCodes.noAccount)\n }\n if (\n login.passwordAuth == null ||\n !verifyData(passwordAuth, login.passwordAuth)\n ) {\n return passwordErrorResponse(0)\n }\n return withValidOtp(server)({ ...request, login })\n }\n\n // PIN2 login:\n if (pin2Id != null && pin2Auth != null) {\n const login = db.getLoginByPin2Id(pin2Id)\n if (login == null) {\n return statusResponse(statusCodes.noAccount)\n }\n if (login.pin2Auth == null || !verifyData(pin2Auth, login.pin2Auth)) {\n return passwordErrorResponse(0)\n }\n return withValidOtp(server)({ ...request, login })\n }\n\n // Recovery2 login:\n if (recovery2Id != null && recovery2Auth != null) {\n const login = db.getLoginByRecovery2Id(recovery2Id)\n if (login == null) {\n return statusResponse(statusCodes.noAccount)\n }\n const serverAuth = login.recovery2Auth\n const clientAuth = recovery2Auth\n if (serverAuth == null || clientAuth.length !== serverAuth.length) {\n return passwordErrorResponse(0)\n }\n for (let i = 0; i < clientAuth.length; ++i) {\n if (!verifyData(clientAuth[i], serverAuth[i])) {\n return passwordErrorResponse(0)\n }\n }\n return withValidOtp(server)({ ...request, login })\n }\n\n return fallback(request)\n}\n\n// login v2: ---------------------------------------------------------------\n\nconst loginRoute = withLogin2(\n // Authenticated version:\n request => {\n const { db, login } = request\n return payloadResponse(wasLoginPayload(makeLoginPayload(db, login)))\n },\n // Fallback version:\n request => {\n const { db, json } = request\n const clean = asLoginRequestBody(json)\n const { userId, passwordAuth, recovery2Id, recovery2Auth } = clean\n\n if (userId != null && passwordAuth == null) {\n const login = db.getLoginById(userId)\n if (login == null) {\n return statusResponse(statusCodes.noAccount)\n }\n const { passwordAuthSnrp = userIdSnrp } = login\n return payloadResponse(wasUsernameInfoPayload({ passwordAuthSnrp }))\n }\n if (recovery2Id != null && recovery2Auth == null) {\n const login = db.getLoginByRecovery2Id(recovery2Id)\n if (login == null) {\n return statusResponse(statusCodes.noAccount)\n }\n const { question2Box } = login\n if (question2Box == null) {\n return statusResponse(statusCodes.noAccount)\n }\n return payloadResponse(wasRecovery2InfoPayload({ question2Box }))\n }\n return statusResponse(statusCodes.invalidRequest)\n }\n)\n\nfunction createLogin(\n request,\n login\n) {\n const { db, json } = request\n const date = new Date()\n\n const body = asMaybe(asLoginRequestBody)(json)\n if (body == null) return statusResponse(statusCodes.invalidRequest)\n const clean = asMaybe(asCreateLoginPayload)(body.data)\n const secret = asMaybe(asChangeSecretPayload)(clean)\n if (clean == null || secret == null) {\n return statusResponse(statusCodes.invalidRequest)\n }\n\n // Do not re-create accounts:\n if (db.getLoginById(clean.loginId) != null) {\n return statusResponse(statusCodes.accountExists)\n }\n\n // Set up repos:\n const emptyKeys = { newSyncKeys: [], keyBoxes: [] }\n const keys = asMaybe(asCreateKeysPayload, emptyKeys)(clean)\n for (const syncKey of keys.newSyncKeys) {\n db.repos[syncKey] = {}\n }\n\n // Start building the new database row:\n const row = {\n // Required fields:\n ...clean,\n ...secret,\n created: date,\n keyBoxes: keys.keyBoxes,\n vouchers: [],\n\n // Optional fields:\n ...asMaybe(asChangeOtpPayload)(clean),\n ...asMaybe(asChangePasswordPayload)(clean),\n ...asMaybe(asChangePin2Payload)(clean),\n ...asMaybe(asChangeRecovery2Payload)(clean)\n }\n\n // Set up the parent/child relationship:\n if (login != null) {\n const children = db.getLoginsByParent(login)\n const appIdExists =\n children.find(child => child.appId === clean.appId) != null\n if (appIdExists) {\n return statusResponse(statusCodes.invalidAppId)\n }\n row.parentId = login.loginId\n }\n db.insertLogin(row)\n\n return statusResponse(statusCodes.created, 'Account created')\n}\n\nconst createLoginRoute = withLogin2(\n request => createLogin(request, request.login),\n request => createLogin(request)\n)\n\nconst addKeysRoute = withLogin2(request => {\n const { db, login, payload } = request\n const clean = asMaybe(asCreateKeysPayload)(payload)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n\n // Set up repos:\n for (const syncKey of clean.newSyncKeys) {\n db.repos[syncKey] = {}\n }\n login.keyBoxes = softCat(login.keyBoxes, clean.keyBoxes)\n\n return statusResponse()\n})\n\nconst changeOtpRoute = withLogin2(request => {\n const { login, payload } = request\n const clean = asMaybe(asChangeOtpPayload)(payload)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n\n login.otpKey = clean.otpKey\n login.otpTimeout = clean.otpTimeout\n login.otpResetDate = undefined\n\n return statusResponse()\n})\n\nconst deleteOtpRoute = withLogin2(\n // Authenticated version:\n request => {\n const { login } = request\n login.otpKey = undefined\n login.otpResetAuth = undefined\n login.otpResetDate = undefined\n login.otpTimeout = undefined\n\n return statusResponse()\n },\n // Fallback version:\n request => {\n const { db, json } = request\n const clean = asLoginRequestBody(json)\n if (clean.userId == null || clean.otpResetAuth == null) {\n return statusResponse(statusCodes.invalidRequest)\n }\n const login = db.getLoginById(clean.userId)\n if (login == null) {\n return statusResponse(statusCodes.noAccount)\n }\n if (clean.otpResetAuth !== login.otpResetAuth) {\n return passwordErrorResponse(0)\n }\n const { otpKey, otpTimeout } = login\n if (otpKey == null || otpTimeout == null) {\n return statusResponse(\n statusCodes.invalidRequest,\n 'OTP not setup for this account.'\n )\n }\n if (login.otpResetDate == null) {\n login.otpResetDate = new Date(Date.now() + 1000 * otpTimeout)\n }\n return payloadResponse(\n wasOtpResetPayload({ otpResetDate: login.otpResetDate })\n )\n }\n)\n\nconst deletePasswordRoute = withLogin2(request => {\n const { login } = request\n login.passwordAuth = undefined\n login.passwordAuthBox = undefined\n login.passwordAuthSnrp = undefined\n login.passwordBox = undefined\n login.passwordKeySnrp = undefined\n\n return statusResponse()\n})\n\nconst changePasswordRoute = withLogin2(request => {\n const { login, payload } = request\n const clean = asMaybe(asChangePasswordPayload)(payload)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n\n login.passwordAuth = clean.passwordAuth\n login.passwordAuthBox = clean.passwordAuthBox\n login.passwordAuthSnrp = clean.passwordAuthSnrp\n login.passwordBox = clean.passwordBox\n login.passwordKeySnrp = clean.passwordKeySnrp\n\n return statusResponse()\n})\n\nconst deletePin2Route = withLogin2(request => {\n const { login } = request\n login.pin2Auth = undefined\n login.pin2Box = undefined\n login.pin2Id = undefined\n login.pin2KeyBox = undefined\n login.pin2TextBox = undefined\n\n return statusResponse()\n})\n\nconst changePin2Route = withLogin2(request => {\n const { login, payload } = request\n const clean = asMaybe(asChangePin2Payload)(payload)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n\n login.pin2Auth = clean.pin2Auth\n login.pin2Box = clean.pin2Box\n login.pin2Id = clean.pin2Id\n login.pin2KeyBox = clean.pin2KeyBox\n login.pin2TextBox = clean.pin2TextBox\n\n return statusResponse()\n})\n\nconst deleteRecovery2Route = withLogin2(request => {\n const { login } = request\n login.question2Box = undefined\n login.recovery2Auth = undefined\n login.recovery2Box = undefined\n login.recovery2Id = undefined\n login.recovery2KeyBox = undefined\n\n return statusResponse()\n})\n\nconst changeRecovery2Route = withLogin2(request => {\n const { login, payload } = request\n const clean = asMaybe(asChangeRecovery2Payload)(payload)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n\n login.question2Box = clean.question2Box\n login.recovery2Auth = clean.recovery2Auth\n login.recovery2Box = clean.recovery2Box\n login.recovery2Id = clean.recovery2Id\n login.recovery2KeyBox = clean.recovery2KeyBox\n\n return statusResponse()\n})\n\nconst secretRoute = withLogin2(request => {\n const { db, login, payload } = request\n const clean = asMaybe(asChangeSecretPayload)(payload)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n\n // Do a quick sanity check:\n if (login.loginAuth != null) {\n return statusResponse(\n statusCodes.conflict,\n 'The secret-key login is already configured'\n )\n }\n\n login.loginAuth = clean.loginAuth\n login.loginAuthBox = clean.loginAuthBox\n\n return payloadResponse(wasLoginPayload(makeLoginPayload(db, login)))\n})\n\nexport const vouchersRoute = withLogin2(async request => {\n const { db, login, payload } = request\n const clean = asMaybe(asChangeVouchersPayload)(payload)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n const { approvedVouchers = [], rejectedVouchers = [] } = clean\n\n // Let's get our tasks organized:\n const table = {}\n for (const id of approvedVouchers) table[id] = 'approved'\n for (const id of rejectedVouchers) table[id] = 'rejected'\n\n // Grab all the rows:\n for (const voucher of login.vouchers) {\n if (table[voucher.voucherId] == null) continue\n voucher.status = table[voucher.voucherId]\n }\n\n return payloadResponse(wasLoginPayload(await makeLoginPayload(db, login)))\n})\n\n// lobby: ------------------------------------------------------------------\n\nconst handleMissingLobby = request =>\n statusResponse(statusCodes.noLobby, `Cannot find lobby ${request.lobbyId}`)\n\nconst withLobby = (\n server,\n fallback = handleMissingLobby\n) => request => {\n const { db, path } = request\n const lobbyId = path.split('/')[4]\n const lobby = db.lobbies[lobbyId]\n return lobby != null\n ? server({ ...request, lobby, lobbyId })\n : fallback({ ...request, lobbyId })\n}\n\nconst createLobbyRoute = withLobby(\n request =>\n statusResponse(\n statusCodes.accountExists,\n `Lobby ${request.lobbyId} already exists.`\n ),\n request => {\n const { db, json, lobbyId } = request\n\n const body = asMaybe(asLoginRequestBody)(json)\n if (body == null) return statusResponse(statusCodes.invalidRequest)\n const clean = asMaybe(asEdgeLobbyRequest)(body.data)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n\n const { timeout = 600 } = clean\n const expires = new Date(Date.now() + 1000 * timeout).toISOString()\n\n db.lobbies[lobbyId] = { request: clean, replies: [], expires }\n return statusResponse()\n }\n)\n\nconst updateLobbyRoute = withLobby(request => {\n const { json, lobby } = request\n\n const body = asMaybe(asLoginRequestBody)(json)\n if (body == null) return statusResponse(statusCodes.invalidRequest)\n const clean = asMaybe(asEdgeLobbyReply)(body.data)\n if (clean == null) return statusResponse(statusCodes.invalidRequest)\n\n lobby.replies.push(clean)\n return statusResponse()\n})\n\nconst getLobbyRoute = withLobby(request => {\n const { lobby } = request\n return payloadResponse(wasLobbyPayload(lobby))\n})\n\nconst deleteLobbyRoute = withLobby(request => {\n const { db, lobbyId } = request\n delete db.lobbies[lobbyId]\n return statusResponse()\n})\n\n// messages: ---------------------------------------------------------------\n\nconst messagesRoute = request => {\n const { db, json } = request\n const clean = asMaybe(asLoginRequestBody)(json)\n if (clean == null || clean.loginIds == null) {\n return statusResponse(statusCodes.invalidRequest)\n }\n const { loginIds } = clean\n\n const out = []\n for (const loginId of loginIds) {\n const login = db.getLoginById(loginId)\n if (login != null) {\n out.push({\n loginId,\n otpResetPending: login.otpResetDate != null,\n pendingVouchers: makePendingVouchers(login),\n recovery2Corrupt: false\n })\n }\n }\n return payloadResponse(wasMessagesPayload(out))\n}\n\n// sync: -------------------------------------------------------------------\n\nconst withRepo = (\n server\n) => request => {\n const { db, path } = request\n const elements = path.split('/')\n const syncKey = elements[4]\n // const hash = elements[5]\n\n const repo = db.repos[syncKey]\n if (repo == null) {\n // This is not the auth server, so we have a different format:\n return jsonResponse({ msg: 'Hash not found' }, { status: 404 })\n }\n\n return server({ ...request, repo })\n}\n\nconst storeReadRoute = withRepo(request => {\n const { repo } = request\n return jsonResponse({ changes: repo })\n})\n\nconst storeUpdateRoute = withRepo(request => {\n const { json, repo } = request\n const { changes } = asStoreBody(json)\n for (const change of Object.keys(changes)) {\n repo[change] = changes[change]\n }\n return jsonResponse({\n changes: repo,\n hash: '1111111111111111111111111111111111111111'\n })\n})\n\nconst asStoreBody = asObject({\n changes: asMap(asEdgeBox)\n})\n\n// info: -------------------------------------------------------------------\n\nconst infoRoute = request => {\n return jsonResponse({\n infoServers: ['https://info-fake1.edge.app'],\n syncServers: [\n 'https://sync-fake1.edge.app',\n 'https://sync-fake2.edge.app',\n 'https://sync-fake3.edge.app'\n ]\n })\n}\n\n// router: -----------------------------------------------------------------\n\nconst urls = pickPath(\n {\n // Login v2 endpoints:\n '/api/v2/login/?': pickMethod({\n GET: withApiKey(loginRoute),\n POST: withApiKey(loginRoute)\n }),\n '/api/v2/login/create/?': pickMethod({\n POST: withApiKey(createLoginRoute),\n PUT: withApiKey(createLoginRoute)\n }),\n '/api/v2/login/keys/?': pickMethod({\n POST: withApiKey(addKeysRoute)\n }),\n '/api/v2/login/otp/?': pickMethod({\n DELETE: withApiKey(deleteOtpRoute),\n POST: withApiKey(changeOtpRoute),\n PUT: withApiKey(changeOtpRoute)\n }),\n '/api/v2/login/password/?': pickMethod({\n DELETE: withApiKey(deletePasswordRoute),\n POST: withApiKey(changePasswordRoute),\n PUT: withApiKey(changePasswordRoute)\n }),\n '/api/v2/login/pin2/?': pickMethod({\n DELETE: withApiKey(deletePin2Route),\n POST: withApiKey(changePin2Route),\n PUT: withApiKey(changePin2Route)\n }),\n '/api/v2/login/recovery2/?': pickMethod({\n DELETE: withApiKey(deleteRecovery2Route),\n POST: withApiKey(changeRecovery2Route),\n PUT: withApiKey(changeRecovery2Route)\n }),\n '/api/v2/login/secret/?': pickMethod({\n POST: withApiKey(secretRoute)\n }),\n '/api/v2/login/vouchers/?': pickMethod({\n POST: withApiKey(vouchersRoute)\n }),\n '/api/v2/messages/?': pickMethod({\n POST: withApiKey(messagesRoute)\n }),\n\n // Lobby server endpoints:\n '/api/v2/lobby/[^/]+/?': pickMethod({\n DELETE: withApiKey(deleteLobbyRoute),\n GET: withApiKey(getLobbyRoute),\n POST: withApiKey(updateLobbyRoute),\n PUT: withApiKey(createLobbyRoute)\n }),\n\n // Sync server endpoints:\n '/api/v2/store/[^/]+/?': pickMethod({\n GET: storeReadRoute,\n POST: storeUpdateRoute\n }),\n\n // Info server endpoints:\n '/v1/edgeServers': pickMethod({\n GET: infoRoute\n })\n },\n request =>\n statusResponse(statusCodes.notFound, `Unknown API endpoint ${request.path}`)\n)\n\n/**\n * Binds the fake server to a particular db instance.\n */\nexport function makeFakeServer(\n db\n) {\n const serveRequest = request => {\n if (out.offline) throw new Error('Fake network error')\n const json =\n request.body.byteLength > 0\n ? JSON.parse(utf8.stringify(new Uint8Array(request.body)))\n : {}\n return urls({ ...request, db, json })\n }\n const out = addHiddenProperties(serveRequest, { offline: false })\n return out\n}\n","// \n\nimport { uncleaner } from 'cleaners'\nimport { makeMemoryDisklet } from 'disklet'\nimport { base16, base64 } from 'rfc4648'\nimport { makeFetchFunction } from 'serverlet'\nimport { bridgifyObject, close } from 'yaob'\n\nimport { fixUsername } from '../../client-side.js'\nimport {\n\n asFakeUser,\n asFakeUsers,\n asLoginDump\n} from '../../types/fake-types.js'\nimport { asLoginPayload } from '../../types/server-cleaners.js'\n\n\n\n\n\n\n\n\nimport { base58 } from '../../util/encoding.js'\n\nimport { applyLoginPayload } from '../login/login.js'\nimport { asLoginStash } from '../login/login-stash.js'\n\nimport { makeContext } from '../root.js'\nimport { makeRepoPaths, saveChanges } from '../storage/repo.js'\nimport { FakeDb } from './fake-db.js'\nimport { makeFakeServer } from './fake-server.js'\n\nconst wasLoginStash = uncleaner(asLoginStash)\nconst wasLoginDump = uncleaner(asLoginDump)\nconst wasFakeUser = uncleaner(asFakeUser)\n\nasync function saveUser(io, user) {\n const { lastLogin, loginId, loginKey, repos, server } = user\n const username = fixUsername(user.username)\n\n // Save the stash:\n const stash = applyLoginPayload(\n {\n appId: '',\n lastLogin,\n loginId,\n pendingVouchers: [],\n username\n },\n loginKey,\n asLoginPayload(wasLoginDump(server))\n )\n const path = `logins/${base58.stringify(loginId)}.json`\n await io.disklet\n .setText(path, JSON.stringify(wasLoginStash(stash)))\n .catch(() => {})\n\n // Save the repos:\n await Promise.all(\n Object.keys(repos).map(async syncKey => {\n const paths = makeRepoPaths(io, base16.parse(syncKey), new Uint8Array(0))\n await saveChanges(paths.dataDisklet, user.repos[syncKey])\n await paths.baseDisklet.setText(\n 'status.json',\n JSON.stringify({ lastSync: 1, lastHash: null })\n )\n })\n )\n}\n\n/**\n * Creates a fake Edge server for unit testing.\n */\nexport function makeFakeWorld(\n ios,\n logBackend,\n users\n) {\n const { io, nativeIo } = ios\n const fakeDb = new FakeDb()\n const fakeServer = makeFakeServer(fakeDb)\n\n // Populate the fake database:\n const cleanUsers = asFakeUsers(users)\n for (const user of cleanUsers) fakeDb.setupFakeUser(user)\n\n const contexts = []\n\n const out = {\n async close() {\n await Promise.all(contexts.map(context => context.close()))\n close(out)\n },\n\n async makeEdgeContext(opts) {\n const { cleanDevice = false } = opts\n const fakeIo = {\n ...io,\n disklet: makeMemoryDisklet(),\n fetch: makeFetchFunction(fakeServer)\n }\n\n // Populate the fake disk:\n if (!cleanDevice) {\n await Promise.all(cleanUsers.map(async user => saveUser(fakeIo, user)))\n }\n\n const out = await makeContext({ io: fakeIo, nativeIo }, logBackend, {\n ...opts\n })\n contexts.push(out)\n return out\n },\n\n async goOffline(offline = true) {\n fakeServer.offline = offline\n },\n\n async dumpFakeUser(account) {\n if (account.appId !== '') {\n throw new Error('Only root logins are dumpable.')\n }\n const loginId = base58.parse(account.rootLoginId)\n\n // Find the data on the server:\n const login = fakeDb.getLoginById(loginId)\n if (login == null) throw new Error(`Cannot find user ${account.username}`)\n\n // Figure out which repos to use:\n const syncKeys = account.allKeys\n .filter(info => info.keys != null && info.keys.syncKey != null)\n .map(info =>\n base16.stringify(base64.parse(info.keys.syncKey)).toLowerCase()\n )\n const repos = {}\n for (const syncKey of syncKeys) repos[syncKey] = fakeDb.repos[syncKey]\n\n return wasFakeUser({\n lastLogin: account.lastLogin,\n loginId,\n loginKey: base58.parse(account.loginKey),\n repos,\n server: fakeDb.dumpLogin(login),\n username: account.username\n })\n }\n }\n bridgifyObject(out)\n\n return out\n}\n","\n\n\n\n\n\n\n\n\n\nimport { addHiddenProperties } from '../../util/util.js'\n\n\n\n\n\n\nfunction makeLogMethod(\n onLog,\n type,\n source\n) {\n return function log() {\n let message = ''\n for (let i = 0; i < arguments.length; ++i) {\n const arg = arguments[i]\n if (i > 0) message += ' '\n message += typeof arg === 'string' ? arg : JSON.stringify(arg, null, 2)\n }\n\n onLog({ message, source, time: new Date(), type })\n }\n}\n\nexport function defaultOnLog(event) {\n const prettyDate = event.time\n .toISOString()\n .replace(/.*(\\d\\d-\\d\\d)T(\\d\\d:\\d\\d:\\d\\d).*/, '$1 $2')\n console.info(`${prettyDate} ${event.source}: ${event.message}`)\n}\n\nexport function filterLogs(\n backend,\n getSettings\n) {\n function onLog(event) {\n const { sources, defaultLogLevel } = getSettings()\n\n const logLevel =\n sources[event.source] != null ? sources[event.source] : defaultLogLevel\n\n switch (event.type) {\n case 'info':\n if (logLevel === 'info') backend.onLog(event)\n break\n case 'warn':\n if (logLevel === 'info' || logLevel === 'warn') backend.onLog(event)\n break\n case 'error':\n if (logLevel !== 'silent') backend.onLog(event)\n break\n }\n }\n return { ...backend, onLog }\n}\n\nexport function makeLog(backend, source) {\n const { onLog, crashReporter } = backend\n\n return addHiddenProperties(makeLogMethod(onLog, 'info', source), {\n breadcrumb(message, metadata) {\n const time = new Date()\n if (crashReporter != null) {\n crashReporter.logBreadcrumb({ message, metadata, source, time })\n } else {\n message = `${message} ${JSON.stringify(metadata, null, 2)}`\n onLog({ message, source, time, type: 'warn' })\n }\n },\n crash(error, metadata) {\n const time = new Date()\n if (crashReporter != null) {\n crashReporter.logCrash({ error, metadata, source, time })\n } else {\n const message = `${String(error)} ${JSON.stringify(metadata, null, 2)}`\n onLog({ message, source, time, type: 'error' })\n }\n },\n warn: makeLogMethod(onLog, 'warn', source),\n error: makeLogMethod(onLog, 'error', source)\n })\n}\n","// \n\nimport { uncleaner } from 'cleaners'\n\nimport {\n asChangeSecretPayload,\n asCreateLoginPayload\n} from '../../types/server-cleaners.js'\nimport {\n\n\n asMaybeUsernameError\n} from '../../types/types.js'\nimport { encrypt } from '../../util/crypto/crypto.js'\n\nimport { makeKeysKit } from './keys.js'\nimport { loginFetch } from './login-fetch.js'\nimport { fixUsername, hashUsername } from './login-selectors.js'\nimport { saveStash } from './login-stash.js'\n\nimport { makePasswordKit } from './password.js'\nimport { makeChangePin2Kit } from './pin2.js'\n\nconst wasChangeSecretPayload = uncleaner(asChangeSecretPayload)\nconst wasCreateLoginPayload = uncleaner(asCreateLoginPayload)\n\n\n\n\n\n\n\n/**\n * Determines whether or not a username is available.\n */\nexport function usernameAvailable(\n ai,\n username\n) {\n return hashUsername(ai, username).then(userId => {\n const request = {\n userId\n }\n return loginFetch(ai, 'POST', '/v2/login', request)\n .then(reply => false) // It's not available if we can hit it!\n .catch((error) => {\n if (asMaybeUsernameError(error) != null) return true\n throw error\n })\n })\n}\n\n/**\n * Assembles all the data needed to create a new login.\n */\nexport function makeCreateKit(\n ai,\n parentLogin,\n appId,\n username,\n opts\n) {\n const { io } = ai.props\n\n // Figure out login identity:\n const loginId =\n parentLogin != null ? io.random(32) : hashUsername(ai, username)\n const loginKey = io.random(32)\n\n const dummyLogin = {\n appId,\n lastLogin: new Date(),\n loginId: new Uint8Array(0),\n loginKey,\n pendingVouchers: [],\n children: [],\n keyInfos: []\n }\n\n // Set up login methods:\n const parentBox =\n parentLogin != null\n ? encrypt(io, loginKey, parentLogin.loginKey)\n : undefined\n const passwordKit =\n opts.password != null\n ? makePasswordKit(ai, dummyLogin, username, opts.password)\n : {}\n const pin2Kit =\n opts.pin != null\n ? makeChangePin2Kit(ai, dummyLogin, username, opts.pin, true)\n : {}\n const keysKit =\n opts.keyInfo != null ? makeKeysKit(ai, dummyLogin, opts.keyInfo) : {}\n\n // Secret-key login:\n const loginAuth = io.random(32)\n const loginAuthBox = encrypt(io, loginAuth, loginKey)\n const secretServer = wasChangeSecretPayload({\n loginAuth,\n loginAuthBox\n })\n\n // Bundle everything:\n return Promise.all([loginId, passwordKit]).then(values => {\n const [loginId, passwordKit] = values\n\n return {\n loginId,\n serverPath: '/v2/login/create',\n server: {\n ...wasCreateLoginPayload({\n appId,\n loginId,\n parentBox\n }),\n ...keysKit.server,\n ...passwordKit.server,\n ...pin2Kit.server,\n ...secretServer\n },\n stash: {\n appId,\n loginAuthBox,\n loginId,\n parentBox,\n ...passwordKit.stash,\n ...pin2Kit.stash,\n ...keysKit.stash\n },\n login: {\n appId,\n loginAuth,\n loginId,\n loginKey,\n keyInfos: [],\n ...passwordKit.login,\n ...pin2Kit.login,\n ...keysKit.login\n }\n }\n })\n}\n\n/**\n * Creates a new login on the auth server.\n */\nexport async function createLogin(\n ai,\n username,\n accountOpts,\n opts\n) {\n const fixedName = fixUsername(username)\n const { now = new Date() } = accountOpts\n\n const kit = await makeCreateKit(ai, undefined, '', fixedName, opts)\n kit.login.username = fixedName\n kit.stash.username = fixedName\n kit.login.userId = kit.login.loginId\n\n const request = { data: kit.server }\n await loginFetch(ai, 'POST', kit.serverPath, request)\n\n kit.stash.lastLogin = now\n await saveStash(ai, kit.stash)\n return kit.login\n}\n","// \n\nimport { asObject, asString } from 'cleaners'\nimport { bridgifyObject, close, update, watchMethod } from 'yaob'\n\nimport { asBase64 } from '../../types/server-cleaners.js'\n\n\n\n\n\nimport { makeAccount } from '../account/account-init.js'\n\nimport { makeLobby } from './lobby.js'\nimport { makeLoginTree, searchTree, syncLogin } from './login.js'\nimport { getStashById } from './login-selectors.js'\nimport { asLoginStash, saveStash } from './login-stash.js'\n\n\n\n\n\n\n\nexport const asLobbyLoginPayload = asObject({\n appId: asString,\n loginKey: asBase64,\n loginStash: asLoginStash\n})\n\n/**\n * Turns a reply into a logged-in account.\n */\nasync function unpackAccount(\n ai,\n payload,\n appId,\n opts\n) {\n const { now = new Date() } = opts\n const { loginKey, loginStash: stashTree } = payload\n\n // Find the appropriate child:\n const child = searchTree(stashTree, stash => stash.appId === appId)\n if (child == null) {\n throw new Error(`Cannot find requested appId: \"${appId}\"`)\n }\n\n // Rescue any existing vouchers:\n try {\n const old = getStashById(ai, child.loginId)\n child.voucherId = old.stash.voucherId\n child.voucherAuth = old.stash.voucherAuth\n } catch (error) {}\n\n stashTree.lastLogin = now\n await saveStash(ai, stashTree)\n\n // This is almost guaranteed to blow up spectacularly:\n const loginTree = makeLoginTree(stashTree, loginKey, appId)\n const login = searchTree(loginTree, login => login.appId === appId)\n if (login == null) {\n throw new Error(`Cannot find requested appId: \"${appId}\"`)\n }\n const newLoginTree = await syncLogin(ai, loginTree, login)\n return await makeAccount(ai, appId, newLoginTree, 'edgeLogin', opts)\n}\n\n/**\n * Creates a new account request lobby on the server.\n */\nexport async function requestEdgeLogin(\n ai,\n appId,\n opts = {}\n) {\n function handleError(error) {\n // Stop the long-polling:\n for (const cleanup of cleanups) cleanup()\n\n // Update the API:\n out.state = 'error'\n out.error = error\n update(out)\n close(out)\n }\n\n async function handleReply(reply) {\n // Stop the long-polling:\n for (const cleanup of cleanups) cleanup()\n\n // Decode the reply:\n const payload = asLobbyLoginPayload(reply)\n const { username } = payload.loginStash\n if (username == null) throw new Error('No username in reply')\n out.state = 'started'\n out.username = username\n update(out)\n\n // Log in:\n const account = await unpackAccount(ai, payload, appId, opts)\n out.state = 'done'\n out.account = account\n update(out)\n close(out)\n }\n\n async function cancelRequest() {\n // Stop the long-polling:\n for (const cleanup of cleanups) cleanup()\n\n // Update the API:\n out.state = 'closed'\n update(out)\n close(out)\n }\n\n const lobby = await makeLobby(ai, { loginRequest: { appId } })\n const cleanups = [\n lobby.close,\n lobby.on('error', handleError),\n lobby.on('reply', reply => {\n handleReply(reply).catch(handleError)\n })\n ]\n\n const out = {\n id: lobby.lobbyId,\n cancelRequest,\n watch: watchMethod,\n\n state: 'pending',\n account: undefined,\n error: undefined,\n username: undefined\n }\n return bridgifyObject(out)\n}\n","// \n\nimport { base16, base64 } from 'rfc4648'\n\n\n\n\n\n\n\n\n\nimport { encrypt } from '../../util/crypto/crypto.js'\nimport { hmacSha256 } from '../../util/crypto/hashes.js'\nimport { utf8 } from '../../util/encoding.js'\nimport { changeWalletStates } from '../account/account-files.js'\nimport { waitForCurrencyWallet } from '../currency/currency-selectors.js'\nimport { applyKit } from '../login/login.js'\nimport {\n findCurrencyPluginId,\n getCurrencyTools,\n maybeFindCurrencyPluginId\n} from '../plugins/plugins-selectors.js'\n\n\n\n/**\n * Returns the first keyInfo with a matching type.\n */\nexport function findFirstKey(\n keyInfos,\n type\n) {\n return keyInfos.find(info => info.type === type)\n}\n\nexport function makeAccountType(appId) {\n return appId === ''\n ? 'account-repo:co.airbitz.wallet'\n : `account-repo:${appId}`\n}\n\n/**\n * Assembles the key metadata structure that is encrypted within a keyBox.\n * @param idKey Used to derive the wallet id. It's usually `dataKey`.\n */\nexport function makeKeyInfo(\n type,\n keys,\n idKey\n) {\n return {\n id: base64.stringify(hmacSha256(utf8.parse(type), idKey)),\n type,\n keys\n }\n}\n\n/**\n * Makes keys for accessing an encrypted Git repo.\n */\nexport function makeStorageKeyInfo(\n ai,\n type,\n keys = {}\n) {\n const { io } = ai.props\n if (keys.dataKey == null) keys.dataKey = base64.stringify(io.random(32))\n if (keys.syncKey == null) keys.syncKey = base64.stringify(io.random(20))\n if (typeof keys.dataKey !== 'string') {\n throw new TypeError('Invalid dataKey type')\n }\n return makeKeyInfo(type, keys, base64.parse(keys.dataKey))\n}\n\n/**\n * Assembles all the resources needed to attach new keys to the account.\n */\nexport function makeKeysKit(\n ai,\n login,\n ...keyInfos\n) {\n const { io } = ai.props\n const keyBoxes = keyInfos.map(info =>\n encrypt(io, utf8.parse(JSON.stringify(info)), login.loginKey)\n )\n const newSyncKeys = []\n for (const info of keyInfos) {\n if (info.keys.syncKey != null) {\n const data = base64.parse(info.keys.syncKey)\n newSyncKeys.push(base16.stringify(data).toLowerCase())\n }\n }\n\n return {\n serverPath: '/v2/login/keys',\n server: { keyBoxes, newSyncKeys },\n stash: { keyBoxes },\n login: { keyInfos },\n loginId: login.loginId\n }\n}\n\n/**\n * Flattens an array of key structures, removing duplicates.\n */\nexport function mergeKeyInfos(keyInfos) {\n const out = []\n const ids = {} // Maps ID's to output array indexes\n\n for (const keyInfo of keyInfos) {\n const { id, type, keys } = keyInfo\n if (id == null || base64.parse(id).length !== 32) {\n throw new Error(`Key integrity violation: invalid id ${id}`)\n }\n\n if (ids[id] != null) {\n // We have already seen this id, so check for conflicts:\n const old = out[ids[id]]\n if (old.type !== type) {\n throw new Error(\n `Key integrity violation for ${id}: type ${type} does not match ${old.type}`\n )\n }\n for (const key of Object.keys(keys)) {\n if (old.keys[key] != null && old.keys[key] !== keys[key]) {\n throw new Error(\n `Key integrity violation for ${id}: ${key} keys do not match`\n )\n }\n }\n\n // Do the update:\n out[ids[id]] = { id, type, keys: { ...old.keys, ...keys } }\n } else {\n // We haven't seen this id, so insert it:\n ids[id] = out.length\n out.push(keyInfo)\n }\n }\n\n return out\n}\n\n/**\n * Returns all the wallet infos accessible from this login object,\n * as well as a map showing which wallets are in which applications.\n */\nexport function getAllWalletInfos(\n login,\n legacyWalletInfos = []\n)\n\n\n {\n const appIdMap = {}\n const walletInfos = []\n\n // Add the legacy wallets first:\n for (const info of legacyWalletInfos) {\n walletInfos.push(info)\n if (appIdMap[info.id] == null) appIdMap[info.id] = [login.appId]\n else appIdMap[info.id].push(login.appId)\n }\n\n function getAllWalletInfosLoop(login) {\n // Add our own walletInfos:\n for (const info of login.keyInfos) {\n walletInfos.push(info)\n if (appIdMap[info.id] == null) appIdMap[info.id] = [login.appId]\n else appIdMap[info.id].push(login.appId)\n }\n\n // Add our children's walletInfos:\n for (const child of login.children) {\n getAllWalletInfosLoop(child)\n }\n }\n getAllWalletInfosLoop(login)\n\n return { appIdMap, walletInfos: mergeKeyInfos(walletInfos) }\n}\n\n/**\n * Upgrades legacy wallet info structures into the new format.\n *\n * Wallets normally have `wallet:pluginId` as their type,\n * but some legacy wallets also put format information into the wallet type.\n * This routine moves the information out of the wallet type into the keys.\n *\n * It also provides some other default values as a historical accident,\n * but the bitcoin plugin can just provide its own fallback values if\n * `format` or `coinType` are missing. Please don't make the problem worse\n * by adding more code here!\n */\nexport function fixWalletInfo(walletInfo) {\n const { id, keys, type } = walletInfo\n\n // Wallet types we need to fix:\n const defaults = {\n // BTC:\n 'wallet:bitcoin-bip44': { format: 'bip44', coinType: 0 },\n 'wallet:bitcoin-bip49': { format: 'bip49', coinType: 0 },\n // BCH:\n 'wallet:bitcoincash-bip32': { format: 'bip32' },\n 'wallet:bitcoincash-bip44': { format: 'bip44', coinType: 145 },\n // BCH testnet:\n 'wallet:bitcoincash-bip44-testnet': { format: 'bip44', coinType: 1 },\n // BTC testnet:\n 'wallet:bitcoin-bip44-testnet': { format: 'bip44', coinType: 1 },\n 'wallet:bitcoin-bip49-testnet': { format: 'bip49', coinType: 1 },\n // DASH:\n 'wallet:dash-bip44': { format: 'bip44', coinType: 5 },\n // DOGE:\n 'wallet:dogecoin-bip44': { format: 'bip44', coinType: 3 },\n // LTC:\n 'wallet:litecoin-bip44': { format: 'bip44', coinType: 2 },\n 'wallet:litecoin-bip49': { format: 'bip49', coinType: 2 },\n // FTC:\n 'wallet:feathercoin-bip49': { format: 'bip49', coinType: 8 },\n 'wallet:feathercoin-bip44': { format: 'bip44', coinType: 8 },\n // QTUM:\n 'wallet:qtum-bip44': { format: 'bip44', coinType: 2301 },\n // UFO:\n 'wallet:ufo-bip49': { format: 'bip49', coinType: 202 },\n 'wallet:ufo-bip84': { format: 'bip84', coinType: 202 },\n // XZC:\n 'wallet:zcoin-bip44': { format: 'bip44', coinType: 136 },\n\n // The plugin itself could handle these lines, but they are here\n // as a historical accident. Please don't add more:\n 'wallet:bitcoin-testnet': { format: 'bip32' },\n 'wallet:bitcoin': { format: 'bip32' },\n 'wallet:bitcoincash-testnet': { format: 'bip32' },\n 'wallet:litecoin': { format: 'bip32', coinType: 2 },\n 'wallet:zcoin': { format: 'bip32', coinType: 136 }\n }\n\n if (defaults[type] != null) {\n return {\n id,\n keys: { ...defaults[type], ...keys },\n type: type.replace(/-bip[0-9]+/, '')\n }\n }\n\n return walletInfo\n}\n\n/**\n * Combines two byte arrays via the XOR operation.\n */\nexport function xorData(a, b) {\n if (a.length !== b.length) {\n throw new Error(`Array lengths do not match: ${a.length}, ${b.length}`)\n }\n\n const out = new Uint8Array(a.length)\n for (let i = 0; i < a.length; ++i) {\n out[i] = a[i] ^ b[i]\n }\n return out\n}\n\nexport function makeSplitWalletInfo(\n walletInfo,\n newWalletType\n) {\n const { id, type, keys } = walletInfo\n if (keys.dataKey == null || keys.syncKey == null) {\n throw new Error(`Wallet ${id} is not a splittable type`)\n }\n\n const dataKey = base64.parse(keys.dataKey)\n const syncKey = base64.parse(keys.syncKey)\n const xorKey = xorData(\n hmacSha256(utf8.parse(type), dataKey),\n hmacSha256(utf8.parse(newWalletType), dataKey)\n )\n\n // Fix the id:\n const newWalletId = xorData(base64.parse(id), xorKey)\n const newSyncKey = xorData(syncKey, xorKey.subarray(0, syncKey.length))\n\n // Fix the keys:\n const networkName = type.replace(/wallet:/, '').replace('-', '')\n const newNetworkName = newWalletType.replace(/wallet:/, '').replace('-', '')\n const newKeys = {}\n for (const key of Object.keys(keys)) {\n if (key === networkName + 'Key') {\n newKeys[newNetworkName + 'Key'] = keys[key]\n } else {\n newKeys[key] = keys[key]\n }\n }\n\n return {\n id: base64.stringify(newWalletId),\n keys: {\n ...newKeys,\n syncKey: base64.stringify(newSyncKey)\n },\n type: newWalletType\n }\n}\n\nexport async function createCurrencyWallet(\n ai,\n accountId,\n walletType,\n opts\n) {\n const { login, loginTree } = ai.props.state.accounts[accountId]\n const pluginId = findCurrencyPluginId(\n ai.props.state.plugins.currency,\n walletType\n )\n\n // Make the keys:\n const tools = await getCurrencyTools(ai, pluginId)\n let keys\n if (opts.keys != null) {\n keys = opts.keys\n } else if (opts.importText != null) {\n if (tools.importPrivateKey == null) {\n throw new Error('This wallet does not support importing keys')\n }\n keys = {\n ...(await tools.importPrivateKey(opts.importText, opts.keyOptions)),\n imported: true\n }\n } else {\n keys = {\n ...(await tools.createPrivateKey(walletType, opts.keyOptions)),\n imported: false\n }\n }\n\n const walletInfo = makeStorageKeyInfo(ai, walletType, keys)\n const kit = makeKeysKit(ai, login, fixWalletInfo(walletInfo))\n\n // Add the keys to the login:\n await applyKit(ai, loginTree, kit)\n const wallet = await waitForCurrencyWallet(ai, walletInfo.id)\n\n if (opts.name != null) await wallet.renameWallet(opts.name)\n if (opts.fiatCurrencyCode != null) {\n await wallet.setFiatCurrencyCode(opts.fiatCurrencyCode)\n }\n\n return wallet\n}\n\nasync function protectBchWallet(wallet) {\n // Create a UTXO which can be spend only on the ABC network\n const spendInfoSplit = {\n currencyCode: 'BCH',\n spendTargets: [\n {\n nativeAmount: '1000',\n otherParams: { script: { type: 'replayProtection' } },\n publicAddress: ''\n }\n ],\n metadata: {},\n networkFeeOption: 'high'\n }\n const splitTx = await wallet.makeSpend(spendInfoSplit)\n const signedSplitTx = await wallet.signTx(splitTx)\n const broadcastedSplitTx = await wallet.broadcastTx(signedSplitTx)\n await wallet.saveTx(broadcastedSplitTx)\n\n // Taint the rest of the wallet using the UTXO from before\n const { publicAddress } = await wallet.getReceiveAddress()\n const spendInfoTaint = {\n currencyCode: 'BCH',\n spendTargets: [{ publicAddress, nativeAmount: '0' }],\n metadata: {},\n networkFeeOption: 'high'\n }\n const maxAmount = await wallet.getMaxSpendable(spendInfoTaint)\n spendInfoTaint.spendTargets[0].nativeAmount = maxAmount\n const taintTx = await wallet.makeSpend(spendInfoTaint)\n const signedTaintTx = await wallet.signTx(taintTx)\n const broadcastedTaintTx = await wallet.broadcastTx(signedTaintTx)\n await wallet.saveTx(broadcastedTaintTx)\n const edgeMetadata = {\n name: 'Replay Protection Tx',\n notes:\n 'This transaction is to protect your BCH wallet from unintentionally spending BSV funds. Please wait for the transaction to confirm before making additional transactions using this BCH wallet.'\n }\n await wallet.saveTxMetadata(broadcastedTaintTx.txid, 'BCH', edgeMetadata)\n}\n\nexport async function splitWalletInfo(\n ai,\n accountId,\n walletId,\n newWalletType\n) {\n const accountState = ai.props.state.accounts[accountId]\n const { allWalletInfosFull, login, loginTree } = accountState\n\n // Find the wallet we are going to split:\n const walletInfo = allWalletInfosFull.find(\n walletInfo => walletInfo.id === walletId\n )\n if (walletInfo == null) throw new Error(`Invalid wallet id ${walletId}`)\n\n // Handle BCH / BTC+segwit special case:\n if (\n newWalletType === 'wallet:bitcoincash' &&\n walletInfo.type === 'wallet:bitcoin' &&\n walletInfo.keys.format === 'bip49'\n ) {\n throw new Error(\n 'Cannot split segwit-format Bitcoin wallets to Bitcoin Cash'\n )\n }\n\n // Handle BitcoinABC/SV replay protection:\n const needsProtection =\n newWalletType === 'wallet:bitcoinsv' &&\n walletInfo.type === 'wallet:bitcoincash'\n if (needsProtection) {\n const oldWallet = ai.props.output.currency.wallets[walletId].walletApi\n if (oldWallet == null) throw new Error('Missing Wallet')\n await protectBchWallet(oldWallet)\n }\n\n // See if the wallet has already been split:\n const newWalletInfo = makeSplitWalletInfo(walletInfo, newWalletType)\n const existingWalletInfo = allWalletInfosFull.find(\n walletInfo => walletInfo.id === newWalletInfo.id\n )\n if (existingWalletInfo != null) {\n if (existingWalletInfo.archived || existingWalletInfo.deleted) {\n // Simply undelete the existing wallet:\n const walletInfos = {}\n walletInfos[newWalletInfo.id] = { archived: false, deleted: false }\n await changeWalletStates(ai, accountId, walletInfos)\n return walletInfo.id\n }\n if (needsProtection) return newWalletInfo.id\n throw new Error('This wallet has already been split')\n }\n\n // Add the keys to the login:\n const kit = makeKeysKit(ai, login, newWalletInfo)\n await applyKit(ai, loginTree, kit)\n\n // Try to copy metadata on a best-effort basis.\n // In the future we should clone the repo instead:\n try {\n const wallet = await waitForCurrencyWallet(ai, newWalletInfo.id)\n const oldWallet = ai.props.output.currency.wallets[walletId].walletApi\n if (oldWallet != null) {\n if (oldWallet.name != null) await wallet.renameWallet(oldWallet.name)\n if (oldWallet.fiatCurrencyCode != null) {\n await wallet.setFiatCurrencyCode(oldWallet.fiatCurrencyCode)\n }\n }\n } catch (e) {\n ai.props.onError(e)\n }\n\n return newWalletInfo.id\n}\n\nexport async function listSplittableWalletTypes(\n ai,\n accountId,\n walletId\n) {\n const { allWalletInfosFull } = ai.props.state.accounts[accountId]\n\n // Find the wallet we are going to split:\n const walletInfo = allWalletInfosFull.find(\n walletInfo => walletInfo.id === walletId\n )\n if (walletInfo == null) throw new Error(`Invalid wallet id ${walletId}`)\n const pluginId = maybeFindCurrencyPluginId(\n ai.props.state.plugins.currency,\n walletInfo.type\n )\n if (pluginId == null) return []\n\n // Get the list of available types:\n const tools = await getCurrencyTools(ai, pluginId)\n if (tools.getSplittableTypes == null) return []\n const types = await tools.getSplittableTypes(walletInfo)\n\n // Filter out wallet types we have already split:\n return types.filter(type => {\n const newWalletInfo = makeSplitWalletInfo(walletInfo, type)\n const existingWalletInfo = allWalletInfosFull.find(\n walletInfo => walletInfo.id === newWalletInfo.id\n )\n // We can split the wallet if it doesn't exist, or is deleted:\n return (\n existingWalletInfo == null ||\n existingWalletInfo.archived ||\n existingWalletInfo.deleted\n )\n })\n}\n","// \n\nimport { uncleaner } from 'cleaners'\nimport elliptic from 'elliptic'\nimport { makeEvents } from 'yavent'\n\nimport {\n asEdgeLobbyReply,\n asEdgeLobbyRequest,\n asLobbyPayload\n} from '../../types/server-cleaners.js'\n\n\n\n\n\n\n\n\nimport { decryptText, encrypt } from '../../util/crypto/crypto.js'\nimport { hmacSha256, sha256 } from '../../util/crypto/hashes.js'\nimport { verifyData } from '../../util/crypto/verify.js'\nimport { base58, utf8 } from '../../util/encoding.js'\nimport { makePeriodicTask } from '../../util/periodic-task.js'\n\nimport { loginFetch } from './login-fetch.js'\n\nconst EC = elliptic.ec\nconst secp256k1 = new EC('secp256k1')\n\nconst wasEdgeLobbyReply = uncleaner(asEdgeLobbyReply)\nconst wasEdgeLobbyRequest = uncleaner(asEdgeLobbyRequest)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Derives a shared secret from the given secret key and public key.\n */\nfunction deriveSharedKey(keypair, pubkey) {\n const secretX = keypair\n .derive(secp256k1.keyFromPublic(pubkey).getPublic())\n .toArray('be')\n\n // From NIST.SP.800-56Ar2 section 5.8.1:\n return hmacSha256(\n Uint8Array.from([0, 0, 0, 1, ...secretX]),\n utf8.parse('dataKey')\n )\n}\n\n/**\n * Decrypts a lobby reply using the request's secret key.\n */\nexport function decryptLobbyReply(\n keypair,\n lobbyReply\n) {\n const { publicKey } = lobbyReply\n const sharedKey = deriveSharedKey(keypair, publicKey)\n return JSON.parse(decryptText(lobbyReply.box, sharedKey))\n}\n\n/**\n * Encrypts a lobby reply JSON replyData, and returns a reply\n * suitable for sending to the server.\n */\nexport function encryptLobbyReply(\n io,\n publicKey,\n replyData\n) {\n const keypair = secp256k1.genKeyPair({ entropy: io.random(32) })\n const sharedKey = deriveSharedKey(keypair, publicKey)\n return {\n publicKey: Uint8Array.from(keypair.getPublic().encodeCompressed()),\n box: encrypt(io, utf8.parse(JSON.stringify(replyData)), sharedKey)\n }\n}\n\n/**\n * Creates a new lobby on the auth server holding the given request.\n * @return A lobby watcher object that will check for incoming replies.\n */\nexport async function makeLobby(\n ai,\n lobbyRequest,\n period = 1000\n) {\n const { io } = ai.props\n const { timeout = 10 * 60 } = lobbyRequest\n\n // Create the keys:\n const keypair = secp256k1.genKeyPair({ entropy: io.random(32) })\n const publicKey = Uint8Array.from(keypair.getPublic().encodeCompressed())\n const lobbyId = base58.stringify(sha256(sha256(publicKey)).slice(0, 10))\n\n const request = {\n data: wasEdgeLobbyRequest({ ...lobbyRequest, publicKey, timeout })\n }\n await loginFetch(ai, 'PUT', `/v2/lobby/${lobbyId}`, request)\n\n // Create the task:\n const [on, emit] = makeEvents()\n const replies = []\n const pollLobby = async () => {\n const clean = asLobbyPayload(\n await loginFetch(ai, 'GET', '/v2/lobby/' + lobbyId)\n )\n\n // Process any new replies that have arrived on the server:\n while (replies.length < clean.replies.length) {\n const newReply = clean.replies[replies.length]\n const fixedReply = decryptLobbyReply(keypair, newReply)\n emit('reply', fixedReply)\n replies.push(fixedReply)\n }\n }\n const task = makePeriodicTask(pollLobby, period, {\n onError(error) {\n emit('error', error)\n }\n })\n task.start({ wait: false })\n\n // Create the return object:\n return { close: task.stop, lobbyId, on, replies }\n}\n\n/**\n * Fetches a lobby request from the auth server.\n * @return A promise of the lobby request JSON.\n */\nexport async function fetchLobbyRequest(\n ai,\n lobbyId\n) {\n const clean = asLobbyPayload(\n await loginFetch(ai, 'GET', '/v2/lobby/' + lobbyId)\n )\n\n // Verify the public key:\n const { publicKey } = clean.request\n const checksum = sha256(sha256(publicKey))\n const idBytes = base58.parse(lobbyId)\n if (!verifyData(idBytes, checksum.subarray(0, idBytes.length))) {\n throw new Error('Lobby ECDH integrity error')\n }\n\n return clean.request\n}\n\n/**\n * Encrypts and sends a reply to a lobby request.\n */\nexport async function sendLobbyReply(\n ai,\n lobbyId,\n lobbyRequest,\n replyData\n) {\n const { io } = ai.props\n const { publicKey } = lobbyRequest\n\n const request = {\n data: wasEdgeLobbyReply(encryptLobbyReply(io, publicKey, replyData))\n }\n await loginFetch(ai, 'POST', '/v2/lobby/' + lobbyId, request)\n}\n","// \n\nimport { uncleaner } from 'cleaners'\n\nimport {\n asLoginRequestBody,\n asLoginResponseBody\n} from '../../types/server-cleaners.js'\n\nimport {\n\n NetworkError,\n ObsoleteApiError,\n OtpError,\n PasswordError,\n UsernameError\n} from '../../types/types.js'\nimport { timeout } from '../../util/promise.js'\n\n\nconst wasLoginRequestBody = uncleaner(asLoginRequestBody)\n\nexport function parseReply(json) {\n const clean = asLoginResponseBody(json)\n\n switch (clean.status_code) {\n case 0: // Success\n return clean.results\n\n case 2: // Account exists\n throw new UsernameError('Account already exists on server')\n\n case 3: // Account does not exist\n throw new UsernameError('Account does not exist on server')\n\n case 4: // Invalid password\n case 5: // Invalid answers\n throw new PasswordError(clean.results)\n\n case 6: // Invalid API key\n throw new Error('Invalid API key')\n\n case 8: // Invalid OTP\n throw new OtpError(clean.results)\n\n case 1000: // Endpoint obsolete\n throw new ObsoleteApiError()\n\n case 1: // Error\n case 7: // Pin expired\n default:\n throw new Error(`Server error: ${clean.message}`)\n }\n}\n\nexport function loginFetch(\n ai,\n method,\n path,\n body\n) {\n const { state, io, log } = ai.props\n const { apiKey, serverUri } = state.login\n\n const opts = {\n method: method,\n headers: {\n 'content-type': 'application/json',\n accept: 'application/json',\n authorization: `Token ${\n apiKey === '' ? '4248c1bf41e53b840a5fdb2c872dd3ade525e66d' : apiKey\n }`\n }\n }\n if (method !== 'GET' && body != null) {\n opts.body = JSON.stringify(wasLoginRequestBody(body))\n }\n\n const start = Date.now()\n const fullUri = `${serverUri}${path}`\n return timeout(io.fetch(fullUri, opts), 30000).then(\n response => {\n const time = Date.now() - start\n log(`${method} ${fullUri} returned ${response.status} in ${time}ms`)\n return response.json().then(parseReply, () => {\n throw new Error(`Invalid reply JSON, HTTP status ${response.status}`)\n })\n },\n networkError => {\n const time = Date.now() - start\n log.error(\n `${method} ${fullUri} failed in ${time}ms, ${String(networkError)}`\n )\n throw new NetworkError(`Could not reach the auth server: ${path}`)\n }\n )\n}\n","// \n\nimport { base64 } from 'rfc4648'\n\nimport { asMessagesPayload } from '../../types/server-cleaners.js'\n\n\nimport { loginFetch } from './login-fetch.js'\n\n/**\n * Fetches any login-related messages for all the users on this device.\n */\nexport function fetchLoginMessages(ai) {\n const stashes = ai.props.state.login.stashes\n\n const loginMap = {} // loginId -> username\n const loginIds = []\n for (const username of Object.keys(stashes)) {\n const loginId = stashes[username].loginId\n if (loginId != null) {\n loginMap[base64.stringify(loginId)] = username\n loginIds.push(loginId)\n }\n }\n\n const request = {\n loginIds\n }\n return loginFetch(ai, 'POST', '/v2/messages', request).then(reply => {\n const out = {}\n for (const message of asMessagesPayload(reply)) {\n const { loginId, ...rest } = message\n const id = base64.stringify(loginId)\n const username = loginMap[id]\n if (username != null) out[username] = { ...rest, loginId: id }\n }\n return out\n })\n}\n","// \n\nimport { buildReducer, memoizeReducer } from 'redux-keto'\n\n\nimport { base58 } from '../../util/encoding.js'\n\n\nimport { searchTree } from './login.js'\n\n\nimport { findPin2Stash } from './pin2.js'\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport const login\n\n\n\n = buildReducer({\n apiKey(state = '', action) {\n return action.type === 'INIT' ? action.payload.apiKey : state\n },\n\n appId(state = '', action) {\n return action.type === 'INIT' ? action.payload.appId : state\n },\n\n deviceDescription(state = null, action) {\n return action.type === 'INIT' ? action.payload.deviceDescription : state\n },\n\n localUsers: memoizeReducer(\n (next) => next.login.appId,\n (next) => next.login.stashes,\n (appId, stashes) => {\n const out = []\n for (const username of Object.keys(stashes)) {\n const stashTree = stashes[username]\n const stash = searchTree(stashTree, stash => stash.appId === appId)\n\n const keyLoginEnabled =\n stash != null &&\n (stash.passwordAuthBox != null || stash.loginAuthBox != null)\n const pin2Stash = findPin2Stash(stashTree, appId)\n const { recovery2Key } = stashTree\n\n out.push({\n keyLoginEnabled,\n lastLogin: stashTree.lastLogin,\n pinLoginEnabled: pin2Stash != null,\n recovery2Key:\n recovery2Key != null ? base58.stringify(recovery2Key) : undefined,\n username,\n voucherId: stash != null ? stash.voucherId : undefined\n })\n }\n return out\n }\n ),\n\n serverUri(state = '', action) {\n return action.type === 'INIT' ? action.payload.authServer : state\n },\n\n stashes(state = {}, action) {\n switch (action.type) {\n case 'INIT': {\n const out = {}\n\n // Extract the usernames from the top-level objects:\n for (const stash of action.payload.stashes) {\n if (stash.username != null) {\n const { username } = stash\n out[username] = stash\n }\n }\n\n return out\n }\n\n case 'LOGIN_STASH_DELETED': {\n const copy = { ...state }\n delete copy[action.payload]\n return copy\n }\n\n case 'LOGIN_STASH_SAVED': {\n const { username } = action.payload\n if (username == null) throw new Error('Missing username')\n\n const out = { ...state }\n out[username] = action.payload\n return out\n }\n }\n return state\n },\n\n walletInfos(state, action, next) {\n // Optimize the common case:\n if (next.accountIds.length === 1) {\n const id = next.accountIds[0]\n return next.accounts[id].walletInfos\n }\n\n const out = {}\n for (const accountId of next.accountIds) {\n const account = next.accounts[accountId]\n for (const id of Object.keys(account.walletInfos)) {\n const info = account.walletInfos[id]\n out[id] = info\n }\n }\n return out\n }\n})\n","// \n\nimport { base64 } from 'rfc4648'\n\nimport { fixUsername } from '../../client-side.js'\nimport { verifyData } from '../../util/crypto/verify.js'\n\nimport { scrypt, userIdSnrp } from '../scrypt/scrypt-selectors.js'\nimport { searchTree } from './login.js'\n\n\n\nexport { fixUsername }\n\n/**\n * Finds the login stash for the given username.\n * Returns a default object if\n */\nexport function getStash(ai, username) {\n const fixedName = fixUsername(username)\n const { stashes } = ai.props.state.login\n\n if (stashes[fixedName] != null) return stashes[fixedName]\n return {\n username: fixedName,\n appId: '',\n loginId: new Uint8Array(0),\n pendingVouchers: []\n }\n}\n\nexport function getStashById(ai, loginId) {\n const { stashes } = ai.props.state.login\n for (const username of Object.keys(stashes)) {\n const stashTree = stashes[username]\n const stash = searchTree(stashTree, stash =>\n verifyData(stash.loginId, loginId)\n )\n if (stash != null) return { stashTree, stash }\n }\n throw new Error(`Cannot find stash ${base64.stringify(loginId)}`)\n}\n\n// Hashed username cache:\nconst userIdCache = {}\n\n/**\n * Hashes a username into a userId.\n */\nexport function hashUsername(\n ai,\n username\n) {\n const fixedName = fixUsername(username)\n if (userIdCache[fixedName] == null) {\n userIdCache[fixedName] = scrypt(ai, fixedName, userIdSnrp)\n }\n return userIdCache[fixedName]\n}\n","// \n\nimport {\n\n asArray,\n asCodec,\n asDate,\n asNumber,\n asObject,\n asOptional,\n asString,\n uncleaner\n} from 'cleaners'\nimport { justFiles } from 'disklet'\nimport { base64 } from 'rfc4648'\n\nimport {\n asBase32,\n asBase64,\n asEdgeBox,\n asEdgePendingVoucher,\n asEdgeSnrp\n} from '../../types/server-cleaners.js'\n\n\nimport { base58 } from '../../util/encoding.js'\n\nimport { fixUsername } from './login-selectors.js'\n\n/**\n * The login data we store on disk.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Reads all login stashes from disk.\n */\nexport async function loadStashes(\n disklet,\n log\n) {\n const out = []\n const paths = await disklet.list('logins').then(justFiles)\n for (const path of paths) {\n try {\n out.push(asLoginStash(JSON.parse(await disklet.getText(path))))\n } catch (error) {\n log.error(`Could not load ${path}: ${String(error)}`)\n }\n }\n return out\n}\n\n/**\n * Removes any login stash that may be stored for the given username.\n */\nexport async function removeStash(\n ai,\n username\n) {\n const { dispatch, io } = ai.props\n const fixedName = fixUsername(username)\n\n const paths = await io.disklet.list('logins').then(justFiles)\n for (const path of paths) {\n try {\n const stash = asLoginStash(JSON.parse(await io.disklet.getText(path)))\n if (stash.username === fixedName) await io.disklet.delete(path)\n } catch (e) {}\n }\n\n dispatch({\n type: 'LOGIN_STASH_DELETED',\n payload: fixUsername(username)\n })\n}\n\n/**\n * Saves a login stash tree to disk.\n */\nexport async function saveStash(\n ai,\n stashTree\n) {\n const { dispatch, io } = ai.props\n const { appId, loginId, username } = stashTree\n\n if (appId !== '') {\n throw new Error('Cannot save a login without an appId.')\n }\n if (username == null) {\n throw new Error('Cannot save a login without a username.')\n }\n if (loginId == null || loginId.length !== 32) {\n throw new Error('Invalid loginId')\n }\n await io.disklet.setText(\n `logins/${base58.stringify(loginId)}.json`,\n JSON.stringify(wasLoginStash(stashTree))\n )\n\n dispatch({ type: 'LOGIN_STASH_SAVED', payload: stashTree })\n}\n\nexport const asLoginStash = asObject({\n // Identity:\n appId: asString,\n created: asOptional(asDate),\n lastLogin: asOptional(asDate),\n loginId: asBase64,\n userId: asOptional(asBase64),\n username: asOptional(asString),\n\n // 2-factor:\n otpKey: asOptional(asBase32),\n otpResetDate: asOptional(asDate),\n otpTimeout: asOptional(asNumber),\n pendingVouchers: asOptional(asArray(asEdgePendingVoucher), []),\n voucherId: asOptional(asString),\n voucherAuth: asOptional(asBase64),\n\n // Return logins:\n loginAuthBox: asOptional(asEdgeBox),\n parentBox: asOptional(asEdgeBox),\n\n // Password login:\n passwordAuthBox: asOptional(asEdgeBox),\n passwordAuthSnrp: asOptional(asEdgeSnrp),\n passwordBox: asOptional(asEdgeBox),\n passwordKeySnrp: asOptional(asEdgeSnrp),\n\n // PIN v2 login:\n pin2Key: asOptional(\n asCodec(\n // Legacy Airbitz can wrongly send this in base58 for Edge login:\n raw => {\n const clean = asString(raw)\n return raw.slice(-1) !== '=' ? base58.parse(clean) : base64.parse(clean)\n },\n clean => base64.stringify(clean)\n )\n ),\n pin2TextBox: asOptional(asEdgeBox),\n\n // Recovery v2 login:\n recovery2Key: asOptional(asBase64),\n\n // Keys and assorted goodies:\n children: asOptional(asArray(raw => asLoginStash(raw))),\n keyBoxes: asOptional(asArray(asEdgeBox)),\n mnemonicBox: asOptional(asEdgeBox),\n rootKeyBox: asOptional(asEdgeBox),\n syncKeyBox: asOptional(asEdgeBox)\n})\nconst wasLoginStash = uncleaner(asLoginStash)\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }/**\n * Functions for working with login data in its on-disk format.\n */\n// \n\nimport { uncleaner } from 'cleaners'\nimport { base64 } from 'rfc4648'\n\nimport {\n asChangeSecretPayload,\n asLoginPayload\n} from '../../types/server-cleaners.js'\n\n\n\n\nimport {\n\n\n asMaybeOtpError\n} from '../../types/types.js'\nimport { decrypt, decryptText, encrypt } from '../../util/crypto/crypto.js'\nimport { hmacSha256 } from '../../util/crypto/hashes.js'\nimport { verifyData } from '../../util/crypto/verify.js'\nimport { utf8 } from '../../util/encoding.js'\nimport { softCat } from '../../util/util.js'\n\nimport {\n fixWalletInfo,\n makeAccountType,\n makeKeyInfo,\n mergeKeyInfos\n} from './keys.js'\nimport { loginFetch } from './login-fetch.js'\nimport { getStashById } from './login-selectors.js'\nimport { saveStash } from './login-stash.js'\n\nimport { getLoginOtp, getStashOtp } from './otp.js'\n\nconst wasChangeSecretPayload = uncleaner(asChangeSecretPayload)\n\n/**\n * Returns the login that satisfies the given predicate,\n * or undefined if nothing matches.\n */\nexport function searchTree(\n node,\n predicate\n) {\n if (predicate(node)) return node\n\n const flowHack = node\n if (flowHack.children != null) {\n for (const child of flowHack.children) {\n const out = searchTree(child, predicate)\n if (out != null) return out\n }\n }\n}\n\n/**\n * Walks a tree, building a new tree.\n * The `predicate` callback returns true when we reach the node to replace,\n * and the `update` callback replaces that node.\n * The `clone` callback updates the `children` on the non-replaced nodes.\n */\nfunction updateTree(\n node,\n predicate,\n update,\n clone\n) {\n if (predicate(node)) return update(node)\n\n const children =\n node.children != null\n ? node.children.map(child => updateTree(child, predicate, update, clone))\n : []\n\n return clone(node, children)\n}\n\nfunction applyLoginPayloadInner(\n stash,\n loginKey,\n loginReply\n) {\n const { children: stashChildren = [] } = stash\n\n const {\n appId,\n created,\n loginId,\n loginAuthBox,\n userId,\n otpKey,\n otpResetDate,\n otpTimeout,\n pendingVouchers,\n parentBox,\n passwordAuthBox,\n passwordAuthSnrp,\n passwordBox,\n passwordKeySnrp,\n pin2TextBox,\n children = [],\n keyBoxes = [],\n mnemonicBox,\n rootKeyBox,\n syncKeyBox\n } = loginReply\n\n const out = {\n appId,\n created,\n loginId,\n loginAuthBox,\n userId,\n otpKey,\n otpResetDate,\n otpTimeout,\n pendingVouchers,\n parentBox,\n passwordAuthBox,\n passwordAuthSnrp,\n passwordBox,\n passwordKeySnrp,\n pin2TextBox,\n keyBoxes, // We should be more picky about these\n mnemonicBox,\n rootKeyBox,\n syncKeyBox\n }\n\n // Preserve client-only data:\n if (stash.lastLogin != null) out.lastLogin = stash.lastLogin\n if (stash.username != null) out.username = stash.username\n if (stash.userId != null) out.userId = stash.userId\n\n // Store the pin key unencrypted:\n if (loginReply.pin2KeyBox != null) {\n out.pin2Key = decrypt(loginReply.pin2KeyBox, loginKey)\n }\n\n // Store the recovery key unencrypted:\n if (loginReply.recovery2KeyBox != null) {\n out.recovery2Key = decrypt(loginReply.recovery2KeyBox, loginKey)\n }\n\n // Sort children oldest to newest:\n children.sort((a, b) => a.created.valueOf() - b.created.valueOf())\n\n // Recurse into children:\n out.children = children.map(child => {\n const { appId, loginId, parentBox } = child\n\n // Read the decryption key:\n if (parentBox == null) {\n throw new Error('Key integrity violation: No parentBox on child login.')\n }\n const childKey = decrypt(parentBox, loginKey)\n\n // Find a stash to merge with:\n const existingChild = stashChildren.find(child =>\n verifyData(child.loginId, loginId)\n )\n const childStash = _nullishCoalesce(existingChild, () => ( {\n appId,\n loginId,\n pendingVouchers: []\n }))\n\n return applyLoginPayloadInner(childStash, childKey, child)\n })\n\n // Check for missing children:\n for (const { loginId } of stashChildren) {\n const replyChild = children.find(child =>\n verifyData(child.loginId, loginId)\n )\n if (replyChild == null) {\n throw new Error('The server has lost children!')\n }\n }\n\n return out\n}\n\n/**\n * Updates the given login stash object with fields from the auth server.\n * TODO: We don't trust the auth server 100%, so be picky about what we copy.\n */\nexport function applyLoginPayload(\n stashTree,\n loginKey,\n loginReply\n) {\n return updateTree(\n stashTree,\n stash => stash.appId === loginReply.appId,\n stash => applyLoginPayloadInner(stash, loginKey, loginReply),\n (stash, children) => ({ ...stash, children })\n )\n}\n\nfunction makeLoginTreeInner(\n stash,\n loginKey\n) {\n const {\n appId,\n created,\n lastLogin = new Date(),\n loginId,\n otpKey,\n otpResetDate,\n otpTimeout,\n pendingVouchers,\n userId,\n username,\n children: stashChildren = [],\n keyBoxes = []\n } = stash\n\n const login = {\n appId,\n created,\n lastLogin,\n loginId,\n otpKey,\n otpResetDate,\n otpTimeout,\n pendingVouchers,\n userId,\n username,\n loginKey,\n children: [],\n keyInfos: []\n }\n\n // Server authentication:\n if (stash.loginAuthBox != null) {\n login.loginAuth = decrypt(stash.loginAuthBox, loginKey)\n }\n if (stash.passwordAuthBox != null) {\n if (login.userId == null) login.userId = loginId\n login.passwordAuth = decrypt(stash.passwordAuthBox, loginKey)\n }\n if (login.loginAuth == null && login.passwordAuth == null) {\n throw new Error('No server authentication methods on login')\n }\n\n // PIN v2:\n login.pin2Key = stash.pin2Key\n if (stash.pin2TextBox != null) {\n login.pin = decryptText(stash.pin2TextBox, loginKey)\n }\n\n // Recovery v2:\n login.recovery2Key = stash.recovery2Key\n\n const legacyKeys = []\n\n // BitID wallet:\n const { mnemonicBox, rootKeyBox } = stash\n if (mnemonicBox != null && rootKeyBox != null) {\n const rootKey = decrypt(rootKeyBox, loginKey)\n const infoKey = hmacSha256(rootKey, utf8.parse('infoKey'))\n const keys = {\n mnemonic: decryptText(mnemonicBox, infoKey),\n rootKey: base64.stringify(rootKey)\n }\n legacyKeys.push(makeKeyInfo('wallet:bitid', keys, rootKey))\n }\n\n // Account settings:\n if (stash.syncKeyBox != null) {\n const syncKey = decrypt(stash.syncKeyBox, loginKey)\n const type = makeAccountType(login.appId)\n const keys = {\n syncKey: base64.stringify(syncKey),\n dataKey: base64.stringify(loginKey)\n }\n legacyKeys.push(makeKeyInfo(type, keys, loginKey))\n }\n\n // Keys:\n const keyInfos = keyBoxes.map(box => JSON.parse(decryptText(box, loginKey)))\n login.keyInfos = mergeKeyInfos([...legacyKeys, ...keyInfos]).map(walletInfo =>\n fixWalletInfo(walletInfo)\n )\n\n // Recurse into children:\n login.children = stashChildren.map(child => {\n if (child.parentBox == null) {\n throw new Error('Key integrity violation: No parentBox on child login.')\n }\n const childKey = decrypt(child.parentBox, loginKey)\n return makeLoginTreeInner(child, childKey)\n })\n\n return login\n}\n\n/**\n * Converts a login stash into an in-memory login object.\n */\nexport function makeLoginTree(\n stashTree,\n loginKey,\n appId = ''\n) {\n return updateTree(\n stashTree,\n stash => stash.appId === appId,\n stash => makeLoginTreeInner(stash, loginKey),\n (stash, children) => {\n const {\n appId,\n lastLogin = new Date(),\n loginId,\n pendingVouchers,\n username\n } = stash\n\n // Hack: The types say this must be present,\n // but we don't actually have a root key for child logins.\n // This affects everybody, so fixing it will be quite hard:\n const loginKey = undefined\n\n return {\n appId,\n children,\n keyInfos: [],\n lastLogin,\n loginId,\n loginKey,\n pendingVouchers,\n username\n }\n }\n )\n}\n\n/**\n * Prepares a login stash for edge login,\n * stripping out any information that the target app is not allowed to see.\n */\nexport function sanitizeLoginStash(\n stashTree,\n appId\n) {\n return updateTree(\n stashTree,\n stash => stash.appId === appId,\n stash => stash,\n (stash, children) => {\n const { appId, loginId, username } = stash\n return {\n appId,\n children,\n loginId,\n pendingVouchers: [],\n username\n }\n }\n )\n}\n\n/**\n * Logs a user in, using the auth server to retrieve information.\n * The various login methods (password / PIN / recovery, etc.) share\n * common logic, which all lives in here.\n *\n * The things tha differ between the methods are the server payloads\n * and the decryption steps, so this function accepts those two things\n * as parameters, plus the ordinary login options.\n */\nexport async function serverLogin(\n ai,\n stashTree,\n stash,\n opts,\n serverAuth,\n decrypt\n) {\n const { now = new Date() } = opts\n const { deviceDescription } = ai.props.state.login\n\n const request = {\n otp: getStashOtp(stash, opts),\n voucherId: stash.voucherId,\n voucherAuth: stash.voucherAuth,\n ...serverAuth\n }\n if (deviceDescription != null) request.deviceDescription = deviceDescription\n\n let loginReply = asLoginPayload(\n await loginFetch(ai, 'POST', '/v2/login', request).catch((error) => {\n // Save the username / voucher if we get an OTP error:\n const otpError = asMaybeOtpError(error)\n if (\n otpError != null &&\n // We have never seen this user before:\n ((stash.loginId.length === 0 && otpError.loginId != null) ||\n // We got a voucher:\n (otpError.voucherId != null && otpError.voucherAuth != null))\n ) {\n if (otpError.loginId != null) {\n stash.loginId = base64.parse(otpError.loginId)\n }\n if (otpError.voucherAuth != null) {\n stash.voucherId = otpError.voucherId\n stash.voucherAuth = base64.parse(otpError.voucherAuth)\n }\n stashTree.lastLogin = now\n saveStash(ai, stashTree).catch(() => {})\n }\n throw error\n })\n )\n\n // Try decrypting the reply:\n const loginKey = await decrypt(loginReply)\n\n // Save the latest data:\n stashTree = applyLoginPayload(stashTree, loginKey, loginReply)\n stashTree.lastLogin = now\n await saveStash(ai, stashTree)\n\n // Ensure the account has secret-key login enabled:\n if (loginReply.loginAuthBox == null) {\n const { stash, stashTree } = getStashById(ai, loginReply.loginId)\n const { io } = ai.props\n const loginAuth = io.random(32)\n const loginAuthBox = encrypt(io, loginAuth, loginKey)\n const request = {\n ...serverAuth,\n otp: getStashOtp(stash, opts),\n data: wasChangeSecretPayload({ loginAuth, loginAuthBox })\n }\n loginReply = asLoginPayload(\n await loginFetch(ai, 'POST', '/v2/login/secret', request)\n )\n await saveStash(ai, applyLoginPayload(stashTree, loginKey, loginReply))\n }\n\n return makeLoginTree(stashTree, loginKey, stash.appId)\n}\n\n/**\n * Changing a login involves updating the server, the in-memory login,\n * and the on-disk stash. A login kit contains all three elements,\n * and this function knows how to apply them all.\n */\nexport async function applyKit(\n ai,\n loginTree,\n kit\n) {\n const { loginId, serverMethod = 'POST', serverPath } = kit\n const login = searchTree(loginTree, login =>\n verifyData(login.loginId, loginId)\n )\n if (login == null) throw new Error('Cannot apply kit: missing login')\n\n const { stashTree } = getStashById(ai, loginId)\n const request = makeAuthJson(stashTree, login)\n request.data = kit.server\n await loginFetch(ai, serverMethod, serverPath, request)\n const newLoginTree = updateTree(\n loginTree,\n login => verifyData(login.loginId, loginId),\n login => ({\n ...login,\n ...kit.login,\n children: softCat(login.children, kit.login.children),\n keyInfos: mergeKeyInfos(softCat(login.keyInfos, kit.login.keyInfos))\n }),\n (login, children) => ({ ...login, children })\n )\n\n const newStashTree = updateTree(\n stashTree,\n stash => verifyData(stash.loginId, loginId),\n stash => ({\n ...stash,\n ...kit.stash,\n children: softCat(stash.children, kit.stash.children),\n keyBoxes: softCat(stash.keyBoxes, kit.stash.keyBoxes)\n }),\n (stash, children) => ({ ...stash, children })\n )\n await saveStash(ai, newStashTree)\n\n return newLoginTree\n}\n\n/**\n * Applies an array of kits to a login, one after another.\n * We can't use `Promise.all`, since `applyKit` doesn't handle\n * parallelism correctly.\n */\nexport async function applyKits(\n ai,\n loginTree,\n kits\n) {\n for (const kit of kits) {\n await applyKit(ai, loginTree, kit)\n }\n}\n\nexport async function syncAccount(\n ai,\n accountId\n) {\n if (ai.props.state.accounts[accountId] == null) return\n const { login, loginTree } = ai.props.state.accounts[accountId]\n await syncLogin(ai, loginTree, login)\n}\n\n/**\n * Refreshes a login with data from the server.\n */\nexport async function syncLogin(\n ai,\n loginTree,\n login\n) {\n const { stashTree, stash } = getStashById(ai, login.loginId)\n\n const request = makeAuthJson(stashTree, login)\n const opts = {\n // Avoid updating the lastLogin date:\n now: stashTree.lastLogin\n }\n\n return await serverLogin(ai, stashTree, stash, opts, request, async () => {\n return login.loginKey\n })\n}\n\n/**\n * Sets up a login v2 server authorization JSON.\n */\nexport function makeAuthJson(\n stashTree,\n login\n) {\n const stash = searchTree(stashTree, stash => stash.appId === login.appId)\n const { voucherAuth, voucherId } =\n stash != null ? stash : { voucherAuth: undefined, voucherId: undefined }\n\n const { loginId, userId, loginAuth, passwordAuth } = login\n if (loginAuth != null) {\n return {\n loginId,\n loginAuth,\n otp: getLoginOtp(login),\n voucherAuth,\n voucherId\n }\n }\n if (passwordAuth != null && userId != null) {\n return {\n userId,\n passwordAuth,\n otp: getLoginOtp(login),\n voucherAuth,\n voucherId\n }\n }\n throw new Error('No server authentication methods available')\n}\n","// \n\nimport { uncleaner } from 'cleaners'\nimport { base32 } from 'rfc4648'\n\nimport {\n asChangeOtpPayload,\n asOtpResetPayload\n} from '../../types/server-cleaners.js'\n\nimport { totp } from '../../util/crypto/hotp.js'\nimport { applyKit, serverLogin } from '../login/login.js'\n\nimport { loginFetch } from './login-fetch.js'\nimport { getStashById, hashUsername } from './login-selectors.js'\n\n\n\nconst wasChangeOtpPayload = uncleaner(asChangeOtpPayload)\n\n/**\n * Gets the current OTP for a logged-in account.\n */\nexport function getLoginOtp(login) {\n if (login.otpKey != null) return totp(login.otpKey)\n}\n\n/**\n * Gets the current OTP from either the disk storage or login options.\n */\nexport function getStashOtp(\n stash,\n opts\n) {\n const { otp, otpKey } = opts\n if (otp != null) {\n if (/[0-9]+/.test(otp) && otp.length < 16) return otp\n return totp(base32.parse(otp, { loose: true }))\n }\n if (otpKey != null) return totp(base32.parse(otpKey, { loose: true }))\n if (stash.otpKey != null) return totp(stash.otpKey)\n}\n\nexport async function enableOtp(\n ai,\n accountId,\n otpTimeout\n) {\n const { loginTree } = ai.props.state.accounts[accountId]\n const { otpKey = ai.props.io.random(10) } = loginTree\n\n const kit = {\n serverPath: '/v2/login/otp',\n server: wasChangeOtpPayload({\n otpKey,\n otpTimeout\n }),\n stash: {\n otpKey,\n otpResetDate: undefined,\n otpTimeout\n },\n login: {\n otpKey,\n otpResetDate: undefined,\n otpTimeout\n },\n loginId: loginTree.loginId\n }\n await applyKit(ai, loginTree, kit)\n}\n\nexport async function disableOtp(\n ai,\n accountId\n) {\n const { loginTree } = ai.props.state.accounts[accountId]\n\n const kit = {\n serverMethod: 'DELETE',\n serverPath: '/v2/login/otp',\n stash: {\n otpKey: undefined,\n otpResetDate: undefined,\n otpTimeout: undefined\n },\n login: {\n otpKey: undefined,\n otpResetDate: undefined,\n otpTimeout: undefined\n },\n loginId: loginTree.loginId\n }\n await applyKit(ai, loginTree, kit)\n}\n\nexport async function cancelOtpReset(\n ai,\n accountId\n) {\n const { loginTree } = ai.props.state.accounts[accountId]\n const { otpTimeout, otpKey } = loginTree\n if (otpTimeout == null || otpKey == null) {\n throw new Error('Cannot cancel 2FA reset: 2FA is not enabled.')\n }\n\n const kit = {\n serverPath: '/v2/login/otp',\n server: wasChangeOtpPayload({\n otpTimeout,\n otpKey\n }),\n stash: {\n otpResetDate: undefined\n },\n login: {\n otpResetDate: undefined\n },\n loginId: loginTree.loginId\n }\n await applyKit(ai, loginTree, kit)\n}\n\n/**\n * Requests an OTP reset.\n */\nexport async function resetOtp(\n ai,\n username,\n resetToken\n) {\n const request = {\n userId: await hashUsername(ai, username),\n otpResetAuth: resetToken\n }\n return loginFetch(ai, 'DELETE', '/v2/login/otp', request).then(reply => {\n const { otpResetDate } = asOtpResetPayload(reply)\n return otpResetDate\n })\n}\n\n/**\n * If the device doesn't have the right OTP key,\n * this can prevent most things from working.\n * Let the user provide an updated key, and present that to the server.\n * If the key works, the server will let us in & resolve the issue.\n */\nexport async function repairOtp(\n ai,\n accountId,\n otpKey\n) {\n if (ai.props.state.accounts[accountId] == null) return\n const { login } = ai.props.state.accounts[accountId]\n const { userId, passwordAuth } = login\n\n const { stashTree, stash } = getStashById(ai, login.loginId)\n if (passwordAuth == null || userId == null) {\n throw new Error('Cannot repair OTP: There is no password on this account')\n }\n const request = {\n userId,\n passwordAuth,\n otp: totp(otpKey)\n }\n const opts = {\n // Avoid updating the lastLogin date:\n now: stashTree.lastLogin\n }\n await serverLogin(ai, stashTree, stash, opts, request, async () => {\n return login.loginKey\n })\n}\n","// \n\nimport { uncleaner } from 'cleaners'\n\nimport { asChangePasswordPayload } from '../../types/server-cleaners.js'\n\nimport { decrypt, encrypt } from '../../util/crypto/crypto.js'\n\nimport { makeSnrp, scrypt, userIdSnrp } from '../scrypt/scrypt-selectors.js'\nimport { applyKit, makeLoginTree, serverLogin, syncLogin } from './login.js'\nimport { fixUsername, getStash, hashUsername } from './login-selectors.js'\nimport { saveStash } from './login-stash.js'\n\n\nconst wasChangePasswordPayload = uncleaner(asChangePasswordPayload)\nconst passwordAuthSnrp = userIdSnrp\n\nfunction makeHashInput(username, password) {\n return fixUsername(username) + password\n}\n\n/**\n * Extracts the loginKey from the login stash.\n */\nasync function loginPasswordOffline(\n ai,\n username,\n password,\n opts\n) {\n const { now = new Date() } = opts\n const stashTree = getStash(ai, username)\n\n const { passwordBox, passwordKeySnrp } = stashTree\n if (passwordBox == null || passwordKeySnrp == null) {\n throw new Error('Missing data for offline password login')\n }\n const up = makeHashInput(username, password)\n const passwordKey = await scrypt(ai, up, passwordKeySnrp)\n const loginKey = decrypt(passwordBox, passwordKey)\n const loginTree = makeLoginTree(stashTree, loginKey)\n stashTree.lastLogin = now\n saveStash(ai, stashTree).catch(() => {})\n\n // Since we logged in offline, update the stash in the background:\n // TODO: If the user provides an OTP token, add that to the stash.\n const { log } = ai.props\n syncLogin(ai, loginTree, loginTree).catch(e => log.error(e))\n\n return loginTree\n}\n\n/**\n * Fetches the loginKey from the server.\n */\nasync function loginPasswordOnline(\n ai,\n username,\n password,\n opts\n) {\n const stashTree = getStash(ai, username)\n\n // Request:\n const up = makeHashInput(username, password)\n const [userId, passwordAuth] = await Promise.all([\n hashUsername(ai, username),\n scrypt(ai, up, passwordAuthSnrp)\n ])\n const request = {\n userId,\n passwordAuth\n }\n return serverLogin(ai, stashTree, stashTree, opts, request, async reply => {\n const { passwordBox, passwordKeySnrp } = reply\n if (passwordBox == null || passwordKeySnrp == null) {\n throw new Error('Missing data for online password login')\n }\n const passwordKey = await scrypt(ai, up, passwordKeySnrp)\n return decrypt(passwordBox, passwordKey)\n })\n}\n\n/**\n * Logs a user in using a password.\n * @param username string\n * @param password string\n * @return A `Promise` for the new root login.\n */\nexport async function loginPassword(\n ai,\n username,\n password,\n opts\n) {\n return loginPasswordOffline(ai, username, password, opts).catch(() =>\n loginPasswordOnline(ai, username, password, opts)\n )\n}\n\nexport async function changePassword(\n ai,\n accountId,\n password\n) {\n const { loginTree, username } = ai.props.state.accounts[accountId]\n\n const kit = await makePasswordKit(ai, loginTree, username, password)\n await applyKit(ai, loginTree, kit)\n}\n\n/**\n * Returns true if the given password is correct.\n */\nexport async function checkPassword(\n ai,\n login,\n password\n) {\n const { username, passwordAuth } = login\n if (username == null || passwordAuth == null) return false\n\n // Derive passwordAuth:\n const up = makeHashInput(username, password)\n const newPasswordAuth = await scrypt(ai, up, passwordAuthSnrp)\n\n // Compare what we derived with what we have:\n for (let i = 0; i < passwordAuth.length; ++i) {\n if (newPasswordAuth[i] !== passwordAuth[i]) return false\n }\n\n return true\n}\n\nexport async function deletePassword(\n ai,\n accountId\n) {\n const { loginTree } = ai.props.state.accounts[accountId]\n\n const kit = {\n serverMethod: 'DELETE',\n serverPath: '/v2/login/password',\n stash: {\n passwordAuthSnrp: undefined,\n passwordBox: undefined,\n passwordKeySnrp: undefined\n },\n login: {\n passwordAuth: undefined\n },\n loginId: loginTree.loginId\n }\n // Only remove `passwordAuth` if we have another way to get in:\n if (loginTree.loginAuth != null) {\n kit.stash.passwordAuthBox = undefined\n kit.login.passwordAuth = undefined\n }\n await applyKit(ai, loginTree, kit)\n}\n\n/**\n * Creates the data needed to attach a password to a login.\n */\nexport function makePasswordKit(\n ai,\n login,\n username,\n password\n) {\n const up = makeHashInput(username, password)\n const { io } = ai.props\n\n // loginKey chain:\n const boxPromise = makeSnrp(ai).then(passwordKeySnrp => {\n return scrypt(ai, up, passwordKeySnrp).then(passwordKey => {\n const passwordBox = encrypt(io, login.loginKey, passwordKey)\n return { passwordKeySnrp, passwordBox }\n })\n })\n\n // authKey chain:\n const authPromise = scrypt(ai, up, passwordAuthSnrp).then(passwordAuth => {\n const passwordAuthBox = encrypt(io, passwordAuth, login.loginKey)\n return { passwordAuth, passwordAuthBox }\n })\n\n return Promise.all([boxPromise, authPromise]).then(values => {\n const [\n { passwordKeySnrp, passwordBox },\n { passwordAuth, passwordAuthBox }\n ] = values\n\n return {\n serverPath: '/v2/login/password',\n server: wasChangePasswordPayload({\n passwordAuth,\n passwordAuthSnrp, // TODO: Use this on the other side\n passwordKeySnrp,\n passwordBox,\n passwordAuthBox\n }),\n stash: {\n passwordKeySnrp,\n passwordBox,\n passwordAuthBox\n },\n login: {\n passwordAuth\n },\n loginId: login.loginId\n }\n })\n}\n","// \n\nimport { uncleaner } from 'cleaners'\n\nimport { asChangePin2Payload } from '../../types/server-cleaners.js'\n\n\nimport { decrypt, encrypt } from '../../util/crypto/crypto.js'\nimport { hmacSha256 } from '../../util/crypto/hashes.js'\nimport { utf8 } from '../../util/encoding.js'\n\nimport { applyKits, searchTree, serverLogin } from './login.js'\nimport { loginFetch } from './login-fetch.js'\nimport { fixUsername, getStash } from './login-selectors.js'\n\n\nimport { getLoginOtp } from './otp.js'\n\nconst wasChangePin2Payload = uncleaner(asChangePin2Payload)\n\nfunction pin2Id(pin2Key, username) {\n const data = utf8.parse(fixUsername(username))\n return hmacSha256(data, pin2Key)\n}\n\nfunction pin2Auth(pin2Key, pin) {\n return hmacSha256(utf8.parse(pin), pin2Key)\n}\n\n/**\n * Returns a copy of the PIN login key if one exists on the local device.\n */\nexport function findPin2Stash(\n stashTree,\n appId\n) {\n if (stashTree.pin2Key != null) return stashTree\n const stash = searchTree(stashTree, stash => stash.appId === appId)\n if (stash != null && stash.pin2Key != null) return stash\n}\n\n/**\n * Logs a user in using their PIN.\n * @return A `Promise` for the new root login.\n */\nexport async function loginPin2(\n ai,\n appId,\n username,\n pin,\n opts\n) {\n // Find the stash to use:\n const stashTree = getStash(ai, username)\n const stash = findPin2Stash(stashTree, appId)\n if (stash == null || stash.pin2Key == null) {\n throw new Error('PIN login is not enabled for this account on this device')\n }\n\n // Request:\n const { pin2Key } = stash\n const request = {\n pin2Id: pin2Id(pin2Key, username),\n pin2Auth: pin2Auth(pin2Key, pin)\n }\n return serverLogin(ai, stashTree, stash, opts, request, async reply => {\n if (reply.pin2Box == null) {\n throw new Error('Missing data for PIN v2 login')\n }\n return decrypt(reply.pin2Box, pin2Key)\n })\n}\n\nexport async function changePin(\n ai,\n accountId,\n pin,\n enableLogin\n) {\n const { loginTree, username } = ai.props.state.accounts[accountId]\n\n // Figure out defaults:\n if (enableLogin == null) {\n enableLogin =\n loginTree.pin2Key != null || (pin != null && loginTree.pin == null)\n }\n if (pin == null) pin = loginTree.pin\n\n // We cannot enable PIN login if we don't know the PIN:\n if (pin == null) {\n if (enableLogin) {\n throw new Error(\n 'Please change your PIN in the settings area above before enabling.'\n )\n }\n // But we can disable PIN login by just deleting it entirely:\n await applyKits(ai, loginTree, makeDeletePin2Kits(loginTree))\n return\n }\n\n const kits = makeChangePin2Kits(ai, loginTree, username, pin, enableLogin)\n await applyKits(ai, loginTree, kits)\n}\n\n/**\n * Returns true if the given pin is correct.\n */\nexport async function checkPin2(\n ai,\n login,\n pin\n) {\n const { appId, username } = login\n if (username == null) return false\n\n // Find the stash to use:\n const stashTree = getStash(ai, username)\n const stash = findPin2Stash(stashTree, appId)\n if (stash == null || stash.pin2Key == null) {\n throw new Error('No PIN set locally for this account')\n }\n\n // Try a login:\n const { pin2Key } = stash\n const request = {\n pin2Id: pin2Id(pin2Key, username),\n pin2Auth: pin2Auth(pin2Key, pin),\n otp: getLoginOtp(login)\n }\n return loginFetch(ai, 'POST', '/v2/login', request).then(\n good => true,\n bad => false\n )\n}\n\nexport async function deletePin(\n ai,\n accountId\n) {\n const { loginTree } = ai.props.state.accounts[accountId]\n\n const kits = makeDeletePin2Kits(loginTree)\n await applyKits(ai, loginTree, kits)\n}\n\n/**\n * Creates the data needed to attach a PIN to a tree of logins.\n */\nexport function makeChangePin2Kits(\n ai,\n loginTree,\n username,\n pin,\n enableLogin\n) {\n const out = [\n makeChangePin2Kit(ai, loginTree, username, pin, enableLogin)\n ]\n\n for (const child of loginTree.children) {\n out.push(...makeChangePin2Kits(ai, child, username, pin, enableLogin))\n }\n\n return out\n}\n\n/**\n * Creates the data needed to attach a PIN to a login.\n */\nexport function makeChangePin2Kit(\n ai,\n login,\n username,\n pin,\n enableLogin\n) {\n const { io } = ai.props\n const pin2TextBox = encrypt(io, utf8.parse(pin), login.loginKey)\n\n if (enableLogin) {\n const { loginId, loginKey, pin2Key = io.random(32) } = login\n const pin2Box = encrypt(io, loginKey, pin2Key)\n const pin2KeyBox = encrypt(io, pin2Key, loginKey)\n\n return {\n serverPath: '/v2/login/pin2',\n server: wasChangePin2Payload({\n pin2Id: pin2Id(pin2Key, username),\n pin2Auth: pin2Auth(pin2Key, pin),\n pin2Box,\n pin2KeyBox,\n pin2TextBox\n }),\n stash: {\n pin2Key,\n pin2TextBox\n },\n login: {\n pin2Key,\n pin\n },\n loginId\n }\n } else {\n return {\n serverPath: '/v2/login/pin2',\n server: wasChangePin2Payload({\n pin2Id: undefined,\n pin2Auth: undefined,\n pin2Box: undefined,\n pin2KeyBox: undefined,\n pin2TextBox\n }),\n stash: {\n pin2Key: undefined,\n pin2TextBox\n },\n login: {\n pin2Key: undefined,\n pin\n },\n loginId: login.loginId\n }\n }\n}\n\n/**\n * Creates the data needed to delete a PIN from a tree of logins.\n */\nexport function makeDeletePin2Kits(loginTree) {\n const out = [makeDeletePin2Kit(loginTree)]\n\n for (const child of loginTree.children) {\n out.push(...makeDeletePin2Kits(child))\n }\n\n return out\n}\n\n/**\n * Creates the data needed to delete a PIN from a login.\n */\nexport function makeDeletePin2Kit(login) {\n return {\n serverMethod: 'DELETE',\n serverPath: '/v2/login/pin2',\n server: undefined,\n stash: {\n pin2Key: undefined\n },\n login: {\n pin2Key: undefined\n },\n loginId: login.loginId\n }\n}\n","// \n\nimport { uncleaner } from 'cleaners'\n\nimport {\n asChangeRecovery2Payload,\n asQuestionChoicesPayload,\n asRecovery2InfoPayload\n} from '../../types/server-cleaners.js'\n\n\n\n\nimport { decrypt, decryptText, encrypt } from '../../util/crypto/crypto.js'\nimport { hmacSha256 } from '../../util/crypto/hashes.js'\nimport { utf8 } from '../../util/encoding.js'\n\nimport { applyKit, serverLogin } from './login.js'\nimport { loginFetch } from './login-fetch.js'\nimport { fixUsername, getStash } from './login-selectors.js'\n\n\nconst wasChangeRecovery2Payload = uncleaner(asChangeRecovery2Payload)\n\nfunction recovery2Id(recovery2Key, username) {\n const data = utf8.parse(fixUsername(username))\n return hmacSha256(data, recovery2Key)\n}\n\nfunction recovery2Auth(\n recovery2Key,\n answers\n) {\n return answers.map(answer => {\n const data = utf8.parse(answer)\n return hmacSha256(data, recovery2Key)\n })\n}\n\n/**\n * Logs a user in using recovery answers.\n * @return A `Promise` for the new root login.\n */\nexport async function loginRecovery2(\n ai,\n recovery2Key,\n username,\n answers,\n opts\n) {\n const stashTree = getStash(ai, username)\n\n // Request:\n const request = {\n recovery2Id: recovery2Id(recovery2Key, username),\n recovery2Auth: recovery2Auth(recovery2Key, answers)\n }\n return serverLogin(ai, stashTree, stashTree, opts, request, async reply => {\n if (reply.recovery2Box == null) {\n throw new Error('Missing data for recovery v2 login')\n }\n return decrypt(reply.recovery2Box, recovery2Key)\n })\n}\n\n/**\n * Fetches the questions for a login\n * @param username string\n * @param recovery2Key an ArrayBuffer recovery key\n * @param Question array promise\n */\nexport function getQuestions2(\n ai,\n recovery2Key,\n username\n) {\n const request = {\n recovery2Id: recovery2Id(recovery2Key, username)\n // \"otp\": null\n }\n return loginFetch(ai, 'POST', '/v2/login', request).then(reply => {\n const { question2Box } = asRecovery2InfoPayload(reply)\n if (question2Box == null) {\n throw new Error('Login has no recovery questions')\n }\n\n // Decrypt the questions:\n return JSON.parse(decryptText(question2Box, recovery2Key))\n })\n}\n\nexport async function changeRecovery(\n ai,\n accountId,\n questions,\n answers\n) {\n const { loginTree, username } = ai.props.state.accounts[accountId]\n\n const kit = makeRecovery2Kit(ai, loginTree, username, questions, answers)\n await applyKit(ai, loginTree, kit)\n}\n\nexport async function deleteRecovery(\n ai,\n accountId\n) {\n const { loginTree } = ai.props.state.accounts[accountId]\n\n const kit = {\n serverMethod: 'DELETE',\n serverPath: '/v2/login/recovery2',\n stash: {\n recovery2Key: undefined\n },\n login: {\n recovery2Key: undefined\n },\n loginId: loginTree.loginId\n }\n await applyKit(ai, loginTree, kit)\n}\n\n/**\n * Creates the data needed to attach recovery questions to a login.\n */\nexport function makeRecovery2Kit(\n ai,\n login,\n username,\n questions,\n answers\n) {\n const { io } = ai.props\n if (!Array.isArray(questions)) {\n throw new TypeError('Questions must be an array of strings')\n }\n if (!Array.isArray(answers)) {\n throw new TypeError('Answers must be an array of strings')\n }\n\n const { loginId, loginKey, recovery2Key = io.random(32) } = login\n const question2Box = encrypt(\n io,\n utf8.parse(JSON.stringify(questions)),\n recovery2Key\n )\n const recovery2Box = encrypt(io, loginKey, recovery2Key)\n const recovery2KeyBox = encrypt(io, recovery2Key, loginKey)\n\n return {\n serverPath: '/v2/login/recovery2',\n server: wasChangeRecovery2Payload({\n recovery2Id: recovery2Id(recovery2Key, username),\n recovery2Auth: recovery2Auth(recovery2Key, answers),\n recovery2Box,\n recovery2KeyBox,\n question2Box\n }),\n stash: {\n recovery2Key\n },\n login: {\n recovery2Key\n },\n loginId\n }\n}\n\nexport async function listRecoveryQuestionChoices(\n ai\n) {\n return asQuestionChoicesPayload(\n await loginFetch(ai, 'POST', '/v1/questions', {})\n )\n}\n","// \n\nimport { uncleaner } from 'cleaners'\n\nimport {\n asChangeVouchersPayload,\n asLoginPayload\n} from '../../types/server-cleaners.js'\n\n\nimport { applyLoginPayload, makeAuthJson } from './login.js'\nimport { loginFetch } from './login-fetch.js'\nimport { getStashById } from './login-selectors.js'\nimport { saveStash } from './login-stash.js'\n\n\nconst wasChangeVouchersPayload = uncleaner(asChangeVouchersPayload)\n\n/**\n * Approves or rejects vouchers on the server.\n */\nexport async function changeVoucherStatus(\n ai,\n login,\n vouchers\n) {\n const { stashTree } = getStashById(ai, login.loginId)\n const reply = await loginFetch(ai, 'POST', '/v2/login/vouchers', {\n ...makeAuthJson(stashTree, login),\n data: wasChangeVouchersPayload(vouchers)\n })\n const newStashTree = applyLoginPayload(\n stashTree,\n login.loginKey,\n asLoginPayload(reply)\n )\n return saveStash(ai, newStashTree)\n}\n","// \n\nimport { navigateDisklet } from 'disklet'\n\n\n\n\n\n\n\n\n\n\n\n\nimport { makeLog } from '../log/log.js'\n\n\n\n\n\n\n\n\n\nconst allPlugins = {}\nlet allPluginsLocked = false\nconst onPluginsAdded = []\nconst onPluginsLocked = []\n\n/**\n * Adds plugins to the core.\n */\nexport function addEdgeCorePlugins(plugins) {\n if (allPluginsLocked) {\n throw new Error('The Edge core plugin list has already been locked')\n }\n\n // Save the new plugins:\n for (const pluginId in plugins) {\n allPlugins[pluginId] = plugins[pluginId]\n }\n\n // Update already-booted contexts:\n for (const f of onPluginsAdded) f(plugins)\n}\n\n/**\n * Finalizes the core plugin list, so no further plugins are expected.\n */\nexport function lockEdgeCorePlugins() {\n allPluginsLocked = true\n for (const f of onPluginsLocked) f()\n}\n\n/**\n * Subscribes a context object to the core plugin list.\n */\nexport function watchPlugins(\n ios,\n logBackend,\n pluginsInit,\n dispatch\n) {\n const { io, nativeIo } = ios\n\n function pluginsAdded(plugins) {\n const out = {}\n\n for (const pluginId in plugins) {\n const plugin = plugins[pluginId]\n const log = makeLog(logBackend, pluginId)\n const initOptions = pluginsInit[pluginId]\n if (!initOptions) continue\n\n // Figure out what kind of object this is:\n try {\n if (typeof plugin === 'function') {\n const opts = {\n initOptions: typeof initOptions === 'object' ? initOptions : {},\n io,\n log,\n nativeIo,\n pluginDisklet: navigateDisklet(io.disklet, 'plugins/' + pluginId)\n }\n out[pluginId] = plugin(opts)\n } else if (typeof plugin === 'object' && plugin != null) {\n out[pluginId] = plugin\n } else {\n throw new TypeError(\n `Plugins must be functions or objects, got ${typeof plugin}`\n )\n }\n } catch (error) {\n // Show the error but keep going:\n log.error(error)\n }\n }\n\n dispatch({ type: 'CORE_PLUGINS_ADDED', payload: out })\n }\n\n function pluginsLocked() {\n dispatch({ type: 'CORE_PLUGINS_LOCKED', payload: pluginsInit })\n }\n\n // Add any plugins currently available:\n pluginsAdded(allPlugins)\n if (allPluginsLocked) pluginsLocked()\n\n // Save the callbacks:\n onPluginsAdded.push(pluginsAdded)\n onPluginsLocked.push(pluginsLocked)\n\n return () => {\n onPluginsAdded.filter(f => f !== pluginsAdded)\n onPluginsLocked.filter(f => f !== pluginsLocked)\n }\n}\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst initialState = {\n init: {},\n locked: false,\n currency: {},\n rate: {},\n swap: {},\n currencyTools: {}\n}\n\nexport const plugins = (\n state = initialState,\n action\n) => {\n switch (action.type) {\n case 'CORE_PLUGINS_ADDED': {\n const out = {\n ...state,\n currency: { ...state.currency },\n rate: { ...state.rate },\n swap: { ...state.swap }\n }\n for (const pluginId of Object.keys(action.payload)) {\n const plugin = action.payload[pluginId]\n // $FlowFixMe - Flow doesn't see the type refinement here:\n if (plugin.currencyInfo != null) out.currency[pluginId] = plugin\n // $FlowFixMe\n if (plugin.rateInfo != null) out.rate[pluginId] = plugin\n // $FlowFixMe\n if (plugin.swapInfo != null) out.swap[pluginId] = plugin\n }\n return out\n }\n case 'CORE_PLUGINS_LOCKED':\n return { ...state, locked: true }\n case 'CURRENCY_TOOLS_LOADED': {\n const currencyTools = { ...state.currencyTools }\n currencyTools[action.payload.pluginId] = action.payload.tools\n return { ...state, currencyTools }\n }\n case 'INIT':\n return { ...state, init: action.payload.pluginsInit }\n }\n return state\n}\n","\n\n\n\n\n\n\n\n\n/**\n * Finds the currency plugin that can handle a particular wallet type,\n * or throws an error if there is none.\n */\nexport function findCurrencyPluginId(\n plugins,\n walletType\n) {\n const pluginId = maybeFindCurrencyPluginId(plugins, walletType)\n if (pluginId == null) {\n throw new Error(\n `Cannot find a currency plugin for wallet type ${walletType}`\n )\n }\n return pluginId\n}\n\n/**\n * Finds the currency plugin that can handle a particular wallet type,\n * or `undefined` if there is none.\n */\nexport function maybeFindCurrencyPluginId(\n plugins,\n walletType\n) {\n return Object.keys(plugins).find(\n pluginId => plugins[pluginId].currencyInfo.walletType === walletType\n )\n}\n\n/**\n * Finds the currency tools for a particular wallet type,\n * loading them if needed.\n */\nexport function getCurrencyTools(\n ai,\n pluginId\n) {\n const { dispatch, state } = ai.props\n\n // Already loaded / loading:\n const tools = state.plugins.currencyTools[pluginId]\n if (tools != null) return tools\n\n // Never touched, so start the load:\n const plugin = state.plugins.currency[pluginId]\n const promise = plugin.makeCurrencyTools()\n dispatch({\n type: 'CURRENCY_TOOLS_LOADED',\n payload: { pluginId, tools: promise }\n })\n return promise\n}\n\n/**\n * Waits for the plugins to load,\n * then validates that all plugins are present.\n */\nexport async function waitForPlugins(ai) {\n await ai.waitFor((props) => {\n const { init, locked } = props.state.plugins\n if (!locked) return\n\n const { currency, rate, swap } = props.state.plugins\n const missingPlugins = []\n for (const pluginId in init) {\n if (\n !!init[pluginId] &&\n currency[pluginId] == null &&\n rate[pluginId] == null &&\n swap[pluginId] == null\n ) {\n missingPlugins.push(pluginId)\n }\n }\n if (missingPlugins.length > 0) {\n throw new Error(\n 'The following plugins are missing or failed to load: ' +\n missingPlugins.join(', ')\n )\n }\n\n return true\n })\n}\n","\n\n\n\nimport { combinePixies } from 'redux-pixies'\n\n\nimport { accounts } from './account/account-pixie.js'\n\nimport { context } from './context/context-pixie.js'\nimport { currency } from './currency/currency-pixie.js'\nimport { exchange } from './exchange/exchange-pixie.js'\n\n\nimport { scrypt } from './scrypt/scrypt-pixie.js'\n\n// The top-level pixie output structure:\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Downstream pixies take props that extend from `RootProps`,\n * so this casts those back down if necessary.\n */\nexport const toApiInput = (input) => input\n\nexport const rootPixie = combinePixies({\n accounts,\n context,\n currency,\n exchange,\n scrypt\n})\n","// \n\nimport { buildReducer, mapReducer } from 'redux-keto'\n\n\nimport { accountReducer } from './account/account-reducer.js'\n\nimport { currency } from './currency/currency-reducer.js'\nimport { DEFAULT_RATE_HINTS } from './exchange/exchange-pixie.js'\nimport {\n\n exchangeCache\n} from './exchange/exchange-reducer.js'\nimport { login } from './login/login-reducer.js'\nimport { plugins } from './plugins/plugins-reducer.js'\nimport {\n\n storageWallets\n} from './storage/storage-reducer.js'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport const defaultLogSettings = {\n sources: {},\n defaultLogLevel: 'warn'\n}\n\nexport const reducer = buildReducer({\n accountCount(state = 0, action) {\n return action.type === 'LOGIN' ? state + 1 : state\n },\n\n accountIds(state = [], action, next) {\n switch (action.type) {\n case 'LOGIN':\n return [...state, next.lastAccountId]\n\n case 'LOGOUT': {\n const { accountId } = action.payload\n const out = state.filter(id => id !== accountId)\n if (out.length === state.length) {\n throw new Error(`Login ${accountId} does not exist`)\n }\n return out\n }\n\n case 'CLOSE':\n return []\n }\n return state\n },\n\n accounts: mapReducer(accountReducer, (next) => next.accountIds),\n\n hideKeys(state = true, action) {\n return action.type === 'INIT' ? action.payload.hideKeys : state\n },\n\n lastAccountId(state, action, next) {\n return `login${next.accountCount}`\n },\n\n logSettings(state = defaultLogSettings, action) {\n switch (action.type) {\n case 'INIT':\n return action.payload.logSettings\n case 'CHANGE_LOG_SETTINGS':\n return action.payload\n }\n return state\n },\n\n paused(state = false, action) {\n return action.type === 'PAUSE' ? action.payload : state\n },\n\n rateHintCache(state = DEFAULT_RATE_HINTS, action) {\n switch (action.type) {\n case 'INIT':\n case 'UPDATE_RATE_HINT_CACHE':\n return action.payload.rateHintCache\n }\n return state\n },\n\n ready(state = false, action) {\n return action.type === 'INIT' ? true : state\n },\n\n currency,\n exchangeCache,\n login,\n plugins,\n storageWallets\n})\n","// \n\nimport { makeSyncClient } from 'edge-sync-client'\nimport { compose, createStore } from 'redux'\nimport { attachPixie, filterPixie } from 'redux-pixies'\nimport { emit } from 'yaob'\n\n\n\n\n\n\n\nimport { filterLogs, makeLog } from './log/log.js'\nimport { loadStashes } from './login/login-stash.js'\nimport { watchPlugins } from './plugins/plugins-actions.js'\nimport { rootPixie } from './root-pixie.js'\nimport { defaultLogSettings, reducer } from './root-reducer.js'\n\nlet allContexts = []\n\nconst composeEnhancers =\n typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ name: 'core' })\n : compose\n\n/**\n * Creates the root object for the entire core state machine.\n * This core object contains the `io` object, context options,\n * Redux store, and tree of background workers.\n */\nexport async function makeContext(\n ios,\n logBackend,\n opts\n) {\n const { io } = ios\n const {\n apiKey,\n appId = '',\n authServer = 'https://auth.airbitz.co/api',\n deviceDescription = null,\n hideKeys = false,\n plugins: pluginsInit = {}\n } = opts\n const logSettings = { ...defaultLogSettings, ...opts.logSettings }\n if (apiKey == null) {\n throw new Error('No API key provided')\n }\n\n // Create a redux store:\n const enhancers = composeEnhancers()\n const redux = createStore(reducer, enhancers)\n\n // Create a log wrapper, using the settings from redux:\n logBackend = filterLogs(logBackend, () => {\n const state = redux.getState()\n return state.ready ? state.logSettings : logSettings\n })\n const log = makeLog(logBackend, 'edge-core')\n\n // Load the rate hint cache from disk:\n const rateHintCache = await io.disklet\n .getText('rateHintCache.json')\n .then(text => JSON.parse(text))\n .catch(() => [])\n\n // Load the login stashes from disk:\n const stashes = await loadStashes(io.disklet, log)\n redux.dispatch({\n type: 'INIT',\n payload: {\n apiKey,\n appId,\n authServer,\n deviceDescription,\n hideKeys,\n logSettings,\n pluginsInit,\n rateHintCache,\n stashes\n }\n })\n\n // Subscribe to new plugins:\n const closePlugins = watchPlugins(\n ios,\n logBackend,\n pluginsInit,\n redux.dispatch\n )\n\n // Create sync client:\n const syncClient = await makeSyncClient({ log, fetch: io.fetch })\n\n // Start the pixie tree:\n const mirror = { output: {} }\n const closePixie = attachPixie(\n redux,\n filterPixie(\n rootPixie,\n (props) => ({\n ...props,\n close() {\n closePixie()\n closePlugins()\n redux.dispatch({ type: 'CLOSE' })\n },\n io,\n log,\n logBackend,\n onError: error => {\n if (\n mirror.output.context != null &&\n mirror.output.context.api != null\n ) {\n emit(mirror.output.context.api, 'error', error)\n }\n },\n syncClient\n })\n ),\n e => log.error(e),\n output => (mirror.output = output)\n )\n\n const out = mirror.output.context.api\n allContexts.push(out)\n return out\n}\n\n/**\n * We use this for unit testing, to kill all core contexts.\n */\nexport function closeEdge() {\n for (const context of allContexts) context.close().catch(() => {})\n allContexts = []\n}\n","// \n\nimport {\n\n\n combinePixies,\n stopUpdates\n} from 'redux-pixies'\nimport { base16 } from 'rfc4648'\n\n\nimport { utf8 } from '../../util/encoding.js'\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Prevents a function from running in parallel.\n * The currently-running operation must finish before the new one starts.\n */\nfunction serialize(\n f\n) {\n let lastTask = Promise.resolve()\n return function serialize(...args) {\n const onDone = () => f.apply(this, args)\n const out = lastTask.then(onDone, onDone)\n lastTask = out\n return out\n }\n}\n\nexport function calcSnrpForTarget(\n salt,\n benchMs,\n targetMs\n) {\n const snrp = {\n salt_hex: salt,\n n: 16384,\n r: 8,\n p: 1\n }\n\n if (benchMs === 0) {\n snrp.n = 131072\n snrp.r = 8\n snrp.p = 64\n return snrp\n }\n\n let timeUsed = benchMs // Estimated time in ms the current setting will take on current device\n\n //\n // Add additional r value first. This increases memory usage\n // Each additional increment of 'r' is approximately a linear increase in time.\n //\n const STARTING_R = 8\n const MAX_R = 8\n const REMAINING_R = MAX_R - STARTING_R\n const perRValue = benchMs / STARTING_R // The amount of ms delay each increment of 'r' creates\n let addR = (targetMs - timeUsed) / perRValue\n addR = addR > 0 ? addR : 0\n if (addR > REMAINING_R) {\n addR = REMAINING_R\n }\n addR = Math.floor(addR)\n snrp.r = STARTING_R + addR\n timeUsed += addR * perRValue\n\n //\n // Add additional N value in powers of 2. Each power of 2 doubles the amount of time it takes\n // to calculate the hash\n //\n let nPow = 14 // 2^14 = 16384 which is the minimum safe N value\n\n // Iteratively calculate the amount of additional N values we can add\n // Max out at N = 17\n let addN = (targetMs - timeUsed) / timeUsed\n addN = addN > 0 ? addN : 0\n if (addN > 3) {\n addN = 3\n }\n addN = Math.floor(addN)\n nPow += addN >= 0 ? addN : 0\n timeUsed += addN * timeUsed\n\n snrp.n = Math.pow(2, nPow)\n\n //\n // Add additional p value which increases parallelization factor\n // Max out at p = 64\n //\n let addP = (targetMs - timeUsed) / timeUsed\n addP = addP > 0 ? addP : 0\n if (addP > 64) {\n addP = 64\n }\n addP = Math.floor(addP)\n snrp.p = addP >= 1 ? addP : 1\n timeUsed += addP * timeUsed\n\n return snrp\n}\n\nexport const scrypt = combinePixies({\n makeSnrp: (input) => () => {\n const { io, log } = input.props\n let benchmark\n\n function makeSnrp(targetMs) {\n // Run the benchmark if needed:\n if (benchmark == null) {\n benchmark = input.props.output.scrypt\n .timeScrypt(utf8.parse('1reallyJunkiePasswordToCheck'), {\n salt_hex: base16.parse(\n 'b5865ffb9fa7b3bfe4b2384d47ce831ee22a4a9d5c34c7ef7d21467cc758f81b'\n ),\n n: 16384,\n r: 8,\n p: 1\n })\n .then(result => result.time)\n }\n\n // Calculate an SNRP value:\n return benchmark.then(benchMs => {\n const snrp = calcSnrpForTarget(io.random(32), benchMs, targetMs)\n log(\n `snrp for ${targetMs}ms target: ${snrp.n} ${snrp.r} ${snrp.p} based on ${benchMs}ms benchmark`\n )\n return snrp\n })\n }\n\n input.onOutput(makeSnrp)\n return stopUpdates\n },\n\n timeScrypt: (input) => () => {\n const { io, log } = input.props\n\n // Find the best timer on this platform:\n const getTime =\n typeof window !== 'undefined' &&\n window.performance &&\n typeof window.performance.now === 'function'\n ? () => window.performance.now()\n : () => Date.now()\n\n // Performs an scrypt calculation, recording the elapsed time:\n function timeScrypt(\n data,\n snrp,\n dklen = 32\n ) {\n const salt = snrp.salt_hex\n const startTime = getTime()\n log(`starting scrypt n=${snrp.n} r=${snrp.r} p=${snrp.p}`)\n return io.scrypt(data, salt, snrp.n, snrp.r, snrp.p, dklen).then(hash => {\n const time = getTime() - startTime\n log(`finished scrypt n=${snrp.n} r=${snrp.r} p=${snrp.p} in ${time}ms`)\n return { hash, time }\n })\n }\n\n // We only allow one scrypt calculation to occur at once:\n input.onOutput(serialize(timeScrypt))\n return stopUpdates\n }\n})\n","\n\n\nimport { utf8 } from '../../util/encoding.js'\n\n\n/**\n * Computes an SNRP value.\n */\nexport function makeSnrp(\n ai,\n targetMs = 2000\n) {\n return ai.props.output.scrypt.makeSnrp(targetMs)\n}\n\n/**\n * Performs an scrypt derivation.\n */\nexport function scrypt(\n ai,\n data,\n snrp\n) {\n if (typeof data === 'string') data = utf8.parse(data)\n\n return ai.props.output.scrypt.timeScrypt(data, snrp).then(value => value.hash)\n}\n\nexport const userIdSnrp = {\n salt_hex: Uint8Array.from([\n 0xb5,\n 0x86,\n 0x5f,\n 0xfb,\n 0x9f,\n 0xa7,\n 0xb3,\n 0xbf,\n 0xe4,\n 0xb2,\n 0x38,\n 0x4d,\n 0x47,\n 0xce,\n 0x83,\n 0x1e,\n 0xe2,\n 0x2a,\n 0x4a,\n 0x9d,\n 0x5c,\n 0x34,\n 0xc7,\n 0xef,\n 0x7d,\n 0x21,\n 0x46,\n 0x7c,\n 0xc7,\n 0x58,\n 0xf8,\n 0x1b\n ]),\n n: 16384,\n r: 1,\n p: 1\n}\n","\n\n\nimport { bridgifyObject } from 'yaob'\n\nimport { asEdgeBox } from '../../types/server-cleaners.js'\n\nimport { decrypt, decryptText, encrypt } from '../../util/crypto/crypto.js'\nimport { utf8 } from '../../util/encoding.js'\n\nexport function encryptDisklet(\n io,\n dataKey,\n disklet\n) {\n const out = {\n delete(path) {\n return disklet.delete(path)\n },\n\n getData(path) {\n return disklet\n .getText(path)\n .then(text => asEdgeBox(JSON.parse(text)))\n .then(box => decrypt(box, dataKey))\n },\n\n getText(path) {\n return disklet\n .getText(path)\n .then(text => asEdgeBox(JSON.parse(text)))\n .then(box => decryptText(box, dataKey))\n },\n\n list(path) {\n return disklet.list(path)\n },\n\n setData(path, data) {\n const dataCast = data // Work around `Uint8Array.from` flow bug\n return disklet.setText(\n path,\n JSON.stringify(encrypt(io, Uint8Array.from(dataCast), dataKey))\n )\n },\n\n setText(path, text) {\n return this.setData(path, utf8.parse(text))\n }\n }\n bridgifyObject(out)\n return out\n}\n","// \n\nimport { mergeDisklets, navigateDisklet } from 'disklet'\n\nimport { base16 } from 'rfc4648'\n\n\nimport { sha256 } from '../../util/crypto/hashes.js'\nimport { base58 } from '../../util/encoding.js'\nimport { encryptDisklet } from './encrypt-disklet.js'\n\n\n\n\n\nconst CHANGESET_MAX_ENTRIES = 100\n\n\n\n\n\n\n/**\n * Sets up the back-end folders needed to emulate Git on disk.\n * You probably don't want this.\n */\nexport function makeRepoPaths(\n io,\n syncKey,\n dataKey\n) {\n const baseDisklet = navigateDisklet(\n io.disklet,\n 'repos/' + base58.stringify(sha256(sha256(syncKey)))\n )\n const changesDisklet = navigateDisklet(baseDisklet, 'changes')\n const dataDisklet = navigateDisklet(baseDisklet, 'data')\n const disklet = encryptDisklet(\n io,\n dataKey,\n mergeDisklets(changesDisklet, dataDisklet)\n )\n\n return {\n dataKey,\n syncKey,\n\n baseDisklet,\n changesDisklet,\n dataDisklet,\n disklet\n }\n}\n\nexport function loadRepoStatus(\n paths\n) {\n const fallback = { lastSync: 0, lastHash: undefined }\n return paths.baseDisklet\n .getText('status.json')\n .then(text => ({ lastSync: 0, ...JSON.parse(text) }))\n .catch(e => fallback)\n}\n\n/**\n * This will save a change-set into the local storage.\n * This function ignores folder-level deletes and overwrites,\n * but those can't happen under the current rules anyhow.\n */\nexport async function saveChanges(\n disklet,\n changes\n) {\n await Promise.all(\n Object.keys(changes).map(path => {\n const json = changes[path]\n return json != null\n ? disklet.setText(path, JSON.stringify(json))\n : disklet.delete(path)\n })\n )\n}\n\n/**\n * Synchronizes the local store with the remote server.\n */\nexport async function syncRepo(\n syncClient,\n paths,\n status\n) {\n const { changesDisklet, dataDisklet, syncKey } = paths\n\n const ourChanges\n\n\n = await deepListWithLimit(changesDisklet).then(paths => {\n return Promise.all(\n paths.map(async path => ({\n path,\n json: JSON.parse(await changesDisklet.getText(path))\n }))\n )\n })\n\n const syncKeyEncoded = base16.stringify(syncKey).toLowerCase()\n\n // Send a read request if no changes present locally, otherwise bundle the\n // changes with the a update request.\n const reply = await (() => {\n // Read the repo if no changes present locally.\n if (ourChanges.length === 0) {\n return syncClient.readRepo(syncKeyEncoded, status.lastHash)\n }\n\n // Write local changes to the repo.\n const changes = {}\n for (const change of ourChanges) {\n changes[change.path] = change.json\n }\n return syncClient.updateRepo(syncKeyEncoded, status.lastHash, { changes })\n })()\n\n // Make the request:\n const { changes = {}, hash } = reply\n\n // Save the incoming changes into our `data` folder:\n await saveChanges(dataDisklet, changes)\n\n // Delete any changed keys (since the upload is done):\n await Promise.all(\n ourChanges.map(change => changesDisklet.delete(change.path))\n )\n\n // Update the repo status:\n status.lastSync = Date.now() / 1000\n if (hash != null) status.lastHash = hash\n return await paths.baseDisklet\n .setText('status.json', JSON.stringify(status))\n .then(() => ({ status, changes }))\n}\n\n/**\n * Lists all files in a disklet, recursively up to a limit.\n * Returns a list of full paths.\n */\nasync function deepListWithLimit(\n disklet,\n path = '',\n limit = CHANGESET_MAX_ENTRIES\n) {\n const list = await disklet.list(path)\n const paths = Object.keys(list).filter(path => list[path] === 'file')\n const folders = Object.keys(list).filter(path => list[path] === 'folder')\n\n // Loop over folders to get subpaths\n for (const folder of folders) {\n if (paths.length >= limit) break\n const remaining = limit - paths.length\n const subpaths = await deepListWithLimit(disklet, folder, remaining)\n paths.push(...subpaths.slice(0, remaining))\n }\n\n return paths\n}\n","// \n\nimport { navigateDisklet } from 'disklet'\nimport { base64 } from 'rfc4648'\nimport { bridgifyObject } from 'yaob'\n\n\nimport { base58 } from '../../util/encoding.js'\n\nimport { loadRepoStatus, makeRepoPaths, syncRepo } from './repo.js'\n\n\nexport async function addStorageWallet(\n ai,\n walletInfo\n) {\n const { dispatch, io, onError } = ai.props\n\n const dataKey = base64.parse(walletInfo.keys.dataKey)\n const syncKey = base64.parse(walletInfo.keys.syncKey)\n\n const paths = makeRepoPaths(io, syncKey, dataKey)\n const localDisklet = navigateDisklet(\n io.disklet,\n 'local/' + base58.stringify(base64.parse(walletInfo.id))\n )\n bridgifyObject(localDisklet)\n\n const status = await loadRepoStatus(paths)\n dispatch({\n type: 'STORAGE_WALLET_ADDED',\n payload: {\n id: walletInfo.id,\n initialState: {\n localDisklet,\n paths,\n status,\n lastChanges: []\n }\n }\n })\n\n // If we have already done a sync, let this one run in the background:\n const syncPromise = syncStorageWallet(ai, walletInfo.id)\n if (status.lastSync > 0) {\n syncPromise.catch(error => {\n const { syncKey } = walletInfo.keys\n const { lastHash } = status\n ai.props.log.error(\n `Could not sync ${syncKey} with last hash ${String(lastHash)}: ${String(\n error\n )}`\n )\n onError(error)\n })\n } else await syncPromise\n}\n\nexport function syncStorageWallet(\n ai,\n walletId\n) {\n const { dispatch, syncClient, state } = ai.props\n const { paths, status } = state.storageWallets[walletId]\n\n return syncRepo(syncClient, paths, { ...status }).then(\n ({ changes, status }) => {\n dispatch({\n type: 'STORAGE_WALLET_SYNCED',\n payload: { id: walletId, changes: Object.keys(changes), status }\n })\n return Object.keys(changes)\n }\n )\n}\n","\n\n\n\n\n\nimport { syncStorageWallet } from './storage-actions.js'\nimport {\n getStorageWalletDisklet,\n getStorageWalletLocalDisklet\n} from './storage-selectors.js'\n\n\n\n\n\n\n\n\n\n\nexport function makeStorageWalletApi(\n ai,\n walletInfo\n) {\n const { id, type, keys } = walletInfo\n\n return {\n // Broken-out key info:\n id,\n type,\n keys,\n\n // Folders:\n get disklet() {\n return getStorageWalletDisklet(ai.props.state, id)\n },\n\n get localDisklet() {\n return getStorageWalletLocalDisklet(ai.props.state, id)\n },\n\n async sync() {\n await syncStorageWallet(ai, id)\n }\n }\n}\n","\n\n\nimport { combineReducers } from 'redux'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Individual repo reducer.\n */\nconst storageWalletReducer\n\n\n = combineReducers({\n lastChanges(state = [], action) {\n if (action.type === 'STORAGE_WALLET_SYNCED') {\n const { changes } = action.payload\n return changes.length > 0 ? changes : state\n }\n return state\n },\n\n localDisklet(state = null) {\n return state\n },\n\n paths(state = null) {\n return state\n },\n\n status(\n state = { lastSync: 0, lastHash: undefined },\n action\n ) {\n return action.type === 'STORAGE_WALLET_SYNCED'\n ? action.payload.status\n : state\n }\n})\n\n/**\n * Repo list reducer.\n */\nexport const storageWallets = function storageWalletsReducer(\n state = {},\n action\n) {\n switch (action.type) {\n case 'STORAGE_WALLET_ADDED': {\n const { id, initialState } = action.payload\n const out = { ...state }\n out[id] = storageWalletReducer(initialState, { type: 'UPDATE_NEXT' })\n return out\n }\n\n case 'STORAGE_WALLET_SYNCED': {\n const { id } = action.payload\n if (state[id] != null) {\n const out = { ...state }\n out[id] = storageWalletReducer(state[id], action)\n return out\n }\n return state\n }\n }\n return state\n}\n","\n\n\n\n\nimport { hmacSha256 } from '../../util/crypto/hashes.js'\nimport { base58, utf8 } from '../../util/encoding.js'\n\nimport { encryptDisklet } from './encrypt-disklet.js'\n\nexport function getStorageWalletLastChanges(\n state,\n walletId\n) {\n return state.storageWallets[walletId].lastChanges\n}\n\nexport function getStorageWalletDisklet(\n state,\n walletId\n) {\n return state.storageWallets[walletId].paths.disklet\n}\n\nexport function getStorageWalletLocalDisklet(\n state,\n walletId\n) {\n return state.storageWallets[walletId].localDisklet\n}\n\nexport function makeStorageWalletLocalEncryptedDisklet(\n state,\n walletId,\n io\n) {\n return encryptDisklet(\n io,\n state.storageWallets[walletId].paths.dataKey,\n state.storageWallets[walletId].localDisklet\n )\n}\n\nexport function hashStorageWalletFilename(\n state,\n walletId,\n data\n) {\n const dataKey = state.storageWallets[walletId].paths.dataKey\n return base58.stringify(hmacSha256(utf8.parse(data), dataKey))\n}\n","// \n\nimport { gt, lt } from 'biggystring'\nimport { bridgifyObject } from 'yaob'\n\nimport {\n\n\n\n\n asMaybeInsufficientFundsError,\n asMaybePendingFundsError,\n asMaybeSwapAboveLimitError,\n asMaybeSwapBelowLimitError,\n asMaybeSwapCurrencyError,\n asMaybeSwapPermissionError\n} from '../../types/types.js'\nimport { fuzzyTimeout } from '../../util/promise.js'\n\n\n/**\n * Fetch quotes from all plugins, and pick the best one.\n */\nexport async function fetchSwapQuote(\n ai,\n accountId,\n request,\n opts = {}\n) {\n const { preferPluginId, disabled = {}, promoCodes = {} } = opts\n const { log } = ai.props\n\n const account = ai.props.state.accounts[accountId]\n const { swapSettings, userSettings } = account\n const swapPlugins = ai.props.state.plugins.swap\n\n log.warn(\n 'Requesting swap quotes for: ',\n {\n ...request,\n fromWallet: request.fromWallet.id,\n toWallet: request.toWallet.id\n },\n { preferPluginId, promoCodes }\n )\n\n // Invoke all the active swap plugins:\n const promises = []\n for (const pluginId of Object.keys(swapPlugins)) {\n const { enabled = true } =\n swapSettings[pluginId] != null ? swapSettings[pluginId] : {}\n\n // Start request:\n if (!enabled || disabled[pluginId]) continue\n promises.push(\n swapPlugins[pluginId]\n .fetchSwapQuote(request, userSettings[pluginId], {\n promoCode: promoCodes[pluginId]\n })\n .then(\n quote => {\n log.warn(`${pluginId} gave swap quote:`, quote)\n return quote\n },\n error => {\n log.warn(`${pluginId} gave swap error: ${String(error)}`)\n throw error\n }\n )\n )\n }\n if (promises.length < 1) throw new Error('No swap providers enabled')\n\n // Wait for the results, with error handling:\n return fuzzyTimeout(promises, 20000).then(\n quotes => {\n // Find the cheapest price:\n const bestQuote = pickBestQuote(quotes, preferPluginId, promoCodes)\n log.warn(\n `${promises.length} swap quotes requested, ${quotes.length} resolved, picked ${bestQuote.pluginId}.`\n )\n\n // Close unused quotes:\n for (const quote of quotes) {\n if (quote !== bestQuote) quote.close().catch(() => undefined)\n }\n return bridgifyObject(bestQuote)\n },\n (errors) => {\n log.warn(`All ${promises.length} swap quotes rejected.`)\n throw pickBestError(errors)\n }\n )\n}\n\n/**\n * Picks the best quote out of the available choices.\n * Exported so we can unit-test it.\n */\nexport function pickBestQuote(\n quotes,\n preferPluginId,\n promoCodes\n) {\n return quotes.reduce((a, b) => {\n // Always return quotes from the preferred provider:\n if (a.pluginId === preferPluginId) return a\n if (b.pluginId === preferPluginId) return b\n\n // Prioritize providers with active promo codes:\n const aHasPromo = promoCodes[a.pluginId] != null\n const bHasPromo = promoCodes[b.pluginId] != null\n if (aHasPromo && !bHasPromo) return a\n if (!aHasPromo && bHasPromo) return b\n\n // Prioritize accurate quotes over estimates:\n const { isEstimate: aIsEstimate = true } = a\n const { isEstimate: bIsEstimate = true } = b\n if (aIsEstimate && !bIsEstimate) return b\n if (!aIsEstimate && bIsEstimate) return a\n\n // Prefer the best rate:\n const aRate = Number(a.toNativeAmount) / Number(a.fromNativeAmount)\n const bRate = Number(b.toNativeAmount) / Number(b.fromNativeAmount)\n return bRate > aRate ? b : a\n })\n}\n\n/**\n * Picks the best error out of the available choices.\n */\nfunction pickBestError(errors) {\n return errors.reduce((a, b) => {\n // Return the highest-ranked error:\n const diff = rankError(a) - rankError(b)\n if (diff > 0) return a\n if (diff < 0) return b\n\n // Same ranking, so use amounts to distinguish:\n const aBelow = asMaybeSwapBelowLimitError(a)\n const bBelow = asMaybeSwapBelowLimitError(b)\n if (aBelow != null && bBelow != null) {\n return lt(aBelow.nativeMin, bBelow.nativeMin) ? aBelow : bBelow\n }\n const aAbove = asMaybeSwapAboveLimitError(a)\n const bAbove = asMaybeSwapAboveLimitError(b)\n if (aAbove != null && bAbove != null) {\n return gt(aAbove.nativeMax, bAbove.nativeMax) ? aAbove : bAbove\n }\n\n // Otherwise, just pick one:\n return a\n })\n}\n\n/**\n * Ranks different error codes by priority.\n */\nfunction rankError(error) {\n if (error == null) return 0\n if (asMaybeInsufficientFundsError(error) != null) return 6\n if (asMaybePendingFundsError(error) != null) return 6\n if (asMaybeSwapBelowLimitError(error) != null) return 5\n if (asMaybeSwapAboveLimitError(error) != null) return 4\n if (asMaybeSwapPermissionError(error) != null) return 3\n if (asMaybeSwapCurrencyError(error) != null) return 2\n return 1\n}\n","// \n\n\n\n\n\n\n\n\n\n\n\nexport function makeNativeBridge(\n doCall\n) {\n const list = makePendingList()\n return {\n call(name, ...args) {\n return new Promise((resolve, reject) => {\n doCall(list.add({ resolve, reject }), name, args)\n })\n },\n resolve(id, value) {\n list.grab(id).resolve(value)\n },\n reject(id, message) {\n list.grab(id).reject(new Error(message))\n }\n }\n}\n\n/**\n * A pending call into native code.\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction makePendingList() {\n const dummyCall = { resolve() {}, reject() {} }\n let lastId = 0\n\n if (typeof Map !== 'undefined') {\n // Better map-based version:\n const map = new Map()\n return {\n add(call) {\n const id = ++lastId\n map.set(id, call)\n return id\n },\n grab(id) {\n const call = map.get(id)\n if (call == null) return dummyCall\n map.delete(id)\n return call\n }\n }\n }\n\n // Slower object-based version:\n const map = {}\n return {\n add(call) {\n const id = ++lastId\n map[String(id)] = call\n return id\n },\n grab(id) {\n const call = map[String(id)]\n if (call == null) return dummyCall\n delete map[String(id)]\n return call\n }\n }\n}\n","// \n\n/**\n * Object.assign\n */\nfunction assign(out) {\n if (out == null) {\n throw new TypeError('Cannot convert undefined or null to object')\n }\n out = Object(out)\n\n for (let i = 1; i < arguments.length; ++i) {\n const from = arguments[i]\n if (from == null) continue\n for (const key of Object.keys(from)) out[key] = from[key]\n }\n return out\n}\n\n/**\n * Array.fill\n */\nfunction fill(value, start, end) {\n const length = this.length\n function clamp(endpoint) {\n return endpoint < 0\n ? Math.max(length + endpoint, 0)\n : Math.min(endpoint, length)\n }\n const first = start != null ? clamp(start) : 0\n const last = end != null ? clamp(end) : length\n\n for (let i = first; i < last; ++i) {\n this[i] = value\n }\n return this\n}\n\n/**\n * Array.find\n */\nfunction find(\n test,\n testThis\n) {\n for (let i = 0; i < this.length; ++i) {\n const value = this[i]\n if (test.call(testThis, value, i, this)) {\n return value\n }\n }\n}\n\n/**\n * Array.includes\n */\nfunction includes(target) {\n return Array.prototype.indexOf.call(this, target) >= 0\n}\n\n/**\n * Adds a non-enumerable method to an object.\n */\nfunction safeAdd(object, name, value) {\n if (typeof object[name] !== 'function') {\n Object.defineProperty(object, name, {\n configurable: true,\n writable: true,\n value\n })\n }\n}\n\n// Perform the polyfill:\nsafeAdd(Object, 'assign', assign)\nsafeAdd(Array.prototype, 'fill', fill)\nsafeAdd(Array.prototype, 'find', find)\nsafeAdd(Array.prototype, 'includes', includes)\nsafeAdd(Uint8Array.prototype, 'fill', Array.prototype.fill)\n"," function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }\n\n\nimport { base64 } from 'rfc4648'\n\nimport { asOtpErrorPayload, asPasswordErrorPayload } from './server-cleaners.js'\n\n\n/*\n * These are errors the core knows about.\n *\n * The GUI should handle these errors in an \"intelligent\" way, such as by\n * displaying a localized error message or asking the user for more info.\n * All these errors have a `name` field, which the GUI can use to select\n * the appropriate response.\n *\n * Other errors are possible, of course, since the Javascript language\n * itself can generate exceptions. Those errors won't have a `type` field,\n * and the GUI should just show them with a stack trace & generic message,\n * since the program has basically crashed at that point.\n */\n\n/**\n * Trying to spend an uneconomically small amount of money.\n */\nexport class DustSpendError extends Error {\n \n\n constructor(message = 'Please send a larger amount') {\n super(message)\n this.name = 'DustSpendError'\n }\n}\n\n\n\n\n\n\n\n\n/**\n * Trying to spend more money than the wallet contains.\n */\nexport class InsufficientFundsError extends Error {\n \n\n\n\n constructor(opts = {}) {\n if (typeof opts === 'string') {\n // Some plugins pass a message instead of a currency code:\n if (opts.length > 5) {\n super(opts)\n } else {\n super(`Insufficient ${opts}`)\n this.currencyCode = opts\n }\n } else {\n const { currencyCode, networkFee } = opts\n super(`Insufficient ${_nullishCoalesce(currencyCode, () => ( 'funds'))}`)\n this.currencyCode = currencyCode\n this.networkFee = networkFee\n }\n this.name = 'InsufficientFundsError'\n }\n}\n\n/**\n * Could not reach the server at all.\n */\nexport class NetworkError extends Error {\n \n\n constructor(message = 'Cannot reach the network') {\n super(message)\n this.name = 'NetworkError'\n }\n}\n\n/**\n * Attempting to create a MakeSpend without specifying an amount of currency to send\n */\nexport class NoAmountSpecifiedError extends Error {\n \n\n constructor(message = 'Unable to create zero-amount transaction.') {\n super(message)\n this.name = 'NoAmountSpecifiedError'\n }\n}\n\n/**\n * The endpoint on the server is obsolete, and the app needs to be upgraded.\n */\nexport class ObsoleteApiError extends Error {\n \n\n constructor(message = 'The application is too old. Please upgrade.') {\n super(message)\n this.name = 'ObsoleteApiError'\n }\n}\n\n/**\n * The OTP token was missing / incorrect.\n *\n * The error object should include a `resetToken` member,\n * which can be used to reset OTP protection on the account.\n *\n * The error object may include a `resetDate` member,\n * which indicates that an OTP reset is already pending,\n * and when it will complete.\n */\nexport class OtpError extends Error {\n \n\n\n\n\n\n\n\n\n constructor(resultsJson, message = 'Invalid OTP token') {\n super(message)\n this.name = 'OtpError'\n this.reason = 'otp'\n\n try {\n const clean = asOtpErrorPayload(resultsJson)\n\n // This should usually be present:\n if (clean.login_id != null) {\n this.loginId = base64.stringify(clean.login_id)\n }\n\n // Use this to request an OTP reset (if enabled):\n if (clean.otp_reset_auth != null) {\n this.resetToken = clean.otp_reset_auth\n }\n\n // We might also get a different reason:\n if (clean.reason === 'ip') this.reason = 'ip'\n\n // Set if an OTP reset has already been requested:\n if (clean.otp_timeout_date != null) {\n this.resetDate = new Date(clean.otp_timeout_date)\n }\n\n // We might also get a login voucher:\n if (clean.voucher_activates != null) {\n this.voucherActivates = clean.voucher_activates\n }\n if (clean.voucher_auth != null) {\n this.voucherAuth = base64.stringify(clean.voucher_auth)\n }\n if (clean.voucher_id != null) this.voucherId = clean.voucher_id\n } catch (e) {}\n }\n}\n\n/**\n * The provided authentication is incorrect.\n *\n * Reasons could include:\n * - Password login: wrong password\n * - PIN login: wrong PIN\n * - Recovery login: wrong answers\n *\n * The error object may include a `wait` member,\n * which is the number of seconds the user must wait before trying again.\n */\nexport class PasswordError extends Error {\n \n // seconds\n\n constructor(resultsJson, message = 'Invalid password') {\n super(message)\n this.name = 'PasswordError'\n\n try {\n const clean = asPasswordErrorPayload(resultsJson)\n this.wait = clean.wait_seconds\n } catch (e) {}\n }\n}\n\n/**\n * Trying to spend funds that are not yet confirmed.\n */\nexport class PendingFundsError extends Error {\n \n\n constructor(message = 'Not enough confirmed funds') {\n super(message)\n this.name = 'PendingFundsError'\n }\n}\n\n/**\n * Attempting to shape shift between two wallets of same currency.\n */\nexport class SameCurrencyError extends Error {\n \n\n constructor(message = 'Wallets can not be the same currency') {\n super(message)\n this.name = 'SameCurrencyError'\n }\n}\n\n/**\n * Trying to spend to an address of the source wallet\n */\nexport class SpendToSelfError extends Error {\n \n\n constructor(message = 'Spending to self') {\n super(message)\n this.name = 'SpendToSelfError'\n }\n}\n\n/**\n * Trying to swap an amount that is either too low or too high.\n * @param nativeMax the maximum supported amount, in the \"from\" currency.\n */\nexport class SwapAboveLimitError extends Error {\n \n\n\n\n constructor(swapInfo, nativeMax) {\n super('Amount is too high')\n this.name = 'SwapAboveLimitError'\n this.pluginId = swapInfo.pluginId\n this.nativeMax = nativeMax\n }\n}\n\n/**\n * Trying to swap an amount that is either too low or too high.\n * @param nativeMin the minimum supported amount, in the \"from\" currency.\n */\nexport class SwapBelowLimitError extends Error {\n \n\n\n\n constructor(swapInfo, nativeMin) {\n super('Amount is too low')\n this.name = 'SwapBelowLimitError'\n this.pluginId = swapInfo.pluginId\n this.nativeMin = nativeMin\n }\n}\n\n/**\n * The swap plugin does not support this currency pair.\n */\nexport class SwapCurrencyError extends Error {\n \n\n\n\n\n constructor(\n swapInfo,\n fromCurrency,\n toCurrency\n ) {\n super(\n `${swapInfo.displayName} does not support ${fromCurrency} to ${toCurrency}`\n )\n this.name = 'SwapCurrencyError'\n this.pluginId = swapInfo.pluginId\n this.fromCurrency = fromCurrency\n this.toCurrency = toCurrency\n }\n}\n\n\n\n\n\n\n/**\n * The user is not allowed to swap these coins for some reason\n * (no KYC, restricted IP address, etc...).\n * @param reason A string giving the reason for the denial.\n * - 'geoRestriction': The IP address is in a restricted region\n * - 'noVerification': The user needs to provide KYC credentials\n * - 'needsActivation': The user needs to log into the service.\n */\nexport class SwapPermissionError extends Error {\n \n\n\n\n constructor(swapInfo, reason) {\n if (reason != null) super(reason)\n else super('You are not allowed to make this trade')\n this.name = 'SwapPermissionError'\n this.pluginId = swapInfo.pluginId\n this.reason = reason\n }\n}\n\n/**\n * Cannot find a login with that id.\n *\n * Reasons could include:\n * - Password login: wrong username\n * - PIN login: wrong PIN key\n * - Recovery login: wrong username, or wrong recovery key\n */\nexport class UsernameError extends Error {\n \n\n constructor(message = 'Invalid username') {\n super(message)\n this.name = 'UsernameError'\n }\n}\n\nfunction asMaybeError(name) {\n return function asError(raw) {\n if (raw instanceof Error && raw.name === name) {\n const typeHack = raw\n return typeHack\n }\n }\n}\n\nexport const asMaybeDustSpendError = asMaybeError(\n 'DustSpendError'\n)\nexport const asMaybeInsufficientFundsError = asMaybeError(\n 'InsufficientFundsError'\n)\nexport const asMaybeNetworkError = asMaybeError(\n 'NetworkError'\n)\nexport const asMaybeNoAmountSpecifiedError = asMaybeError(\n 'NoAmountSpecifiedError'\n)\nexport const asMaybeObsoleteApiError = asMaybeError(\n 'ObsoleteApiError'\n)\nexport const asMaybeOtpError = asMaybeError(\n 'OtpError'\n)\nexport const asMaybePasswordError = asMaybeError(\n 'PasswordError'\n)\nexport const asMaybePendingFundsError = asMaybeError(\n 'PendingFundsError'\n)\nexport const asMaybeSameCurrencyError = asMaybeError(\n 'SameCurrencyError'\n)\nexport const asMaybeSpendToSelfError = asMaybeError(\n 'SpendToSelfError'\n)\nexport const asMaybeSwapAboveLimitError = asMaybeError(\n 'SwapAboveLimitError'\n)\nexport const asMaybeSwapBelowLimitError = asMaybeError(\n 'SwapBelowLimitError'\n)\nexport const asMaybeSwapCurrencyError = asMaybeError(\n 'SwapCurrencyError'\n)\nexport const asMaybeSwapPermissionError = asMaybeError(\n 'SwapPermissionError'\n)\nexport const asMaybeUsernameError = asMaybeError(\n 'UsernameError'\n)\n","// \n\nimport {\n\n asArray,\n asDate,\n asNumber,\n asObject,\n asOptional,\n asString,\n asValue\n} from 'cleaners'\n\nimport {\n asBase32,\n asBase64,\n asEdgeBox,\n asEdgeSnrp,\n asRecovery2Auth\n} from './server-cleaners.js'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexport const asVoucherDump = asObject({\n // Identity:\n loginId: asBase64,\n voucherAuth: asBase64,\n voucherId: asString,\n\n // Login capability:\n created: asDate,\n activates: asDate, // Automatically becomes approved on this date\n status: asValue('pending', 'approved', 'rejected'),\n\n // Information about the login:\n ip: asString,\n ipDescription: asString,\n deviceDescription: asOptional(asString)\n})\n\nexport const asLoginDump = asObject({\n // Identity:\n appId: asString,\n created: raw => (raw == null ? new Date() : asDate(raw)),\n loginId: asBase64,\n\n // Nested logins:\n children: asOptional(\n asArray(raw => asLoginDump(raw)),\n []\n ),\n parentBox: asOptional(asEdgeBox),\n parentId: () => undefined,\n\n // 2-factor login:\n otpKey: asOptional(asBase32),\n otpResetAuth: asOptional(asString),\n otpResetDate: asOptional(asDate),\n otpTimeout: asOptional(asNumber),\n\n // Password login:\n passwordAuth: asOptional(asBase64),\n passwordAuthBox: asOptional(asEdgeBox),\n passwordAuthSnrp: asOptional(asEdgeSnrp),\n passwordBox: asOptional(asEdgeBox),\n passwordKeySnrp: asOptional(asEdgeSnrp),\n\n // PIN v2 login:\n pin2Id: asOptional(asBase64),\n pin2Auth: asOptional(asBase64),\n pin2Box: asOptional(asEdgeBox),\n pin2KeyBox: asOptional(asEdgeBox),\n pin2TextBox: asOptional(asEdgeBox),\n\n // Recovery v2 login:\n recovery2Id: asOptional(asBase64),\n recovery2Auth: asOptional(asRecovery2Auth),\n question2Box: asOptional(asEdgeBox),\n recovery2Box: asOptional(asEdgeBox),\n recovery2KeyBox: asOptional(asEdgeBox),\n\n // Secret-key login:\n loginAuth: asOptional(asBase64),\n loginAuthBox: asOptional(asEdgeBox),\n\n // Keys and assorted goodies:\n keyBoxes: asOptional(asArray(asEdgeBox), []),\n mnemonicBox: asOptional(asEdgeBox),\n rootKeyBox: asOptional(asEdgeBox),\n syncKeyBox: asOptional(asEdgeBox),\n vouchers: asOptional(asArray(asVoucherDump), []),\n\n // Obsolete:\n pinBox: asOptional(asEdgeBox),\n pinId: asOptional(asString),\n pinKeyBox: asOptional(asEdgeBox)\n})\n\nexport const asFakeUser = asObject({\n lastLogin: asOptional(asDateObject),\n loginId: asBase64,\n loginKey: asBase64,\n repos: asObject(asObject(asEdgeBox)),\n server: asLoginDump,\n username: asString\n})\n\nexport const asFakeUsers = asArray(asFakeUser)\n\nfunction asDateObject(raw) {\n if (raw instanceof Date) return raw\n throw new TypeError('Expecting a Date')\n}\n","// \n\nimport {\n\n asArray,\n asBoolean,\n asCodec,\n asDate,\n asNumber,\n asObject,\n asOptional,\n asString,\n asUnknown,\n asValue\n} from 'cleaners'\nimport { base16, base32, base64 } from 'rfc4648'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * A string of hex-encoded binary data.\n */\nexport const asBase16 = asCodec(\n raw => base16.parse(asString(raw)),\n clean => base16.stringify(clean).toLowerCase()\n)\n\n/**\n * A string of base32-encoded binary data.\n */\nexport const asBase32 = asCodec(\n raw => base32.parse(asString(raw), { loose: true }),\n clean => base32.stringify(clean, { pad: false })\n)\n\n/**\n * A string of base64-encoded binary data.\n */\nexport const asBase64 = asCodec(\n raw => base64.parse(asString(raw)),\n clean => base64.stringify(clean)\n)\n\n// ---------------------------------------------------------------------\n// public Edge types\n// ---------------------------------------------------------------------\n\nexport const asEdgePendingVoucher = asObject({\n voucherId: asString,\n activates: asDate,\n created: asDate,\n ip: asString,\n ipDescription: asString,\n deviceDescription: asOptional(asString)\n})\n\nconst asEdgeRecoveryQuestionChoice = asObject(\n {\n min_length: asNumber,\n category: asValue('address', 'must', 'numeric', 'recovery2', 'string'),\n question: asString\n }\n)\n\n// ---------------------------------------------------------------------\n// internal Edge types\n// ---------------------------------------------------------------------\n\nexport const asEdgeBox = asObject({\n encryptionType: asNumber,\n data_base64: asString,\n iv_hex: asString\n})\n\nexport const asEdgeSnrp = asObject({\n salt_hex: asBase16,\n n: asNumber,\n r: asNumber,\n p: asNumber\n})\n\nexport const asEdgeLobbyRequest = asObject({\n loginRequest: asOptional(asObject({ appId: asString }).withRest),\n publicKey: asBase64,\n timeout: asOptional(asNumber)\n}).withRest\n\nexport const asEdgeLobbyReply = asObject({\n publicKey: asBase64,\n box: asEdgeBox\n})\n\n/**\n * An array of base64-encoded hashed recovery answers.\n */\nexport const asRecovery2Auth = asArray(asBase64)\n\n// ---------------------------------------------------------------------\n// top-level request & response bodies\n// ---------------------------------------------------------------------\n\nexport const asLoginRequestBody = asObject({\n // The request payload:\n data: asUnknown,\n\n // Common fields for all login methods:\n deviceDescription: asOptional(asString),\n otp: asOptional(asString),\n voucherId: asOptional(asString),\n voucherAuth: asOptional(asBase64),\n\n // Secret-key login:\n loginId: asOptional(asBase64),\n loginAuth: asOptional(asBase64),\n\n // Password login:\n userId: asOptional(asBase64),\n passwordAuth: asOptional(asBase64),\n\n // PIN login:\n pin2Id: asOptional(asBase64),\n pin2Auth: asOptional(asBase64),\n\n // Recovery login:\n recovery2Id: asOptional(asBase64),\n recovery2Auth: asOptional(asRecovery2Auth),\n\n // Messages:\n loginIds: asOptional(asArray(asBase64)),\n\n // OTP reset:\n otpResetAuth: asOptional(asString),\n\n // Legacy:\n did: asOptional(asString),\n l1: asOptional(asBase64),\n lp1: asOptional(asBase64),\n lpin1: asOptional(asBase64),\n lra1: asOptional(asBase64),\n recoveryAuth: asOptional(asBase64) // lra1\n})\n\nexport const asLoginResponseBody = asObject({\n // The response payload:\n results: asOptional(asUnknown),\n\n // What type of response is this (success or failure)?:\n status_code: asNumber,\n message: asString\n})\n\n// ---------------------------------------------------------------------\n// request payloads\n// ---------------------------------------------------------------------\n\nexport const asChangeOtpPayload = asObject({\n otpTimeout: asOptional(asNumber, 7 * 24 * 60 * 60), // seconds\n otpKey: asBase32\n})\n\nexport const asChangePasswordPayload = asObject(\n {\n passwordAuth: asBase64,\n passwordAuthBox: asEdgeBox,\n passwordAuthSnrp: asEdgeSnrp,\n passwordBox: asEdgeBox,\n passwordKeySnrp: asEdgeSnrp\n }\n)\n\nexport const asChangePin2Payload = asObject({\n pin2Id: asOptional(asBase64),\n pin2Auth: asOptional(asBase64),\n pin2Box: asOptional(asEdgeBox),\n pin2KeyBox: asOptional(asEdgeBox),\n pin2TextBox: asEdgeBox\n})\n\nexport const asChangeRecovery2Payload = asObject(\n {\n recovery2Id: asBase64,\n recovery2Auth: asRecovery2Auth,\n recovery2Box: asEdgeBox,\n recovery2KeyBox: asEdgeBox,\n question2Box: asEdgeBox\n }\n)\n\nexport const asChangeSecretPayload = asObject({\n loginAuthBox: asEdgeBox,\n loginAuth: asBase64\n})\n\nexport const asChangeVouchersPayload = asObject(\n {\n approvedVouchers: asOptional(asArray(asString)),\n rejectedVouchers: asOptional(asArray(asString))\n }\n)\n\nexport const asCreateKeysPayload = asObject({\n keyBoxes: asArray(asEdgeBox),\n newSyncKeys: asOptional(asArray(asString), [])\n})\n\nexport const asCreateLoginPayload = asObject({\n appId: asString,\n loginId: asBase64,\n parentBox: asOptional(asEdgeBox)\n}).withRest\n\n// ---------------------------------------------------------------------\n// response payloads\n// ---------------------------------------------------------------------\n\nexport const asLobbyPayload = asObject({\n request: asEdgeLobbyRequest,\n replies: asArray(asEdgeLobbyReply)\n})\n\nexport const asLoginPayload = asObject({\n // Identity:\n appId: asString,\n created: asDate,\n loginId: asBase64,\n userId: asOptional(asBase64),\n\n // Nested logins:\n children: asOptional(asArray(raw => asLoginPayload(raw))),\n parentBox: asOptional(asEdgeBox),\n\n // 2-factor login:\n otpKey: asOptional(asBase32),\n otpResetDate: asOptional(asDate),\n otpTimeout: asOptional(asNumber),\n\n // Password login:\n passwordAuthBox: asOptional(asEdgeBox),\n passwordAuthSnrp: asOptional(asEdgeSnrp),\n passwordBox: asOptional(asEdgeBox),\n passwordKeySnrp: asOptional(asEdgeSnrp),\n\n // PIN v2 login:\n pin2Box: asOptional(asEdgeBox),\n pin2KeyBox: asOptional(asEdgeBox),\n pin2TextBox: asOptional(asEdgeBox),\n\n // Recovery v2 login:\n question2Box: asOptional(asEdgeBox),\n recovery2Box: asOptional(asEdgeBox),\n recovery2KeyBox: asOptional(asEdgeBox),\n\n // Secret-key login:\n loginAuthBox: asOptional(asEdgeBox),\n\n // Voucher login:\n pendingVouchers: asOptional(asArray(asEdgePendingVoucher), []),\n\n // Resources:\n keyBoxes: asOptional(asArray(asEdgeBox)),\n mnemonicBox: asOptional(asEdgeBox),\n rootKeyBox: asOptional(asEdgeBox),\n syncKeyBox: asOptional(asEdgeBox)\n})\n\nexport const asMessagesPayload = asArray(\n asObject({\n loginId: asBase64,\n otpResetPending: asOptional(asBoolean, false),\n pendingVouchers: asOptional(asArray(asEdgePendingVoucher), []),\n recovery2Corrupt: asOptional(asBoolean, false)\n })\n)\n\nexport const asOtpErrorPayload = asObject({\n login_id: asOptional(asBase64),\n otp_reset_auth: asOptional(asString),\n otp_timeout_date: asOptional(asDate),\n reason: asOptional(asString),\n voucher_activates: asOptional(asDate),\n voucher_auth: asOptional(asBase64),\n voucher_id: asOptional(asString)\n})\n\nexport const asOtpResetPayload = asObject({\n otpResetDate: asDate\n})\n\nexport const asPasswordErrorPayload = asObject({\n wait_seconds: asOptional(asNumber)\n})\n\nexport const asQuestionChoicesPayload = asArray(\n asEdgeRecoveryQuestionChoice\n)\n\nexport const asRecovery2InfoPayload = asObject({\n question2Box: asEdgeBox\n})\n\nexport const asUsernameInfoPayload = asObject({\n // Password login:\n passwordAuthSnrp: asOptional(asEdgeSnrp),\n\n // Recovery v1 login:\n questionBox: asOptional(asEdgeBox),\n questionKeySnrp: asOptional(asEdgeSnrp),\n recoveryAuthSnrp: asOptional(asEdgeSnrp)\n})\n","\n\n\n\n\n\n\n\n\n\n\nexport * from './error.js'\n\n// ---------------------------------------------------------------------\n// helper types\n// ---------------------------------------------------------------------\n\n/** A JSON object (as opposed to an array or primitive). */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","// \n\nconst TYPED_ARRAYS = {\n '[object Float32Array]': true,\n '[object Float64Array]': true,\n '[object Int16Array]': true,\n '[object Int32Array]': true,\n '[object Int8Array]': true,\n '[object Uint16Array]': true,\n '[object Uint32Array]': true,\n '[object Uint8Array]': true,\n '[object Uint8ClampedArray]': true\n}\n\n/**\n * Compares two objects that are already known to have a common `[[Class]]`.\n */\nfunction compareObjects(a, b, type) {\n // User-created objects:\n if (type === '[object Object]') {\n const proto = Object.getPrototypeOf(a)\n if (proto !== Object.getPrototypeOf(b)) return false\n\n const keys = Object.getOwnPropertyNames(a)\n if (keys.length !== Object.getOwnPropertyNames(b).length) return false\n\n // We know that both objects have the same number of properties,\n // so if every property in `a` has a matching property in `b`,\n // the objects must be identical, regardless of key order.\n for (const key of keys) {\n if (\n !Object.prototype.hasOwnProperty.call(b, key) ||\n !compare(a[key], b[key])\n ) {\n return false\n }\n }\n return true\n }\n\n // Arrays:\n if (type === '[object Array]') {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; ++i) {\n if (!compare(a[i], b[i])) return false\n }\n return true\n }\n\n // Javascript dates:\n if (type === '[object Date]') {\n return a.getTime() === b.getTime()\n }\n\n // Typed arrays:\n if (TYPED_ARRAYS[type]) {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i]) return false\n }\n return true\n }\n\n // We don't even try comparing anything else:\n return false\n}\n\n/**\n * Returns true if two Javascript values are equal in value.\n */\nexport function compare(a, b) {\n if (a === b) return true\n\n // Fast path for primitives:\n if (typeof a !== 'object') return false\n if (typeof b !== 'object') return false\n\n // If these are objects, the internal `[[Class]]` properties must match:\n const type = Object.prototype.toString.call(a)\n if (type !== Object.prototype.toString.call(b)) return false\n\n return compareObjects(a, b, type)\n}\n","// \n\nimport aesjs from 'aes-js'\nimport { base16, base64 } from 'rfc4648'\n\n\n\nimport { utf8 } from '../encoding.js'\nimport { sha256 } from './hashes.js'\nimport { verifyData } from './verify.js'\n\nconst AesCbc = aesjs.ModeOfOperation.cbc\n\n/**\n * Some of our data contains terminating null bytes due to an old bug,\n * so this function handles text decryption as a special case.\n */\nexport function decryptText(box, key) {\n const data = decrypt(box, key)\n if (data[data.length - 1] === 0) {\n return utf8.stringify(data.subarray(0, -1))\n }\n return utf8.stringify(data)\n}\n\n/**\n * @param box an Airbitz JSON encryption box\n * @param key a key, as an ArrayBuffer\n */\nexport function decrypt(box, key) {\n // Check JSON:\n if (box.encryptionType !== 0) {\n throw new Error('Unknown encryption type')\n }\n const iv = base16.parse(box.iv_hex)\n const ciphertext = base64.parse(box.data_base64)\n\n // Decrypt:\n const cipher = new AesCbc(key, iv)\n const raw = cipher.decrypt(ciphertext)\n\n // Calculate data locations:\n const headerStart = 1\n const headerSize = raw[0]\n const dataStart = headerStart + headerSize + 4\n const dataSize =\n (raw[dataStart - 4] << 24) |\n (raw[dataStart - 3] << 16) |\n (raw[dataStart - 2] << 8) |\n raw[dataStart - 1]\n const footerStart = dataStart + dataSize + 1\n const footerSize = raw[footerStart - 1]\n const hashStart = footerStart + footerSize\n const paddingStart = hashStart + 32\n\n // Verify SHA-256 checksum:\n const hash = sha256(raw.subarray(0, hashStart))\n if (!verifyData(hash, raw.subarray(hashStart, paddingStart))) {\n throw new Error('Invalid checksum')\n }\n\n // Verify pkcs7 padding:\n const padding = pkcs7(paddingStart)\n if (!verifyData(padding, raw.subarray(paddingStart))) {\n throw new Error('Invalid PKCS7 padding')\n }\n\n // Return the payload:\n return raw.subarray(dataStart, dataStart + dataSize)\n}\n\n/**\n * @param payload an ArrayBuffer of data\n * @param key a key, as an ArrayBuffer\n */\nexport function encrypt(\n io,\n data,\n key\n) {\n // Calculate data locations:\n const headerStart = 1\n const headerSize = io.random(1)[0] & 0x1f\n const dataStart = headerStart + headerSize + 4\n const dataSize = data.length\n const footerStart = dataStart + dataSize + 1\n const footerSize = io.random(1)[0] & 0x1f\n const hashStart = footerStart + footerSize\n const paddingStart = hashStart + 32\n\n // Initialize the buffer with padding:\n const padding = pkcs7(paddingStart)\n const raw = new Uint8Array(paddingStart + padding.length)\n raw.set(padding, paddingStart)\n\n // Add header:\n raw[0] = headerSize\n raw.set(io.random(headerSize), headerStart)\n\n // Add payload:\n raw[dataStart - 4] = (dataSize >> 24) & 0xff\n raw[dataStart - 3] = (dataSize >> 16) & 0xff\n raw[dataStart - 2] = (dataSize >> 8) & 0xff\n raw[dataStart - 1] = dataSize & 0xff\n raw.set(data, dataStart)\n\n // Add footer:\n raw[footerStart - 1] = footerSize\n raw.set(io.random(footerSize), footerStart)\n\n // Add SHA-256 checksum:\n raw.set(sha256(raw.subarray(0, hashStart)), hashStart)\n\n // Encrypt to JSON:\n const iv = io.random(16)\n const cipher = new AesCbc(key, iv)\n const ciphertext = cipher.encrypt(raw)\n return {\n encryptionType: 0,\n iv_hex: base16.stringify(iv),\n data_base64: base64.stringify(ciphertext)\n }\n}\n\n/**\n * Generates the pkcs7 padding data that should be appended to\n * data of a particular length.\n */\nfunction pkcs7(length) {\n const out = new Uint8Array(16 - (length & 0xf))\n for (let i = 0; i < out.length; ++i) out[i] = out.length\n return out\n}\n","// \n\nimport Transaction from 'ethereumjs-tx'\nimport { privateToAddress, toChecksumAddress } from 'ethereumjs-util'\n\n\n\n/**\n * This function needs to live inside the webpack bundle\n * to produce the right `Buffer` type.\n */\nfunction hexToBuffer(hex) {\n return Buffer.from(hex.replace(/^0x/, ''), 'hex')\n}\n\nexport function ethereumKeyToAddress(key) {\n try {\n const addressBytes = privateToAddress(hexToBuffer(key))\n return toChecksumAddress(addressBytes.toString('hex'))\n } catch (e) {\n return 'invalid_private_key'\n }\n}\n\nexport function signEthereumTransaction(\n ethereumKey,\n transaction\n) {\n const tx = new Transaction(transaction)\n tx.sign(hexToBuffer(ethereumKey))\n return tx.serialize().toString('hex')\n}\n","// \n\nimport hashjs from 'hash.js'\n\nexport function hmacSha1(data, key) {\n const hmac = hashjs.hmac(hashjs.sha1, key)\n return Uint8Array.from(hmac.update(data).digest())\n}\n\nexport function hmacSha256(data, key) {\n const hmac = hashjs.hmac(hashjs.sha256, key)\n return Uint8Array.from(hmac.update(data).digest())\n}\n\nexport function hmacSha512(data, key) {\n const hmac = hashjs.hmac(hashjs.sha512, key)\n return Uint8Array.from(hmac.update(data).digest())\n}\n\nexport function sha256(data) {\n const hash = hashjs.sha256()\n return Uint8Array.from(hash.update(data).digest())\n}\n","// \n\nimport { hmacSha1 } from './hashes.js'\n\nexport function numberToBe64(number) {\n const high = Math.floor(number / 0x100000000)\n return new Uint8Array([\n (high >> 24) & 0xff,\n (high >> 16) & 0xff,\n (high >> 8) & 0xff,\n high & 0xff,\n (number >> 24) & 0xff,\n (number >> 16) & 0xff,\n (number >> 8) & 0xff,\n number & 0xff\n ])\n}\n\n/**\n * Implements the rfc4226 HOTP specification.\n * @param {*} secret The secret value, K, from rfc4226\n * @param {*} counter The counter, C, from rfc4226\n * @param {*} digits The number of digits to generate\n */\nexport function hotp(\n secret,\n counter,\n digits\n) {\n const hmac = hmacSha1(numberToBe64(counter), secret)\n\n const offset = hmac[19] & 0xf\n const p =\n ((hmac[offset] & 0x7f) << 24) |\n (hmac[offset + 1] << 16) |\n (hmac[offset + 2] << 8) |\n hmac[offset + 3]\n const text = p.toString()\n\n const padding = Array(digits).join('0')\n return (padding + text).slice(-digits)\n}\n\n/**\n * Generates an HOTP code based on the current time.\n */\nexport function totp(\n secret,\n now = Date.now() / 1000\n) {\n return hotp(secret, now / 30, 6)\n}\n\n/**\n * Validates a TOTP code based on the current time,\n * within an adjustable range.\n */\nexport function checkTotp(\n secret,\n otp,\n opts = {}\n) {\n const { now = Date.now() / 1000, spread = 1 } = opts\n const index = now / 30\n\n // Try the middle:\n if (otp === hotp(secret, index, 6)) return true\n\n // Spiral outwards:\n for (let i = 1; i <= spread; ++i) {\n if (otp === hotp(secret, index - i, 6)) return true\n if (otp === hotp(secret, index + i, 6)) return true\n }\n return false\n}\n","// \n\nimport scryptJs from 'scrypt-js'\n\nexport function scrypt(\n data,\n salt,\n n,\n r,\n p,\n dklen\n) {\n return new Promise((resolve, reject) => {\n // The scrypt library will crash if it gets a Uint8Array > 64 bytes:\n const copy = []\n for (let i = 0; i < data.length; ++i) copy[i] = data[i]\n\n scryptJs(copy, salt, n, r, p, dklen, (error, progress, key) => {\n if (error != null) return reject(error)\n if (key != null) return resolve(Uint8Array.from(key))\n })\n })\n}\n","// \n\n/**\n * Compares two byte arrays without data-dependent branches.\n * Returns true if they match.\n */\nexport function verifyData(a, b) {\n const length = a.length\n if (length !== b.length) return false\n\n let out = 0\n for (let i = 0; i < length; ++i) out |= a[i] ^ b[i]\n return out === 0\n}\n","// \n\nimport baseX from 'base-x'\n\nconst base58Codec = baseX(\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n)\n\nexport const base58 = {\n parse(text) {\n return base58Codec.decode(text)\n },\n stringify(data) {\n return base58Codec.encode(data)\n }\n}\n\nexport const utf8 = {\n parse(text) {\n const byteString = encodeURI(text)\n const out = new Uint8Array(byteString.length)\n\n // Treat each character as a byte, except for %XX escape sequences:\n let di = 0 // Destination index\n for (let i = 0; i < byteString.length; ++i) {\n const c = byteString.charCodeAt(i)\n if (c === 0x25) {\n out[di++] = parseInt(byteString.slice(i + 1, i + 3), 16)\n i += 2\n } else {\n out[di++] = c\n }\n }\n\n // Trim any over-allocated space (zero-copy):\n return out.subarray(0, di)\n },\n\n stringify(data) {\n // Create a %XX escape sequence for each input byte:\n let byteString = ''\n for (let i = 0; i < data.length; ++i) {\n const byte = data[i]\n byteString += '%' + (byte >> 4).toString(16) + (byte & 0xf).toString(16)\n }\n\n return decodeURIComponent(byteString)\n }\n}\n","// \n\nimport { uncleaner } from 'cleaners'\n\n\n\n\n/**\n * A wrapper that knows how to load and save JSON files,\n * with parsing, stringifying, and cleaning.\n */\n\n\n\n\n\nexport function makeJsonFile(cleaner) {\n const wasData = uncleaner(cleaner)\n return {\n async load(disklet, path) {\n try {\n return cleaner(JSON.parse(await disklet.getText(path)))\n } catch (e) {}\n },\n async save(disklet, path, data) {\n await disklet.setText(path, JSON.stringify(wasData(data)))\n }\n }\n}\n\n/**\n * A cleaner for something that must be an object,\n * but we don't care about the keys inside:\n */\nexport const asJsonObject = raw => {\n if (raw == null || typeof raw !== 'object') {\n throw new TypeError('Expected a JSON object')\n }\n return raw\n}\n","\n\n // @ts-delete\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Schedule a repeating task, with the specified gap between runs.\n */\nexport function makePeriodicTask(\n task,\n msGap,\n opts = {}\n) {\n const { onError = (e) => {} } = opts\n\n // A started task will keep bouncing between running & waiting.\n // The `running` flag will be true in the running state,\n // and `timeout` will have a value in the waiting state.\n let running = false\n let timeout\n\n function startRunning() {\n timeout = undefined\n if (!out.started) return\n running = true\n new Promise(resolve => resolve(task()))\n .catch(onError)\n .then(startWaiting, startWaiting)\n }\n\n function startWaiting() {\n running = false\n if (!out.started) return\n timeout = setTimeout(startRunning, msGap)\n }\n\n const out = {\n started: false,\n\n start(opts = {}) {\n const { wait = false } = opts\n out.started = true\n if (!running && timeout == null) wait ? startWaiting() : startRunning()\n },\n\n stop() {\n out.started = false\n if (timeout != null) {\n clearTimeout(timeout)\n timeout = undefined\n }\n }\n }\n return out\n}\n","\n\n // @ts-delete\n\n/**\n * Waits for the first successful promise.\n * If no promise succeeds, returns the last failure.\n */\nexport function anyPromise(promises) {\n return new Promise((resolve, reject) => {\n let failed = 0\n for (const promise of promises) {\n promise.then(resolve, error => {\n if (++failed >= promises.length) reject(error)\n })\n }\n })\n}\n\n/**\n * If the promise doesn't resolve in the given time,\n * reject it with the provided error, or a generic error if none is provided.\n */\nexport function timeout(\n promise,\n ms,\n error = new Error(`Timeout of ${ms}ms exceeded`)\n) {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => reject(error), ms)\n promise.then(\n ok => {\n resolve(ok)\n clearTimeout(timer)\n },\n error => {\n reject(error)\n clearTimeout(timer)\n }\n )\n })\n}\n\n/**\n * Waits for a collection of promises.\n * Returns all the promises that manage to resolve within the timeout.\n * If no promises mange to resolve within the timeout,\n * returns the first promise that resolves.\n * If all promises reject, rejects an array of errors.\n */\nexport function fuzzyTimeout(\n promises,\n timeoutMs\n) {\n return new Promise((resolve, reject) => {\n let done = false\n const results = []\n const failures = []\n\n // Set up the timer:\n let timer = setTimeout(() => {\n timer = undefined\n if (results.length > 0) {\n done = true\n resolve(results)\n }\n }, timeoutMs)\n\n function checkEnd() {\n const allDone = results.length + failures.length === promises.length\n if (allDone && timer != null) {\n clearTimeout(timer)\n }\n if (allDone || timer == null) {\n done = true\n if (results.length > 0) resolve(results)\n else reject(failures)\n }\n }\n checkEnd() // Handle empty lists\n\n // Attach to the promises:\n for (const promise of promises) {\n promise.then(\n result => {\n if (done) return\n results.push(result)\n checkEnd()\n },\n failure => {\n if (done) return\n failures.push(failure)\n checkEnd()\n }\n )\n }\n })\n}\n","// \n\nexport function snooze(ms) {\n return new Promise(resolve => setTimeout(() => resolve(ms), ms))\n}\n","\n\n // @ts-delete\n\n// How often to run jobs from the queue\nlet QUEUE_RUN_DELAY = 500\n\n// How many jobs to run from the queue on each cycle\nlet QUEUE_JOBS_PER_RUN = 3\n\n\n\n\n\n\n\nconst updateQueue = []\nlet timeout\n\nexport function enableTestMode() {\n QUEUE_JOBS_PER_RUN = 99\n QUEUE_RUN_DELAY = 1\n}\n\nexport function pushUpdate(update) {\n if (updateQueue.length <= 0) {\n startQueue()\n }\n let didUpdate = false\n for (const u of updateQueue) {\n if (u.id === update.id && u.action === update.action) {\n u.updateFunc = update.updateFunc\n didUpdate = true\n break\n }\n }\n if (!didUpdate) {\n updateQueue.push(update)\n }\n}\n\nexport function removeIdFromQueue(id) {\n for (let i = 0; i < updateQueue.length; i++) {\n const update = updateQueue[i]\n if (id === update.id) {\n updateQueue.splice(i, 1)\n break\n }\n }\n if (updateQueue.length <= 0 && timeout != null) {\n clearTimeout(timeout)\n }\n}\n\nfunction startQueue() {\n timeout = setTimeout(() => {\n const numJobs = Math.min(QUEUE_JOBS_PER_RUN, updateQueue.length)\n for (let i = 0; i < numJobs; i++) {\n const u = updateQueue.shift()\n if (u != null) u.updateFunc()\n }\n if (updateQueue.length > 0) {\n startQueue()\n }\n }, QUEUE_RUN_DELAY)\n}\n","// \n\n/**\n * Safely concatenate a bunch of arrays, which may or may not exist.\n * Purrs quietly when pet.\n */\nexport function softCat(...lists) {\n const flowHack = lists.filter(list => list != null)\n return [].concat(...flowHack)\n}\n\n/**\n * Merges several Javascript objects deeply,\n * preferring the items from later objects.\n */\nexport function mergeDeeply(...objects) {\n const out = {}\n\n for (const o of objects) {\n if (o == null) continue\n\n for (const key of Object.keys(o)) {\n if (o[key] == null) continue\n\n out[key] =\n out[key] != null && typeof o[key] === 'object'\n ? mergeDeeply(out[key], o[key])\n : o[key]\n }\n }\n\n return out\n}\n\n/**\n * Like `Object.assign`, but makes the properties non-enumerable.\n */\nexport function addHiddenProperties(\n object,\n properties\n) {\n for (const name of Object.keys(properties)) {\n Object.defineProperty(object, name, {\n writable: true,\n configurable: true,\n value: properties[name]\n })\n }\n return object\n}\n","\"use strict\";\n\n(function(root) {\n\n function checkInt(value) {\n return (parseInt(value) === value);\n }\n\n function checkInts(arrayish) {\n if (!checkInt(arrayish.length)) { return false; }\n\n for (var i = 0; i < arrayish.length; i++) {\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\n return false;\n }\n }\n\n return true;\n }\n\n function coerceArray(arg, copy) {\n\n // ArrayBuffer view\n if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {\n\n if (copy) {\n if (arg.slice) {\n arg = arg.slice();\n } else {\n arg = Array.prototype.slice.call(arg);\n }\n }\n\n return arg;\n }\n\n // It's an array; check it is a valid representation of a byte\n if (Array.isArray(arg)) {\n if (!checkInts(arg)) {\n throw new Error('Array contains invalid value: ' + arg);\n }\n\n return new Uint8Array(arg);\n }\n\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\n if (checkInt(arg.length) && checkInts(arg)) {\n return new Uint8Array(arg);\n }\n\n throw new Error('unsupported array-like object');\n }\n\n function createArray(length) {\n return new Uint8Array(length);\n }\n\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\n if (sourceStart != null || sourceEnd != null) {\n if (sourceArray.slice) {\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\n } else {\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\n }\n }\n targetArray.set(sourceArray, targetStart);\n }\n\n\n\n var convertUtf8 = (function() {\n function toBytes(text) {\n var result = [], i = 0;\n text = encodeURI(text);\n while (i < text.length) {\n var c = text.charCodeAt(i++);\n\n // if it is a % sign, encode the following 2 bytes as a hex value\n if (c === 37) {\n result.push(parseInt(text.substr(i, 2), 16))\n i += 2;\n\n // otherwise, just the actual byte\n } else {\n result.push(c)\n }\n }\n\n return coerceArray(result);\n }\n\n function fromBytes(bytes) {\n var result = [], i = 0;\n\n while (i < bytes.length) {\n var c = bytes[i];\n\n if (c < 128) {\n result.push(String.fromCharCode(c));\n i++;\n } else if (c > 191 && c < 224) {\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\n i += 2;\n } else {\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\n i += 3;\n }\n }\n\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n var convertHex = (function() {\n function toBytes(text) {\n var result = [];\n for (var i = 0; i < text.length; i += 2) {\n result.push(parseInt(text.substr(i, 2), 16));\n }\n\n return result;\n }\n\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\n var Hex = '0123456789abcdef';\n\n function fromBytes(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i++) {\n var v = bytes[i];\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\n }\n return result.join('');\n }\n\n return {\n toBytes: toBytes,\n fromBytes: fromBytes,\n }\n })();\n\n\n // Number of rounds by keysize\n var numberOfRounds = {16: 10, 24: 12, 32: 14}\n\n // Round constant words\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n\n // S-box and Inverse S-box (S is for Substitution)\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\n var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n\n // Transformations for encryption\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n\n // Transformations for decryption\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n\n // Transformations for decryption key expansion\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\n\n function convertToInt32(bytes) {\n var result = [];\n for (var i = 0; i < bytes.length; i += 4) {\n result.push(\n (bytes[i ] << 24) |\n (bytes[i + 1] << 16) |\n (bytes[i + 2] << 8) |\n bytes[i + 3]\n );\n }\n return result;\n }\n\n var AES = function(key) {\n if (!(this instanceof AES)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n Object.defineProperty(this, 'key', {\n value: coerceArray(key, true)\n });\n\n this._prepare();\n }\n\n\n AES.prototype._prepare = function() {\n\n var rounds = numberOfRounds[this.key.length];\n if (rounds == null) {\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\n }\n\n // encryption round keys\n this._Ke = [];\n\n // decryption round keys\n this._Kd = [];\n\n for (var i = 0; i <= rounds; i++) {\n this._Ke.push([0, 0, 0, 0]);\n this._Kd.push([0, 0, 0, 0]);\n }\n\n var roundKeyCount = (rounds + 1) * 4;\n var KC = this.key.length / 4;\n\n // convert the key into ints\n var tk = convertToInt32(this.key);\n\n // copy values into round key arrays\n var index;\n for (var i = 0; i < KC; i++) {\n index = i >> 2;\n this._Ke[index][i % 4] = tk[i];\n this._Kd[rounds - index][i % 4] = tk[i];\n }\n\n // key expansion (fips-197 section 5.2)\n var rconpointer = 0;\n var t = KC, tt;\n while (t < roundKeyCount) {\n tt = tk[KC - 1];\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n (S[(tt >> 8) & 0xFF] << 16) ^\n (S[ tt & 0xFF] << 8) ^\n S[(tt >> 24) & 0xFF] ^\n (rcon[rconpointer] << 24));\n rconpointer += 1;\n\n // key expansion (for non-256 bit)\n if (KC != 8) {\n for (var i = 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n\n // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n } else {\n for (var i = 1; i < (KC / 2); i++) {\n tk[i] ^= tk[i - 1];\n }\n tt = tk[(KC / 2) - 1];\n\n tk[KC / 2] ^= (S[ tt & 0xFF] ^\n (S[(tt >> 8) & 0xFF] << 8) ^\n (S[(tt >> 16) & 0xFF] << 16) ^\n (S[(tt >> 24) & 0xFF] << 24));\n\n for (var i = (KC / 2) + 1; i < KC; i++) {\n tk[i] ^= tk[i - 1];\n }\n }\n\n // copy values into round key arrays\n var i = 0, r, c;\n while (i < KC && t < roundKeyCount) {\n r = t >> 2;\n c = t % 4;\n this._Ke[r][c] = tk[i];\n this._Kd[rounds - r][c] = tk[i++];\n t++;\n }\n }\n\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n for (var r = 1; r < rounds; r++) {\n for (var c = 0; c < 4; c++) {\n tt = this._Kd[r][c];\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\n U2[(tt >> 16) & 0xFF] ^\n U3[(tt >> 8) & 0xFF] ^\n U4[ tt & 0xFF]);\n }\n }\n }\n\n AES.prototype.encrypt = function(plaintext) {\n if (plaintext.length != 16) {\n throw new Error('invalid plaintext size (must be 16 bytes)');\n }\n\n var rounds = this._Ke.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(plaintext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Ke[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T1[(t[ i ] >> 24) & 0xff] ^\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T4[ t[(i + 3) % 4] & 0xff] ^\n this._Ke[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Ke[rounds][i];\n result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n AES.prototype.decrypt = function(ciphertext) {\n if (ciphertext.length != 16) {\n throw new Error('invalid ciphertext size (must be 16 bytes)');\n }\n\n var rounds = this._Kd.length - 1;\n var a = [0, 0, 0, 0];\n\n // convert plaintext to (ints ^ key)\n var t = convertToInt32(ciphertext);\n for (var i = 0; i < 4; i++) {\n t[i] ^= this._Kd[0][i];\n }\n\n // apply round transforms\n for (var r = 1; r < rounds; r++) {\n for (var i = 0; i < 4; i++) {\n a[i] = (T5[(t[ i ] >> 24) & 0xff] ^\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\n T8[ t[(i + 1) % 4] & 0xff] ^\n this._Kd[r][i]);\n }\n t = a.slice();\n }\n\n // the last round is special\n var result = createArray(16), tt;\n for (var i = 0; i < 4; i++) {\n tt = this._Kd[rounds][i];\n result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\n result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff;\n }\n\n return result;\n }\n\n\n /**\n * Mode Of Operation - Electonic Codebook (ECB)\n */\n var ModeOfOperationECB = function(key) {\n if (!(this instanceof ModeOfOperationECB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Electronic Code Block\";\n this.name = \"ecb\";\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationECB.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n block = this._aes.encrypt(block);\n copyArray(block, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationECB.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n copyArray(block, plaintext, i);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Block Chaining (CBC)\n */\n var ModeOfOperationCBC = function(key, iv) {\n if (!(this instanceof ModeOfOperationCBC)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Block Chaining\";\n this.name = \"cbc\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastCipherblock = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCBC.prototype.encrypt = function(plaintext) {\n plaintext = coerceArray(plaintext);\n\n if ((plaintext.length % 16) !== 0) {\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\n }\n\n var ciphertext = createArray(plaintext.length);\n var block = createArray(16);\n\n for (var i = 0; i < plaintext.length; i += 16) {\n copyArray(plaintext, block, 0, i, i + 16);\n\n for (var j = 0; j < 16; j++) {\n block[j] ^= this._lastCipherblock[j];\n }\n\n this._lastCipherblock = this._aes.encrypt(block);\n copyArray(this._lastCipherblock, ciphertext, i);\n }\n\n return ciphertext;\n }\n\n ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {\n ciphertext = coerceArray(ciphertext);\n\n if ((ciphertext.length % 16) !== 0) {\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\n }\n\n var plaintext = createArray(ciphertext.length);\n var block = createArray(16);\n\n for (var i = 0; i < ciphertext.length; i += 16) {\n copyArray(ciphertext, block, 0, i, i + 16);\n block = this._aes.decrypt(block);\n\n for (var j = 0; j < 16; j++) {\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\n }\n\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\n }\n\n return plaintext;\n }\n\n\n /**\n * Mode Of Operation - Cipher Feedback (CFB)\n */\n var ModeOfOperationCFB = function(key, iv, segmentSize) {\n if (!(this instanceof ModeOfOperationCFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Cipher Feedback\";\n this.name = \"cfb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 size)');\n }\n\n if (!segmentSize) { segmentSize = 1; }\n\n this.segmentSize = segmentSize;\n\n this._shiftRegister = coerceArray(iv, true);\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCFB.prototype.encrypt = function(plaintext) {\n if ((plaintext.length % this.segmentSize) != 0) {\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\n }\n\n var encrypted = coerceArray(plaintext, true);\n\n var xorSegment;\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n for (var j = 0; j < this.segmentSize; j++) {\n encrypted[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return encrypted;\n }\n\n ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {\n if ((ciphertext.length % this.segmentSize) != 0) {\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\n }\n\n var plaintext = coerceArray(ciphertext, true);\n\n var xorSegment;\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\n xorSegment = this._aes.encrypt(this._shiftRegister);\n\n for (var j = 0; j < this.segmentSize; j++) {\n plaintext[i + j] ^= xorSegment[j];\n }\n\n // Shift the register\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\n }\n\n return plaintext;\n }\n\n /**\n * Mode Of Operation - Output Feedback (OFB)\n */\n var ModeOfOperationOFB = function(key, iv) {\n if (!(this instanceof ModeOfOperationOFB)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Output Feedback\";\n this.name = \"ofb\";\n\n if (!iv) {\n iv = createArray(16);\n\n } else if (iv.length != 16) {\n throw new Error('invalid initialation vector size (must be 16 bytes)');\n }\n\n this._lastPrecipher = coerceArray(iv, true);\n this._lastPrecipherIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationOFB.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._lastPrecipherIndex === 16) {\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\n this._lastPrecipherIndex = 0;\n }\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\n\n\n /**\n * Counter object for CTR common mode of operation\n */\n var Counter = function(initialValue) {\n if (!(this instanceof Counter)) {\n throw Error('Counter must be instanitated with `new`');\n }\n\n // We allow 0, but anything false-ish uses the default 1\n if (initialValue !== 0 && !initialValue) { initialValue = 1; }\n\n if (typeof(initialValue) === 'number') {\n this._counter = createArray(16);\n this.setValue(initialValue);\n\n } else {\n this.setBytes(initialValue);\n }\n }\n\n Counter.prototype.setValue = function(value) {\n if (typeof(value) !== 'number' || parseInt(value) != value) {\n throw new Error('invalid counter value (must be an integer)');\n }\n\n // We cannot safely handle numbers beyond the safe range for integers\n if (value > Number.MAX_SAFE_INTEGER) {\n throw new Error('integer value out of safe range');\n }\n\n for (var index = 15; index >= 0; --index) {\n this._counter[index] = value % 256;\n value = parseInt(value / 256);\n }\n }\n\n Counter.prototype.setBytes = function(bytes) {\n bytes = coerceArray(bytes, true);\n\n if (bytes.length != 16) {\n throw new Error('invalid counter bytes size (must be 16 bytes)');\n }\n\n this._counter = bytes;\n };\n\n Counter.prototype.increment = function() {\n for (var i = 15; i >= 0; i--) {\n if (this._counter[i] === 255) {\n this._counter[i] = 0;\n } else {\n this._counter[i]++;\n break;\n }\n }\n }\n\n\n /**\n * Mode Of Operation - Counter (CTR)\n */\n var ModeOfOperationCTR = function(key, counter) {\n if (!(this instanceof ModeOfOperationCTR)) {\n throw Error('AES must be instanitated with `new`');\n }\n\n this.description = \"Counter\";\n this.name = \"ctr\";\n\n if (!(counter instanceof Counter)) {\n counter = new Counter(counter)\n }\n\n this._counter = counter;\n\n this._remainingCounter = null;\n this._remainingCounterIndex = 16;\n\n this._aes = new AES(key);\n }\n\n ModeOfOperationCTR.prototype.encrypt = function(plaintext) {\n var encrypted = coerceArray(plaintext, true);\n\n for (var i = 0; i < encrypted.length; i++) {\n if (this._remainingCounterIndex === 16) {\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\n this._remainingCounterIndex = 0;\n this._counter.increment();\n }\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\n }\n\n return encrypted;\n }\n\n // Decryption is symetric\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\n\n\n ///////////////////////\n // Padding\n\n // See:https://tools.ietf.org/html/rfc2315\n function pkcs7pad(data) {\n data = coerceArray(data, true);\n var padder = 16 - (data.length % 16);\n var result = createArray(data.length + padder);\n copyArray(data, result);\n for (var i = data.length; i < result.length; i++) {\n result[i] = padder;\n }\n return result;\n }\n\n function pkcs7strip(data) {\n data = coerceArray(data, true);\n if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }\n\n var padder = data[data.length - 1];\n if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }\n\n var length = data.length - padder;\n for (var i = 0; i < padder; i++) {\n if (data[length + i] !== padder) {\n throw new Error('PKCS#7 invalid padding byte');\n }\n }\n\n var result = createArray(length);\n copyArray(data, result, 0, 0, length);\n return result;\n }\n\n ///////////////////////\n // Exporting\n\n\n // The block cipher\n var aesjs = {\n AES: AES,\n Counter: Counter,\n\n ModeOfOperation: {\n ecb: ModeOfOperationECB,\n cbc: ModeOfOperationCBC,\n cfb: ModeOfOperationCFB,\n ofb: ModeOfOperationOFB,\n ctr: ModeOfOperationCTR\n },\n\n utils: {\n hex: convertHex,\n utf8: convertUtf8\n },\n\n padding: {\n pkcs7: {\n pad: pkcs7pad,\n strip: pkcs7strip\n }\n },\n\n _arrayTest: {\n coerceArray: coerceArray,\n createArray: createArray,\n copyArray: copyArray,\n }\n };\n\n\n // node.js\n if (typeof exports !== 'undefined') {\n module.exports = aesjs\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(aesjs);\n\n // Web Browsers\n } else {\n\n // If there was an existing library at \"aesjs\" make sure it's still available\n if (root.aesjs) {\n aesjs._aesjs = root.aesjs;\n }\n\n root.aesjs = aesjs;\n }\n\n\n})(this);\n","\n/**\n * Array#filter.\n *\n * @param {Array} arr\n * @param {Function} fn\n * @param {Object=} self\n * @return {Array}\n * @throw TypeError\n */\n\nmodule.exports = function (arr, fn, self) {\n if (arr.filter) return arr.filter(fn, self);\n if (void 0 === arr || null === arr) throw new TypeError;\n if ('function' != typeof fn) throw new TypeError;\n var ret = [];\n for (var i = 0; i < arr.length; i++) {\n if (!hasOwn.call(arr, i)) continue;\n var val = arr[i];\n if (fn.call(self, val, i, arr)) ret.push(val);\n }\n return ret;\n};\n\nvar hasOwn = Object.prototype.hasOwnProperty;\n","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('./internal/errors'),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = require('./internal/assert/assertion_error');\n\nvar _require2 = require('util/'),\n inspect = _require2.inspect;\n\nvar _require$types = require('util/').types,\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : require('es6-object-assign').assign;\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n var comparison = require('./internal/util/comparisons');\n\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\n\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n\n if (argsLen === 2) operator = '!=';\n }\n\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n\n if (message !== undefined) {\n errArgs.message = message;\n }\n\n var err = new AssertionError(errArgs);\n\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n\n throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n var _this = this;\n\n _classCallCheck(this, Comparison);\n\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n } // Handle primitives properly.\n\n\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n\n var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n // as well.\n\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n return;\n }\n\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n\n try {\n fn();\n } catch (e) {\n return e;\n }\n\n return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n\n throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\n\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n }); // Make sure we actually have a stack trace!\n\n var origStack = err.stack;\n\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift(); // Filter all frames existing in err.stack.\n\n var tmp1 = newErr.stack.split('\\n');\n\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n\n throw newErr;\n }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n'use strict';\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar _require = require('util/'),\n inspect = _require.inspect;\n\nvar _require2 = require('../errors'),\n ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n\n\nfunction repeat(str, count) {\n count = Math.floor(count);\n if (str.length == 0 || count == 0) return '';\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n\n while (count) {\n str += str;\n count--;\n }\n\n str += str.substring(0, maxCount - str.length);\n return str;\n}\n\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n deepStrictEqual: 'Expected values to be strictly deep-equal:',\n strictEqual: 'Expected values to be strictly equal:',\n strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n deepEqual: 'Expected values to be loosely deep-equal:',\n equal: 'Expected values to be loosely equal:',\n notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n notEqual: 'Expected \"actual\" to be loosely unequal to:',\n notIdentical: 'Values identical but not reference-equal:'\n}; // Comparing short primitives should just show === / !== instead of using the\n// diff.\n\nvar kMaxShortLength = 10;\n\nfunction copyError(source) {\n var keys = Object.keys(source);\n var target = Object.create(Object.getPrototypeOf(source));\n keys.forEach(function (key) {\n target[key] = source[key];\n });\n Object.defineProperty(target, 'message', {\n value: source.message\n });\n return target;\n}\n\nfunction inspectValue(val) {\n // The util.inspect default values could be changed. This makes sure the\n // error messages contain the necessary information nevertheless.\n return inspect(val, {\n compact: false,\n customInspect: false,\n depth: 1000,\n maxArrayLength: Infinity,\n // Assert compares only enumerable properties (with a few exceptions).\n showHidden: false,\n // Having a long line as error is better than wrapping the line for\n // comparison for now.\n // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n // have meta information about the inspected properties (i.e., know where\n // in what line the property starts and ends).\n breakLength: Infinity,\n // Assert does not detect proxies currently.\n showProxy: false,\n sorted: true,\n // Inspect getters as we also check them when comparing entries.\n getters: true\n });\n}\n\nfunction createErrDiff(actual, expected, operator) {\n var other = '';\n var res = '';\n var lastPos = 0;\n var end = '';\n var skipped = false;\n var actualInspected = inspectValue(actual);\n var actualLines = actualInspected.split('\\n');\n var expectedLines = inspectValue(expected).split('\\n');\n var i = 0;\n var indicator = ''; // In case both values are objects explicitly mark them as not reference equal\n // for the `strictEqual` operator.\n\n if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n operator = 'strictEqualObject';\n } // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n // equal, check further special handling.\n\n\n if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of \"actual\" and \"expected\" together is less than\n // kMaxShortLength and if neither is an object and at least one of them is\n // not `zero`, use the strict equal comparison to visualize the output.\n\n if (inputLength <= kMaxShortLength) {\n if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n // -0 === +0\n return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n }\n } else if (operator !== 'strictEqualObject') {\n // If the stderr is a tty and the input length is lower than the current\n // columns per line, add a mismatch indicator below the output. If it is\n // not a tty, use a default value of 80 characters.\n var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n\n if (inputLength < maxLength) {\n while (actualLines[0][i] === expectedLines[0][i]) {\n i++;\n } // Ignore the first characters.\n\n\n if (i > 2) {\n // Add position indicator for the first mismatch in case it is a\n // single line and the input length is less than the column length.\n indicator = \"\\n \".concat(repeat(' ', i), \"^\");\n i = 0;\n }\n }\n }\n } // Remove all ending lines that match (this optimizes the output for\n // readability by reducing the number of total changed lines).\n\n\n var a = actualLines[actualLines.length - 1];\n var b = expectedLines[expectedLines.length - 1];\n\n while (a === b) {\n if (i++ < 2) {\n end = \"\\n \".concat(a).concat(end);\n } else {\n other = a;\n }\n\n actualLines.pop();\n expectedLines.pop();\n if (actualLines.length === 0 || expectedLines.length === 0) break;\n a = actualLines[actualLines.length - 1];\n b = expectedLines[expectedLines.length - 1];\n }\n\n var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.\n // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n\n if (maxLines === 0) {\n // We have to get the result again. The lines were all removed before.\n var _actualLines = actualInspected.split('\\n'); // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (_actualLines.length > 30) {\n _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (_actualLines.length > 27) {\n _actualLines.pop();\n }\n }\n\n return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n }\n\n if (i > 3) {\n end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n skipped = true;\n }\n\n if (other !== '') {\n end = \"\\n \".concat(other).concat(end);\n other = '';\n }\n\n var printedLines = 0;\n var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n\n for (i = 0; i < maxLines; i++) {\n // Only extra expected lines exist\n var cur = i - lastPos;\n\n if (actualLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(expectedLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(expectedLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the expected line to the cache.\n\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n printedLines++; // Only extra actual lines exist\n } else if (expectedLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n printedLines++; // Lines diverge\n } else {\n var expectedLine = expectedLines[i];\n var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by\n // a trailing comma. In that case it is actually identical and we should\n // mark it as such.\n\n var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,\n // add a comma at the end of the actual line. Otherwise the output could\n // look weird as in:\n //\n // [\n // 1 // No comma at the end!\n // + 2\n // ]\n //\n\n if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n divergingLines = false;\n actualLine += ',';\n }\n\n if (divergingLines) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result and cache the expected diverging\n // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n printedLines += 2; // Lines are identical\n } else {\n // Add all cached information to the result before adding other things\n // and reset the cache.\n res += other;\n other = ''; // If the last diverging line is exactly one line above or if it is the\n // very first line, add the line to the result.\n\n if (cur === 1 || i === 0) {\n res += \"\\n \".concat(actualLine);\n printedLines++;\n }\n }\n } // Inspected object to big (Show ~20 rows max)\n\n\n if (printedLines > 20 && i < maxLines - 2) {\n return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n }\n }\n\n return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\n\nvar AssertionError =\n/*#__PURE__*/\nfunction (_Error) {\n _inherits(AssertionError, _Error);\n\n function AssertionError(options) {\n var _this;\n\n _classCallCheck(this, AssertionError);\n\n if (_typeof(options) !== 'object' || options === null) {\n throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n }\n\n var message = options.message,\n operator = options.operator,\n stackStartFn = options.stackStartFn;\n var actual = options.actual,\n expected = options.expected;\n var limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n\n if (message != null) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));\n } else {\n if (process.stderr && process.stderr.isTTY) {\n // Reset on each call to make sure we handle dynamically set environment\n // variables correct.\n if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n blue = \"\\x1B[34m\";\n green = \"\\x1B[32m\";\n white = \"\\x1B[39m\";\n red = \"\\x1B[31m\";\n } else {\n blue = '';\n green = '';\n white = '';\n red = '';\n }\n } // Prevent the error stack from being visible by duplicating the error\n // in a very close way to the original in case both sides are actually\n // instances of Error.\n\n\n if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n actual = copyError(actual);\n expected = copyError(expected);\n }\n\n if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));\n } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n // In case the objects are equal but the operator requires unequal, show\n // the first object and say A equals B\n var base = kReadableOperator[operator];\n var res = inspectValue(actual).split('\\n'); // In case \"actual\" is an object, it should not be reference equal.\n\n if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n base = kReadableOperator.notStrictEqualObject;\n } // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (res.length > 30) {\n res[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (res.length > 27) {\n res.pop();\n }\n } // Only print a single input.\n\n\n if (res.length === 1) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \" \").concat(res[0])));\n } else {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\")));\n }\n } else {\n var _res = inspectValue(actual);\n\n var other = '';\n var knownOperators = kReadableOperator[operator];\n\n if (operator === 'notDeepEqual' || operator === 'notEqual') {\n _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n\n if (_res.length > 1024) {\n _res = \"\".concat(_res.slice(0, 1021), \"...\");\n }\n } else {\n other = \"\".concat(inspectValue(expected));\n\n if (_res.length > 512) {\n _res = \"\".concat(_res.slice(0, 509), \"...\");\n }\n\n if (other.length > 512) {\n other = \"\".concat(other.slice(0, 509), \"...\");\n }\n\n if (operator === 'deepEqual' || operator === 'equal') {\n _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n } else {\n other = \" \".concat(operator, \" \").concat(other);\n }\n }\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(_res).concat(other)));\n }\n }\n\n Error.stackTraceLimit = limit;\n _this.generatedMessage = !message;\n Object.defineProperty(_assertThisInitialized(_this), 'name', {\n value: 'AssertionError [ERR_ASSERTION]',\n enumerable: false,\n writable: true,\n configurable: true\n });\n _this.code = 'ERR_ASSERTION';\n _this.actual = actual;\n _this.expected = expected;\n _this.operator = operator;\n\n if (Error.captureStackTrace) {\n // eslint-disable-next-line no-restricted-syntax\n Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n } // Create error message including the error code in the name.\n\n\n _this.stack; // Reset the name.\n\n _this.name = 'AssertionError';\n return _possibleConstructorReturn(_this);\n }\n\n _createClass(AssertionError, [{\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n }\n }, {\n key: inspect.custom,\n value: function value(recurseTimes, ctx) {\n // This limits the `actual` and `expected` property default inspection to\n // the minimum depth. Otherwise those values would be too verbose compared\n // to the actual error message which contains a combined view of these two\n // input values.\n return inspect(this, _objectSpread({}, ctx, {\n customInspect: false,\n depth: 0\n }));\n }\n }]);\n\n return AssertionError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AssertionError;","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n\n/* eslint node-core/alphabetize-errors: \"error\" */\n\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n'use strict'; // The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar codes = {}; // Lazy loaded\n\nvar assert;\nvar util;\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inherits(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n var _this;\n\n _classCallCheck(this, NodeError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));\n _this.code = code;\n return _this;\n }\n\n return NodeError;\n }(Base);\n\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n if (assert === undefined) assert = require('../assert');\n assert(typeof name === 'string', \"'name' must be a string\"); // determiner: 'must be' or 'must not be'\n\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } // TODO(BridgeAR): Improve the output by showing `null` and similar.\n\n\n msg += \". Received type \".concat(_typeof(actual));\n return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n if (util === undefined) util = require('util/');\n var inspected = util.inspect(value);\n\n if (inspected.length > 128) {\n inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n }\n\n return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n var type;\n\n if (value && value.constructor && value.constructor.name) {\n type = \"instance of \".concat(value.constructor.name);\n } else {\n type = \"type \".concat(_typeof(value));\n }\n\n return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (assert === undefined) assert = require('../assert');\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n });\n\n switch (len) {\n case 1:\n msg += \"\".concat(args[0], \" argument\");\n break;\n\n case 2:\n msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n break;\n\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \".concat(args[len - 1], \" arguments\");\n break;\n }\n\n return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar regexFlagsSupported = /a/g.flags !== undefined;\n\nvar arrayFromSet = function arrayFromSet(set) {\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n return array;\n};\n\nvar arrayFromMap = function arrayFromMap(map) {\n var array = [];\n map.forEach(function (value, key) {\n return array.push([key, value]);\n });\n return array;\n};\n\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\n\nvar _require$types = require('util/').types,\n isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n isArrayBufferView = _require$types.isArrayBufferView,\n isDate = _require$types.isDate,\n isMap = _require$types.isMap,\n isRegExp = _require$types.isRegExp,\n isSet = _require$types.isSet,\n isNativeError = _require$types.isNativeError,\n isBoxedPrimitive = _require$types.isBoxedPrimitive,\n isNumberObject = _require$types.isNumberObject,\n isStringObject = _require$types.isStringObject,\n isBooleanObject = _require$types.isBooleanObject,\n isBigIntObject = _require$types.isBigIntObject,\n isSymbolObject = _require$types.isSymbolObject,\n isFloat32Array = _require$types.isFloat32Array,\n isFloat64Array = _require$types.isFloat64Array;\n\nfunction isNonIndex(key) {\n if (key.length === 0 || key.length > 10) return true;\n\n for (var i = 0; i < key.length; i++) {\n var code = key.charCodeAt(i);\n if (code < 48 || code > 57) return true;\n } // The maximum size for an array is 2 ** 32 -1.\n\n\n return key.length === 10 && key >= Math.pow(2, 32);\n}\n\nfunction getOwnNonIndexProperties(value) {\n return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n} // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n\n\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n\n if (y < x) {\n return 1;\n }\n\n return 0;\n}\n\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3; // Check if they have the same source and flags\n\nfunction areSimilarRegExps(a, b) {\n return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\n\nfunction areSimilarFloatArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n for (var offset = 0; offset < a.byteLength; offset++) {\n if (a[offset] !== b[offset]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areSimilarTypedArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\n\nfunction areEqualArrayBuffers(buf1, buf2) {\n return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\n\nfunction isEqualBoxedPrimitive(val1, val2) {\n if (isNumberObject(val1)) {\n return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n }\n\n if (isStringObject(val1)) {\n return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n }\n\n if (isBooleanObject(val1)) {\n return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n }\n\n if (isBigIntObject(val1)) {\n return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n }\n\n return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n} // Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n // All identical values are equivalent, as determined by ===.\n if (val1 === val2) {\n if (val1 !== 0) return true;\n return strict ? objectIs(val1, val2) : true;\n } // Check more closely if val1 and val2 are equal.\n\n\n if (strict) {\n if (_typeof(val1) !== 'object') {\n return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n }\n\n if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n return false;\n }\n\n if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n return false;\n }\n } else {\n if (val1 === null || _typeof(val1) !== 'object') {\n if (val2 === null || _typeof(val2) !== 'object') {\n // eslint-disable-next-line eqeqeq\n return val1 == val2;\n }\n\n return false;\n }\n\n if (val2 === null || _typeof(val2) !== 'object') {\n return false;\n }\n }\n\n var val1Tag = objectToString(val1);\n var val2Tag = objectToString(val2);\n\n if (val1Tag !== val2Tag) {\n return false;\n }\n\n if (Array.isArray(val1)) {\n // Check for sparse arrays and general fast path\n if (val1.length !== val2.length) {\n return false;\n }\n\n var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n } // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n // wan't to early return out of the rest of the checks. However we can check\n // if the second value is one of these values and the first isn't.\n\n\n if (val1Tag === '[object Object]') {\n // return keyCheck(val1, val2, strict, memos, kNoIterator);\n if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n return false;\n }\n }\n\n if (isDate(val1)) {\n if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n return false;\n }\n } else if (isRegExp(val1)) {\n if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n return false;\n }\n } else if (isNativeError(val1) || val1 instanceof Error) {\n // Do not compare the stack as it might differ even though the error itself\n // is otherwise identical.\n if (val1.message !== val2.message || val1.name !== val2.name) {\n return false;\n }\n } else if (isArrayBufferView(val1)) {\n if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n if (!areSimilarFloatArrays(val1, val2)) {\n return false;\n }\n } else if (!areSimilarTypedArrays(val1, val2)) {\n return false;\n } // Buffer.compare returns true, so val1.length === val2.length. If they both\n // only contain numeric keys, we don't need to exam further than checking\n // the symbols.\n\n\n var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n\n var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (_keys.length !== _keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n } else if (isSet(val1)) {\n if (!isSet(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsSet);\n } else if (isMap(val1)) {\n if (!isMap(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsMap);\n } else if (isAnyArrayBuffer(val1)) {\n if (!areEqualArrayBuffers(val1, val2)) {\n return false;\n }\n } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\n\nfunction getEnumerables(val, keys) {\n return keys.filter(function (k) {\n return propertyIsEnumerable(val, k);\n });\n}\n\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n // For all remaining Object pairs, including Array, objects and Maps,\n // equivalence is determined by having:\n // a) The same number of owned enumerable properties\n // b) The same set of keys/indexes (although not necessarily the same order)\n // c) Equivalent values for every corresponding key/index\n // d) For Sets and Maps, equal contents\n // Note: this accounts for both named and indexed properties on Arrays.\n if (arguments.length === 5) {\n aKeys = Object.keys(val1);\n var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n } // Cheap key test\n\n\n var i = 0;\n\n for (; i < aKeys.length; i++) {\n if (!hasOwnProperty(val2, aKeys[i])) {\n return false;\n }\n }\n\n if (strict && arguments.length === 5) {\n var symbolKeysA = objectGetOwnPropertySymbols(val1);\n\n if (symbolKeysA.length !== 0) {\n var count = 0;\n\n for (i = 0; i < symbolKeysA.length; i++) {\n var key = symbolKeysA[i];\n\n if (propertyIsEnumerable(val1, key)) {\n if (!propertyIsEnumerable(val2, key)) {\n return false;\n }\n\n aKeys.push(key);\n count++;\n } else if (propertyIsEnumerable(val2, key)) {\n return false;\n }\n }\n\n var symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n return false;\n }\n } else {\n var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n return false;\n }\n }\n }\n\n if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n return true;\n } // Use memos to handle cycles.\n\n\n if (memos === undefined) {\n memos = {\n val1: new Map(),\n val2: new Map(),\n position: 0\n };\n } else {\n // We prevent up to two map.has(x) calls by directly retrieving the value\n // and checking for undefined. The map can only contain numbers, so it is\n // safe to check for undefined only.\n var val2MemoA = memos.val1.get(val1);\n\n if (val2MemoA !== undefined) {\n var val2MemoB = memos.val2.get(val2);\n\n if (val2MemoB !== undefined) {\n return val2MemoA === val2MemoB;\n }\n }\n\n memos.position++;\n }\n\n memos.val1.set(val1, memos.position);\n memos.val2.set(val2, memos.position);\n var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n memos.val1.delete(val1);\n memos.val2.delete(val2);\n return areEq;\n}\n\nfunction setHasEqualElement(set, val1, strict, memo) {\n // Go looking.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var val2 = setValues[i];\n\n if (innerDeepEqual(val1, val2, strict, memo)) {\n // Remove the matching element to make sure we do not check that again.\n set.delete(val2);\n return true;\n }\n }\n\n return false;\n} // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\n\n\nfunction findLooseMatchingPrimitives(prim) {\n switch (_typeof(prim)) {\n case 'undefined':\n return null;\n\n case 'object':\n // Only pass in null as object!\n return undefined;\n\n case 'symbol':\n return false;\n\n case 'string':\n prim = +prim;\n // Loose equal entries exist only if the string is possible to convert to\n // a regular number and not NaN.\n // Fall through\n\n case 'number':\n if (numberIsNaN(prim)) {\n return false;\n }\n\n }\n\n return true;\n}\n\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) return altValue;\n return b.has(altValue) && !a.has(altValue);\n}\n\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n var altValue = findLooseMatchingPrimitives(prim);\n\n if (altValue != null) {\n return altValue;\n }\n\n var curB = b.get(altValue);\n\n if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n return false;\n }\n\n return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\n\nfunction setEquiv(a, b, strict, memo) {\n // This is a lazily initiated Set of entries which have to be compared\n // pairwise.\n var set = null;\n var aValues = arrayFromSet(a);\n\n for (var i = 0; i < aValues.length; i++) {\n var val = aValues[i]; // Note: Checking for the objects first improves the performance for object\n // heavy sets but it is a minor slow down for primitives. As they are fast\n // to check this improves the worst case scenario instead.\n\n if (_typeof(val) === 'object' && val !== null) {\n if (set === null) {\n set = new Set();\n } // If the specified value doesn't exist in the second set its an not null\n // object (or non strict only: a not matching primitive) we'll need to go\n // hunting for something thats deep-(strict-)equal to it. To make this\n // O(n log n) complexity we have to copy these values in a new set first.\n\n\n set.add(val);\n } else if (!b.has(val)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.\n\n if (!setMightHaveLoosePrim(a, b, val)) {\n return false;\n }\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(val);\n }\n }\n\n if (set !== null) {\n var bValues = arrayFromSet(b);\n\n for (var _i = 0; _i < bValues.length; _i++) {\n var _val = bValues[_i]; // We have to check if a primitive value is already\n // matching and only if it's not, go hunting for it.\n\n if (_typeof(_val) === 'object' && _val !== null) {\n if (!setHasEqualElement(set, _val, strict, memo)) return false;\n } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n // To be able to handle cases like:\n // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n // ... we need to consider *all* matching keys, not just the first we find.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var key2 = setValues[i];\n\n if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n set.delete(key2);\n return true;\n }\n }\n\n return false;\n}\n\nfunction mapEquiv(a, b, strict, memo) {\n var set = null;\n var aEntries = arrayFromMap(a);\n\n for (var i = 0; i < aEntries.length; i++) {\n var _aEntries$i = _slicedToArray(aEntries[i], 2),\n key = _aEntries$i[0],\n item1 = _aEntries$i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n } else {\n // By directly retrieving the value we prevent another b.has(key) check in\n // almost all possible cases.\n var item2 = b.get(key);\n\n if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null\n // keys.\n\n if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n }\n }\n }\n\n if (set !== null) {\n var bEntries = arrayFromMap(b);\n\n for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n key = _bEntries$_i[0],\n item = _bEntries$_i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;\n } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n // Sets and maps don't have their entries accessible via normal object\n // properties.\n var i = 0;\n\n if (iterationType === kIsSet) {\n if (!setEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsMap) {\n if (!mapEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsArray) {\n for (; i < a.length; i++) {\n if (hasOwnProperty(a, i)) {\n if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n return false;\n }\n } else if (hasOwnProperty(b, i)) {\n return false;\n } else {\n // Array is sparse.\n var keysA = Object.keys(a);\n\n for (; i < keysA.length; i++) {\n var key = keysA[i];\n\n if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n return false;\n }\n }\n\n if (keysA.length !== Object.keys(b).length) {\n return false;\n }\n\n return true;\n }\n }\n } // The pair must have equivalent values for every corresponding key.\n // Possibly expensive deep test:\n\n\n for (i = 0; i < keys.length; i++) {\n var _key = keys[i];\n\n if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kLoose);\n}\n\nfunction isDeepStrictEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kStrict);\n}\n\nmodule.exports = {\n isDeepEqual: isDeepEqual,\n isDeepStrictEqual: isDeepStrictEqual\n};","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","// base-x encoding\n// Forked from https://github.com/cryptocoinjs/bs58\n// Originally written by Mike Hearn for BitcoinJ\n// Copyright (c) 2011 Google Inc\n// Ported to JavaScript by Stefan Thomas\n// Merged Buffer refactorings from base58-native by Stephen Pair\n// Copyright (c) 2013 BitPay Inc\n\nmodule.exports = function base (ALPHABET) {\n var ALPHABET_MAP = {}\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n\n // pre-compute lookup table\n for (var i = 0; i < ALPHABET.length; i++) {\n ALPHABET_MAP[ALPHABET.charAt(i)] = i\n }\n\n function encode (source) {\n if (source.length === 0) return ''\n\n var digits = [0]\n for (var i = 0; i < source.length; ++i) {\n for (var j = 0, carry = source[i]; j < digits.length; ++j) {\n carry += digits[j] << 8\n digits[j] = carry % BASE\n carry = (carry / BASE) | 0\n }\n\n while (carry > 0) {\n digits.push(carry % BASE)\n carry = (carry / BASE) | 0\n }\n }\n\n var string = ''\n\n // deal with leading zeros\n for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]\n // convert digits to a string\n for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]\n\n return string\n }\n\n function decodeUnsafe (string) {\n if (string.length === 0) return []\n\n var bytes = [0]\n for (var i = 0; i < string.length; i++) {\n var value = ALPHABET_MAP[string[i]]\n if (value === undefined) return\n\n for (var j = 0, carry = value; j < bytes.length; ++j) {\n carry += bytes[j] * BASE\n bytes[j] = carry & 0xff\n carry >>= 8\n }\n\n while (carry > 0) {\n bytes.push(carry & 0xff)\n carry >>= 8\n }\n }\n\n // deal with leading zeros\n for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {\n bytes.push(0)\n }\n\n return bytes.reverse()\n }\n\n function decode (string) {\n var array = decodeUnsafe(string)\n if (array) return array\n\n throw new Error('Non-base' + BASE + ' character')\n }\n\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/**\n * Created by paul on 7/25/17.\n */\nvar BN = require('bn.js');\n\n// const MAX_DECIMALS = 10\n\nfunction isHex(x) {\n if (x.startsWith('0x') || x.startsWith('-0x') || x.toLowerCase().includes('a') || x.toLowerCase().includes('b') || x.toLowerCase().includes('c') || x.toLowerCase().includes('d') || x.toLowerCase().includes('e') || x.toLowerCase().includes('f')) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction cropHex(x) {\n return x.replace('0x', '');\n}\n\nfunction addZeros(val, numZeros) {\n var out = val;\n for (var n = 0; n < numZeros; n++) {\n out += '0';\n }\n return out;\n}\n\n// Remove starting and trailing zeros and decimal\nfunction trimEnd(val) {\n // Remove starting zeros if there are any\n var out = val.replace(/^0+/, '');\n out = out.replace(/^\\.+/, '0.');\n if (out.includes('.')) {\n // Remove trailing zeros\n out = out.replace(/0+$/, '');\n\n // Remove trailing \".\" if there is one\n out = out.replace(/\\.+$/, '');\n if (out === '') {\n out = '0';\n }\n }\n if (out === '') {\n out = '0';\n }\n return out;\n}\n\nfunction addDecimal(x, shift) {\n if (shift === 0) return x;\n var isNegative = false;\n if (x.slice(0, 1) === '-') {\n isNegative = true;\n x = x.slice(1);\n }\n var out = void 0;\n if (shift > x.length) {\n out = '0.' + addZeros('', shift - x.length) + x;\n } else {\n out = x.substr(0, x.length - shift) + '.' + x.substr(x.length - shift, x.length);\n }\n out = trimEnd(out);\n if (isNegative) {\n out = '-' + out;\n }\n return out;\n}\n// Takes two floating point (base 10) numbers and finds the multiplier needed to make them both\n// operable as a integer\nfunction floatShifts(xStart, yStart, moreShift) {\n var x = xStart;\n var y = yStart;\n validate(x, y);\n var xPos = x.indexOf('.');\n var yPos = y.indexOf('.');\n\n var xHex = isHex(x);\n var yHex = isHex(y);\n\n if (xPos !== -1) {\n // Remove trailing zeros\n x = trimEnd(x);\n xPos = x.indexOf('.');\n }\n\n if (yPos !== -1) {\n // Remove trailing zeros\n y = trimEnd(y);\n yPos = y.indexOf('.');\n }\n\n if (xPos !== -1 || yPos !== -1 || typeof moreShift === 'number') {\n if (xHex || yHex) {\n throw new Error('Cannot operate on base16 float values');\n }\n\n var xShift = 0;\n var yShift = 0;\n\n if (xPos !== -1) {\n xShift = x.length - xPos - 1;\n }\n\n if (yPos !== -1) {\n yShift = y.length - yPos - 1;\n }\n\n var _shift = xShift > yShift ? xShift : yShift;\n var moreS = 0;\n if (typeof moreShift === 'number') {\n moreS = moreShift;\n }\n\n x = addZeros(x.replace('.', ''), _shift + moreS - xShift);\n y = addZeros(y.replace('.', ''), _shift - yShift);\n\n var out = { x: x, y: y, shift: _shift };\n\n return out;\n } else {\n // Both x and y are int and need no float conversion\n var _out = {\n x: x, y: y, shift: 0\n };\n return _out;\n }\n}\n\nfunction validate() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = args[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arg = _step.value;\n\n if (arg.split('.').length - 1 > 1) {\n throw new Error('Invalid number: more than one decimal point');\n }\n if (arg.split('-').length - 1 > 1) {\n throw new Error('Invalid number: more than one negative sign');\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n\nfunction add(x1, y1) {\n var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n if (base !== 10 && base !== 16) throw new Error('Unsupported base');\n\n var _floatShifts = floatShifts(x1, y1),\n x = _floatShifts.x,\n y = _floatShifts.y,\n shift = _floatShifts.shift;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n var out = xBN.add(yBN).toString(base);\n out = addDecimal(out, shift);\n return base === 10 ? out : '0x' + out;\n}\n\nfunction mul(x1, y1) {\n var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n if (base !== 10 && base !== 16) throw new Error('Unsupported base');\n\n var _floatShifts2 = floatShifts(x1, y1),\n x = _floatShifts2.x,\n y = _floatShifts2.y,\n shift = _floatShifts2.shift;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n var out = xBN.mul(yBN).toString(base);\n out = addDecimal(out, shift * 2);\n return base === 10 ? out : '0x' + out;\n}\n\nfunction sub(x1, y1) {\n var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n if (base !== 10 && base !== 16) throw new Error('Unsupported base');\n\n var _floatShifts3 = floatShifts(x1, y1),\n x = _floatShifts3.x,\n y = _floatShifts3.y,\n shift = _floatShifts3.shift;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n var out = xBN.sub(yBN).toString(base);\n out = addDecimal(out, shift);\n return base === 10 ? out : '0x' + out;\n}\n\nfunction div(x1, y1) {\n var precision = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var base = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;\n\n if (base !== 10 && precision > 0) {\n throw new Error('Cannot operate on floating point hex values');\n }\n if (base !== 10 && base !== 16) throw new Error('Unsupported base');\n\n var _floatShifts4 = floatShifts(x1, y1, precision),\n x = _floatShifts4.x,\n y = _floatShifts4.y;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n var out = xBN.div(yBN).toString(base);\n out = addDecimal(out, precision);\n return base === 10 ? out : '0x' + out;\n}\n\nfunction lt(x1, y1) {\n var _floatShifts5 = floatShifts(x1, y1),\n x = _floatShifts5.x,\n y = _floatShifts5.y;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n return xBN.lt(yBN);\n}\n\nfunction lte(x1, y1) {\n var _floatShifts6 = floatShifts(x1, y1),\n x = _floatShifts6.x,\n y = _floatShifts6.y;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n return xBN.lte(yBN);\n}\n\nfunction gt(x1, y1) {\n var _floatShifts7 = floatShifts(x1, y1),\n x = _floatShifts7.x,\n y = _floatShifts7.y;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n return xBN.gt(yBN);\n}\n\nfunction gte(x1, y1) {\n var _floatShifts8 = floatShifts(x1, y1),\n x = _floatShifts8.x,\n y = _floatShifts8.y;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n return xBN.gte(yBN);\n}\n\nfunction eq(x1, y1) {\n var _floatShifts9 = floatShifts(x1, y1),\n x = _floatShifts9.x,\n y = _floatShifts9.y;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n return xBN.eq(yBN);\n}\n\nfunction min(x1, y1) {\n var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n var _floatShifts10 = floatShifts(x1, y1),\n x = _floatShifts10.x,\n y = _floatShifts10.y,\n shift = _floatShifts10.shift;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n var out = void 0;\n if (xBN.lte(yBN)) {\n out = xBN.toString(base);\n } else {\n out = yBN.toString(base);\n }\n out = addDecimal(out, shift);\n return base === 10 ? out : '0x' + out;\n}\n\nfunction abs(x1) {\n var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;\n\n if (base !== 10 && base !== 16) throw new Error('Unsupported base');\n\n var _floatShifts11 = floatShifts(x1, '0'),\n x = _floatShifts11.x,\n shift = _floatShifts11.shift;\n\n var xBase = isHex(x1) ? 16 : 10;\n x = cropHex(x);\n var xBN = new BN(x, xBase);\n var out = xBN.abs(xBN).toString(base);\n out = addDecimal(out, shift);\n return base === 10 ? out : '0x' + out;\n}\n\nfunction max(x1, y1) {\n var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n var _floatShifts12 = floatShifts(x1, y1),\n x = _floatShifts12.x,\n y = _floatShifts12.y,\n shift = _floatShifts12.shift;\n\n var xBase = isHex(x) ? 16 : 10;\n var yBase = isHex(y) ? 16 : 10;\n x = cropHex(x);\n y = cropHex(y);\n var xBN = new BN(x, xBase);\n var yBN = new BN(y, yBase);\n var out = void 0;\n if (xBN.gte(yBN)) {\n out = xBN.toString(base);\n } else {\n out = yBN.toString(base);\n }\n out = addDecimal(out, shift);\n return base === 10 ? out : '0x' + out;\n}\n\nfunction toFixed(x1) {\n var minPrecision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n var maxPrecision = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 8;\n\n validate(x1);\n var negative = false;\n var out = '';\n var x = x1;\n\n if (x.includes('-')) {\n negative = true;\n // Remove any leading '-' signs\n x = x.replace(/^-+/, '');\n }\n x = trimEnd(x);\n\n // Number of decimal places number has\n var decimalPos = x.indexOf('.');\n if (decimalPos === -1) {\n out = x + '.' + addZeros('', minPrecision);\n } else {\n var numDecimals = x.length - decimalPos - 1;\n if (numDecimals > maxPrecision) {\n out = x.substr(0, x.length - (numDecimals - maxPrecision));\n } else if (numDecimals < minPrecision) {\n out = x + addZeros('', minPrecision - numDecimals);\n } else {\n out = x;\n }\n }\n\n // Remove trailing \".\" if there is one\n out = out.replace(/\\.+$/, '');\n\n if (negative) {\n out = '-' + out;\n }\n return out;\n}\n\nfunction log10(x) {\n if (!(x.match(/^[0-1]+$/g) !== null)) {\n throw new Error('InvalidLogInputValue: Must be a power of 10');\n }\n if (!x.startsWith('1')) {\n throw new Error('InvalidLogInputValue: Must not have leading zeros');\n }\n if ((x.match(/1/g) || []).length > 1) {\n throw new Error('InvalidLogInputValue: Must be power of 10.');\n }\n return (x.match(/0/g) || []).length;\n}\n\nvar bns = { add: add, sub: sub, mul: mul, div: div, gt: gt, lt: lt, gte: gte, lte: lte, eq: eq, min: min, max: max, log10: log10, toFixed: toFixed, abs: abs };\n\nexport { add, sub, mul, div, gt, lt, gte, lte, eq, min, max, log10, toFixed, abs, bns };\n//# sourceMappingURL=index.es.js.map\n","// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki\n// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n// NOTE: SIGHASH byte ignored AND restricted, truncate before use\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction check (buffer) {\n if (buffer.length < 8) return false\n if (buffer.length > 72) return false\n if (buffer[0] !== 0x30) return false\n if (buffer[1] !== buffer.length - 2) return false\n if (buffer[2] !== 0x02) return false\n\n var lenR = buffer[3]\n if (lenR === 0) return false\n if (5 + lenR >= buffer.length) return false\n if (buffer[4 + lenR] !== 0x02) return false\n\n var lenS = buffer[5 + lenR]\n if (lenS === 0) return false\n if ((6 + lenR + lenS) !== buffer.length) return false\n\n if (buffer[4] & 0x80) return false\n if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false\n\n if (buffer[lenR + 6] & 0x80) return false\n if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false\n return true\n}\n\nfunction decode (buffer) {\n if (buffer.length < 8) throw new Error('DER sequence length is too short')\n if (buffer.length > 72) throw new Error('DER sequence length is too long')\n if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')\n if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')\n if (buffer[2] !== 0x02) throw new Error('Expected DER integer')\n\n var lenR = buffer[3]\n if (lenR === 0) throw new Error('R length is zero')\n if (5 + lenR >= buffer.length) throw new Error('R length is too long')\n if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')\n\n var lenS = buffer[5 + lenR]\n if (lenS === 0) throw new Error('S length is zero')\n if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')\n\n if (buffer[4] & 0x80) throw new Error('R value is negative')\n if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')\n\n if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')\n if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')\n\n // non-BIP66 - extract R, S values\n return {\n r: buffer.slice(4, 4 + lenR),\n s: buffer.slice(6 + lenR)\n }\n}\n\n/*\n * Expects r and s to be positive DER integers.\n *\n * The DER format uses the most significant bit as a sign bit (& 0x80).\n * If the significant bit is set AND the integer is positive, a 0x00 is prepended.\n *\n * Examples:\n *\n * 0 => 0x00\n * 1 => 0x01\n * -1 => 0xff\n * 127 => 0x7f\n * -127 => 0x81\n * 128 => 0x0080\n * -128 => 0x80\n * 255 => 0x00ff\n * -255 => 0xff01\n * 16300 => 0x3fac\n * -16300 => 0xc054\n * 62300 => 0x00f35c\n * -62300 => 0xff0ca4\n*/\nfunction encode (r, s) {\n var lenR = r.length\n var lenS = s.length\n if (lenR === 0) throw new Error('R length is zero')\n if (lenS === 0) throw new Error('S length is zero')\n if (lenR > 33) throw new Error('R length is too long')\n if (lenS > 33) throw new Error('S length is too long')\n if (r[0] & 0x80) throw new Error('R value is negative')\n if (s[0] & 0x80) throw new Error('S value is negative')\n if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')\n if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')\n\n var signature = Buffer.allocUnsafe(6 + lenR + lenS)\n\n // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n signature[0] = 0x30\n signature[1] = signature.length - 2\n signature[2] = 0x02\n signature[3] = r.length\n r.copy(signature, 4)\n signature[4 + lenR] = 0x02\n signature[5 + lenR] = s.length\n s.copy(signature, 6 + lenR)\n\n return signature\n}\n\nmodule.exports = {\n check: check,\n decode: decode,\n encode: encode\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction asOptional(cleaner, fallback) {\n return function asOptional(raw) {\n return raw != null ? cleaner(raw) : fallback;\n };\n}\n\nfunction asValue() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return function asValue(raw) {\n for (var i = 0; i < values.length; ++i) {\n if (raw === values[i]) return raw;\n } // Create a fancy error message:\n\n\n var message = 'Expected ';\n if (values.length !== 1) message += 'one of: ';\n\n for (var _i = 0; _i < values.length; ++_i) {\n if (_i > 0) message += ' | ';\n message += JSON.stringify(values[_i]);\n }\n\n throw new TypeError(message);\n };\n}\n\nfunction asBoolean(raw) {\n if (typeof raw !== 'boolean') throw new TypeError('Expected a boolean');\n return raw;\n}\nfunction asNumber(raw) {\n if (typeof raw !== 'number') throw new TypeError('Expected a number');\n return raw;\n}\nfunction asString(raw) {\n if (typeof raw !== 'string') throw new TypeError('Expected a string');\n return raw;\n}\nvar asNull = asValue(null);\nvar asUndefined = asValue(undefined);\nfunction asUnknown(raw) {\n return raw;\n} // Deprecated:\n\nvar asNone = asOptional(asNull);\n\n/**\n * Adds location information to an error message.\n *\n * Errors can occur inside deeply-nested cleaners,\n * such as \"TypeError: Expected a string at .array[0].some.property\".\n * To build this information, each cleaner along the path\n * should add its own location information as the stack unwinds.\n *\n * If the error has a `insertStepAt` property, that is the character offset\n * where the next step will go in the error message. Otherwise,\n * the next step just goes on the end of the string with the word \"at\".\n */\nfunction locateError(error, step, offset) {\n if (error instanceof Error) {\n if (error.insertStepAt == null) {\n error.message += ' at ';\n error.insertStepAt = error.message.length;\n }\n\n error.message = error.message.slice(0, error.insertStepAt) + step + error.message.slice(error.insertStepAt);\n error.insertStepAt += offset;\n }\n\n return error;\n}\n\nfunction asArray(cleaner) {\n return function asArray(raw) {\n if (!Array.isArray(raw)) {\n throw new TypeError('Expected an array');\n }\n\n var out = [];\n\n for (var i = 0; i < raw.length; ++i) {\n try {\n out[i] = cleaner(raw[i]);\n } catch (error) {\n throw locateError(error, '[' + i + ']', 0);\n }\n }\n\n return out;\n };\n}\n\nfunction asObject(shape) {\n // The key-value version:\n if (typeof shape === 'function') {\n return function asObject(raw) {\n if (typeof raw !== 'object' || raw == null) {\n throw new TypeError('Expected an object');\n }\n\n var out = {};\n var keys = Object.keys(raw);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n if (key === '__proto__') continue;\n\n try {\n out[key] = shape(raw[key]);\n } catch (error) {\n throw locateError(error, '[' + JSON.stringify(key) + ']', 0);\n }\n }\n\n return out;\n };\n } // The shape-aware version:\n\n\n var keys = Object.keys(shape);\n\n function bindObjectShape(keepRest) {\n return function asObject(raw) {\n if (typeof raw !== 'object' || raw == null) {\n throw new TypeError('Expected an object');\n }\n\n var i;\n var out = {};\n\n if (keepRest) {\n var toCopy = Object.keys(raw);\n\n for (i = 0; i < toCopy.length; ++i) {\n var key = toCopy[i];\n if (key === '__proto__') continue;\n out[key] = raw[key];\n }\n }\n\n for (i = 0; i < keys.length; ++i) {\n var _key = keys[i];\n\n try {\n out[_key] = shape[_key](raw[_key]);\n } catch (error) {\n throw locateError(error, '.' + _key, 0);\n }\n }\n\n return out;\n };\n }\n\n var out = bindObjectShape(false);\n out.shape = shape;\n out.withRest = bindObjectShape(true);\n return out;\n} // Deprecated:\n\nvar asMap = asObject;\n\nfunction asEither() {\n for (var _len = arguments.length, shape = new Array(_len), _key = 0; _key < _len; _key++) {\n shape[_key] = arguments[_key];\n }\n\n return function asEither(raw) {\n for (var i = 0; i < shape.length; i++) {\n try {\n return shape[i](raw);\n } catch (error) {\n if (i + 1 >= shape.length) throw error;\n }\n }\n };\n}\n\nfunction asMaybe(cleaner, fallback) {\n return function asMaybe(raw) {\n try {\n return cleaner(raw);\n } catch (e) {\n return fallback;\n }\n };\n}\n\nvar uncleaning = 0;\nfunction asCodec(cleaner, uncleaner) {\n return function asCodec(raw) {\n return uncleaning > 0 ? uncleaner(raw) : cleaner(raw);\n };\n}\nfunction uncleaner(cleaner) {\n return function uncleaner(raw) {\n try {\n ++uncleaning;\n return cleaner(raw);\n } finally {\n --uncleaning;\n }\n };\n}\n\nvar asDate = asCodec(function asDate(raw) {\n if (typeof raw !== 'string' && !(raw instanceof Date)) {\n throw new TypeError('Expected a date string');\n }\n\n var out = new Date(raw);\n if (out.toJSON() == null) throw new TypeError('Invalid date format');\n return out;\n}, function wasDate(clean) {\n return clean.toISOString();\n});\n\nfunction asJSON(cleaner) {\n return asCodec(function asJSON(raw) {\n var value = JSON.parse(asString(raw));\n\n try {\n return cleaner(value);\n } catch (error) {\n throw locateError(error, 'JSON.parse()', 11);\n }\n }, function wasJSON(clean) {\n return JSON.stringify(cleaner(clean));\n });\n}\n\nexports.asArray = asArray;\nexports.asBoolean = asBoolean;\nexports.asCodec = asCodec;\nexports.asDate = asDate;\nexports.asEither = asEither;\nexports.asJSON = asJSON;\nexports.asMap = asMap;\nexports.asMaybe = asMaybe;\nexports.asNone = asNone;\nexports.asNull = asNull;\nexports.asNumber = asNumber;\nexports.asObject = asObject;\nexports.asOptional = asOptional;\nexports.asString = asString;\nexports.asUndefined = asUndefined;\nexports.asUnknown = asUnknown;\nexports.asValue = asValue;\nexports.uncleaner = uncleaner;\n","'use strict'\nvar inherits = require('inherits')\nvar md5 = require('./md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar Base = require('cipher-base')\n\nfunction HashNoConstructor (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n this.buffers = []\n}\n\ninherits(HashNoConstructor, Base)\n\nHashNoConstructor.prototype._update = function (data) {\n this.buffers.push(data)\n}\n\nHashNoConstructor.prototype._final = function () {\n var buf = Buffer.concat(this.buffers)\n var r = this._hash(buf)\n this.buffers = null\n\n return r\n}\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new HashNoConstructor(md5)\n if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())\n\n return new Hash(sha(alg))\n}\n","'use strict'\nvar intSize = 4\nvar zeroBuffer = new Buffer(intSize)\nzeroBuffer.fill(0)\n\nvar charSize = 8\nvar hashSize = 16\n\nfunction toArray (buf) {\n if ((buf.length % intSize) !== 0) {\n var len = buf.length + (intSize - (buf.length % intSize))\n buf = Buffer.concat([buf, zeroBuffer], len)\n }\n\n var arr = new Array(buf.length >>> 2)\n for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {\n arr[j] = buf.readInt32LE(i)\n }\n\n return arr\n}\n\nmodule.exports = function hash (buf, fn) {\n var arr = fn(toArray(buf), buf.length * charSize)\n buf = new Buffer(hashSize)\n for (var i = 0; i < arr.length; i++) {\n buf.writeInt32LE(arr[i], i << 2, true)\n }\n return buf\n}\n","'use strict'\n/*\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\nvar makeHash = require('./make-hash')\n\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length\n */\nfunction core_md5 (x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << ((len) % 32)\n x[(((len + 64) >>> 9) << 4) + 14] = len\n\n var a = 1732584193\n var b = -271733879\n var c = -1732584194\n var d = 271733878\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a\n var oldb = b\n var oldc = c\n var oldd = d\n\n a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)\n d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)\n c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)\n b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)\n a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)\n d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)\n c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)\n b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)\n a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)\n d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)\n c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)\n b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)\n a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)\n d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)\n c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)\n b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)\n\n a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)\n d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)\n c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)\n b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)\n a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)\n d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)\n c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)\n b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)\n a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)\n d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)\n c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)\n b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)\n a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)\n d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)\n c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)\n b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)\n\n a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)\n d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)\n c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)\n b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)\n a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)\n d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)\n c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)\n b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)\n a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)\n d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)\n c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)\n b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)\n a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)\n d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)\n c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)\n b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)\n\n a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)\n d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)\n c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)\n b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)\n a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)\n d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)\n c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)\n b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)\n a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)\n d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)\n c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)\n b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)\n a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)\n d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)\n c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)\n b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)\n\n a = safe_add(a, olda)\n b = safe_add(b, oldb)\n c = safe_add(c, oldc)\n d = safe_add(d, oldd)\n }\n\n return [a, b, c, d]\n}\n\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\nfunction md5_cmn (q, a, b, x, s, t) {\n return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)\n}\n\nfunction md5_ff (a, b, c, d, x, s, t) {\n return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)\n}\n\nfunction md5_gg (a, b, c, d, x, s, t) {\n return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)\n}\n\nfunction md5_hh (a, b, c, d, x, s, t) {\n return md5_cmn(b ^ c ^ d, a, b, x, s, t)\n}\n\nfunction md5_ii (a, b, c, d, x, s, t) {\n return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)\n}\n\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\nfunction safe_add (x, y) {\n var lsw = (x & 0xFFFF) + (y & 0xFFFF)\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16)\n return (msw << 16) | (lsw & 0xFFFF)\n}\n\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\nfunction bit_rol (num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt))\n}\n\nmodule.exports = function md5 (buf) {\n return makeHash(buf, core_md5)\n}\n","var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = self.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.onabort = function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!self.fetch) {\n self.fetch = fetch;\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n})({});\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","/*\n\tFollows ISO 4217, http://en.wikipedia.org/wiki/ISO_4217\n\tData last updated 2013 Oct 1st\n*/\n\nmodule.exports = [{\n\tcode: 'AED',\n\tnumber: '784',\n\tdigits: 2,\n\tcurrency: 'United Arab Emirates dirham',\n\tcountries: ['united arab emirates']\n}, {\n\tcode: 'AFN',\n\tnumber: '971',\n\tdigits: 2,\n\tcurrency: 'Afghan afghani',\n\tcountries: ['afghanistan']\n}, {\n\tcode: 'ALL',\n\tnumber: '008',\n\tdigits: 2,\n\tcurrency: 'Albanian lek',\n\tcountries: ['albania']\n}, {\n\tcode: 'AMD',\n\tnumber: '051',\n\tdigits: 2,\n\tcurrency: 'Armenian dram',\n\tcountries: ['armenia']\n}, {\n\tcode: 'ANG',\n\tnumber: '532',\n\tdigits: 2,\n\tcurrency: 'Netherlands Antillean guilder',\n\tcountries: ['curaçao', 'sint maarten']\n}, {\n\tcode: 'AOA',\n\tnumber: '973',\n\tdigits: 2,\n\tcurrency: 'Angolan kwanza',\n\tcountries: ['angola']\n}, {\n\tcode: 'ARS',\n\tnumber: '032',\n\tdigits: 2,\n\tcurrency: 'Argentine peso',\n\tcountries: ['argentina']\n}, {\n\tcode: 'AUD',\n\tnumber: '036',\n\tdigits: 2,\n\tcurrency: 'Australian dollar',\n\tcountries: ['australia', 'australian antarctic territory', 'christmas island', 'cocos (keeling) islands', 'heard and mcdonald islands', 'kiribati', 'nauru', 'norfolk island', 'tuvalu']\n}, {\n\tcode: 'AWG',\n\tnumber: '533',\n\tdigits: 2,\n\tcurrency: 'Aruban florin',\n\tcountries: ['aruba']\n}, {\n\tcode: 'AZN',\n\tnumber: '944',\n\tdigits: 2,\n\tcurrency: 'Azerbaijani manat',\n\tcountries: ['azerbaijan']\n}, {\n\tcode: 'BAM',\n\tnumber: '977',\n\tdigits: 2,\n\tcurrency: 'Bosnia and Herzegovina convertible mark',\n\tcountries: ['bosnia and herzegovina']\n}, {\n\tcode: 'BBD',\n\tnumber: '052',\n\tdigits: 2,\n\tcurrency: 'Barbados dollar',\n\tcountries: ['barbados']\n}, {\n\tcode: 'BDT',\n\tnumber: '050',\n\tdigits: 2,\n\tcurrency: 'Bangladeshi taka',\n\tcountries: ['bangladesh']\n}, {\n\tcode: 'BGN',\n\tnumber: '975',\n\tdigits: 2,\n\tcurrency: 'Bulgarian lev',\n\tcountries: ['bulgaria']\n}, {\n\tcode: 'BHD',\n\tnumber: '048',\n\tdigits: 3,\n\tcurrency: 'Bahraini dinar',\n\tcountries: ['bahrain']\n}, {\n\tcode: 'BIF',\n\tnumber: '108',\n\tdigits: 0,\n\tcurrency: 'Burundian franc',\n\tcountries: ['burundi']\n}, {\n\tcode: 'BMD',\n\tnumber: '060',\n\tdigits: 2,\n\tcurrency: 'Bermudian dollar',\n\tcountries: ['bermuda']\n}, {\n\tcode: 'BND',\n\tnumber: '096',\n\tdigits: 2,\n\tcurrency: 'Brunei dollar',\n\tcountries: ['brunei', 'singapore']\n}, {\n\tcode: 'BOB',\n\tnumber: '068',\n\tdigits: 2,\n\tcurrency: 'Boliviano',\n\tcountries: ['bolivia']\n}, {\n\tcode: 'BOV',\n\tnumber: '984',\n\tdigits: 2,\n\tcurrency: 'Bolivian Mvdol (funds code)',\n\tcountries: ['bolivia']\n}, {\n\tcode: 'BRL',\n\tnumber: '986',\n\tdigits: 2,\n\tcurrency: 'Brazilian real',\n\tcountries: ['brazil']\n}, {\n\tcode: 'BSD',\n\tnumber: '044',\n\tdigits: 2,\n\tcurrency: 'Bahamian dollar',\n\tcountries: ['bahamas']\n}, {\n\tcode: 'BTN',\n\tnumber: '064',\n\tdigits: 2,\n\tcurrency: 'Bhutanese ngultrum',\n\tcountries: ['bhutan']\n}, {\n\tcode: 'BWP',\n\tnumber: '072',\n\tdigits: 2,\n\tcurrency: 'Botswana pula',\n\tcountries: ['botswana']\n}, {\n\tcode: 'BYR',\n\tnumber: '974',\n\tdigits: 0,\n\tcurrency: 'Belarusian ruble',\n\tcountries: ['belarus']\n}, {\n\tcode: 'BZD',\n\tnumber: '084',\n\tdigits: 2,\n\tcurrency: 'Belize dollar',\n\tcountries: ['belize']\n}, {\n\tcode: 'CAD',\n\tnumber: '124',\n\tdigits: 2,\n\tcurrency: 'Canadian dollar',\n\tcountries: ['canada', 'saint pierre and miquelon']\n}, {\n\tcode: 'CDF',\n\tnumber: '976',\n\tdigits: 2,\n\tcurrency: 'Congolese franc',\n\tcountries: ['democratic republic of congo']\n}, {\n\tcode: 'CHE',\n\tnumber: '947',\n\tdigits: 2,\n\tcurrency: 'WIR Euro (complementary currency)',\n\tcountries: ['switzerland']\n}, {\n\tcode: 'CHF',\n\tnumber: '756',\n\tdigits: 2,\n\tcurrency: 'Swiss franc',\n\tcountries: ['switzerland', 'liechtenstein']\n}, {\n\tcode: 'CHW',\n\tnumber: '948',\n\tdigits: 2,\n\tcurrency: 'WIR Franc (complementary currency)',\n\tcountries: ['switzerland']\n}, {\n\tcode: 'CLF',\n\tnumber: '990',\n\tdigits: 0,\n\tcurrency: 'Unidad de Fomento (funds code)',\n\tcountries: ['chile']\n}, {\n\tcode: 'CLP',\n\tnumber: '152',\n\tdigits: 0,\n\tcurrency: 'Chilean peso',\n\tcountries: ['chile']\n}, {\n\tcode: 'CNY',\n\tnumber: '156',\n\tdigits: 2,\n\tcurrency: 'Chinese yuan',\n\tcountries: ['china']\n}, {\n\tcode: 'COP',\n\tnumber: '170',\n\tdigits: 2,\n\tcurrency: 'Colombian peso',\n\tcountries: ['colombia']\n}, {\n\tcode: 'COU',\n\tnumber: '970',\n\tdigits: 2,\n\tcurrency: 'Unidad de Valor Real',\n\tcountries: ['colombia']\n}, {\n\tcode: 'CRC',\n\tnumber: '188',\n\tdigits: 2,\n\tcurrency: 'Costa Rican colon',\n\tcountries: ['costa rica']\n}, {\n\tcode: 'CUC',\n\tnumber: '931',\n\tdigits: 2,\n\tcurrency: 'Cuban convertible peso',\n\tcountries: ['cuba']\n}, {\n\tcode: 'CUP',\n\tnumber: '192',\n\tdigits: 2,\n\tcurrency: 'Cuban peso',\n\tcountries: ['cuba']\n}, {\n\tcode: 'CVE',\n\tnumber: '132',\n\tdigits: 0,\n\tcurrency: 'Cape Verde escudo',\n\tcountries: ['cape verde']\n}, {\n\tcode: 'CZK',\n\tnumber: '203',\n\tdigits: 2,\n\tcurrency: 'Czech koruna',\n\tcountries: ['czech republic']\n}, {\n\tcode: 'DJF',\n\tnumber: '262',\n\tdigits: 0,\n\tcurrency: 'Djiboutian franc',\n\tcountries: ['djibouti']\n}, {\n\tcode: 'DKK',\n\tnumber: '208',\n\tdigits: 2,\n\tcurrency: 'Danish krone',\n\tcountries: ['denmark', 'faroe islands', 'greenland']\n}, {\n\tcode: 'DOP',\n\tnumber: '214',\n\tdigits: 2,\n\tcurrency: 'Dominican peso',\n\tcountries: ['dominican republic']\n}, {\n\tcode: 'DZD',\n\tnumber: '012',\n\tdigits: 2,\n\tcurrency: 'Algerian dinar',\n\tcountries: ['algeria']\n}, {\n\tcode: 'EGP',\n\tnumber: '818',\n\tdigits: 2,\n\tcurrency: 'Egyptian pound',\n\tcountries: ['egypt', 'palestinian territories']\n}, {\n\tcode: 'ERN',\n\tnumber: '232',\n\tdigits: 2,\n\tcurrency: 'Eritrean nakfa',\n\tcountries: ['eritrea']\n}, {\n\tcode: 'ETB',\n\tnumber: '230',\n\tdigits: 2,\n\tcurrency: 'Ethiopian birr',\n\tcountries: ['ethiopia']\n}, {\n\tcode: 'EUR',\n\tnumber: '978',\n\tdigits: 2,\n\tcurrency: 'Euro',\n\tcountries: ['andorra', 'austria', 'belgium', 'cyprus', 'estonia', 'finland', 'france', 'germany', 'greece', 'ireland', 'italy', 'kosovo', 'luxembourg', 'malta', 'monaco', 'montenegro', 'netherlands', 'portugal', 'san marino', 'slovakia', 'slovenia', 'spain', 'vatican city']\n}, {\n\tcode: 'FJD',\n\tnumber: '242',\n\tdigits: 2,\n\tcurrency: 'Fiji dollar',\n\tcountries: ['fiji']\n}, {\n\tcode: 'FKP',\n\tnumber: '238',\n\tdigits: 2,\n\tcurrency: 'Falkland Islands pound',\n\tcountries: ['falkland islands']\n}, {\n\tcode: 'GBP',\n\tnumber: '826',\n\tdigits: 2,\n\tcurrency: 'Pound sterling',\n\tcountries: ['united kingdom', 'british crown dependencies (the isle of man and the channel islands)', 'south georgia and the south sandwich islands', 'british antarctic territory', 'british indian ocean territory']\n}, {\n\tcode: 'GEL',\n\tnumber: '981',\n\tdigits: 2,\n\tcurrency: 'Georgian lari',\n\tcountries: ['georgia']\n}, {\n\tcode: 'GHS',\n\tnumber: '936',\n\tdigits: 2,\n\tcurrency: 'Ghanaian cedi',\n\tcountries: ['ghana']\n}, {\n\tcode: 'GIP',\n\tnumber: '292',\n\tdigits: 2,\n\tcurrency: 'Gibraltar pound',\n\tcountries: ['gibraltar']\n}, {\n\tcode: 'GMD',\n\tnumber: '270',\n\tdigits: 2,\n\tcurrency: 'Gambian dalasi',\n\tcountries: ['gambia']\n}, {\n\tcode: 'GNF',\n\tnumber: '324',\n\tdigits: 0,\n\tcurrency: 'Guinean franc',\n\tcountries: ['guinea']\n}, {\n\tcode: 'GTQ',\n\tnumber: '320',\n\tdigits: 2,\n\tcurrency: 'Guatemalan quetzal',\n\tcountries: ['guatemala']\n}, {\n\tcode: 'GYD',\n\tnumber: '328',\n\tdigits: 2,\n\tcurrency: 'Guyanese dollar',\n\tcountries: ['guyana']\n}, {\n\tcode: 'HKD',\n\tnumber: '344',\n\tdigits: 2,\n\tcurrency: 'Hong Kong dollar',\n\tcountries: ['hong kong', 'macao']\n}, {\n\tcode: 'HNL',\n\tnumber: '340',\n\tdigits: 2,\n\tcurrency: 'Honduran lempira',\n\tcountries: ['honduras']\n}, {\n\tcode: 'HRK',\n\tnumber: '191',\n\tdigits: 2,\n\tcurrency: 'Croatian kuna',\n\tcountries: ['croatia']\n}, {\n\tcode: 'HTG',\n\tnumber: '332',\n\tdigits: 2,\n\tcurrency: 'Haitian gourde',\n\tcountries: ['haiti']\n}, {\n\tcode: 'HUF',\n\tnumber: '348',\n\tdigits: 2,\n\tcurrency: 'Hungarian forint',\n\tcountries: ['hungary']\n}, {\n\tcode: 'IDR',\n\tnumber: '360',\n\tdigits: 0,\n\tcurrency: 'Indonesian rupiah',\n\tcountries: ['indonesia']\n}, {\n\tcode: 'ILS',\n\tnumber: '376',\n\tdigits: 2,\n\tcurrency: 'Israeli new shekel',\n\tcountries: ['israel', 'palestinian territories']\n}, {\n\tcode: 'INR',\n\tnumber: '356',\n\tdigits: 2,\n\tcurrency: 'Indian rupee',\n\tcountries: ['india']\n}, {\n\tcode: 'IQD',\n\tnumber: '368',\n\tdigits: 3,\n\tcurrency: 'Iraqi dinar',\n\tcountries: ['iraq']\n}, {\n\tcode: 'IRR',\n\tnumber: '364',\n\tdigits: 0,\n\tcurrency: 'Iranian rial',\n\tcountries: ['iran']\n}, {\n\tcode: 'ISK',\n\tnumber: '352',\n\tdigits: 0,\n\tcurrency: 'Icelandic króna',\n\tcountries: ['iceland']\n}, {\n\tcode: 'JMD',\n\tnumber: '388',\n\tdigits: 2,\n\tcurrency: 'Jamaican dollar',\n\tcountries: ['jamaica']\n}, {\n\tcode: 'JOD',\n\tnumber: '400',\n\tdigits: 3,\n\tcurrency: 'Jordanian dinar',\n\tcountries: ['jordan']\n}, {\n\tcode: 'JPY',\n\tnumber: '392',\n\tdigits: 0,\n\tcurrency: 'Japanese yen',\n\tcountries: ['japan']\n}, {\n\tcode: 'KES',\n\tnumber: '404',\n\tdigits: 2,\n\tcurrency: 'Kenyan shilling',\n\tcountries: ['kenya']\n}, {\n\tcode: 'KGS',\n\tnumber: '417',\n\tdigits: 2,\n\tcurrency: 'Kyrgyzstani som',\n\tcountries: ['kyrgyzstan']\n}, {\n\tcode: 'KHR',\n\tnumber: '116',\n\tdigits: 2,\n\tcurrency: 'Cambodian riel',\n\tcountries: ['cambodia']\n}, {\n\tcode: 'KMF',\n\tnumber: '174',\n\tdigits: 0,\n\tcurrency: 'Comoro franc',\n\tcountries: ['comoros']\n}, {\n\tcode: 'KPW',\n\tnumber: '408',\n\tdigits: 0,\n\tcurrency: 'North Korean won',\n\tcountries: ['north korea']\n}, {\n\tcode: 'KRW',\n\tnumber: '410',\n\tdigits: 0,\n\tcurrency: 'South Korean won',\n\tcountries: ['south korea']\n}, {\n\tcode: 'KWD',\n\tnumber: '414',\n\tdigits: 3,\n\tcurrency: 'Kuwaiti dinar',\n\tcountries: ['kuwait']\n}, {\n\tcode: 'KYD',\n\tnumber: '136',\n\tdigits: 2,\n\tcurrency: 'Cayman Islands dollar',\n\tcountries: ['cayman islands']\n}, {\n\tcode: 'KZT',\n\tnumber: '398',\n\tdigits: 2,\n\tcurrency: 'Kazakhstani tenge',\n\tcountries: ['kazakhstan']\n}, {\n\tcode: 'LAK',\n\tnumber: '418',\n\tdigits: 0,\n\tcurrency: 'Lao kip',\n\tcountries: ['laos']\n}, {\n\tcode: 'LBP',\n\tnumber: '422',\n\tdigits: 0,\n\tcurrency: 'Lebanese pound',\n\tcountries: ['lebanon']\n}, {\n\tcode: 'LKR',\n\tnumber: '144',\n\tdigits: 2,\n\tcurrency: 'Sri Lankan rupee',\n\tcountries: ['sri lanka']\n}, {\n\tcode: 'LRD',\n\tnumber: '430',\n\tdigits: 2,\n\tcurrency: 'Liberian dollar',\n\tcountries: ['liberia']\n}, {\n\tcode: 'LSL',\n\tnumber: '426',\n\tdigits: 2,\n\tcurrency: 'Lesotho loti',\n\tcountries: ['lesotho']\n}, {\n\tcode: 'LTL',\n\tnumber: '440',\n\tdigits: 2,\n\tcurrency: 'Lithuanian litas',\n\tcountries: ['lithuania']\n}, {\n\tcode: 'LVL',\n\tnumber: '428',\n\tdigits: 2,\n\tcurrency: 'Latvian lats',\n\tcountries: ['latvia']\n}, {\n\tcode: 'LYD',\n\tnumber: '434',\n\tdigits: 3,\n\tcurrency: 'Libyan dinar',\n\tcountries: ['libya']\n}, {\n\tcode: 'MAD',\n\tnumber: '504',\n\tdigits: 2,\n\tcurrency: 'Moroccan dirham',\n\tcountries: ['morocco']\n}, {\n\tcode: 'MDL',\n\tnumber: '498',\n\tdigits: 2,\n\tcurrency: 'Moldovan leu',\n\tcountries: ['moldova (except transnistria)']\n}, {\n\tcode: 'MGA',\n\tnumber: '969',\n\tdigits: 0,\n\tcurrency: '*[8]\tMalagasy ariary',\n\tcountries: ['madagascar']\n}, {\n\tcode: 'MKD',\n\tnumber: '807',\n\tdigits: 0,\n\tcurrency: 'Macedonian denar',\n\tcountries: ['macedonia']\n}, {\n\tcode: 'MMK',\n\tnumber: '104',\n\tdigits: 0,\n\tcurrency: 'Myanma kyat',\n\tcountries: ['myanmar']\n}, {\n\tcode: 'MNT',\n\tnumber: '496',\n\tdigits: 2,\n\tcurrency: 'Mongolian tugrik',\n\tcountries: ['mongolia']\n}, {\n\tcode: 'MOP',\n\tnumber: '446',\n\tdigits: 2,\n\tcurrency: 'Macanese pataca',\n\tcountries: ['macao']\n}, {\n\tcode: 'MRO',\n\tnumber: '478',\n\tdigits: 0,\n\tcurrency: '*[8]\tMauritanian ouguiya',\n\tcountries: ['mauritania']\n}, {\n\tcode: 'MUR',\n\tnumber: '480',\n\tdigits: 2,\n\tcurrency: 'Mauritian rupee',\n\tcountries: ['mauritius']\n}, {\n\tcode: 'MVR',\n\tnumber: '462',\n\tdigits: 2,\n\tcurrency: 'Maldivian rufiyaa',\n\tcountries: ['maldives']\n}, {\n\tcode: 'MWK',\n\tnumber: '454',\n\tdigits: 2,\n\tcurrency: 'Malawian kwacha',\n\tcountries: ['malawi']\n}, {\n\tcode: 'MXN',\n\tnumber: '484',\n\tdigits: 2,\n\tcurrency: 'Mexican peso',\n\tcountries: ['mexico']\n}, {\n\tcode: 'MXV',\n\tnumber: '979',\n\tdigits: 2,\n\tcurrency: 'Mexican Unidad de Inversion (UDI) (funds code)',\n\tcountries: ['mexico']\n}, {\n\tcode: 'MYR',\n\tnumber: '458',\n\tdigits: 2,\n\tcurrency: 'Malaysian ringgit',\n\tcountries: ['malaysia']\n}, {\n\tcode: 'MZN',\n\tnumber: '943',\n\tdigits: 2,\n\tcurrency: 'Mozambican metical',\n\tcountries: ['mozambique']\n}, {\n\tcode: 'NAD',\n\tnumber: '516',\n\tdigits: 2,\n\tcurrency: 'Namibian dollar',\n\tcountries: ['namibia']\n}, {\n\tcode: 'NGN',\n\tnumber: '566',\n\tdigits: 2,\n\tcurrency: 'Nigerian naira',\n\tcountries: ['nigeria']\n}, {\n\tcode: 'NIO',\n\tnumber: '558',\n\tdigits: 2,\n\tcurrency: 'Nicaraguan córdoba',\n\tcountries: ['nicaragua']\n}, {\n\tcode: 'NOK',\n\tnumber: '578',\n\tdigits: 2,\n\tcurrency: 'Norwegian krone',\n\tcountries: ['norway', 'svalbard', 'jan mayen', 'bouvet island', 'queen maud land', 'peter i island']\n}, {\n\tcode: 'NPR',\n\tnumber: '524',\n\tdigits: 2,\n\tcurrency: 'Nepalese rupee',\n\tcountries: ['nepal']\n}, {\n\tcode: 'NZD',\n\tnumber: '554',\n\tdigits: 2,\n\tcurrency: 'New Zealand dollar',\n\tcountries: ['cook islands', 'new zealand', 'niue', 'pitcairn', 'tokelau', 'ross dependency']\n}, {\n\tcode: 'OMR',\n\tnumber: '512',\n\tdigits: 3,\n\tcurrency: 'Omani rial',\n\tcountries: ['oman']\n}, {\n\tcode: 'PAB',\n\tnumber: '590',\n\tdigits: 2,\n\tcurrency: 'Panamanian balboa',\n\tcountries: ['panama']\n}, {\n\tcode: 'PEN',\n\tnumber: '604',\n\tdigits: 2,\n\tcurrency: 'Peruvian nuevo sol',\n\tcountries: ['peru']\n}, {\n\tcode: 'PGK',\n\tnumber: '598',\n\tdigits: 2,\n\tcurrency: 'Papua New Guinean kina',\n\tcountries: ['papua new guinea']\n}, {\n\tcode: 'PHP',\n\tnumber: '608',\n\tdigits: 2,\n\tcurrency: 'Philippine peso',\n\tcountries: ['philippines']\n}, {\n\tcode: 'PKR',\n\tnumber: '586',\n\tdigits: 2,\n\tcurrency: 'Pakistani rupee',\n\tcountries: ['pakistan']\n}, {\n\tcode: 'PLN',\n\tnumber: '985',\n\tdigits: 2,\n\tcurrency: 'Polish złoty',\n\tcountries: ['poland']\n}, {\n\tcode: 'PYG',\n\tnumber: '600',\n\tdigits: 0,\n\tcurrency: 'Paraguayan guaraní',\n\tcountries: ['paraguay']\n}, {\n\tcode: 'QAR',\n\tnumber: '634',\n\tdigits: 2,\n\tcurrency: 'Qatari riyal',\n\tcountries: ['qatar']\n}, {\n\tcode: 'RON',\n\tnumber: '946',\n\tdigits: 2,\n\tcurrency: 'Romanian new leu',\n\tcountries: ['romania']\n}, {\n\tcode: 'RSD',\n\tnumber: '941',\n\tdigits: 2,\n\tcurrency: 'Serbian dinar',\n\tcountries: ['serbia']\n}, {\n\tcode: 'RUB',\n\tnumber: '643',\n\tdigits: 2,\n\tcurrency: 'Russian rouble',\n\tcountries: ['russia', 'abkhazia', 'south ossetia']\n}, {\n\tcode: 'RWF',\n\tnumber: '646',\n\tdigits: 0,\n\tcurrency: 'Rwandan franc',\n\tcountries: ['rwanda']\n}, {\n\tcode: 'SAR',\n\tnumber: '682',\n\tdigits: 2,\n\tcurrency: 'Saudi riyal',\n\tcountries: ['saudi arabia']\n}, {\n\tcode: 'SBD',\n\tnumber: '090',\n\tdigits: 2,\n\tcurrency: 'Solomon Islands dollar',\n\tcountries: ['solomon islands']\n}, {\n\tcode: 'SCR',\n\tnumber: '690',\n\tdigits: 2,\n\tcurrency: 'Seychelles rupee',\n\tcountries: ['seychelles']\n}, {\n\tcode: 'SDG',\n\tnumber: '938',\n\tdigits: 2,\n\tcurrency: 'Sudanese pound',\n\tcountries: ['sudan']\n}, {\n\tcode: 'SEK',\n\tnumber: '752',\n\tdigits: 2,\n\tcurrency: 'Swedish krona/kronor',\n\tcountries: ['sweden']\n}, {\n\tcode: 'SGD',\n\tnumber: '702',\n\tdigits: 2,\n\tcurrency: 'Singapore dollar',\n\tcountries: ['singapore', 'brunei']\n}, {\n\tcode: 'SHP',\n\tnumber: '654',\n\tdigits: 2,\n\tcurrency: 'Saint Helena pound',\n\tcountries: ['saint helena']\n}, {\n\tcode: 'SLL',\n\tnumber: '694',\n\tdigits: 0,\n\tcurrency: 'Sierra Leonean leone',\n\tcountries: ['sierra leone']\n}, {\n\tcode: 'SOS',\n\tnumber: '706',\n\tdigits: 2,\n\tcurrency: 'Somali shilling',\n\tcountries: ['somalia']\n}, {\n\tcode: 'SRD',\n\tnumber: '968',\n\tdigits: 2,\n\tcurrency: 'Surinamese dollar',\n\tcountries: ['suriname']\n}, {\n\tcode: 'SSP',\n\tnumber: '728',\n\tdigits: 2,\n\tcurrency: 'South Sudanese pound',\n\tcountries: ['south sudan']\n}, {\n\tcode: 'STD',\n\tnumber: '678',\n\tdigits: 0,\n\tcurrency: 'São Tomé and Príncipe dobra',\n\tcountries: ['são tomé and príncipe']\n}, {\n\tcode: 'SYP',\n\tnumber: '760',\n\tdigits: 2,\n\tcurrency: 'Syrian pound',\n\tcountries: ['syria']\n}, {\n\tcode: 'SZL',\n\tnumber: '748',\n\tdigits: 2,\n\tcurrency: 'Swazi lilangeni',\n\tcountries: ['swaziland']\n}, {\n\tcode: 'THB',\n\tnumber: '764',\n\tdigits: 2,\n\tcurrency: 'Thai baht',\n\tcountries: ['thailand']\n}, {\n\tcode: 'TJS',\n\tnumber: '972',\n\tdigits: 2,\n\tcurrency: 'Tajikistani somoni',\n\tcountries: ['tajikistan']\n}, {\n\tcode: 'TMT',\n\tnumber: '934',\n\tdigits: 2,\n\tcurrency: 'Turkmenistani manat',\n\tcountries: ['turkmenistan']\n}, {\n\tcode: 'TND',\n\tnumber: '788',\n\tdigits: 3,\n\tcurrency: 'Tunisian dinar',\n\tcountries: ['tunisia']\n}, {\n\tcode: 'TOP',\n\tnumber: '776',\n\tdigits: 2,\n\tcurrency: 'Tongan paʻanga',\n\tcountries: ['tonga']\n}, {\n\tcode: 'TRY',\n\tnumber: '949',\n\tdigits: 2,\n\tcurrency: 'Turkish lira',\n\tcountries: ['turkey', 'northern cyprus']\n}, {\n\tcode: 'TTD',\n\tnumber: '780',\n\tdigits: 2,\n\tcurrency: 'Trinidad and Tobago dollar',\n\tcountries: ['trinidad and tobago']\n}, {\n\tcode: 'TWD',\n\tnumber: '901',\n\tdigits: 2,\n\tcurrency: 'New Taiwan dollar',\n\tcountries: ['republic of china (taiwan)']\n}, {\n\tcode: 'TZS',\n\tnumber: '834',\n\tdigits: 2,\n\tcurrency: 'Tanzanian shilling',\n\tcountries: ['tanzania']\n}, {\n\tcode: 'UAH',\n\tnumber: '980',\n\tdigits: 2,\n\tcurrency: 'Ukrainian hryvnia',\n\tcountries: ['ukraine']\n}, {\n\tcode: 'UGX',\n\tnumber: '800',\n\tdigits: 2,\n\tcurrency: 'Ugandan shilling',\n\tcountries: ['uganda']\n}, {\n\tcode: 'USD',\n\tnumber: '840',\n\tdigits: 2,\n\tcurrency: 'United States dollar',\n\tcountries: ['american samoa', 'barbados', 'bermuda', 'british indian ocean territory', 'british virgin islands, caribbean netherlands', 'ecuador', 'el salvador', 'guam', 'haiti', 'marshall islands', 'federated states of micronesia', 'northern mariana islands', 'palau', 'panama', 'puerto rico', 'timor-leste', 'turks and caicos islands', 'united states', 'u.s. virgin islands', 'zimbabwe']\n}, {\n\tcode: 'USN',\n\tnumber: '997',\n\tdigits: 2,\n\tcurrency: 'United States dollar (next day) (funds code)',\n\tcountries: ['united states']\n}, {\n\tcode: 'USS',\n\tnumber: '998',\n\tdigits: 2,\n\tcurrency: 'United States dollar',\n\tcountries: ['united states']\n}, {\n\tcode: 'UYI',\n\tnumber: '940',\n\tdigits: 0,\n\tcurrency: 'Uruguay Peso en Unidades Indexadas',\n\tcountries: ['uruguay']\n}, {\n\tcode: 'UYU',\n\tnumber: '858',\n\tdigits: 2,\n\tcurrency: 'Uruguayan peso',\n\tcountries: ['uruguay']\n}, {\n\tcode: 'UZS',\n\tnumber: '860',\n\tdigits: 2,\n\tcurrency: 'Uzbekistan som',\n\tcountries: ['uzbekistan']\n}, {\n\tcode: 'VEF',\n\tnumber: '937',\n\tdigits: 2,\n\tcurrency: 'Venezuelan bolívar',\n\tcountries: ['venezuela']\n}, {\n\tcode: 'VND',\n\tnumber: '704',\n\tdigits: 0,\n\tcurrency: 'Vietnamese dong',\n\tcountries: ['vietnam']\n}, {\n\tcode: 'VUV',\n\tnumber: '548',\n\tdigits: 0,\n\tcurrency: 'Vanuatu vatu',\n\tcountries: ['vanuatu']\n}, {\n\tcode: 'WST',\n\tnumber: '882',\n\tdigits: 2,\n\tcurrency: 'Samoan tala',\n\tcountries: ['samoa']\n}, {\n\tcode: 'XAF',\n\tnumber: '950',\n\tdigits: 0,\n\tcurrency: 'CFA franc BEAC',\n\tcountries: ['cameroon', 'central african republic', 'republic of the congo', 'chad', 'equatorial guinea', 'gabon']\n}, {\n\tcode: 'XAG',\n\tnumber: '961',\n\tcurrency: 'Silver (one troy ounce)',\n}, {\n\tcode: 'XAU',\n\tnumber: '959',\n\tcurrency: 'Gold (one troy ounce)',\n}, {\n\tcode: 'XBA',\n\tnumber: '955',\n\tcurrency: 'European Composite Unit (EURCO) (bond market unit)\t',\n}, {\n\tcode: 'XBB',\n\tnumber: '956',\n\tcurrency: 'European Monetary Unit (E.M.U.-6) (bond market unit)\t',\n}, {\n\tcode: 'XBC',\n\tnumber: '957',\n\tcurrency: 'European Unit of Account 9 (E.U.A.-9) (bond market unit)\t',\n}, {\n\tcode: 'XBD',\n\tnumber: '958',\n\tcurrency: 'European Unit of Account 17 (E.U.A.-17) (bond market unit)\t',\n}, {\n\tcode: 'XBT',\n\tcurrency: 'Bitcoin',\n}, {\n\tcode: 'XCD',\n\tnumber: '951',\n\tdigits: 2,\n\tcurrency: 'East Caribbean dollar',\n\tcountries: ['anguilla', 'antigua and barbuda', 'dominica', 'grenada', 'montserrat', 'saint kitts and nevis', 'saint lucia', 'saint vincent and the grenadines']\n}, {\n\tcode: 'XDR',\n\tnumber: '960',\n\tcurrency: 'Special drawing rights',\n\tcountries: ['international monetary fund']\n}, {\n\tcode: 'XFU',\n\tcurrency: 'UIC franc (special settlement currency)',\n\tcountries: ['international union of railways']\n}, {\n\tcode: 'XOF',\n\tnumber: '952',\n\tdigits: 0,\n\tcurrency: 'CFA franc BCEAO',\n\tcountries: ['benin', 'burkina faso', 'côte d\\'ivoire', 'guinea-bissau', 'mali', 'niger', 'senegal', 'togo']\n}, {\n\tcode: 'XPD',\n\tnumber: '964',\n\tcurrency: 'Palladium (one troy ounce)',\n}, {\n\tcode: 'XPF',\n\tnumber: '953',\n\tdigits: 0,\n\tcurrency: 'CFP franc (Franc du Pacifique)',\n\tcountries: ['french polynesia', 'new caledonia', 'wallis and futuna']\n}, {\n\tcode: 'XPT',\n\tnumber: '962',\n\tcurrency: 'Platinum (one troy ounce)',\n}, {\n\tcode: 'XTS',\n\tnumber: '963',\n\tcurrency: 'Code reserved for testing purposes',\n}, {\n\tcode: 'XXX',\n\tnumber: '999',\n\tcurrency: 'No currency',\n}, {\n\tcode: 'YER',\n\tnumber: '886',\n\tdigits: 2,\n\tcurrency: 'Yemeni rial',\n\tcountries: ['yemen']\n}, {\n\tcode: 'ZAR',\n\tnumber: '710',\n\tdigits: 2,\n\tcurrency: 'South African rand',\n\tcountries: ['south africa']\n}, {\n\tcode: 'ZMW',\n\tnumber: '967',\n\tdigits: 2,\n\tcurrency: 'Zambian kwacha',\n\tcountries: ['zambia']\n}];\n","var first = require('first-match');\nvar nub = require('nub');\nvar data = require('./data');\n\nvar code = function(code) {\n\tcode = code.toUpperCase();\n\n\treturn first(data, function(c) {\n\t\treturn c.code === code;\n\t});\n};\nvar country = function(country) {\n\tcountry = country.toLowerCase();\n\n\treturn data.filter(function(c) {\n\t\treturn (c.countries || []).indexOf(country) > -1;\n\t});\n};\nvar number = function(number) {\n\treturn first(data, function(c) {\n\t\treturn c.number === String(number);\n\t});\n};\nvar codes = function() {\n\treturn data.map(function(c) {\n\t\treturn c.code;\n\t});\n};\nvar countries = function() {\n\tvar m = data.filter(function(c) {\n\t\treturn c.countries;\n\t}).map(function(c) {\n\t\treturn c.countries;\n\t});\n\treturn nub(Array.prototype.concat.apply([], m));\n};\n\nexports.code = code;\nexports.country = country;\nexports.number = number;\nexports.codes = codes;\nexports.countries = countries;\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar rfc4648 = require('rfc4648');\n\nfunction makeNodeDisklet(path) {\n throw new Error('makeNodeDisklet is not available on this platform');\n}\nfunction makeReactNativeDisklet() {\n throw new Error('makeReactNativeDisklet is not available on this platform');\n}\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n/**\n * Interprets a path as a series of folder lookups,\n * handling special components like `.` and `..`.\n */\nfunction normalizePath(path) {\n if (/^\\//.test(path)) throw new Error('Absolute paths are not supported');\n var parts = path.split('/'); // Shift down good elements, dropping bad ones:\n\n var i = 0; // Read index\n\n var j = 0; // Write index\n\n while (i < parts.length) {\n var part = parts[i++];\n if (part === '..') j--;else if (part !== '.' && part !== '') parts[j++] = part;\n if (j < 0) throw new Error('Path would escape folder');\n } // Array items from 0 to j are the path:\n\n\n return parts.slice(0, j).join('/');\n}\n/**\n * Appends a slash if the path isn't blank.\n */\n\nfunction folderizePath(path) {\n return path === '' ? path : path + '/';\n}\n\n/**\n * Lists the keys in a localStorage object.\n */\nfunction storageKeys(storage) {\n var out = [];\n\n for (var i = 0; i < storage.length; ++i) {\n var _key = storage.key(i);\n\n if (_key != null) out.push(_key);\n }\n\n return out;\n}\n/**\n * Emulates a filesystem in memory.\n */\n\n\nfunction makeLocalStorageDisklet(storage, opts) {\n if (storage === void 0) {\n storage = window.localStorage;\n }\n\n if (opts === void 0) {\n opts = {};\n }\n\n var prefix = opts.prefix != null ? folderizePath(opts.prefix) : '/';\n return {\n \"delete\": function _delete(path) {\n var file = normalizePath(path); // Try deleteing as a file:\n\n if (storage.getItem(prefix + file) != null) {\n storage.removeItem(prefix + file);\n } // Try deleting as a folder:\n\n\n var folder = folderizePath(file);\n\n for (var _i2 = 0, _storageKeys2 = storageKeys(storage); _i2 < _storageKeys2.length; _i2++) {\n var _key2 = _storageKeys2[_i2];\n if (_key2.indexOf(prefix + folder) === 0) storage.removeItem(_key2);\n }\n\n return Promise.resolve();\n },\n getData: function getData(path) {\n return this.getText(path).then(function (text) {\n return rfc4648.base64.parse(text);\n });\n },\n getText: function getText(path) {\n var file = normalizePath(path);\n var item = storage.getItem(prefix + file);\n\n if (item == null) {\n return Promise.reject(new Error(\"Cannot load \\\"\" + file + \"\\\"\"));\n }\n\n return Promise.resolve(item);\n },\n list: function list(path) {\n return _asyncToGenerator(function* () {\n if (path === void 0) {\n path = '';\n }\n\n var file = normalizePath(path);\n var out = {}; // Try the path as a file:\n\n if (storage.getItem(prefix + file) != null) out[file] = 'file'; // Try the path as a folder:\n\n var folder = folderizePath(file);\n\n for (var _i4 = 0, _storageKeys4 = storageKeys(storage); _i4 < _storageKeys4.length; _i4++) {\n var _key3 = _storageKeys4[_i4];\n if (_key3.indexOf(prefix + folder) !== 0) continue;\n\n var slash = _key3.indexOf('/', prefix.length + folder.length);\n\n if (slash < 0) out[_key3.slice(prefix.length)] = 'file';else out[_key3.slice(prefix.length, slash)] = 'folder';\n }\n\n return out;\n })();\n },\n setData: function setData(path, data) {\n return this.setText(path, rfc4648.base64.stringify(data));\n },\n setText: function setText(path, text) {\n if (typeof text !== 'string') {\n return Promise.reject(new TypeError('setText expects a string'));\n }\n\n storage.setItem(prefix + normalizePath(path), text);\n return Promise.resolve();\n }\n };\n}\n\n/**\n * Emulates a filesystem in memory.\n */\nfunction makeMemoryDisklet(storage) {\n if (storage === void 0) {\n storage = {};\n }\n\n return {\n \"delete\": function _delete(path) {\n var file = normalizePath(path); // Try deleteing as a file:\n\n if (storage['/' + file] != null) delete storage['/' + file]; // Try deleting as a folder:\n\n var folder = folderizePath(file);\n\n for (var _i2 = 0, _Object$keys2 = Object.keys(storage); _i2 < _Object$keys2.length; _i2++) {\n var _key = _Object$keys2[_i2];\n if (_key.indexOf('/' + folder) === 0) delete storage[_key];\n }\n\n return Promise.resolve();\n },\n getData: function getData(path) {\n var file = normalizePath(path);\n var item = storage['/' + file];\n\n if (item == null) {\n return Promise.reject(new Error(\"Cannot load \\\"\" + file + \"\\\"\"));\n }\n\n if (typeof item === 'string') {\n return Promise.reject(new Error(\"\\\"\" + file + \"\\\" is a text file.\"));\n }\n\n return Promise.resolve(item);\n },\n getText: function getText(path) {\n var file = normalizePath(path);\n var item = storage['/' + file];\n\n if (item == null) {\n return Promise.reject(new Error(\"Cannot load \\\"\" + file + \"\\\"\"));\n }\n\n if (typeof item !== 'string') {\n return Promise.reject(new Error(\"\\\"\" + file + \"\\\" is a binary file.\"));\n }\n\n return Promise.resolve(item);\n },\n list: function list(path) {\n return _asyncToGenerator(function* () {\n if (path === void 0) {\n path = '';\n }\n\n var file = normalizePath(path);\n var out = {}; // Try the path as a file:\n\n if (storage['/' + file] != null) out[file] = 'file'; // Try the path as a folder:\n\n var folder = folderizePath(file);\n\n for (var _i4 = 0, _Object$keys4 = Object.keys(storage); _i4 < _Object$keys4.length; _i4++) {\n var _key2 = _Object$keys4[_i4];\n if (_key2.indexOf('/' + folder) !== 0) continue;\n\n var slash = _key2.indexOf('/', 1 + folder.length);\n\n if (slash < 0) out[_key2.slice(1)] = 'file';else out[_key2.slice(1, slash)] = 'folder';\n }\n\n return out;\n })();\n },\n setData: function setData(path, data) {\n // We use `any` here becase Flow is too dumb to know that `ArrayLike`\n // is a perfectly acceptable argument to `Uint8Array.from`:\n var flowHack = data;\n var array = Uint8Array.from(flowHack);\n storage['/' + normalizePath(path)] = array;\n return Promise.resolve();\n },\n setText: function setText(path, text) {\n if (typeof text !== 'string') {\n return Promise.reject(new TypeError('setText expects a string'));\n }\n\n storage['/' + normalizePath(path)] = text;\n return Promise.resolve();\n }\n };\n}\n\nvar File = /*#__PURE__*/function () {\n function File(disklet, path) {\n this._disklet = disklet;\n this._path = path;\n }\n\n var _proto = File.prototype;\n\n _proto[\"delete\"] = function _delete() {\n return this._disklet[\"delete\"](this._path);\n };\n\n _proto.getData = function getData() {\n return this._disklet.getData(this._path);\n };\n\n _proto.getText = function getText() {\n return this._disklet.getText(this._path);\n };\n\n _proto.setData = function setData(data) {\n return this._disklet.setData(this._path, data);\n };\n\n _proto.setText = function setText(text) {\n return this._disklet.setText(this._path, text);\n };\n\n return File;\n}();\n\nvar Folder = /*#__PURE__*/function () {\n function Folder(disklet, path) {\n this._disklet = disklet;\n this._path = path;\n }\n\n var _proto2 = Folder.prototype;\n\n _proto2[\"delete\"] = function _delete() {\n return this._disklet[\"delete\"](this._path);\n };\n\n _proto2.file = function file(path) {\n return new File(this._disklet, this._path + '/' + path);\n };\n\n _proto2.folder = function folder(path) {\n return new Folder(this._disklet, this._path + '/' + path);\n };\n\n _proto2.listFiles = function listFiles() {\n return this._disklet.list(this._path).then(function (list) {\n return Object.keys(list).filter(function (path) {\n return list[path] === 'file';\n }).map(function (path) {\n return path.replace(/^.*\\//, '');\n });\n });\n };\n\n _proto2.listFolders = function listFolders() {\n return this._disklet.list(this._path).then(function (list) {\n return Object.keys(list).filter(function (path) {\n return list[path] === 'folder';\n }).map(function (path) {\n return path.replace(/^.*\\//, '');\n });\n });\n };\n\n return Folder;\n}();\n\nfunction downgradeDisklet(disklet) {\n return new Folder(disklet, '.');\n}\n\n/**\n * Interprets a path as a series of folder lookups,\n * handling special components like `.` and `..`.\n */\nfunction followPath(folder, parts) {\n var i = 0; // Read index\n\n var j = 0; // Write index\n // Shift down good elements, dropping bad ones:\n\n while (i < parts.length) {\n var part = parts[i++];\n if (part === '..') j--;else if (part !== '.' && part !== '') parts[j++] = part;\n if (j < 0) throw new Error('Path would escape folder');\n } // Navigate the folder:\n\n\n for (i = 0; i < j; ++i) {\n folder = folder.folder(parts[i]);\n }\n\n return folder;\n}\n/**\n * Navigates down to the file indicated by the path.\n */\n\n\nfunction locateFile(folder, path) {\n var parts = path.split('/');\n var filename = parts.pop();\n if (filename == null) throw new Error('Empty path');\n return followPath(folder, parts).file(filename);\n}\n/**\n * Navigates down to the sub-folder indicated by the path.\n */\n\nfunction locateFolder(folder, path) {\n var parts = path.split('/');\n return followPath(folder, parts);\n}\n\n/**\n * Applies an async function to all the files in a folder.\n */\nfunction mapFiles(folder, f) {\n return folder.listFiles().then(function (names) {\n return Promise.all(names.map(function (name) {\n return f(folder.file(name), name, folder);\n }));\n });\n}\n/**\n * Applies an async function to all the sub-folders in a folder.\n */\n\nfunction mapFolders(folder, f) {\n return folder.listFolders().then(function (names) {\n return Promise.all(names.map(function (name) {\n return f(folder.folder(name), name, folder);\n }));\n });\n}\n/**\n * Recursively applies an async function to all the files in a folder tree.\n * The file names are expanded into paths, and the result is a flat array.\n */\n\nfunction mapAllFiles(folder, f) {\n function recurse(folder, f, prefix) {\n return Promise.all([mapFiles(folder, function (file, name) {\n return f(file, prefix + name, folder);\n }), mapFolders(folder, function (folder, name) {\n return recurse(folder, f, prefix + name + '/');\n })]).then(function (_ref) {\n var files = _ref[0],\n folders = _ref[1];\n return files.concat.apply(files, folders);\n });\n }\n\n return recurse(folder, f, '');\n}\n\nfunction logConsole(path, operation) {\n console.log(operation + \" \\\"\" + path + \"\\\"\");\n}\n\nfunction log(path, operation, opts) {\n var _opts$callback = opts.callback,\n callback = _opts$callback === void 0 ? logConsole : _opts$callback,\n _opts$verbose = opts.verbose,\n verbose = _opts$verbose === void 0 ? false : _opts$verbose;\n\n if (verbose || /set|delete/.test(operation)) {\n callback(path, operation);\n }\n}\n\nvar LoggedFile = /*#__PURE__*/function () {\n function LoggedFile(file, path, opts) {\n this._file = file;\n this._path = path;\n this._opts = opts;\n }\n\n var _proto = LoggedFile.prototype;\n\n _proto[\"delete\"] = function _delete() {\n log(this._path, 'delete file', this._opts);\n return this._file[\"delete\"]();\n };\n\n _proto.getData = function getData() {\n log(this._path, 'get data', this._opts);\n return this._file.getData();\n };\n\n _proto.getText = function getText() {\n log(this._path, 'get text', this._opts);\n return this._file.getText();\n };\n\n _proto.setData = function setData(data) {\n log(this._path, 'set data', this._opts);\n return this._file.setData(data);\n };\n\n _proto.setText = function setText(text) {\n log(this._path, 'set text', this._opts);\n return this._file.setText(text);\n };\n\n _proto.getPath = function getPath() {\n return this._path;\n };\n\n return LoggedFile;\n}();\n\nvar LoggedFolder = /*#__PURE__*/function () {\n function LoggedFolder(folder, path, opts) {\n this._folder = folder;\n this._path = path;\n this._opts = opts;\n }\n\n var _proto2 = LoggedFolder.prototype;\n\n _proto2[\"delete\"] = function _delete() {\n log(this._path, 'delete folder', this._opts);\n return this._folder[\"delete\"]();\n };\n\n _proto2.file = function file(name) {\n return new LoggedFile(this._folder.file(name), this._path + name, this._opts);\n };\n\n _proto2.folder = function folder(name) {\n return new LoggedFolder(this._folder.folder(name), this._path + name + '/', this._opts);\n };\n\n _proto2.listFiles = function listFiles() {\n log(this._path, 'list files', this._opts);\n return this._folder.listFiles();\n };\n\n _proto2.listFolders = function listFolders() {\n log(this._path, 'list folders', this._opts);\n return this._folder.listFolders();\n };\n\n return LoggedFolder;\n}();\n\nfunction makeLoggedFolder(folder, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n return new LoggedFolder(folder, '', opts);\n}\n\nfunction removeDuplicates(master, fallback) {\n var blacklist = {};\n var out = [];\n master.forEach(function (item) {\n if (/\\._x_$/.test(item)) {\n blacklist[item] = true;\n } else {\n blacklist[item + '._x_'] = true;\n out.push(item);\n }\n });\n fallback.forEach(function (item) {\n if (!blacklist[item + '._x_']) out.push(item);\n });\n return out;\n}\n/**\n * A file within a unionFolder.\n */\n\n\nvar UnionFile = /*#__PURE__*/function () {\n function UnionFile(master, fallback, whiteout) {\n this._master = master;\n this._fallback = fallback;\n this._whiteout = whiteout;\n }\n\n var _proto = UnionFile.prototype;\n\n _proto[\"delete\"] = function _delete() {\n return Promise.all([this._whiteout.setData([]), this._master[\"delete\"]()[\"catch\"](function (e) {\n return null;\n })]);\n };\n\n _proto.getData = function getData() {\n var _this = this;\n\n return this._master.getData()[\"catch\"](function (e) {\n return _this._whiteout.getData().then(function (data) {\n throw new Error('File has been deleted');\n }, function (e) {\n return _this._fallback.getData();\n });\n });\n };\n\n _proto.getText = function getText() {\n var _this2 = this;\n\n return this._master.getText()[\"catch\"](function (e) {\n return _this2._whiteout.getData().then(function (data) {\n throw new Error('File has been deleted');\n }, function (e) {\n return _this2._fallback.getText();\n });\n });\n };\n\n _proto.setData = function setData(data) {\n return this._master.setData(data);\n };\n\n _proto.setText = function setText(text) {\n return this._master.setText(text);\n };\n\n _proto.getPath = function getPath() {\n throw new Error('Cannot call getPath on a Union Folder');\n };\n\n return UnionFile;\n}();\n/**\n * Reads and writes go to a master folder, but if a read fails,\n * we will also try the fallback folder.\n */\n\n\nvar UnionFolder = /*#__PURE__*/function () {\n function UnionFolder(master, fallback) {\n this._master = master;\n this._fallback = fallback;\n }\n\n var _proto2 = UnionFolder.prototype;\n\n _proto2[\"delete\"] = function _delete() {\n return Promise.all([mapFiles(this, function (file) {\n return file[\"delete\"]();\n }), mapFolders(this, function (folder) {\n return folder[\"delete\"]();\n })]).then(function () {\n return undefined;\n });\n };\n\n _proto2.file = function file(name) {\n return new UnionFile(this._master.file(name), this._fallback.file(name), this._master.file(name + '._x_'));\n };\n\n _proto2.folder = function folder(name) {\n return new UnionFolder(this._master.folder(name), this._fallback.folder(name));\n };\n\n _proto2.listFiles = function listFiles() {\n return Promise.all([this._master.listFiles(), this._fallback.listFiles()]).then(function (values) {\n return removeDuplicates(values[0], values[1]);\n });\n };\n\n _proto2.listFolders = function listFolders() {\n return Promise.all([this._master.listFolders(), this._fallback.listFolders()]).then(function (values) {\n return removeDuplicates(values[0], values[1]);\n });\n };\n\n return UnionFolder;\n}();\nfunction makeUnionFolder(master, fallback) {\n return new UnionFolder(master, fallback);\n}\n\nfunction navigateDisklet(disklet, path) {\n var prefix = folderizePath(normalizePath(path));\n return {\n \"delete\": function _delete(path) {\n return disklet[\"delete\"](prefix + path);\n },\n getData: function getData(path) {\n return disklet.getData(prefix + path);\n },\n getText: function getText(path) {\n return disklet.getText(prefix + path);\n },\n list: function list(path) {\n if (path === void 0) {\n path = '.';\n }\n\n return disklet.list(prefix + path).then(function (listing) {\n var out = {};\n\n for (var _path in listing) {\n out[_path.replace(prefix, '')] = listing[_path];\n }\n\n return out;\n });\n },\n setData: function setData(path, data) {\n return disklet.setData(prefix + path, data);\n },\n setText: function setText(path, text) {\n return disklet.setText(prefix + path, text);\n }\n };\n}\n\nfunction dumpData(disklet) {\n var json = {};\n return disklet.list().then(function (listing) {\n return Promise.all(Object.keys(listing).map(function (path) {\n var type = listing[path];\n return type === 'folder' ? dumpData(navigateDisklet(disklet, path)).then(function (folderData) {\n json[path] = folderData;\n }) : disklet.getText(path).then(function (data) {\n json[path] = JSON.parse(data);\n });\n })).then(function () {\n return json;\n });\n });\n}\n\n/**\n * Recursively lists a folder.\n */\nfunction deepList(disklet, path) {\n return disklet.list(path).then(function (list) {\n return (// Recurse into subfolders:\n Promise.all(Object.keys(list).filter(function (path) {\n return list[path] === 'folder';\n }).map(function (path) {\n return deepList(disklet, path);\n })).then(function (children) {\n return _extends.apply(void 0, [list].concat(children));\n })\n );\n });\n}\n/**\n * Filters a listing down to just an array of file paths.\n */\n\nfunction justFiles(listing) {\n return Object.keys(listing).filter(function (path) {\n return listing[path] === 'file';\n });\n}\n/**\n * Filters a listing down to just an array of folder paths.\n */\n\nfunction justFolders(listing) {\n return Object.keys(listing).filter(function (path) {\n return listing[path] === 'folder';\n });\n}\n\nfunction logDisklet(disklet, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n var _opts = opts,\n _opts$callback = _opts.callback,\n callback = _opts$callback === void 0 ? function (path, operation) {\n console.log(operation + \" \\\"\" + path + \"\\\"\");\n } : _opts$callback,\n _opts$verbose = _opts.verbose,\n verbose = _opts$verbose === void 0 ? false : _opts$verbose;\n\n var log = function log(operation, path) {\n if (verbose || /set|delete/.test(operation)) {\n callback(path, operation);\n }\n };\n\n return {\n \"delete\": function _delete(path) {\n log('delete', normalizePath(path));\n return disklet[\"delete\"](path);\n },\n getData: function getData(path) {\n log('get data', normalizePath(path));\n return disklet.getData(path);\n },\n getText: function getText(path) {\n log('get text', normalizePath(path));\n return disklet.getText(path);\n },\n list: function list(path) {\n log('list', path != null ? normalizePath(path) : '');\n return disklet.list(path);\n },\n setData: function setData(path, data) {\n log('set data', normalizePath(path));\n return disklet.setData(path, data);\n },\n setText: function setText(path, text) {\n log('set text', normalizePath(path));\n return disklet.setText(path, text);\n }\n };\n}\n\nfunction mergeDisklets(master, fallback) {\n return {\n \"delete\": function _delete(path) {\n return Promise.all([master[\"delete\"](path), fallback[\"delete\"](path)]);\n },\n getData: function getData(path) {\n return master.getData(path)[\"catch\"](function (e) {\n return fallback.getData(path);\n });\n },\n getText: function getText(path) {\n return master.getText(path)[\"catch\"](function (e) {\n return fallback.getText(path);\n });\n },\n list: function list(path) {\n return Promise.all([master.list(path), fallback.list(path)]).then(function (_ref) {\n var masterList = _ref[0],\n fallbackList = _ref[1];\n return _extends(fallbackList, masterList);\n });\n },\n setData: function setData(path, data) {\n return master.setData(path, data);\n },\n setText: function setText(path, text) {\n return master.setText(path, text);\n }\n };\n}\n\nfunction makeLocalStorageFolder(storage, opts) {\n return downgradeDisklet(makeLocalStorageDisklet(storage, opts));\n}\nfunction makeMemoryFolder(storage) {\n return downgradeDisklet(makeMemoryDisklet(storage));\n}\nfunction makeNodeFolder(path) {\n return downgradeDisklet(makeNodeDisklet());\n}\nfunction makeReactNativeFolder() {\n return downgradeDisklet(makeReactNativeDisklet());\n}\n\nexports.deepList = deepList;\nexports.downgradeDisklet = downgradeDisklet;\nexports.dumpData = dumpData;\nexports.justFiles = justFiles;\nexports.justFolders = justFolders;\nexports.locateFile = locateFile;\nexports.locateFolder = locateFolder;\nexports.logDisklet = logDisklet;\nexports.makeLocalStorageDisklet = makeLocalStorageDisklet;\nexports.makeLocalStorageFolder = makeLocalStorageFolder;\nexports.makeLoggedFolder = makeLoggedFolder;\nexports.makeMemoryDisklet = makeMemoryDisklet;\nexports.makeMemoryFolder = makeMemoryFolder;\nexports.makeNodeDisklet = makeNodeDisklet;\nexports.makeNodeFolder = makeNodeFolder;\nexports.makeReactNativeDisklet = makeReactNativeDisklet;\nexports.makeReactNativeFolder = makeReactNativeFolder;\nexports.makeUnionFolder = makeUnionFolder;\nexports.mapAllFiles = mapAllFiles;\nexports.mapFiles = mapFiles;\nexports.mapFolders = mapFolders;\nexports.mergeDisklets = mergeDisklets;\nexports.navigateDisklet = navigateDisklet;\n//# sourceMappingURL=disklet.web.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar cleaners = require('cleaners');\nvar crossFetch = require('cross-fetch');\nvar baseX = require('base-x');\nvar hashjs = require('hash.js');\nvar rfc4648 = require('rfc4648');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar crossFetch__default = /*#__PURE__*/_interopDefaultLegacy(crossFetch);\nvar baseX__default = /*#__PURE__*/_interopDefaultLegacy(baseX);\nvar hashjs__default = /*#__PURE__*/_interopDefaultLegacy(hashjs);\n\n/**\n * Interprets a path as a series of folder lookups,\n * handling special components like `.` and `..`.\n */\nfunction normalizePath(path) {\n if (/^\\//.test(path)) throw new Error('Absolute paths are not supported')\n const parts = path.split('/');\n\n // Shift down good elements, dropping bad ones:\n let i = 0; // Read index\n let j = 0; // Write index\n while (i < parts.length) {\n const part = parts[i++];\n if (part === '..') j--;\n else if (part !== '.' && part !== '') parts[j++] = part;\n\n if (j < 0) throw new Error('Path would escape folder')\n\n // If path is something like `dir/..` or `dir/dir/../..`\n if (j === 0 && i === parts.length)\n throw new Error('Path would evaluate to empty file name')\n }\n\n // Array items from 0 to j are the path:\n return parts.slice(0, j).join('/')\n}\n\n// Regexes:\nconst VALID_PATH_REGEX = /^[a-z0-9-_.]+(\\/+[a-z0-9-_.]+)*$/i;\nconst VALID_SYNC_KEY_REGEX = /^[a-f0-9]{40}$/;\n\n// Primitive Types\n\nconst asNonEmptyString = (raw) => {\n const str = cleaners.asString(raw);\n\n if (str === '') {\n throw new TypeError('Expected non empty string')\n }\n\n return str\n};\n\nconst asPath = (raw) => {\n const path = cleaners.asString(raw);\n\n try {\n if (VALID_PATH_REGEX.test(path)) return normalizePath(path)\n } catch (_) {}\n\n throw new Error(`Invalid path '${path}'`)\n};\n\nconst asSyncKey = (raw) => {\n const syncKey = cleaners.asString(raw);\n\n if (!VALID_SYNC_KEY_REGEX.test(syncKey)) {\n throw new TypeError(`Invalid sync key '${syncKey}'`)\n }\n\n return syncKey\n};\n\n\nconst asEdgeBox = cleaners.asObject({\n iv_hex: cleaners.asString,\n encryptionType: cleaners.asNumber,\n data_base64: cleaners.asString\n});\n\nconst asServerErrorResponse = cleaners.asObject({\n success: cleaners.asValue(false),\n message: cleaners.asString,\n stack: cleaners.asOptional(cleaners.asString)\n});\n\n\nconst asFileChange = cleaners.asEither(asEdgeBox, cleaners.asNull);\n\n\nconst asChangeSet = cleaners.asObject(asFileChange);\n\n// GET /v2/store\n\nconst asGetStoreParams = cleaners.asObject({\n syncKey: asSyncKey,\n hash: cleaners.asOptional(asNonEmptyString)\n});\n\n\n\n\nconst asGetStoreResponse = cleaners.asObject({\n hash: cleaners.asOptional(cleaners.asString),\n changes: asChangeSet\n});\n\n// POST /v2/store\n\nconst asPostStoreParams = cleaners.asObject({\n syncKey: asSyncKey,\n hash: cleaners.asOptional(asNonEmptyString)\n});\n\nconst asPostStoreBody = cleaners.asObject({\n changes: asChangeSet\n});\n\nconst asPostStoreResponse = cleaners.asObject({\n hash: cleaners.asString,\n changes: asChangeSet\n});\n\n// PUT /v2/store\n\nconst asPutStoreParams = cleaners.asObject({\n syncKey: asSyncKey\n});\n\nconst asPutStoreResponse = cleaners.asUndefined;\n\n/**\n * Common options as a final argument for most public client-side API\n */\n\n\n\n\n\n/**\n * E.g. used as the default log function for CommonOptions.\n */\nconst noOp = () => {};\n\nasync function apiRequest(\n request,\n asApiResponse,\n opts = {}\n) {\n const { log = noOp, fetch = crossFetch__default['default'] } = opts;\n const { method, url, body, numbUrl = url, headers = {} } = request;\n\n const start = Date.now();\n const response = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...headers\n },\n body: JSON.stringify(body)\n });\n const timeElapsed = Date.now() - start;\n\n log(`${method} ${numbUrl} returned ${response.status} in ${timeElapsed}ms`);\n\n const responseBody = await response.text();\n\n if (!response.ok)\n throw new Error(\n `Failed request ${method} ${numbUrl} failed ${response.status}: ${responseBody}`\n )\n\n const errorResponse = cleaners.asMaybe(asServerErrorResponse)(responseBody);\n\n if (errorResponse != null) {\n throw new Error(\n `Failed request ${method} ${numbUrl} failed ${response.status}: ${errorResponse.message}`\n )\n }\n\n const responseData = asApiResponse(\n responseBody.trim() !== '' ? JSON.parse(responseBody) : undefined\n );\n\n return responseData\n}\n\nconst base58Codec = baseX__default['default'](\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\n\nconst syncKeyToRepoId = (syncKey) => {\n const bytes = rfc4648.base16.parse(syncKey);\n const hashBytes = sha256(sha256(bytes));\n return base58Codec.encode(hashBytes)\n};\n\nfunction sha256(data) {\n const hash = hashjs__default['default'].sha256();\n return Uint8Array.from(hash.update(data).digest())\n}\n\nfunction shuffle(array) {\n for (let i = array.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n ;[array[i], array[j]] = [array[j], array[i]];\n }\n return array\n}\n\n/**\n * Could not reach the server at all.\n */\nclass NetworkError extends Error {\n \n\n constructor(message = 'Cannot reach the network') {\n super(message);\n this.name = 'NetworkError';\n }\n}\n\nfunction makeTtlCache(\n getter,\n ttl\n) {\n // End of life timestamp\n let eol = Date.now() + ttl;\n // Cached value\n let cachedValue = getter(undefined);\n\n return {\n get: () => {\n if (Date.now() > eol || cachedValue == null) {\n eol = Date.now() + ttl;\n const value = getter(cachedValue);\n cachedValue = value;\n }\n return cachedValue\n }\n }\n}\n\nconst asEdgeServers = cleaners.asObject({\n infoServers: cleaners.asArray(cleaners.asString),\n syncServers: cleaners.asArray(cleaners.asString)\n});\n\nconst defaultServerInfo = {\n infoServers: ['https://info1.edge.app'],\n syncServers: [\n 'https://sync-us1.edge.app',\n 'https://sync-us2.edge.app',\n 'https://sync-us3.edge.app',\n 'https://sync-us4.edge.app',\n 'https://sync-us5.edge.app',\n 'https://sync-us6.edge.app',\n 'https://sync-eu1.edge.app',\n 'https://sync-eu2.edge.app',\n 'https://sync-eu3.edge.app',\n 'https://sync-eu4.edge.app',\n 'https://sync-eu5.edge.app',\n 'https://sync-eu6.edge.app'\n ]\n};\n\n\n\n\n\n\n\n\n\nfunction makeInfoClient(opts = {}) {\n // 10 min TTL by default\n const { serverInfoCacheTTL = 10 * 60 * 1000 } = opts;\n // Initialize info servers list with seed info servers\n let infoServers = defaultServerInfo.infoServers;\n\n const edgeServerInfo = makeTtlCache(\n async (prev = Promise.resolve(defaultServerInfo)) =>\n await fetchEdgeServers(infoServers, opts).catch(async _ => await prev),\n serverInfoCacheTTL\n );\n\n return {\n /**\n * Returns the cached edgeServerInfo\n */\n async getEdgeServers() {\n const out = await edgeServerInfo.get();\n\n // Update infoServers list\n if (out.infoServers.length > 0) {\n infoServers = out.infoServers;\n }\n\n return out\n }\n }\n}\n\n/**\n * Fetches list of servers from the info server(s)\n */\nasync function fetchEdgeServers(\n infoServers,\n opts = {}\n) {\n const { log = noOp, fetch = crossFetch__default['default'] } = opts;\n let error = new Error('No info servers');\n\n // Retrieve the server lists from one of the info servers\n for (const infoServer of infoServers) {\n const [method, endpoint] = ['GET', '/v1/edgeServers'];\n const start = Date.now();\n const uri = `${infoServer}${endpoint}`;\n\n try {\n const response = await fetch(uri, {\n method,\n headers: {\n 'Content-Type': 'application/json'\n }\n }).catch(error => {\n const time = Date.now() - start;\n const message = `${method} ${uri} failed in ${time}ms, ${String(error)}`;\n log(message);\n throw new NetworkError(message)\n });\n const { ok, status } = response;\n const timeElapsed = Date.now() - start;\n const message = `${method} ${uri} returned ${status} in ${timeElapsed}ms`;\n\n // HTTP Error Response\n if (!ok) {\n log(message);\n throw new NetworkError(message)\n }\n\n // Successful response\n log(message);\n const responseBody = await response.text();\n const out = JSON.parse(responseBody);\n return asEdgeServers(out)\n } catch (e) {\n error = e;\n continue\n }\n }\n\n // If no successful response from the info servers, then throw the last error\n throw error\n}\n\nfunction _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction makeSyncClient(opts = {}) {\n const infoClient = makeInfoClient(opts);\n\n // Returns the sync servers from the info client shuffled\n async function shuffledSyncServers() {\n const { syncServers } = await infoClient.getEdgeServers();\n return shuffle(syncServers)\n }\n\n return {\n async createRepo(syncKey, apiKey) {\n const syncServers = await shuffledSyncServers();\n let error = new Error(\n `Failed to create repo ${syncKey}: empty sync server list`\n );\n\n for (const syncServer of syncServers) {\n const url = `${syncServer}/api/v2/store/${syncKey}`;\n const numbUrl = url.replace(syncKey, `<${syncKeyToRepoId(syncKey)}>`);\n\n try {\n return await apiRequest(\n {\n method: 'PUT',\n url,\n numbUrl,\n headers: apiKey != null ? { 'X-API-Key': apiKey } : {}\n },\n asPutStoreResponse,\n opts\n )\n } catch (err) {\n error = err;\n }\n }\n\n throw error\n },\n\n async readRepo(syncKey, lastHash) {\n const syncServers = await shuffledSyncServers();\n let error = new Error(\n `Failed to read repo ${syncKey}: empty sync server list`\n );\n\n for (const syncServer of syncServers) {\n const url = `${syncServer}/api/v2/store/${syncKey}/${_nullishCoalesce(lastHash, () => ( ''))}`;\n const numbUrl = url.replace(syncKey, `<${syncKeyToRepoId(syncKey)}>`);\n\n try {\n return await apiRequest(\n { method: 'GET', url, numbUrl },\n asGetStoreResponse,\n opts\n )\n } catch (err) {\n error = err;\n }\n }\n\n throw error\n },\n\n async updateRepo(syncKey, lastHash, body) {\n const syncServers = await shuffledSyncServers();\n let error = new Error(\n `Failed to update repo ${syncKey}: empty sync server list`\n );\n\n for (const syncServer of syncServers) {\n const url = `${syncServer}/api/v2/store/${syncKey}/${_nullishCoalesce(lastHash, () => ( ''))}`;\n const numbUrl = url.replace(syncKey, `<${syncKeyToRepoId(syncKey)}>`);\n\n try {\n return await apiRequest(\n { method: 'POST', url, numbUrl, body },\n asPostStoreResponse,\n opts\n )\n } catch (err) {\n error = err;\n }\n }\n\n throw error\n }\n }\n}\n\nexports.asChangeSet = asChangeSet;\nexports.asEdgeBox = asEdgeBox;\nexports.asFileChange = asFileChange;\nexports.asGetStoreParams = asGetStoreParams;\nexports.asGetStoreResponse = asGetStoreResponse;\nexports.asNonEmptyString = asNonEmptyString;\nexports.asPath = asPath;\nexports.asPostStoreBody = asPostStoreBody;\nexports.asPostStoreParams = asPostStoreParams;\nexports.asPostStoreResponse = asPostStoreResponse;\nexports.asPutStoreParams = asPutStoreParams;\nexports.asPutStoreResponse = asPutStoreResponse;\nexports.asServerErrorResponse = asServerErrorResponse;\nexports.asSyncKey = asSyncKey;\nexports.makeSyncClient = makeSyncClient;\nexports.syncKeyToRepoId = syncKeyToRepoId;\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n'use strict';\n\nfunction assign(target, firstSource) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nfunction polyfill() {\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: assign\n });\n }\n}\n\nmodule.exports = {\n assign: assign,\n polyfill: polyfill\n};\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ethUtil = require('ethereumjs-util');\nvar fees = require('ethereum-common/params.json');\nvar BN = ethUtil.BN;\n\n// secp256k1n/2\nvar N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16);\n\n/**\n * Creates a new transaction object.\n *\n * @example\n * var rawTx = {\n * nonce: '00',\n * gasPrice: '09184e72a000',\n * gasLimit: '2710',\n * to: '0000000000000000000000000000000000000000',\n * value: '00',\n * data: '7f7465737432000000000000000000000000000000000000000000000000000000600057',\n * v: '1c',\n * r: '5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab',\n * s: '5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13'\n * };\n * var tx = new Transaction(rawTx);\n *\n * @class\n * @param {Buffer | Array | Object} data a transaction can be initiailized with either a buffer containing the RLP serialized transaction or an array of buffers relating to each of the tx Properties, listed in order below in the exmple.\n *\n * Or lastly an Object containing the Properties of the transaction like in the Usage example.\n *\n * For Object and Arrays each of the elements can either be a Buffer, a hex-prefixed (0x) String , Number, or an object with a toBuffer method such as Bignum\n *\n * @property {Buffer} raw The raw rlp encoded transaction\n * @param {Buffer} data.nonce nonce number\n * @param {Buffer} data.gasLimit transaction gas limit\n * @param {Buffer} data.gasPrice transaction gas price\n * @param {Buffer} data.to to the to address\n * @param {Buffer} data.value the amount of ether sent\n * @param {Buffer} data.data this will contain the data of the message or the init of a contract\n * @param {Buffer} data.v EC signature parameter\n * @param {Buffer} data.r EC signature parameter\n * @param {Buffer} data.s EC recovery ID\n * @param {Number} data.chainId EIP 155 chainId - mainnet: 1, ropsten: 3\n * */\n\nvar Transaction = function () {\n function Transaction(data) {\n _classCallCheck(this, Transaction);\n\n data = data || {};\n // Define Properties\n var fields = [{\n name: 'nonce',\n length: 32,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 'gasPrice',\n length: 32,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 'gasLimit',\n alias: 'gas',\n length: 32,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 'to',\n allowZero: true,\n length: 20,\n default: new Buffer([])\n }, {\n name: 'value',\n length: 32,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 'data',\n alias: 'input',\n allowZero: true,\n default: new Buffer([])\n }, {\n name: 'v',\n allowZero: true,\n default: new Buffer([0x1c])\n }, {\n name: 'r',\n length: 32,\n allowZero: true,\n allowLess: true,\n default: new Buffer([])\n }, {\n name: 's',\n length: 32,\n allowZero: true,\n allowLess: true,\n default: new Buffer([])\n }];\n\n /**\n * Returns the rlp encoding of the transaction\n * @method serialize\n * @return {Buffer}\n * @memberof Transaction\n * @name serialize\n */\n // attached serialize\n ethUtil.defineProperties(this, fields, data);\n\n /**\n * @property {Buffer} from (read only) sender address of this transaction, mathematically derived from other parameters.\n * @name from\n * @memberof Transaction\n */\n Object.defineProperty(this, 'from', {\n enumerable: true,\n configurable: true,\n get: this.getSenderAddress.bind(this)\n });\n\n // calculate chainId from signature\n var sigV = ethUtil.bufferToInt(this.v);\n var chainId = Math.floor((sigV - 35) / 2);\n if (chainId < 0) chainId = 0;\n\n // set chainId\n this._chainId = chainId || data.chainId || 0;\n this._homestead = true;\n }\n\n /**\n * If the tx's `to` is to the creation address\n * @return {Boolean}\n */\n\n\n Transaction.prototype.toCreationAddress = function toCreationAddress() {\n return this.to.toString('hex') === '';\n };\n\n /**\n * Computes a sha3-256 hash of the serialized tx\n * @param {Boolean} [includeSignature=true] whether or not to inculde the signature\n * @return {Buffer}\n */\n\n\n Transaction.prototype.hash = function hash(includeSignature) {\n if (includeSignature === undefined) includeSignature = true;\n\n // EIP155 spec:\n // when computing the hash of a transaction for purposes of signing or recovering,\n // instead of hashing only the first six elements (ie. nonce, gasprice, startgas, to, value, data),\n // hash nine elements, with v replaced by CHAIN_ID, r = 0 and s = 0\n\n var items = void 0;\n if (includeSignature) {\n items = this.raw;\n } else {\n if (this._chainId > 0) {\n var raw = this.raw.slice();\n this.v = this._chainId;\n this.r = 0;\n this.s = 0;\n items = this.raw;\n this.raw = raw;\n } else {\n items = this.raw.slice(0, 6);\n }\n }\n\n // create hash\n return ethUtil.rlphash(items);\n };\n\n /**\n * returns the public key of the sender\n * @return {Buffer}\n */\n\n\n Transaction.prototype.getChainId = function getChainId() {\n return this._chainId;\n };\n\n /**\n * returns the sender's address\n * @return {Buffer}\n */\n\n\n Transaction.prototype.getSenderAddress = function getSenderAddress() {\n if (this._from) {\n return this._from;\n }\n var pubkey = this.getSenderPublicKey();\n this._from = ethUtil.publicToAddress(pubkey);\n return this._from;\n };\n\n /**\n * returns the public key of the sender\n * @return {Buffer}\n */\n\n\n Transaction.prototype.getSenderPublicKey = function getSenderPublicKey() {\n if (!this._senderPubKey || !this._senderPubKey.length) {\n if (!this.verifySignature()) throw new Error('Invalid Signature');\n }\n return this._senderPubKey;\n };\n\n /**\n * Determines if the signature is valid\n * @return {Boolean}\n */\n\n\n Transaction.prototype.verifySignature = function verifySignature() {\n var msgHash = this.hash(false);\n // All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid.\n if (this._homestead && new BN(this.s).cmp(N_DIV_2) === 1) {\n return false;\n }\n\n try {\n var v = ethUtil.bufferToInt(this.v);\n if (this._chainId > 0) {\n v -= this._chainId * 2 + 8;\n }\n this._senderPubKey = ethUtil.ecrecover(msgHash, v, this.r, this.s);\n } catch (e) {\n return false;\n }\n\n return !!this._senderPubKey;\n };\n\n /**\n * sign a transaction with a given a private key\n * @param {Buffer} privateKey\n */\n\n\n Transaction.prototype.sign = function sign(privateKey) {\n var msgHash = this.hash(false);\n var sig = ethUtil.ecsign(msgHash, privateKey);\n if (this._chainId > 0) {\n sig.v += this._chainId * 2 + 8;\n }\n Object.assign(this, sig);\n };\n\n /**\n * The amount of gas paid for the data in this tx\n * @return {BN}\n */\n\n\n Transaction.prototype.getDataFee = function getDataFee() {\n var data = this.raw[5];\n var cost = new BN(0);\n for (var i = 0; i < data.length; i++) {\n data[i] === 0 ? cost.iaddn(fees.txDataZeroGas.v) : cost.iaddn(fees.txDataNonZeroGas.v);\n }\n return cost;\n };\n\n /**\n * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee)\n * @return {BN}\n */\n\n\n Transaction.prototype.getBaseFee = function getBaseFee() {\n var fee = this.getDataFee().iaddn(fees.txGas.v);\n if (this._homestead && this.toCreationAddress()) {\n fee.iaddn(fees.txCreation.v);\n }\n return fee;\n };\n\n /**\n * the up front amount that an account must have for this transaction to be valid\n * @return {BN}\n */\n\n\n Transaction.prototype.getUpfrontCost = function getUpfrontCost() {\n return new BN(this.gasLimit).imul(new BN(this.gasPrice)).iadd(new BN(this.value));\n };\n\n /**\n * validates the signature and checks to see if it has enough gas\n * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean\n * @return {Boolean|String}\n */\n\n\n Transaction.prototype.validate = function validate(stringError) {\n var errors = [];\n if (!this.verifySignature()) {\n errors.push('Invalid Signature');\n }\n\n if (this.getBaseFee().cmp(new BN(this.gasLimit)) > 0) {\n errors.push(['gas limit is too low. Need at least ' + this.getBaseFee()]);\n }\n\n if (stringError === undefined || stringError === false) {\n return errors.length === 0;\n } else {\n return errors.join(' ');\n }\n };\n\n return Transaction;\n}();\n\nmodule.exports = Transaction;","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar createKeccakHash = require('keccak');\nvar secp256k1 = require('secp256k1');\nvar assert = require('assert');\nvar rlp = require('rlp');\nvar BN = require('bn.js');\nvar createHash = require('create-hash');\nvar Buffer = require('safe-buffer').Buffer;\nObject.assign(exports, require('ethjs-util'));\n\n/**\n * the max integer that this VM can handle (a ```BN```)\n * @var {BN} MAX_INTEGER\n */\nexports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);\n\n/**\n * 2^256 (a ```BN```)\n * @var {BN} TWO_POW256\n */\nexports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16);\n\n/**\n * Keccak-256 hash of null (a ```String```)\n * @var {String} KECCAK256_NULL_S\n */\nexports.KECCAK256_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';\nexports.SHA3_NULL_S = exports.KECCAK256_NULL_S;\n\n/**\n * Keccak-256 hash of null (a ```Buffer```)\n * @var {Buffer} KECCAK256_NULL\n */\nexports.KECCAK256_NULL = Buffer.from(exports.KECCAK256_NULL_S, 'hex');\nexports.SHA3_NULL = exports.KECCAK256_NULL;\n\n/**\n * Keccak-256 of an RLP of an empty array (a ```String```)\n * @var {String} KECCAK256_RLP_ARRAY_S\n */\nexports.KECCAK256_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347';\nexports.SHA3_RLP_ARRAY_S = exports.KECCAK256_RLP_ARRAY_S;\n\n/**\n * Keccak-256 of an RLP of an empty array (a ```Buffer```)\n * @var {Buffer} KECCAK256_RLP_ARRAY\n */\nexports.KECCAK256_RLP_ARRAY = Buffer.from(exports.KECCAK256_RLP_ARRAY_S, 'hex');\nexports.SHA3_RLP_ARRAY = exports.KECCAK256_RLP_ARRAY;\n\n/**\n * Keccak-256 hash of the RLP of null (a ```String```)\n * @var {String} KECCAK256_RLP_S\n */\nexports.KECCAK256_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421';\nexports.SHA3_RLP_S = exports.KECCAK256_RLP_S;\n\n/**\n * Keccak-256 hash of the RLP of null (a ```Buffer```)\n * @var {Buffer} KECCAK256_RLP\n */\nexports.KECCAK256_RLP = Buffer.from(exports.KECCAK256_RLP_S, 'hex');\nexports.SHA3_RLP = exports.KECCAK256_RLP;\n\n/**\n * [`BN`](https://github.com/indutny/bn.js)\n * @var {Function}\n */\nexports.BN = BN;\n\n/**\n * [`rlp`](https://github.com/ethereumjs/rlp)\n * @var {Function}\n */\nexports.rlp = rlp;\n\n/**\n * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)\n * @var {Object}\n */\nexports.secp256k1 = secp256k1;\n\n/**\n * Returns a buffer filled with 0s\n * @method zeros\n * @param {Number} bytes the number of bytes the buffer should be\n * @return {Buffer}\n */\nexports.zeros = function (bytes) {\n return Buffer.allocUnsafe(bytes).fill(0);\n};\n\n/**\n * Returns a zero address\n * @method zeroAddress\n * @return {String}\n */\nexports.zeroAddress = function () {\n var addressLength = 20;\n var zeroAddress = exports.zeros(addressLength);\n return exports.bufferToHex(zeroAddress);\n};\n\n/**\n * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @method lsetLength\n * @param {Buffer|Array} msg the value to pad\n * @param {Number} length the number of bytes the output should be\n * @param {Boolean} [right=false] whether to start padding form the left or right\n * @return {Buffer|Array}\n */\nexports.setLengthLeft = exports.setLength = function (msg, length, right) {\n var buf = exports.zeros(length);\n msg = exports.toBuffer(msg);\n if (right) {\n if (msg.length < length) {\n msg.copy(buf);\n return buf;\n }\n return msg.slice(0, length);\n } else {\n if (msg.length < length) {\n msg.copy(buf, length - msg.length);\n return buf;\n }\n return msg.slice(-length);\n }\n};\n\n/**\n * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @param {Buffer|Array} msg the value to pad\n * @param {Number} length the number of bytes the output should be\n * @return {Buffer|Array}\n */\nexports.setLengthRight = function (msg, length) {\n return exports.setLength(msg, length, true);\n};\n\n/**\n * Trims leading zeros from a `Buffer` or an `Array`\n * @param {Buffer|Array|String} a\n * @return {Buffer|Array|String}\n */\nexports.unpad = exports.stripZeros = function (a) {\n a = exports.stripHexPrefix(a);\n var first = a[0];\n while (a.length > 0 && first.toString() === '0') {\n a = a.slice(1);\n first = a[0];\n }\n return a;\n};\n/**\n * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.\n * @param {*} v the value\n */\nexports.toBuffer = function (v) {\n if (!Buffer.isBuffer(v)) {\n if (Array.isArray(v)) {\n v = Buffer.from(v);\n } else if (typeof v === 'string') {\n if (exports.isHexString(v)) {\n v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex');\n } else {\n v = Buffer.from(v);\n }\n } else if (typeof v === 'number') {\n v = exports.intToBuffer(v);\n } else if (v === null || v === undefined) {\n v = Buffer.allocUnsafe(0);\n } else if (BN.isBN(v)) {\n v = v.toArrayLike(Buffer);\n } else if (v.toArray) {\n // converts a BN to a Buffer\n v = Buffer.from(v.toArray());\n } else {\n throw new Error('invalid type');\n }\n }\n return v;\n};\n\n/**\n * Converts a `Buffer` to a `Number`\n * @param {Buffer} buf\n * @return {Number}\n * @throws If the input number exceeds 53 bits.\n */\nexports.bufferToInt = function (buf) {\n return new BN(exports.toBuffer(buf)).toNumber();\n};\n\n/**\n * Converts a `Buffer` into a hex `String`\n * @param {Buffer} buf\n * @return {String}\n */\nexports.bufferToHex = function (buf) {\n buf = exports.toBuffer(buf);\n return '0x' + buf.toString('hex');\n};\n\n/**\n * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.\n * @param {Buffer} num\n * @return {BN}\n */\nexports.fromSigned = function (num) {\n return new BN(num).fromTwos(256);\n};\n\n/**\n * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.\n * @param {BN} num\n * @return {Buffer}\n */\nexports.toUnsigned = function (num) {\n return Buffer.from(num.toTwos(256).toArray());\n};\n\n/**\n * Creates Keccak hash of the input\n * @param {Buffer|Array|String|Number} a the input data\n * @param {Number} [bits=256] the Keccak width\n * @return {Buffer}\n */\nexports.keccak = function (a, bits) {\n a = exports.toBuffer(a);\n if (!bits) bits = 256;\n\n return createKeccakHash('keccak' + bits).update(a).digest();\n};\n\n/**\n * Creates Keccak-256 hash of the input, alias for keccak(a, 256)\n * @param {Buffer|Array|String|Number} a the input data\n * @return {Buffer}\n */\nexports.keccak256 = function (a) {\n return exports.keccak(a);\n};\n\n/**\n * Creates SHA-3 (Keccak) hash of the input [OBSOLETE]\n * @param {Buffer|Array|String|Number} a the input data\n * @param {Number} [bits=256] the SHA-3 width\n * @return {Buffer}\n */\nexports.sha3 = exports.keccak;\n\n/**\n * Creates SHA256 hash of the input\n * @param {Buffer|Array|String|Number} a the input data\n * @return {Buffer}\n */\nexports.sha256 = function (a) {\n a = exports.toBuffer(a);\n return createHash('sha256').update(a).digest();\n};\n\n/**\n * Creates RIPEMD160 hash of the input\n * @param {Buffer|Array|String|Number} a the input data\n * @param {Boolean} padded whether it should be padded to 256 bits or not\n * @return {Buffer}\n */\nexports.ripemd160 = function (a, padded) {\n a = exports.toBuffer(a);\n var hash = createHash('rmd160').update(a).digest();\n if (padded === true) {\n return exports.setLength(hash, 32);\n } else {\n return hash;\n }\n};\n\n/**\n * Creates SHA-3 hash of the RLP encoded version of the input\n * @param {Buffer|Array|String|Number} a the input data\n * @return {Buffer}\n */\nexports.rlphash = function (a) {\n return exports.keccak(rlp.encode(a));\n};\n\n/**\n * Checks if the private key satisfies the rules of the curve secp256k1.\n * @param {Buffer} privateKey\n * @return {Boolean}\n */\nexports.isValidPrivate = function (privateKey) {\n return secp256k1.privateKeyVerify(privateKey);\n};\n\n/**\n * Checks if the public key satisfies the rules of the curve secp256k1\n * and the requirements of Ethereum.\n * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled\n * @param {Boolean} [sanitize=false] Accept public keys in other formats\n * @return {Boolean}\n */\nexports.isValidPublic = function (publicKey, sanitize) {\n if (publicKey.length === 64) {\n // Convert to SEC1 for secp256k1\n return secp256k1.publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey]));\n }\n\n if (!sanitize) {\n return false;\n }\n\n return secp256k1.publicKeyVerify(publicKey);\n};\n\n/**\n * Returns the ethereum address of a given public key.\n * Accepts \"Ethereum public keys\" and SEC1 encoded keys.\n * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled\n * @param {Boolean} [sanitize=false] Accept public keys in other formats\n * @return {Buffer}\n */\nexports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {\n pubKey = exports.toBuffer(pubKey);\n if (sanitize && pubKey.length !== 64) {\n pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1);\n }\n assert(pubKey.length === 64);\n // Only take the lower 160bits of the hash\n return exports.keccak(pubKey).slice(-20);\n};\n\n/**\n * Returns the ethereum public key of a given private key\n * @param {Buffer} privateKey A private key must be 256 bits wide\n * @return {Buffer}\n */\nvar privateToPublic = exports.privateToPublic = function (privateKey) {\n privateKey = exports.toBuffer(privateKey);\n // skip the type flag and use the X, Y points\n return secp256k1.publicKeyCreate(privateKey, false).slice(1);\n};\n\n/**\n * Converts a public key to the Ethereum format.\n * @param {Buffer} publicKey\n * @return {Buffer}\n */\nexports.importPublic = function (publicKey) {\n publicKey = exports.toBuffer(publicKey);\n if (publicKey.length !== 64) {\n publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1);\n }\n return publicKey;\n};\n\n/**\n * ECDSA sign\n * @param {Buffer} msgHash\n * @param {Buffer} privateKey\n * @return {Object}\n */\nexports.ecsign = function (msgHash, privateKey) {\n var sig = secp256k1.sign(msgHash, privateKey);\n\n var ret = {};\n ret.r = sig.signature.slice(0, 32);\n ret.s = sig.signature.slice(32, 64);\n ret.v = sig.recovery + 27;\n return ret;\n};\n\n/**\n * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.\n * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`\n * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key\n * used to produce the signature.\n * @param message\n * @returns {Buffer} hash\n */\nexports.hashPersonalMessage = function (message) {\n var prefix = exports.toBuffer('\\x19Ethereum Signed Message:\\n' + message.length.toString());\n return exports.keccak(Buffer.concat([prefix, message]));\n};\n\n/**\n * ECDSA public key recovery from signature\n * @param {Buffer} msgHash\n * @param {Number} v\n * @param {Buffer} r\n * @param {Buffer} s\n * @return {Buffer} publicKey\n */\nexports.ecrecover = function (msgHash, v, r, s) {\n var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64);\n var recovery = v - 27;\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Invalid signature v value');\n }\n var senderPubKey = secp256k1.recover(msgHash, signature, recovery);\n return secp256k1.publicKeyConvert(senderPubKey, false).slice(1);\n};\n\n/**\n * Convert signature parameters into the format of `eth_sign` RPC method\n * @param {Number} v\n * @param {Buffer} r\n * @param {Buffer} s\n * @return {String} sig\n */\nexports.toRpcSig = function (v, r, s) {\n // NOTE: with potential introduction of chainId this might need to be updated\n if (v !== 27 && v !== 28) {\n throw new Error('Invalid recovery id');\n }\n\n // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin\n // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053\n return exports.bufferToHex(Buffer.concat([exports.setLengthLeft(r, 32), exports.setLengthLeft(s, 32), exports.toBuffer(v - 27)]));\n};\n\n/**\n * Convert signature format of the `eth_sign` RPC method to signature parameters\n * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053\n * @param {String} sig\n * @return {Object}\n */\nexports.fromRpcSig = function (sig) {\n sig = exports.toBuffer(sig);\n\n // NOTE: with potential introduction of chainId this might need to be updated\n if (sig.length !== 65) {\n throw new Error('Invalid signature length');\n }\n\n var v = sig[64];\n // support both versions of `eth_sign` responses\n if (v < 27) {\n v += 27;\n }\n\n return {\n v: v,\n r: sig.slice(0, 32),\n s: sig.slice(32, 64)\n };\n};\n\n/**\n * Returns the ethereum address of a given private key\n * @param {Buffer} privateKey A private key must be 256 bits wide\n * @return {Buffer}\n */\nexports.privateToAddress = function (privateKey) {\n return exports.publicToAddress(privateToPublic(privateKey));\n};\n\n/**\n * Checks if the address is a valid. Accepts checksummed addresses too\n * @param {String} address\n * @return {Boolean}\n */\nexports.isValidAddress = function (address) {\n return (/^0x[0-9a-fA-F]{40}$/.test(address)\n );\n};\n\n/**\n * Checks if a given address is a zero address\n * @method isZeroAddress\n * @param {String} address\n * @return {Boolean}\n */\nexports.isZeroAddress = function (address) {\n var zeroAddress = exports.zeroAddress();\n return zeroAddress === exports.addHexPrefix(address);\n};\n\n/**\n * Returns a checksummed address\n * @param {String} address\n * @return {String}\n */\nexports.toChecksumAddress = function (address) {\n address = exports.stripHexPrefix(address).toLowerCase();\n var hash = exports.keccak(address).toString('hex');\n var ret = '0x';\n\n for (var i = 0; i < address.length; i++) {\n if (parseInt(hash[i], 16) >= 8) {\n ret += address[i].toUpperCase();\n } else {\n ret += address[i];\n }\n }\n\n return ret;\n};\n\n/**\n * Checks if the address is a valid checksummed address\n * @param {Buffer} address\n * @return {Boolean}\n */\nexports.isValidChecksumAddress = function (address) {\n return exports.isValidAddress(address) && exports.toChecksumAddress(address) === address;\n};\n\n/**\n * Generates an address of a newly created contract\n * @param {Buffer} from the address which is creating this new address\n * @param {Buffer} nonce the nonce of the from account\n * @return {Buffer}\n */\nexports.generateAddress = function (from, nonce) {\n from = exports.toBuffer(from);\n nonce = new BN(nonce);\n\n if (nonce.isZero()) {\n // in RLP we want to encode null in the case of zero nonce\n // read the RLP documentation for an answer if you dare\n nonce = null;\n } else {\n nonce = Buffer.from(nonce.toArray());\n }\n\n // Only take the lower 160bits of the hash\n return exports.rlphash([from, nonce]).slice(-20);\n};\n\n/**\n * Returns true if the supplied address belongs to a precompiled account (Byzantium)\n * @param {Buffer|String} address\n * @return {Boolean}\n */\nexports.isPrecompiled = function (address) {\n var a = exports.unpad(address);\n return a.length === 1 && a[0] >= 1 && a[0] <= 8;\n};\n\n/**\n * Adds \"0x\" to a given `String` if it does not already start with \"0x\"\n * @param {String} str\n * @return {String}\n */\nexports.addHexPrefix = function (str) {\n if (typeof str !== 'string') {\n return str;\n }\n\n return exports.isHexPrefixed(str) ? str : '0x' + str;\n};\n\n/**\n * Validate ECDSA signature\n * @method isValidSignature\n * @param {Buffer} v\n * @param {Buffer} r\n * @param {Buffer} s\n * @param {Boolean} [homestead=true]\n * @return {Boolean}\n */\n\nexports.isValidSignature = function (v, r, s, homestead) {\n var SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16);\n var SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16);\n\n if (r.length !== 32 || s.length !== 32) {\n return false;\n }\n\n if (v !== 27 && v !== 28) {\n return false;\n }\n\n r = new BN(r);\n s = new BN(s);\n\n if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {\n return false;\n }\n\n if (homestead === false && new BN(s).cmp(SECP256K1_N_DIV_2) === 1) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Converts a `Buffer` or `Array` to JSON\n * @param {Buffer|Array} ba\n * @return {Array|String|null}\n */\nexports.baToJSON = function (ba) {\n if (Buffer.isBuffer(ba)) {\n return '0x' + ba.toString('hex');\n } else if (ba instanceof Array) {\n var array = [];\n for (var i = 0; i < ba.length; i++) {\n array.push(exports.baToJSON(ba[i]));\n }\n return array;\n }\n};\n\n/**\n * Defines properties on a `Object`. It make the assumption that underlying data is binary.\n * @param {Object} self the `Object` to define properties on\n * @param {Array} fields an array fields to define. Fields can contain:\n * * `name` - the name of the properties\n * * `length` - the number of bytes the field can have\n * * `allowLess` - if the field can be less than the length\n * * `allowEmpty`\n * @param {*} data data to be validated against the definitions\n */\nexports.defineProperties = function (self, fields, data) {\n self.raw = [];\n self._fields = [];\n\n // attach the `toJSON`\n self.toJSON = function (label) {\n if (label) {\n var obj = {};\n self._fields.forEach(function (field) {\n obj[field] = '0x' + self[field].toString('hex');\n });\n return obj;\n }\n return exports.baToJSON(this.raw);\n };\n\n self.serialize = function serialize() {\n return rlp.encode(self.raw);\n };\n\n fields.forEach(function (field, i) {\n self._fields.push(field.name);\n function getter() {\n return self.raw[i];\n }\n function setter(v) {\n v = exports.toBuffer(v);\n\n if (v.toString('hex') === '00' && !field.allowZero) {\n v = Buffer.allocUnsafe(0);\n }\n\n if (field.allowLess && field.length) {\n v = exports.stripZeros(v);\n assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes');\n } else if (!(field.allowZero && v.length === 0) && field.length) {\n assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length);\n }\n\n self.raw[i] = v;\n }\n\n Object.defineProperty(self, field.name, {\n enumerable: true,\n configurable: true,\n get: getter,\n set: setter\n });\n\n if (field.default) {\n self[field.name] = field.default;\n }\n\n // attach alias\n if (field.alias) {\n Object.defineProperty(self, field.alias, {\n enumerable: false,\n configurable: true,\n set: setter,\n get: getter\n });\n }\n });\n\n // if the constuctor is passed data\n if (data) {\n if (typeof data === 'string') {\n data = Buffer.from(exports.stripHexPrefix(data), 'hex');\n }\n\n if (Buffer.isBuffer(data)) {\n data = rlp.decode(data);\n }\n\n if (Array.isArray(data)) {\n if (data.length > self._fields.length) {\n throw new Error('wrong number of fields in data');\n }\n\n // make sure all the items are buffers\n data.forEach(function (d, i) {\n self[self._fields[i]] = exports.toBuffer(d);\n });\n } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n var keys = Object.keys(data);\n fields.forEach(function (field) {\n if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name];\n if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias];\n });\n } else {\n throw new Error('invalid data');\n }\n }\n};","'use strict';\n\nvar isHexPrefixed = require('is-hex-prefixed');\nvar stripHexPrefix = require('strip-hex-prefix');\n\n/**\n * Pads a `String` to have an even length\n * @param {String} value\n * @return {String} output\n */\nfunction padToEven(value) {\n var a = value; // eslint-disable-line\n\n if (typeof a !== 'string') {\n throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');\n }\n\n if (a.length % 2) {\n a = '0' + a;\n }\n\n return a;\n}\n\n/**\n * Converts a `Number` into a hex `String`\n * @param {Number} i\n * @return {String}\n */\nfunction intToHex(i) {\n var hex = i.toString(16); // eslint-disable-line\n\n return '0x' + hex;\n}\n\n/**\n * Converts an `Number` to a `Buffer`\n * @param {Number} i\n * @return {Buffer}\n */\nfunction intToBuffer(i) {\n var hex = intToHex(i);\n\n return new Buffer(padToEven(hex.slice(2)), 'hex');\n}\n\n/**\n * Get the binary size of a string\n * @param {String} str\n * @return {Number}\n */\nfunction getBinarySize(str) {\n if (typeof str !== 'string') {\n throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \\'str\\' to be type String, got \\'' + typeof str + '\\'.');\n }\n\n return Buffer.byteLength(str, 'utf8');\n}\n\n/**\n * Returns TRUE if the first specified array contains all elements\n * from the second one. FALSE otherwise.\n *\n * @param {array} superset\n * @param {array} subset\n *\n * @returns {boolean}\n */\nfunction arrayContainsArray(superset, subset, some) {\n if (Array.isArray(superset) !== true) {\n throw new Error('[ethjs-util] method arrayContainsArray requires input \\'superset\\' to be an array got type \\'' + typeof superset + '\\'');\n }\n if (Array.isArray(subset) !== true) {\n throw new Error('[ethjs-util] method arrayContainsArray requires input \\'subset\\' to be an array got type \\'' + typeof subset + '\\'');\n }\n\n return subset[Boolean(some) && 'some' || 'every'](function (value) {\n return superset.indexOf(value) >= 0;\n });\n}\n\n/**\n * Should be called to get utf8 from it's hex representation\n *\n * @method toUtf8\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nfunction toUtf8(hex) {\n var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');\n\n return bufferValue.toString('utf8');\n}\n\n/**\n * Should be called to get ascii from it's hex representation\n *\n * @method toAscii\n * @param {String} string in hex\n * @returns {String} ascii string representation of hex value\n */\nfunction toAscii(hex) {\n var str = ''; // eslint-disable-line\n var i = 0,\n l = hex.length; // eslint-disable-line\n\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n\n for (; i < l; i += 2) {\n var code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n\n return str;\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @method fromUtf8\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nfunction fromUtf8(stringValue) {\n var str = new Buffer(stringValue, 'utf8');\n\n return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @method fromAscii\n * @param {String} string\n * @param {Number} optional padding\n * @returns {String} hex representation of input string\n */\nfunction fromAscii(stringValue) {\n var hex = ''; // eslint-disable-line\n for (var i = 0; i < stringValue.length; i++) {\n // eslint-disable-line\n var code = stringValue.charCodeAt(i);\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n\n return '0x' + hex;\n}\n\n/**\n * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]\n *\n * @method getKeys get specific key from inner object array of objects\n * @param {String} params\n * @param {String} key\n * @param {Boolean} allowEmpty\n * @returns {Array} output just a simple array of output keys\n */\nfunction getKeys(params, key, allowEmpty) {\n if (!Array.isArray(params)) {\n throw new Error('[ethjs-util] method getKeys expecting type Array as \\'params\\' input, got \\'' + typeof params + '\\'');\n }\n if (typeof key !== 'string') {\n throw new Error('[ethjs-util] method getKeys expecting type String for input \\'key\\' got \\'' + typeof key + '\\'.');\n }\n\n var result = []; // eslint-disable-line\n\n for (var i = 0; i < params.length; i++) {\n // eslint-disable-line\n var value = params[i][key]; // eslint-disable-line\n if (allowEmpty && !value) {\n value = '';\n } else if (typeof value !== 'string') {\n throw new Error('invalid abi');\n }\n result.push(value);\n }\n\n return result;\n}\n\n/**\n * Is the string a hex string.\n *\n * @method check if string is hex string of specific length\n * @param {String} value\n * @param {Number} length\n * @returns {Boolean} output the string is a hex string\n */\nfunction isHexString(value, length) {\n if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false;\n }\n\n if (length && value.length !== 2 + 2 * length) {\n return false;\n }\n\n return true;\n}\n\nmodule.exports = {\n arrayContainsArray: arrayContainsArray,\n intToBuffer: intToBuffer,\n getBinarySize: getBinarySize,\n isHexPrefixed: isHexPrefixed,\n stripHexPrefix: stripHexPrefix,\n padToEven: padToEven,\n intToHex: intToHex,\n fromAscii: fromAscii,\n fromUtf8: fromUtf8,\n toAscii: toAscii,\n toUtf8: toUtf8,\n getKeys: getKeys,\n isHexString: isHexString\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","function truthy(d) {\n return d\n};\n\nfunction first(array, callback, context) {\n var callback = callback || truthy\n , context = context || array\n , value\n\n for (var i = 0, l = array.length; i < l; i += 1) {\n if (value = callback.call(context, array[i], i)) return array[i]\n }\n};\n\nmodule.exports = first","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict'\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = new Buffer(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)\n this.update(chunk)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this._digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function (data) {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar toStr = Object.prototype.toString;\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn toStr.call(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\ttoStr.call(value) !== '[object Array]' &&\n\t\ttoStr.call(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar generatorFunc = getGeneratorFunc();\nvar GeneratorFunction = getProto && generatorFunc ? getProto(generatorFunc) : false;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\treturn getProto && getProto(fn) === GeneratorFunction;\n};\n","/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param {String} str the string input value\n * @return {Boolean} a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nmodule.exports = function isHexPrefixed(str) {\n if (typeof str !== 'string') {\n throw new Error(\"[is-hex-prefixed] value must be type 'string', is currently type \" + (typeof str) + \", while checking isHexPrefixed.\");\n }\n\n return str.slice(0, 2) === '0x';\n}\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new global[typedArray]();\n\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t}\n\t\tvar proto = getPrototypeOf(arr);\n\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\tif (!descriptor) {\n\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t}\n\t\ttoStrTags[typedArray] = descriptor.get;\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","'use strict'\nmodule.exports = require('./lib/api')(require('./lib/keccak'))\n","'use strict'\nvar createKeccak = require('./keccak')\nvar createShake = require('./shake')\n\nmodule.exports = function (KeccakState) {\n var Keccak = createKeccak(KeccakState)\n var Shake = createShake(KeccakState)\n\n return function (algorithm, options) {\n var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm\n switch (hash) {\n case 'keccak224': return new Keccak(1152, 448, null, 224, options)\n case 'keccak256': return new Keccak(1088, 512, null, 256, options)\n case 'keccak384': return new Keccak(832, 768, null, 384, options)\n case 'keccak512': return new Keccak(576, 1024, null, 512, options)\n\n case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)\n case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)\n case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)\n case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)\n\n case 'shake128': return new Shake(1344, 256, 0x1f, options)\n case 'shake256': return new Shake(1088, 512, 0x1f, options)\n\n default: throw new Error('Invald algorithm: ' + algorithm)\n }\n }\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nmodule.exports = function (KeccakState) {\n function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {\n Transform.call(this, options)\n\n this._rate = rate\n this._capacity = capacity\n this._delimitedSuffix = delimitedSuffix\n this._hashBitLength = hashBitLength\n this._options = options\n\n this._state = new KeccakState()\n this._state.initialize(rate, capacity)\n this._finalized = false\n }\n\n inherits(Keccak, Transform)\n\n Keccak.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n }\n\n Keccak.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n }\n\n Keccak.prototype.update = function (data, encoding) {\n if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n this._state.absorb(data)\n\n return this\n }\n\n Keccak.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)\n var digest = this._state.squeeze(this._hashBitLength / 8)\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n this._resetState()\n\n return digest\n }\n\n // remove result from memory\n Keccak.prototype._resetState = function () {\n this._state.initialize(this._rate, this._capacity)\n return this\n }\n\n // because sometimes we need hash right now and little later\n Keccak.prototype._clone = function () {\n var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)\n this._state.copy(clone._state)\n clone._finalized = this._finalized\n\n return clone\n }\n\n return Keccak\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nmodule.exports = function (KeccakState) {\n function Shake (rate, capacity, delimitedSuffix, options) {\n Transform.call(this, options)\n\n this._rate = rate\n this._capacity = capacity\n this._delimitedSuffix = delimitedSuffix\n this._options = options\n\n this._state = new KeccakState()\n this._state.initialize(rate, capacity)\n this._finalized = false\n }\n\n inherits(Shake, Transform)\n\n Shake.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n }\n\n Shake.prototype._flush = function () {}\n\n Shake.prototype._read = function (size) {\n this.push(this.squeeze(size))\n }\n\n Shake.prototype.update = function (data, encoding) {\n if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')\n if (this._finalized) throw new Error('Squeeze already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n this._state.absorb(data)\n\n return this\n }\n\n Shake.prototype.squeeze = function (dataByteLength, encoding) {\n if (!this._finalized) {\n this._finalized = true\n this._state.absorbLastFewBits(this._delimitedSuffix)\n }\n\n var data = this._state.squeeze(dataByteLength)\n if (encoding !== undefined) data = data.toString(encoding)\n\n return data\n }\n\n Shake.prototype._resetState = function () {\n this._state.initialize(this._rate, this._capacity)\n return this\n }\n\n Shake.prototype._clone = function () {\n var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)\n this._state.copy(clone._state)\n clone._finalized = this._finalized\n\n return clone\n }\n\n return Shake\n}\n","'use strict'\nvar P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]\n\nexports.p1600 = function (s) {\n for (var round = 0; round < 24; ++round) {\n // theta\n var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]\n var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]\n var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]\n var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]\n var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]\n var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]\n var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]\n var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]\n var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]\n var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]\n\n var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)\n var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)\n var t1slo0 = s[0] ^ lo\n var t1shi0 = s[1] ^ hi\n var t1slo5 = s[10] ^ lo\n var t1shi5 = s[11] ^ hi\n var t1slo10 = s[20] ^ lo\n var t1shi10 = s[21] ^ hi\n var t1slo15 = s[30] ^ lo\n var t1shi15 = s[31] ^ hi\n var t1slo20 = s[40] ^ lo\n var t1shi20 = s[41] ^ hi\n lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)\n hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)\n var t1slo1 = s[2] ^ lo\n var t1shi1 = s[3] ^ hi\n var t1slo6 = s[12] ^ lo\n var t1shi6 = s[13] ^ hi\n var t1slo11 = s[22] ^ lo\n var t1shi11 = s[23] ^ hi\n var t1slo16 = s[32] ^ lo\n var t1shi16 = s[33] ^ hi\n var t1slo21 = s[42] ^ lo\n var t1shi21 = s[43] ^ hi\n lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)\n hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)\n var t1slo2 = s[4] ^ lo\n var t1shi2 = s[5] ^ hi\n var t1slo7 = s[14] ^ lo\n var t1shi7 = s[15] ^ hi\n var t1slo12 = s[24] ^ lo\n var t1shi12 = s[25] ^ hi\n var t1slo17 = s[34] ^ lo\n var t1shi17 = s[35] ^ hi\n var t1slo22 = s[44] ^ lo\n var t1shi22 = s[45] ^ hi\n lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)\n hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)\n var t1slo3 = s[6] ^ lo\n var t1shi3 = s[7] ^ hi\n var t1slo8 = s[16] ^ lo\n var t1shi8 = s[17] ^ hi\n var t1slo13 = s[26] ^ lo\n var t1shi13 = s[27] ^ hi\n var t1slo18 = s[36] ^ lo\n var t1shi18 = s[37] ^ hi\n var t1slo23 = s[46] ^ lo\n var t1shi23 = s[47] ^ hi\n lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)\n hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)\n var t1slo4 = s[8] ^ lo\n var t1shi4 = s[9] ^ hi\n var t1slo9 = s[18] ^ lo\n var t1shi9 = s[19] ^ hi\n var t1slo14 = s[28] ^ lo\n var t1shi14 = s[29] ^ hi\n var t1slo19 = s[38] ^ lo\n var t1shi19 = s[39] ^ hi\n var t1slo24 = s[48] ^ lo\n var t1shi24 = s[49] ^ hi\n\n // rho & pi\n var t2slo0 = t1slo0\n var t2shi0 = t1shi0\n var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)\n var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)\n var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)\n var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)\n var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)\n var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)\n var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)\n var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)\n var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)\n var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)\n var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)\n var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)\n var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)\n var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)\n var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)\n var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)\n var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)\n var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)\n var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)\n var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)\n var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)\n var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)\n var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)\n var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)\n var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)\n var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)\n var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)\n var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)\n var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)\n var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)\n var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)\n var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)\n var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)\n var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)\n var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)\n var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)\n var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)\n var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)\n var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)\n var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)\n var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)\n var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)\n var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)\n var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)\n var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)\n var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)\n var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)\n var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)\n\n // chi\n s[0] = t2slo0 ^ (~t2slo1 & t2slo2)\n s[1] = t2shi0 ^ (~t2shi1 & t2shi2)\n s[10] = t2slo5 ^ (~t2slo6 & t2slo7)\n s[11] = t2shi5 ^ (~t2shi6 & t2shi7)\n s[20] = t2slo10 ^ (~t2slo11 & t2slo12)\n s[21] = t2shi10 ^ (~t2shi11 & t2shi12)\n s[30] = t2slo15 ^ (~t2slo16 & t2slo17)\n s[31] = t2shi15 ^ (~t2shi16 & t2shi17)\n s[40] = t2slo20 ^ (~t2slo21 & t2slo22)\n s[41] = t2shi20 ^ (~t2shi21 & t2shi22)\n s[2] = t2slo1 ^ (~t2slo2 & t2slo3)\n s[3] = t2shi1 ^ (~t2shi2 & t2shi3)\n s[12] = t2slo6 ^ (~t2slo7 & t2slo8)\n s[13] = t2shi6 ^ (~t2shi7 & t2shi8)\n s[22] = t2slo11 ^ (~t2slo12 & t2slo13)\n s[23] = t2shi11 ^ (~t2shi12 & t2shi13)\n s[32] = t2slo16 ^ (~t2slo17 & t2slo18)\n s[33] = t2shi16 ^ (~t2shi17 & t2shi18)\n s[42] = t2slo21 ^ (~t2slo22 & t2slo23)\n s[43] = t2shi21 ^ (~t2shi22 & t2shi23)\n s[4] = t2slo2 ^ (~t2slo3 & t2slo4)\n s[5] = t2shi2 ^ (~t2shi3 & t2shi4)\n s[14] = t2slo7 ^ (~t2slo8 & t2slo9)\n s[15] = t2shi7 ^ (~t2shi8 & t2shi9)\n s[24] = t2slo12 ^ (~t2slo13 & t2slo14)\n s[25] = t2shi12 ^ (~t2shi13 & t2shi14)\n s[34] = t2slo17 ^ (~t2slo18 & t2slo19)\n s[35] = t2shi17 ^ (~t2shi18 & t2shi19)\n s[44] = t2slo22 ^ (~t2slo23 & t2slo24)\n s[45] = t2shi22 ^ (~t2shi23 & t2shi24)\n s[6] = t2slo3 ^ (~t2slo4 & t2slo0)\n s[7] = t2shi3 ^ (~t2shi4 & t2shi0)\n s[16] = t2slo8 ^ (~t2slo9 & t2slo5)\n s[17] = t2shi8 ^ (~t2shi9 & t2shi5)\n s[26] = t2slo13 ^ (~t2slo14 & t2slo10)\n s[27] = t2shi13 ^ (~t2shi14 & t2shi10)\n s[36] = t2slo18 ^ (~t2slo19 & t2slo15)\n s[37] = t2shi18 ^ (~t2shi19 & t2shi15)\n s[46] = t2slo23 ^ (~t2slo24 & t2slo20)\n s[47] = t2shi23 ^ (~t2shi24 & t2shi20)\n s[8] = t2slo4 ^ (~t2slo0 & t2slo1)\n s[9] = t2shi4 ^ (~t2shi0 & t2shi1)\n s[18] = t2slo9 ^ (~t2slo5 & t2slo6)\n s[19] = t2shi9 ^ (~t2shi5 & t2shi6)\n s[28] = t2slo14 ^ (~t2slo10 & t2slo11)\n s[29] = t2shi14 ^ (~t2shi10 & t2shi11)\n s[38] = t2slo19 ^ (~t2slo15 & t2slo16)\n s[39] = t2shi19 ^ (~t2shi15 & t2shi16)\n s[48] = t2slo24 ^ (~t2slo20 & t2slo21)\n s[49] = t2shi24 ^ (~t2shi20 & t2shi21)\n\n // iota\n s[0] ^= P1600_ROUND_CONSTANTS[round * 2]\n s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]\n }\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar keccakState = require('./keccak-state-unroll')\n\nfunction Keccak () {\n // much faster than `new Array(50)`\n this.state = [\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0\n ]\n\n this.blockSize = null\n this.count = 0\n this.squeezing = false\n}\n\nKeccak.prototype.initialize = function (rate, capacity) {\n for (var i = 0; i < 50; ++i) this.state[i] = 0\n this.blockSize = rate / 8\n this.count = 0\n this.squeezing = false\n}\n\nKeccak.prototype.absorb = function (data) {\n for (var i = 0; i < data.length; ++i) {\n this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))\n this.count += 1\n if (this.count === this.blockSize) {\n keccakState.p1600(this.state)\n this.count = 0\n }\n }\n}\n\nKeccak.prototype.absorbLastFewBits = function (bits) {\n this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))\n if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)\n this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))\n keccakState.p1600(this.state)\n this.count = 0\n this.squeezing = true\n}\n\nKeccak.prototype.squeeze = function (length) {\n if (!this.squeezing) this.absorbLastFewBits(0x01)\n\n var output = Buffer.alloc(length)\n for (var i = 0; i < length; ++i) {\n output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff\n this.count += 1\n if (this.count === this.blockSize) {\n keccakState.p1600(this.state)\n this.count = 0\n }\n }\n\n return output\n}\n\nKeccak.prototype.copy = function (dest) {\n for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]\n dest.blockSize = this.blockSize\n dest.count = this.count\n dest.squeezing = this.squeezing\n}\n\nmodule.exports = Keccak\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","var nub = module.exports = function (xs, cmp) {\n if (typeof xs === 'function' || cmp) {\n return nub.by(xs, cmp);\n }\n \n var keys = {\n 'object' : [],\n 'function' : [],\n 'string' : {},\n 'number' : {},\n 'boolean' : {},\n 'undefined' : {}\n };\n \n var res = [];\n \n for (var i = 0; i < xs.length; i++) {\n var x = xs[i];\n var recs = x === '__proto__'\n ? keys.objects\n : keys[typeof x] || keys.objects\n ;\n \n if (Array.isArray(recs)) {\n if (recs.indexOf(x) < 0) {\n recs.push(x);\n res.push(x);\n }\n }\n else if (!Object.hasOwnProperty.call(recs, x)) {\n recs[x] = true;\n res.push(x);\n }\n }\n \n return res;\n};\n\nnub.by = function (xs, cmp) {\n if (typeof xs === 'function') {\n var cmp_ = cmp;\n cmp = xs;\n xs = cmp_;\n }\n \n var res = [];\n \n for (var i = 0; i < xs.length; i++) {\n var x = xs[i];\n \n var found = false;\n for (var j = 0; j < res.length; j++) {\n var y = res[j];\n if (cmp.call(res, x, y)) {\n found = true;\n break;\n }\n }\n \n if (!found) res.push(x);\n }\n \n return res;\n};\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","// Special property that only our wrappers will have:\nvar wrapperMagic = 'redux-keto wrapper';\n\n/**\n * Makes a collection of lazy getters for a key-value state slice.\n * The actual wrapper object inherits from this prototype.\n */\nfunction makeWrapperProto(keys, makeReducer, makeNext) {\n var wrapperProto = Object.create(null);\n var loop = function () {\n var key = list[i];\n\n var reducer = makeReducer(key);\n\n Object.defineProperty(wrapperProto, key, {\n configurable: true,\n enumerable: true,\n get: function get() {\n var wrapper = this;\n var stash = wrapper[wrapperMagic];\n\n // If we are already running, this is a problem!\n if (stash.running[key]) {\n var e = new ReferenceError(\n (\"Reducer '\" + key + \"' depends on its own result\")\n );\n e.name = 'ReduxKetoCircularReferenceError';\n throw e\n }\n stash.running[key] = true;\n\n // Evaluate the reducer:\n try {\n var out = reducer(\n stash.state[key],\n stash.action,\n makeNext(stash.next, wrapper, key),\n makeNext(stash.prev, stash.state, key)\n );\n if (out === undefined) {\n throw new TypeError((\"Reducer '\" + key + \"' returned undefined\"))\n }\n Object.defineProperty(wrapper, key, {\n configurable: true,\n enumerable: true,\n writable: false,\n value: out\n });\n return out\n } finally {\n stash.running[key] = false;\n }\n }\n });\n };\n\n for (var i = 0, list = keys; i < list.length; i += 1) loop();\n\n return wrapperProto\n}\n\n/**\n * Makes a lazy wrapper object for a key-value state slice.\n */\nfunction makeWrapper(wrapperProto, state, action, next, prev) {\n var wrapper = Object.create(wrapperProto);\n Object.defineProperty(wrapper, wrapperMagic, {\n configurable: true,\n enumerable: false,\n writable: false,\n value: { state: state, action: action, next: next, prev: prev, running: {} }\n });\n\n return wrapper\n}\n\n/**\n * Flattens a lazy key-value wrapper into a plain-old object\n * with the current state as its properties.\n */\nfunction flattenWrapper(state, wrapper) {\n if ( state === void 0 ) state = {};\n\n // If it's not a wrapper, we are done:\n if (wrapper === null || wrapper[wrapperMagic] == null) { return wrapper }\n\n // Diff the old and new states:\n var keys = Object.keys(Object.getPrototypeOf(wrapper));\n var unchanged = Object.keys(state).length === keys.length;\n for (var i = 0, list = keys; i < list.length; i += 1) {\n var key = list[i];\n\n Object.defineProperty(wrapper, key, {\n configurable: false,\n enumerable: true,\n writable: false,\n value: flattenWrapper(state[key], wrapper[key])\n });\n if (wrapper[key] !== state[key]) {\n unchanged = false;\n }\n }\n\n // If nothing changed, just return the previous state:\n if (unchanged) { return state }\n\n delete wrapper[wrapperMagic];\n return wrapper\n}\n\nfunction makeNextDefault(next, children, id) {\n return next !== undefined ? next : children\n}\n\n/**\n * Combines several reducers into one.\n */\nfunction buildReducer(reducerMap, makeNext) {\n if ( makeNext === void 0 ) makeNext = makeNextDefault;\n\n // Validate argument types:\n if (typeof reducerMap !== 'object' || reducerMap === null) {\n throw new TypeError('The reducer map must be an object.')\n }\n var keys = Object.keys(reducerMap);\n for (var i = 0, list = keys; i < list.length; i += 1) {\n var key = list[i];\n\n if (typeof reducerMap[key] !== 'function') {\n throw new TypeError('Reducers must be functions.')\n }\n }\n\n // Build the wrapper:\n var wrapperProto = makeWrapperProto(keys, function (key) { return reducerMap[key]; }, makeNext);\n\n // Build the default state:\n var defaultState = {};\n for (var i$1 = 0, list$1 = keys; i$1 < list$1.length; i$1 += 1) {\n var key$1 = list$1[i$1];\n\n defaultState[key$1] = reducerMap[key$1].defaultState;\n }\n\n function builtReducer(state, action, next, prev) {\n if ( state === void 0 ) state = defaultState;\n\n var wrapper = makeWrapper(wrapperProto, state, action, next, prev);\n\n // If we are the topmost fat reducer, flatten the wrappers:\n return next === undefined ? flattenWrapper(state, wrapper) : wrapper\n }\n builtReducer.defaultState = defaultState;\n\n return builtReducer\n}\n\nfunction filterActionsDefault(action, next) {\n return action\n}\n\nfunction filterNextDefault(next) {\n return next\n}\n\n/**\n * Filters the next and actions going into a fat reducer.\n */\nfunction filterReducer(\n reducer,\n filterAction,\n filterNext\n) {\n if ( filterAction === void 0 ) filterAction = filterActionsDefault;\n if ( filterNext === void 0 ) filterNext = filterNextDefault;\n\n var defaultState = reducer.defaultState;\n\n function filteredReducer(state, action, next, prev) {\n if ( state === void 0 ) state = defaultState;\n\n var innerAction = filterAction(action, next);\n var innerNext = filterNext(next);\n var innerPrev = filterNext(prev);\n\n if (!innerAction) { return state }\n\n var wrapper = reducer(state, innerAction, innerNext, innerPrev);\n\n // If we are the topmost fat reducer, flatten the wrappers:\n return next === undefined ? flattenWrapper(state, wrapper) : wrapper\n }\n filteredReducer.defaultState = defaultState;\n\n return filteredReducer\n}\n\nfunction makeNextDefault$1(next, children, id) {\n return {\n id: id,\n root: next !== undefined ? next : children,\n get self() {\n return children[id]\n }\n }\n}\n\nvar defaultState = {};\n\n/**\n * Applies a reducer to each item of a list.\n * Each reducer manages its own state slice on behalf of the list item.\n */\nfunction mapReducer(reducer, listIds, makeNext) {\n if ( makeNext === void 0 ) makeNext = makeNextDefault$1;\n\n function mapReducer(state, action, next, prev) {\n if ( state === void 0 ) state = defaultState;\n\n var ids = listIds(next);\n\n // Try to recycle our wrapper prototype, if possible:\n var wrapperProto =\n state === defaultState || ids !== listIds(prev)\n ? makeWrapperProto(ids, function (id) { return reducer; }, makeNext)\n : Object.getPrototypeOf(state);\n\n var wrapper = makeWrapper(wrapperProto, state, action, next, prev);\n\n // If we are the topmost fat reducer, flatten the wrappers:\n return next === undefined ? flattenWrapper(state, wrapper) : wrapper\n }\n mapReducer.defaultState = defaultState;\n\n return mapReducer\n}\n\n/**\n * Creates a memoized reducer for derived values.\n * The first aguments are argument filters,\n * which take the next and return an argument to pass to the derivation.\n * The reducer will only run if some of its arguments are not equal ('===').\n */\nfunction memoizeReducer() {\n var arguments$1 = arguments;\n\n var i = arguments.length - 1;\n var reducer = arguments[i];\n var filters = [];\n while (i-- > 0) { filters[i] = arguments$1[i]; }\n\n // Type-check the arguments:\n if (typeof reducer !== 'function') {\n throw new TypeError('The reducer must be a function')\n }\n for (var i$1 = 0, list = filters; i$1 < list.length; i$1 += 1) {\n var filter = list[i$1];\n\n if (typeof filter !== 'function') {\n throw new TypeError('Each argument filter must be a function')\n }\n }\n\n return function memoizedReducer(\n state,\n action,\n next,\n prev\n ) {\n if ( state === void 0 ) state = reducer.defaultState;\n\n var clean = state !== undefined;\n var args = [];\n for (var i = 0; i < filters.length; ++i) {\n args[i] = filters[i](next);\n if (clean && args[i] !== filters[i](prev)) { clean = false; }\n }\n\n return clean ? state : reducer.apply(void 0, args)\n }\n}\n\nexport { buildReducer, filterReducer, mapReducer, memoizeReducer };\n//# sourceMappingURL=redux-keto.es.js.map\n","function makePixieShutdownError() {\n var e = new Error('Pixie has been destroyed');\n e.name = 'PixieShutdownError';\n return e;\n}\n\n\nfunction isPixieShutdownError(e) {\n return e instanceof Error && e.name === 'PixieShutdownError';\n}\n\n/**\n * If a wild pixie returns a bare function, turn that into a proper object.\n */\nfunction fixInstance(instance) {\n if (typeof instance === 'function') {\n return { update: instance, destroy: function destroy() {}\n };\n }\n return instance;\n}\n\n/**\n * Catches synchronous errors and sends them through `onError`,\n * terminating the inner pixie in response. Also prevents `update`\n * from running in parallel if if returns a promise.\n */\nfunction babysitPixie(wildPixie) {\n function outPixie(input) {\n var instance = void 0;\n var propsCache = void 0;\n var propsDirty = true;\n var updating = false;\n var destroyed = false;\n var nextPromise = void 0;\n var rejector = void 0;\n var resolver = void 0;\n\n function destroy() {\n if (instance) {\n try {\n if (rejector) {\n var _copy = rejector;\n nextPromise = void 0;\n rejector = void 0;\n resolver = void 0;\n _copy(makePixieShutdownError());\n }\n var copy = instance;\n instance = void 0;\n copy.destroy();\n } catch (e) {\n onError(e);\n }\n destroyed = true;\n }\n }\n\n // Ignore any callbacks once `destroy` has completed:\n function onError(e) {\n if (!destroyed) input.onError(e);\n destroy();\n }\n\n function onOutput(data) {\n if (!destroyed) input.onOutput(data);\n }\n\n function onUpdateDone() {\n updating = false;\n tryUpdate();\n }\n\n function tryUpdate() {\n // eslint-disable-next-line no-unmodified-loop-condition\n while (instance && propsDirty && !updating) {\n propsDirty = false;\n updating = true;\n\n try {\n var thenable = instance.update(propsCache);\n if (thenable && typeof thenable.then === 'function') {\n thenable.then(onUpdateDone, onError);\n } else {\n updating = false;\n }\n } catch (e) {\n onError(e);\n }\n }\n }\n\n function getNextPromise() {\n if (!nextPromise) {\n nextPromise = new Promise(function (resolve, reject) {\n resolver = resolve;\n rejector = reject;\n });\n }\n return nextPromise;\n }\n\n var childInput = {\n onError: onError,\n onOutput: onOutput,\n get props() {\n return propsCache;\n },\n nextProps: getNextPromise,\n waitFor: function waitFor(condition) {\n return new Promise(function (resolve, reject) {\n function checkProps() {\n try {\n var result = condition(propsCache);\n if (result != null) resolve(result);else getNextPromise().then(checkProps, reject);\n } catch (e) {\n reject(e);\n }\n }\n return checkProps();\n });\n }\n };\n try {\n instance = fixInstance(wildPixie(childInput));\n } catch (e) {\n onError(e);\n }\n\n return {\n update: function update(props) {\n propsCache = props;\n propsDirty = true;\n\n // Update the `nextProps` promise right away:\n if (resolver) {\n var copy = resolver;\n nextPromise = void 0;\n rejector = void 0;\n resolver = void 0;\n copy(props);\n }\n\n tryUpdate();\n },\n\n\n destroy: destroy\n };\n }\n outPixie.tame = true;\n outPixie.defaultOutput = wildPixie.defaultOutput;\n return outPixie;\n}\n\n/**\n * Accepts a hand-written reducer, and hardens it with error checking.\n */\nfunction tamePixie(pixie) {\n return pixie.tame ? pixie : babysitPixie(pixie);\n}\n\nfunction defaultErrorHandler(e, props, onError) {\n onError(e);\n}\n\n/**\n * Intercepts `onError`, shutting down the inner pixie.\n */\nfunction catchPixieError(pixie) {\n var errorHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultErrorHandler;\n\n var tamedPixie = tamePixie(pixie);\n\n function outPixie(input) {\n var onOutput = input.onOutput;\n\n var instance = void 0;\n var propsCache = void 0;\n\n var destroy = function destroy() {\n var copy = instance;\n instance = void 0;\n if (copy) copy.destroy();\n };\n\n function onError(e) {\n destroy();\n try {\n errorHandler(e, propsCache, input.onError);\n } catch (e) {\n input.onError(e);\n }\n }\n\n var childInput = { onError: onError, onOutput: onOutput };\n\n return {\n update: function update(props) {\n propsCache = props;\n if (!instance) instance = tamedPixie(childInput);\n instance.update(props);\n },\n\n\n destroy: destroy\n };\n }\n outPixie.tame = true;\n outPixie.defaultOutput = pixie.defaultOutput;\n return outPixie;\n}\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\nvar asyncGenerator = function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(function (arg) {\n resume(\"next\", arg);\n }, function (arg) {\n resume(\"throw\", arg);\n });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () {\n return this;\n };\n }\n\n AsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n };\n\n AsyncGenerator.prototype.throw = function (arg) {\n return this._invoke(\"throw\", arg);\n };\n\n AsyncGenerator.prototype.return = function (arg) {\n return this._invoke(\"return\", arg);\n };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n}();\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Copies the `output` back into the pixie as a prop.\n */\n\nfunction reflectPixieOutput(pixie) {\n var tamedPixie = tamePixie(pixie);\n\n function outPixie(input) {\n var onError = input.onError;\n\n var instance = void 0;\n var output = pixie.defaultOutput;\n var propsCache = void 0;\n var propsDirty = true;\n var updating = false;\n\n var tryUpdate = function tryUpdate() {\n // The `update` function can call `onOutput` or `onError`, so loop:\n // eslint-disable-next-line no-unmodified-loop-condition\n while (instance && propsDirty && !updating) {\n propsDirty = false;\n updating = true;\n instance.update(_extends({}, propsCache, { output: output }));\n updating = false;\n }\n };\n\n var onOutput = function onOutput(data) {\n if (data !== output) {\n output = data;\n propsDirty = true;\n input.onOutput(data);\n tryUpdate();\n }\n };\n\n var childInput = { onError: onError, onOutput: onOutput };\n return {\n update: function update(props) {\n propsCache = props;\n propsDirty = true;\n if (!instance) instance = tamedPixie(childInput);\n tryUpdate();\n },\n destroy: function destroy() {\n var copy = instance;\n instance = void 0;\n if (copy) copy.destroy();\n }\n };\n }\n outPixie.tame = true;\n outPixie.defaultOutput = pixie.defaultOutput;\n return outPixie;\n}\n\nfunction defaultOnError(e) {}\nfunction defaultOnOutput(data) {}\n\n/**\n * Instantiates a pixie object.\n */\nfunction startPixie(pixie) {\n var onError = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOnError;\n var onOutput = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultOnOutput;\n\n return catchPixieError(reflectPixieOutput(pixie))({ onError: onError, onOutput: onOutput });\n}\n\n/**\n * Instantiates a pixie object and attaches it to a redux store.\n */\nfunction attachPixie(store, pixie, onError, onOutput) {\n var instance = startPixie(pixie, onError, onOutput);\n instance.update({\n dispatch: store.dispatch,\n output: void 0,\n state: store.getState()\n });\n\n var unsubscribe = store.subscribe(function () {\n instance.update({\n dispatch: store.dispatch,\n output: void 0,\n state: store.getState()\n });\n });\n\n return function () {\n unsubscribe();\n instance.destroy();\n };\n}\n\n/**\n * Combines one or more pixies into one.\n */\nfunction combinePixies(pixieMap) {\n var defaultOutput = {};\n for (var _iterator = Object.keys(pixieMap), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var _id3 = _ref;\n\n defaultOutput[_id3] = pixieMap[_id3].defaultOutput;\n }\n\n function outPixie(input) {\n var onError = input.onError;\n\n var childInputs = {};\n var instances = {};\n var outputs = _extends({}, defaultOutput);\n var destroyed = false;\n\n var _loop = function _loop() {\n if (_isArray2) {\n if (_i2 >= _iterator2.length) return 'break';\n _ref2 = _iterator2[_i2++];\n } else {\n _i2 = _iterator2.next();\n if (_i2.done) return 'break';\n _ref2 = _i2.value;\n }\n\n var id = _ref2;\n\n var onOutput = function onOutput(data) {\n if (data !== outputs[id]) {\n outputs = _extends({}, outputs);\n outputs[id] = data;\n input.onOutput(outputs);\n }\n };\n childInputs[id] = { onError: onError, onOutput: onOutput };\n instances[id] = tamePixie(pixieMap[id])(childInputs[id]);\n if (destroyed) return 'break';\n };\n\n for (var _iterator2 = Object.keys(pixieMap), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n var _ref2;\n\n var _ret = _loop();\n\n if (_ret === 'break') break;\n }\n\n return {\n update: function update(props) {\n for (var _iterator3 = Object.keys(instances), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n var _ref3;\n\n if (_isArray3) {\n if (_i3 >= _iterator3.length) break;\n _ref3 = _iterator3[_i3++];\n } else {\n _i3 = _iterator3.next();\n if (_i3.done) break;\n _ref3 = _i3.value;\n }\n\n var _id = _ref3;\n\n instances[_id].update(props);\n if (destroyed) return;\n }\n },\n destroy: function destroy() {\n destroyed = true;\n for (var _iterator4 = Object.keys(instances), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n var _ref4;\n\n if (_isArray4) {\n if (_i4 >= _iterator4.length) break;\n _ref4 = _iterator4[_i4++];\n } else {\n _i4 = _iterator4.next();\n if (_i4.done) break;\n _ref4 = _i4.value;\n }\n\n var _id2 = _ref4;\n\n instances[_id2].destroy();\n }\n }\n };\n }\n outPixie.tame = true;\n outPixie.defaultOutput = defaultOutput;\n return outPixie;\n}\n\n/**\n * If the function throws, send that through `onError`.\n */\nfunction catchify(f, onError) {\n return function () {\n try {\n return f.apply(undefined, arguments);\n } catch (e) {\n onError(e);\n }\n };\n}\n\n/**\n * Returns true if two Javascript values are equal (non-recursively).\n */\n\nfunction shallowCompare(a, b) {\n if (a === b) return true;\n\n // Fast path for primitives:\n if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) !== 'object') return false;\n if ((typeof b === 'undefined' ? 'undefined' : _typeof(b)) !== 'object') return false;\n\n // Filter out `null`:\n if (!a || !b) return false;\n\n var keys = Object.getOwnPropertyNames(a);\n if (keys.length !== Object.getOwnPropertyNames(b).length) return false;\n\n // We know that both objects have the same number of properties,\n // so if every property in `a` has a matching property in `b`,\n // the objects must be identical, regardless of key order.\n for (var _iterator = keys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var key = _ref;\n\n if (!b.hasOwnProperty(key) || a[key] !== b[key]) return false;\n }\n return true;\n}\n\n/**\n * Filters the props going into a pixie.\n */\nfunction filterPixie(pixie, filter) {\n var tamedPixie = tamePixie(pixie);\n\n function outPixie(input) {\n var onError = input.onError,\n onOutput = input.onOutput;\n\n var instance = void 0;\n var propsCache = void 0;\n var destroyed = false;\n\n var safeFilter = catchify(filter, onError);\n\n var childInput = { onError: onError, onOutput: onOutput };\n\n return {\n update: function update(props) {\n var innerProps = safeFilter(props);\n if (destroyed) return;\n var dirty = !shallowCompare(innerProps, propsCache);\n propsCache = innerProps;\n\n // Start or stop the instance:\n if (innerProps) {\n if (!instance) instance = tamedPixie(childInput);\n if (destroyed) return;\n if (dirty) instance.update(innerProps);\n } else {\n if (instance) instance.destroy();\n instance = void 0;\n }\n },\n destroy: function destroy() {\n destroyed = true;\n if (instance) instance.destroy();\n instance = void 0;\n }\n };\n }\n outPixie.tame = true;\n outPixie.defaultOutput = pixie.defaultOutput;\n return outPixie;\n}\n\n/**\n * Combines one or more pixies into one, using a list of keys.\n */\nfunction mapPixie(pixie, listIds, filter) {\n var tamedPixie = tamePixie(pixie);\n\n function outPixie(input) {\n var onError = input.onError;\n\n var instances = {};\n var outputs = {};\n var outputsDirty = false;\n var propsCache = {};\n var updating = false;\n var destroyed = false;\n\n var safeListIds = catchify(listIds, onError);\n var safeFilter = catchify(filter, onError);\n\n var updateOutputs = function updateOutputs() {\n if (outputsDirty && !updating) {\n outputsDirty = false;\n var newOutputs = {};\n for (var _iterator = Object.keys(instances), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var _id = _ref;\n\n newOutputs[_id] = outputs[_id];\n }\n outputs = newOutputs;\n input.onOutput(outputs);\n }\n };\n\n return {\n update: function update(outerProps) {\n var ids = safeListIds(outerProps);\n if (destroyed || !ids) return;\n\n // Update or create instances for all keys:\n updating = true;\n var newInstances = {};\n\n var _loop = function _loop() {\n if (_isArray2) {\n if (_i2 >= _iterator2.length) return 'break';\n _ref2 = _iterator2[_i2++];\n } else {\n _i2 = _iterator2.next();\n if (_i2.done) return 'break';\n _ref2 = _i2.value;\n }\n\n var id = _ref2;\n\n var innerProps = safeFilter(outerProps, id);\n if (destroyed) return {\n v: void 0\n };\n var dirty = !shallowCompare(innerProps, propsCache[id]);\n propsCache[id] = innerProps;\n\n if (innerProps) {\n if (!instances[id]) {\n var onOutput = function onOutput(data) {\n if (data !== outputs[id]) {\n outputs[id] = data;\n outputsDirty = true;\n updateOutputs();\n }\n };\n instances[id] = tamedPixie({ onError: onError, onOutput: onOutput });\n if (destroyed) return {\n v: void 0\n };\n }\n if (dirty) instances[id].update(innerProps);\n if (destroyed) return {\n v: void 0\n };\n newInstances[id] = instances[id];\n }\n };\n\n _loop2: for (var _iterator2 = ids, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n var _ref2;\n\n var _ret = _loop();\n\n switch (_ret) {\n case 'break':\n break _loop2;\n\n default:\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n }\n }\n\n // Swap out the instance list, removing unwanted pixies:\n\n\n var oldInstances = instances;\n instances = newInstances;\n\n // Destroy any old instances that are not on the list.\n // We need to finish this even if it triggers `destroyed`:\n for (var _iterator3 = Object.keys(oldInstances), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n var _ref3;\n\n if (_isArray3) {\n if (_i3 >= _iterator3.length) break;\n _ref3 = _iterator3[_i3++];\n } else {\n _i3 = _iterator3.next();\n if (_i3.done) break;\n _ref3 = _i3.value;\n }\n\n var _id2 = _ref3;\n\n if (!newInstances[_id2]) {\n outputsDirty = true;\n oldInstances[_id2].destroy();\n }\n }\n if (destroyed) return;\n\n updating = false;\n updateOutputs();\n },\n destroy: function destroy() {\n destroyed = true;\n for (var _iterator4 = Object.keys(instances), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n var _ref4;\n\n if (_isArray4) {\n if (_i4 >= _iterator4.length) break;\n _ref4 = _iterator4[_i4++];\n } else {\n _i4 = _iterator4.next();\n if (_i4.done) break;\n _ref4 = _i4.value;\n }\n\n var _id3 = _ref4;\n\n if (instances[_id3]) instances[_id3].destroy();\n }\n }\n };\n }\n outPixie.tame = true;\n outPixie.defaultOutput = {};\n return outPixie;\n}\n\n/**\n * Class-style pixies should inherit from this type.\n */\nvar Pixie = function () {\n function Pixie(props, callbacks) {\n classCallCheck(this, Pixie);\n\n this.props = props;\n }\n\n /**\n * Called every time the props change.\n */\n\n\n createClass(Pixie, [{\n key: 'update',\n value: function update(props, callbacks) {}\n\n /**\n * Called before the pixie is destroyed.\n * This is a great place to clean up any resources.\n */\n\n }, {\n key: 'destroy',\n value: function destroy(props, callbacks) {}\n }]);\n return Pixie;\n}();\n\n/**\n * Turns a class-style pixie into a tame pixie.\n */\nfunction tameClassPixie(Constructor) {\n return tamePixie(function (_ref) {\n var onError = _ref.onError,\n onOutput = _ref.onOutput;\n\n var callbacks = { onError: onError, onOutput: onOutput };\n var instance = void 0;\n var propsCache = void 0;\n\n return {\n update: function update(props) {\n propsCache = props;\n if (!instance) {\n instance = new Constructor(props, callbacks);\n }\n return instance.update(props, callbacks);\n },\n destroy: function destroy() {\n return instance.destroy(propsCache, callbacks);\n }\n };\n });\n}\n\n/**\n * Update functions can return this to stop all future updates.\n */\nvar stopUpdates = {\n then: function then() {}\n};\n\nexport { stopUpdates, catchPixieError, reflectPixieOutput, tamePixie, isPixieShutdownError, attachPixie, startPixie, combinePixies, filterPixie, mapPixie, Pixie, tameClassPixie };\n//# sourceMappingURL=redux-pixies.es.js.map\n","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nimport compose from './compose';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\nexport default function applyMiddleware() {\n for (var _len = arguments.length, middlewares = Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function (reducer, preloadedState, enhancer) {\n var store = createStore(reducer, preloadedState, enhancer);\n var _dispatch = store.dispatch;\n var chain = [];\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch(action) {\n return _dispatch(action);\n }\n };\n chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(undefined, chain)(store.dispatch);\n\n return _extends({}, store, {\n dispatch: _dispatch\n });\n };\n };\n}","function bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(undefined, arguments));\n };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass a single function as the first argument,\n * and get a function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error('bindActionCreators expected an object or a function, instead received ' + (actionCreators === null ? 'null' : typeof actionCreators) + '. ' + 'Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?');\n }\n\n var keys = Object.keys(actionCreators);\n var boundActionCreators = {};\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var actionCreator = actionCreators[key];\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}","import { ActionTypes } from './createStore';\nimport isPlainObject from 'lodash-es/isPlainObject';\nimport warning from './utils/warning';\n\nfunction getUndefinedStateErrorMessage(key, action) {\n var actionType = action && action.type;\n var actionName = actionType && '\"' + actionType.toString() + '\"' || 'an action';\n\n return 'Given action ' + actionName + ', reducer \"' + key + '\" returned undefined. ' + 'To ignore an action, you must explicitly return the previous state. ' + 'If you want this reducer to hold no value, you can return null instead of undefined.';\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return 'The ' + argumentName + ' has unexpected type of \"' + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + '\". Expected argument to be an object with the following ' + ('keys: \"' + reducerKeys.join('\", \"') + '\"');\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n\n if (unexpectedKeys.length > 0) {\n return 'Unexpected ' + (unexpectedKeys.length > 1 ? 'keys' : 'key') + ' ' + ('\"' + unexpectedKeys.join('\", \"') + '\" found in ' + argumentName + '. ') + 'Expected to find one of the known reducer keys instead: ' + ('\"' + reducerKeys.join('\", \"') + '\". Unexpected keys will be ignored.');\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, { type: ActionTypes.INIT });\n\n if (typeof initialState === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined during initialization. ' + 'If the state passed to the reducer is undefined, you must ' + 'explicitly return the initial state. The initial state may ' + 'not be undefined. If you don\\'t want to set a value for this reducer, ' + 'you can use null instead of undefined.');\n }\n\n var type = '@@redux/PROBE_UNKNOWN_ACTION_' + Math.random().toString(36).substring(7).split('').join('.');\n if (typeof reducer(undefined, { type: type }) === 'undefined') {\n throw new Error('Reducer \"' + key + '\" returned undefined when probed with a random type. ' + ('Don\\'t try to handle ' + ActionTypes.INIT + ' or other actions in \"redux/*\" ') + 'namespace. They are considered private. Instead, you must return the ' + 'current state for any unknown actions, unless it is undefined, ' + 'in which case you must return the initial state, regardless of the ' + 'action type. The initial state may not be undefined, but can be null.');\n }\n });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\nexport default function combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning('No reducer provided for key \"' + key + '\"');\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n var finalReducerKeys = Object.keys(finalReducers);\n\n var unexpectedKeyCache = void 0;\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError = void 0;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination() {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var action = arguments[1];\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === 'undefined') {\n var errorMessage = getUndefinedStateErrorMessage(_key, action);\n throw new Error(errorMessage);\n }\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n return hasChanged ? nextState : state;\n };\n}","/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\n\nexport default function compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(undefined, arguments));\n };\n });\n}","import isPlainObject from 'lodash-es/isPlainObject';\nimport $$observable from 'symbol-observable';\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nexport var ActionTypes = {\n INIT: '@@redux/INIT'\n\n /**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n};export default function createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error('Expected the enhancer to be a function.');\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error('Expected the reducer to be a function.');\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n function getState() {\n return currentState;\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Expected listener to be a function.');\n }\n\n var isSubscribed = true;\n\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n isSubscribed = false;\n\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n }\n\n if (isDispatching) {\n throw new Error('Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error('Expected the nextReducer to be a function.');\n }\n\n currentReducer = nextReducer;\n dispatch({ type: ActionTypes.INIT });\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object') {\n throw new TypeError('Expected the observer to be an object.');\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return { unsubscribe: unsubscribe };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch({ type: ActionTypes.INIT });\n\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}","import createStore from './createStore';\nimport combineReducers from './combineReducers';\nimport bindActionCreators from './bindActionCreators';\nimport applyMiddleware from './applyMiddleware';\nimport compose from './compose';\nimport warning from './utils/warning';\n\n/*\n* This is a dummy function to check if the function name has been altered by minification.\n* If the function has been minified and NODE_ENV !== 'production', warn the user.\n*/\nfunction isCrushed() {}\n\nif (process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed') {\n warning('You are currently using minified code outside of NODE_ENV === \\'production\\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.');\n}\n\nexport { createStore, combineReducers, bindActionCreators, applyMiddleware, compose };","/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nexport default function warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n}","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/* eslint-disable @typescript-eslint/strict-boolean-expressions */\nfunction parse(string, encoding, opts) {\n var _opts$out;\n\n if (opts === void 0) {\n opts = {};\n }\n\n // Build the character lookup table:\n if (!encoding.codes) {\n encoding.codes = {};\n\n for (var i = 0; i < encoding.chars.length; ++i) {\n encoding.codes[encoding.chars[i]] = i;\n }\n } // The string must have a whole number of bytes:\n\n\n if (!opts.loose && string.length * encoding.bits & 7) {\n throw new SyntaxError('Invalid padding');\n } // Count the padding bytes:\n\n\n var end = string.length;\n\n while (string[end - 1] === '=') {\n --end; // If we get a whole number of bytes, there is too much padding:\n\n if (!opts.loose && !((string.length - end) * encoding.bits & 7)) {\n throw new SyntaxError('Invalid padding');\n }\n } // Allocate the output:\n\n\n var out = new ((_opts$out = opts.out) != null ? _opts$out : Uint8Array)(end * encoding.bits / 8 | 0); // Parse the data:\n\n var bits = 0; // Number of bits currently in the buffer\n\n var buffer = 0; // Bits waiting to be written out, MSB first\n\n var written = 0; // Next byte to write\n\n for (var _i = 0; _i < end; ++_i) {\n // Read one character from the string:\n var value = encoding.codes[string[_i]];\n\n if (value === undefined) {\n throw new SyntaxError('Invalid character ' + string[_i]);\n } // Append the bits to the buffer:\n\n\n buffer = buffer << encoding.bits | value;\n bits += encoding.bits; // Write out some bits if the buffer has a byte's worth:\n\n if (bits >= 8) {\n bits -= 8;\n out[written++] = 0xff & buffer >> bits;\n }\n } // Verify that we have received just enough bits:\n\n\n if (bits >= encoding.bits || 0xff & buffer << 8 - bits) {\n throw new SyntaxError('Unexpected end of data');\n }\n\n return out;\n}\nfunction stringify(data, encoding, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n var _opts = opts,\n _opts$pad = _opts.pad,\n pad = _opts$pad === void 0 ? true : _opts$pad;\n var mask = (1 << encoding.bits) - 1;\n var out = '';\n var bits = 0; // Number of bits currently in the buffer\n\n var buffer = 0; // Bits waiting to be written out, MSB first\n\n for (var i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = buffer << 8 | 0xff & data[i];\n bits += 8; // Write out as much as we can:\n\n while (bits > encoding.bits) {\n bits -= encoding.bits;\n out += encoding.chars[mask & buffer >> bits];\n }\n } // Partial character:\n\n\n if (bits) {\n out += encoding.chars[mask & buffer << encoding.bits - bits];\n } // Add padding characters until we hit a byte boundary:\n\n\n if (pad) {\n while (out.length * encoding.bits & 7) {\n out += '=';\n }\n }\n\n return out;\n}\n\n/* eslint-disable @typescript-eslint/strict-boolean-expressions */\nvar base16Encoding = {\n chars: '0123456789ABCDEF',\n bits: 4\n};\nvar base32Encoding = {\n chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bits: 5\n};\nvar base32HexEncoding = {\n chars: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bits: 5\n};\nvar base64Encoding = {\n chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bits: 6\n};\nvar base64UrlEncoding = {\n chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bits: 6\n};\nvar base16 = {\n parse: function parse$1(string, opts) {\n return parse(string.toUpperCase(), base16Encoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base16Encoding, opts);\n }\n};\nvar base32 = {\n parse: function parse$1(string, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n return parse(opts.loose ? string.toUpperCase().replace(/0/g, 'O').replace(/1/g, 'L').replace(/8/g, 'B') : string, base32Encoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base32Encoding, opts);\n }\n};\nvar base32hex = {\n parse: function parse$1(string, opts) {\n return parse(string, base32HexEncoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base32HexEncoding, opts);\n }\n};\nvar base64 = {\n parse: function parse$1(string, opts) {\n return parse(string, base64Encoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base64Encoding, opts);\n }\n};\nvar base64url = {\n parse: function parse$1(string, opts) {\n return parse(string, base64UrlEncoding, opts);\n },\n stringify: function stringify$1(data, opts) {\n return stringify(data, base64UrlEncoding, opts);\n }\n};\nvar codec = {\n parse: parse,\n stringify: stringify\n};\n\nexports.base16 = base16;\nexports.base32 = base32;\nexports.base32hex = base32hex;\nexports.base64 = base64;\nexports.base64url = base64url;\nexports.codec = codec;\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var m = new Array(16)\n for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)\n\n var al = this._a\n var bl = this._b\n var cl = this._c\n var dl = this._d\n var el = this._e\n\n // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15\n // K = 0x00000000\n // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8\n al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)\n el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)\n dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)\n cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)\n bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)\n al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)\n el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)\n dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)\n cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)\n bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)\n al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)\n el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)\n dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)\n cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)\n bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)\n al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)\n\n // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8\n // K = 0x5a827999\n // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12\n el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)\n dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)\n cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)\n bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)\n al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)\n el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)\n dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)\n cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)\n bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)\n al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)\n el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)\n dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)\n cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)\n bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)\n al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)\n el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)\n\n // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12\n // K = 0x6ed9eba1\n // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5\n dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)\n cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)\n bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)\n al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)\n el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)\n dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)\n cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)\n bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)\n al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)\n el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)\n dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)\n cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)\n bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)\n al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)\n el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)\n dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)\n\n // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2\n // K = 0x8f1bbcdc\n // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12\n cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)\n bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)\n al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)\n el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)\n dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)\n cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)\n bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)\n al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)\n el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)\n dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)\n cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)\n bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)\n al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)\n el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)\n dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)\n cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)\n\n // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n // K = 0xa953fd4e\n // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)\n al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)\n el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)\n dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)\n cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)\n bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)\n al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)\n el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)\n dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)\n cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)\n bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)\n al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)\n el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)\n dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)\n cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)\n bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)\n\n var ar = this._a\n var br = this._b\n var cr = this._c\n var dr = this._d\n var er = this._e\n\n // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12\n // K' = 0x50a28be6\n // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6\n ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)\n er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)\n dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)\n cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)\n br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)\n ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)\n er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)\n dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)\n cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)\n br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)\n ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)\n er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)\n dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)\n cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)\n br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)\n ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)\n\n // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2\n // K' = 0x5c4dd124\n // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11\n er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)\n dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)\n cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)\n br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)\n ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)\n er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)\n dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)\n cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)\n br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)\n ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)\n er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)\n dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)\n cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)\n br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)\n ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)\n er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)\n\n // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13\n // K' = 0x6d703ef3\n // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5\n dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)\n cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)\n br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)\n ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)\n er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)\n dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)\n cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)\n br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)\n ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)\n er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)\n dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)\n cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)\n br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)\n ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)\n er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)\n dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)\n\n // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14\n // K' = 0x7a6d76e9\n // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8\n cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)\n br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)\n ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)\n er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)\n dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)\n cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)\n br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)\n ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)\n er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)\n dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)\n cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)\n br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)\n ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)\n er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)\n dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)\n cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)\n\n // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n // K' = 0x00000000\n // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)\n ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)\n er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)\n dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)\n cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)\n br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)\n ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)\n er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)\n dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)\n cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)\n br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)\n ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)\n er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)\n dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)\n cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)\n br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)\n\n // change state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","const assert = require('assert')\nconst Buffer = require('safe-buffer').Buffer\n/**\n * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP\n * This function takes in a data, convert it to buffer if not, and a length for recursion\n *\n * @param {Buffer,String,Integer,Array} data - will be converted to buffer\n * @returns {Buffer} - returns buffer of encoded data\n **/\nexports.encode = function (input) {\n if (input instanceof Array) {\n var output = []\n for (var i = 0; i < input.length; i++) {\n output.push(exports.encode(input[i]))\n }\n var buf = Buffer.concat(output)\n return Buffer.concat([encodeLength(buf.length, 192), buf])\n } else {\n input = toBuffer(input)\n if (input.length === 1 && input[0] < 128) {\n return input\n } else {\n return Buffer.concat([encodeLength(input.length, 128), input])\n }\n }\n}\n\nfunction safeParseInt (v, base) {\n if (v.slice(0, 2) === '00') {\n throw (new Error('invalid RLP: extra zeros'))\n }\n\n return parseInt(v, base)\n}\n\nfunction encodeLength (len, offset) {\n if (len < 56) {\n return Buffer.from([len + offset])\n } else {\n var hexLength = intToHex(len)\n var lLength = hexLength.length / 2\n var firstByte = intToHex(offset + 55 + lLength)\n return Buffer.from(firstByte + hexLength, 'hex')\n }\n}\n\n/**\n * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}\n * @param {Buffer,String,Integer,Array} data - will be converted to buffer\n * @returns {Array} - returns decode Array of Buffers containg the original message\n **/\nexports.decode = function (input, stream) {\n if (!input || input.length === 0) {\n return Buffer.from([])\n }\n\n input = toBuffer(input)\n var decoded = _decode(input)\n\n if (stream) {\n return decoded\n }\n\n assert.equal(decoded.remainder.length, 0, 'invalid remainder')\n return decoded.data\n}\n\nexports.getLength = function (input) {\n if (!input || input.length === 0) {\n return Buffer.from([])\n }\n\n input = toBuffer(input)\n var firstByte = input[0]\n if (firstByte <= 0x7f) {\n return input.length\n } else if (firstByte <= 0xb7) {\n return firstByte - 0x7f\n } else if (firstByte <= 0xbf) {\n return firstByte - 0xb6\n } else if (firstByte <= 0xf7) {\n // a list between 0-55 bytes long\n return firstByte - 0xbf\n } else {\n // a list over 55 bytes long\n var llength = firstByte - 0xf6\n var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)\n return llength + length\n }\n}\n\nfunction _decode (input) {\n var length, llength, data, innerRemainder, d\n var decoded = []\n var firstByte = input[0]\n\n if (firstByte <= 0x7f) {\n // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.\n return {\n data: input.slice(0, 1),\n remainder: input.slice(1)\n }\n } else if (firstByte <= 0xb7) {\n // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string\n // The range of the first byte is [0x80, 0xb7]\n length = firstByte - 0x7f\n\n // set 0x80 null to 0\n if (firstByte === 0x80) {\n data = Buffer.from([])\n } else {\n data = input.slice(1, length)\n }\n\n if (length === 2 && data[0] < 0x80) {\n throw new Error('invalid rlp encoding: byte must be less 0x80')\n }\n\n return {\n data: data,\n remainder: input.slice(length)\n }\n } else if (firstByte <= 0xbf) {\n llength = firstByte - 0xb6\n length = safeParseInt(input.slice(1, llength).toString('hex'), 16)\n data = input.slice(llength, length + llength)\n if (data.length < length) {\n throw (new Error('invalid RLP'))\n }\n\n return {\n data: data,\n remainder: input.slice(length + llength)\n }\n } else if (firstByte <= 0xf7) {\n // a list between 0-55 bytes long\n length = firstByte - 0xbf\n innerRemainder = input.slice(1, length)\n while (innerRemainder.length) {\n d = _decode(innerRemainder)\n decoded.push(d.data)\n innerRemainder = d.remainder\n }\n\n return {\n data: decoded,\n remainder: input.slice(length)\n }\n } else {\n // a list over 55 bytes long\n llength = firstByte - 0xf6\n length = safeParseInt(input.slice(1, llength).toString('hex'), 16)\n var totalLength = llength + length\n if (totalLength > input.length) {\n throw new Error('invalid rlp: total length is larger than the data')\n }\n\n innerRemainder = input.slice(llength, totalLength)\n if (innerRemainder.length === 0) {\n throw new Error('invalid rlp, List has a invalid length')\n }\n\n while (innerRemainder.length) {\n d = _decode(innerRemainder)\n decoded.push(d.data)\n innerRemainder = d.remainder\n }\n return {\n data: decoded,\n remainder: input.slice(totalLength)\n }\n }\n}\n\nfunction isHexPrefixed (str) {\n return str.slice(0, 2) === '0x'\n}\n\n// Removes 0x from a given String\nfunction stripHexPrefix (str) {\n if (typeof str !== 'string') {\n return str\n }\n return isHexPrefixed(str) ? str.slice(2) : str\n}\n\nfunction intToHex (i) {\n var hex = i.toString(16)\n if (hex.length % 2) {\n hex = '0' + hex\n }\n\n return hex\n}\n\nfunction padToEven (a) {\n if (a.length % 2) a = '0' + a\n return a\n}\n\nfunction intToBuffer (i) {\n var hex = intToHex(i)\n return Buffer.from(hex, 'hex')\n}\n\nfunction toBuffer (v) {\n if (!Buffer.isBuffer(v)) {\n if (typeof v === 'string') {\n if (isHexPrefixed(v)) {\n v = Buffer.from(padToEven(stripHexPrefix(v)), 'hex')\n } else {\n v = Buffer.from(v)\n }\n } else if (typeof v === 'number') {\n if (!v) {\n v = Buffer.from([])\n } else {\n v = intToBuffer(v)\n }\n } else if (v === null || v === undefined) {\n v = Buffer.from([])\n } else if (v.toArray) {\n // converts a BN to a Buffer\n v = Buffer.from(v.toArray())\n } else {\n throw new Error('invalid type')\n }\n }\n return v\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","\"use strict\";\n\n(function(root) {\n var MAX_VALUE = 0x7fffffff;\n\n // The SHA256 and PBKDF2 implementation are from scrypt-async-js:\n // See: https://github.com/dchest/scrypt-async-js\n function SHA256(m) {\n var K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ];\n\n var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;\n var h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;\n var w = new Array(64);\n\n function blocks(p) {\n var off = 0, len = p.length;\n while (len >= 64) {\n var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2;\n\n for (i = 0; i < 16; i++) {\n j = off + i*4;\n w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) |\n ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff);\n }\n\n for (i = 16; i < 64; i++) {\n u = w[i-2];\n t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10);\n\n u = w[i-15];\n t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3);\n\n w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0;\n }\n\n for (i = 0; i < 64; i++) {\n t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^\n ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n\n t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^\n ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n h0 = (h0 + a) | 0;\n h1 = (h1 + b) | 0;\n h2 = (h2 + c) | 0;\n h3 = (h3 + d) | 0;\n h4 = (h4 + e) | 0;\n h5 = (h5 + f) | 0;\n h6 = (h6 + g) | 0;\n h7 = (h7 + h) | 0;\n\n off += 64;\n len -= 64;\n }\n }\n\n blocks(m);\n\n var i, bytesLeft = m.length % 64,\n bitLenHi = (m.length / 0x20000000) | 0,\n bitLenLo = m.length << 3,\n numZeros = (bytesLeft < 56) ? 56 : 120,\n p = m.slice(m.length - bytesLeft, m.length);\n\n p.push(0x80);\n for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); }\n p.push((bitLenHi>>>24) & 0xff);\n p.push((bitLenHi>>>16) & 0xff);\n p.push((bitLenHi>>>8) & 0xff);\n p.push((bitLenHi>>>0) & 0xff);\n p.push((bitLenLo>>>24) & 0xff);\n p.push((bitLenLo>>>16) & 0xff);\n p.push((bitLenLo>>>8) & 0xff);\n p.push((bitLenLo>>>0) & 0xff);\n\n blocks(p);\n\n return [\n (h0>>>24) & 0xff, (h0>>>16) & 0xff, (h0>>>8) & 0xff, (h0>>>0) & 0xff,\n (h1>>>24) & 0xff, (h1>>>16) & 0xff, (h1>>>8) & 0xff, (h1>>>0) & 0xff,\n (h2>>>24) & 0xff, (h2>>>16) & 0xff, (h2>>>8) & 0xff, (h2>>>0) & 0xff,\n (h3>>>24) & 0xff, (h3>>>16) & 0xff, (h3>>>8) & 0xff, (h3>>>0) & 0xff,\n (h4>>>24) & 0xff, (h4>>>16) & 0xff, (h4>>>8) & 0xff, (h4>>>0) & 0xff,\n (h5>>>24) & 0xff, (h5>>>16) & 0xff, (h5>>>8) & 0xff, (h5>>>0) & 0xff,\n (h6>>>24) & 0xff, (h6>>>16) & 0xff, (h6>>>8) & 0xff, (h6>>>0) & 0xff,\n (h7>>>24) & 0xff, (h7>>>16) & 0xff, (h7>>>8) & 0xff, (h7>>>0) & 0xff\n ];\n }\n\n function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {\n // compress password if it's longer than hash block length\n password = password.length <= 64 ? password : SHA256(password);\n\n var i;\n var innerLen = 64 + salt.length + 4;\n var inner = new Array(innerLen);\n var outerKey = new Array(64);\n var dk = [];\n\n // inner = (password ^ ipad) || salt || counter\n for (i = 0; i < 64; i++) inner[i] = 0x36;\n for (i = 0; i < password.length; i++) inner[i] ^= password[i];\n for (i = 0; i < salt.length; i++) inner[64+i] = salt[i];\n for (i = innerLen - 4; i < innerLen; i++) inner[i] = 0;\n\n // outerKey = password ^ opad\n for (i = 0; i < 64; i++) outerKey[i] = 0x5c;\n for (i = 0; i < password.length; i++) outerKey[i] ^= password[i];\n\n // increments counter inside inner\n function incrementCounter() {\n for (var i = innerLen-1; i >= innerLen-4; i--) {\n inner[i]++;\n if (inner[i] <= 0xff) return;\n inner[i] = 0;\n }\n }\n\n // output blocks = SHA256(outerKey || SHA256(inner)) ...\n while (dkLen >= 32) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));\n dkLen -= 32;\n }\n if (dkLen > 0) {\n incrementCounter();\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));\n }\n\n return dk;\n }\n\n // The following is an adaptation of scryptsy\n // See: https://www.npmjs.com/package/scryptsy\n function blockmix_salsa8(BY, Yi, r, x, _X) {\n var i;\n\n arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16);\n for (i = 0; i < 2 * r; i++) {\n blockxor(BY, i * 16, _X, 16);\n salsa20_8(_X, x);\n arraycopy(_X, 0, BY, Yi + (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16);\n }\n\n for (i = 0; i < r; i++) {\n arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16);\n }\n }\n\n function R(a, b) {\n return (a << b) | (a >>> (32 - b));\n }\n\n function salsa20_8(B, x) {\n arraycopy(B, 0, x, 0, 16);\n\n for (var i = 8; i > 0; i -= 2) {\n x[ 4] ^= R(x[ 0] + x[12], 7);\n x[ 8] ^= R(x[ 4] + x[ 0], 9);\n x[12] ^= R(x[ 8] + x[ 4], 13);\n x[ 0] ^= R(x[12] + x[ 8], 18);\n x[ 9] ^= R(x[ 5] + x[ 1], 7);\n x[13] ^= R(x[ 9] + x[ 5], 9);\n x[ 1] ^= R(x[13] + x[ 9], 13);\n x[ 5] ^= R(x[ 1] + x[13], 18);\n x[14] ^= R(x[10] + x[ 6], 7);\n x[ 2] ^= R(x[14] + x[10], 9);\n x[ 6] ^= R(x[ 2] + x[14], 13);\n x[10] ^= R(x[ 6] + x[ 2], 18);\n x[ 3] ^= R(x[15] + x[11], 7);\n x[ 7] ^= R(x[ 3] + x[15], 9);\n x[11] ^= R(x[ 7] + x[ 3], 13);\n x[15] ^= R(x[11] + x[ 7], 18);\n x[ 1] ^= R(x[ 0] + x[ 3], 7);\n x[ 2] ^= R(x[ 1] + x[ 0], 9);\n x[ 3] ^= R(x[ 2] + x[ 1], 13);\n x[ 0] ^= R(x[ 3] + x[ 2], 18);\n x[ 6] ^= R(x[ 5] + x[ 4], 7);\n x[ 7] ^= R(x[ 6] + x[ 5], 9);\n x[ 4] ^= R(x[ 7] + x[ 6], 13);\n x[ 5] ^= R(x[ 4] + x[ 7], 18);\n x[11] ^= R(x[10] + x[ 9], 7);\n x[ 8] ^= R(x[11] + x[10], 9);\n x[ 9] ^= R(x[ 8] + x[11], 13);\n x[10] ^= R(x[ 9] + x[ 8], 18);\n x[12] ^= R(x[15] + x[14], 7);\n x[13] ^= R(x[12] + x[15], 9);\n x[14] ^= R(x[13] + x[12], 13);\n x[15] ^= R(x[14] + x[13], 18);\n }\n\n for (i = 0; i < 16; ++i) {\n B[i] += x[i];\n }\n }\n\n // naive approach... going back to loop unrolling may yield additional performance\n function blockxor(S, Si, D, len) {\n for (var i = 0; i < len; i++) {\n D[i] ^= S[Si + i]\n }\n }\n\n function arraycopy(src, srcPos, dest, destPos, length) {\n while (length--) {\n dest[destPos++] = src[srcPos++];\n }\n }\n\n function checkBufferish(o) {\n if (!o || typeof(o.length) !== 'number') {\n return false;\n }\n for (var i = 0; i < o.length; i++) {\n if (typeof(o[i]) !== 'number') { return false; }\n\n var v = parseInt(o[i]);\n if (v != o[i] || v < 0 || v >= 256) {\n return false;\n }\n }\n return true;\n }\n\n function ensureInteger(value, name) {\n var intValue = parseInt(value);\n if (value != intValue) { throw new Error('invalid ' + name); }\n return intValue;\n }\n\n // N = Cpu cost, r = Memory cost, p = parallelization cost\n // callback(error, progress, key)\n function scrypt(password, salt, N, r, p, dkLen, callback) {\n\n if (!callback) { throw new Error('missing callback'); }\n\n N = ensureInteger(N, 'N');\n r = ensureInteger(r, 'r');\n p = ensureInteger(p, 'p');\n\n dkLen = ensureInteger(dkLen, 'dkLen');\n\n if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); }\n\n if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); }\n if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); }\n\n if (!checkBufferish(password)) {\n throw new Error('password must be an array or buffer');\n }\n\n if (!checkBufferish(salt)) {\n throw new Error('salt must be an array or buffer');\n }\n\n var b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);\n var B = new Uint32Array(p * 32 * r)\n for (var i = 0; i < B.length; i++) {\n var j = i * 4;\n B[i] = ((b[j + 3] & 0xff) << 24) |\n ((b[j + 2] & 0xff) << 16) |\n ((b[j + 1] & 0xff) << 8) |\n ((b[j + 0] & 0xff) << 0);\n }\n\n var XY = new Uint32Array(64 * r);\n var V = new Uint32Array(32 * r * N);\n\n var Yi = 32 * r;\n\n // scratch space\n var x = new Uint32Array(16); // salsa20_8\n var _X = new Uint32Array(16); // blockmix_salsa8\n\n var totalOps = p * N * 2;\n var currentOp = 0;\n var lastPercent10 = null;\n\n // Set this to true to abandon the scrypt on the next step\n var stop = false;\n\n // State information\n var state = 0;\n var i0 = 0, i1;\n var Bi;\n\n // How many blockmix_salsa8 can we do per step?\n var limit = parseInt(1000 / r);\n\n // Trick from scrypt-async; if there is a setImmediate shim in place, use it\n var nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout;\n\n // This is really all I changed; making scryptsy a state machine so we occasionally\n // stop and give other evnts on the evnt loop a chance to run. ~RicMoo\n var incrementalSMix = function() {\n if (stop) {\n return callback(new Error('cancelled'), currentOp / totalOps);\n }\n\n switch (state) {\n case 0:\n // for (var i = 0; i < p; i++)...\n Bi = i0 * 32 * r;\n\n arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1\n\n state = 1; // Move to ROMix 2\n i1 = 0;\n\n // Fall through\n\n case 1:\n\n // Run up to 1000 steps of the first inner smix loop\n var steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (var i = 0; i < steps; i++) { // ROMix - 2\n arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4\n }\n\n // for (var i = 0; i < N; i++)\n i1 += steps;\n currentOp += steps;\n\n // Call the callback with the progress (optionally stopping us)\n var percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n\n if (i1 < N) {\n break;\n }\n\n i1 = 0; // Move to ROMix 6\n state = 2;\n\n // Fall through\n\n case 2:\n\n // Run up to 1000 steps of the second inner smix loop\n var steps = N - i1;\n if (steps > limit) { steps = limit; }\n for (var i = 0; i < steps; i++) { // ROMix - 6\n var offset = (2 * r - 1) * 16; // ROMix - 7\n var j = XY[offset] & (N - 1);\n blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner)\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer)\n }\n\n // for (var i = 0; i < N; i++)...\n i1 += steps;\n currentOp += steps;\n\n // Call the callback with the progress (optionally stopping us)\n var percent10 = parseInt(1000 * currentOp / totalOps);\n if (percent10 !== lastPercent10) {\n stop = callback(null, currentOp / totalOps);\n if (stop) { break; }\n lastPercent10 = percent10;\n }\n\n if (i1 < N) {\n break;\n }\n\n arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10\n\n // for (var i = 0; i < p; i++)...\n i0++;\n if (i0 < p) {\n state = 0;\n break;\n }\n\n b = [];\n for (var i = 0; i < B.length; i++) {\n b.push((B[i] >> 0) & 0xff);\n b.push((B[i] >> 8) & 0xff);\n b.push((B[i] >> 16) & 0xff);\n b.push((B[i] >> 24) & 0xff);\n }\n\n var derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen);\n\n // Done; don't break (which would reschedule)\n return callback(null, 1.0, derivedKey);\n }\n\n // Schedule the next steps\n nextTick(incrementalSMix);\n }\n\n // Bootstrap the incremental smix\n incrementalSMix();\n }\n\n // node.js\n if (typeof(exports) !== 'undefined') {\n module.exports = scrypt;\n\n // RequireJS/AMD\n // http://www.requirejs.org/docs/api.html\n // https://github.com/amdjs/amdjs-api/wiki/AMD\n } else if (typeof(define) === 'function' && define.amd) {\n define(scrypt);\n\n // Web Browsers\n } else if (root) {\n\n // If there was an existing library \"scrypt\", make sure it is still available\n if (root.scrypt) {\n root._scrypt = root.scrypt;\n }\n\n root.scrypt = scrypt;\n }\n\n})(this);\n","'use strict'\nmodule.exports = require('./lib')(require('./lib/elliptic'))\n","'use strict'\nvar toString = Object.prototype.toString\n\n// TypeError\nexports.isArray = function (value, message) {\n if (!Array.isArray(value)) throw TypeError(message)\n}\n\nexports.isBoolean = function (value, message) {\n if (toString.call(value) !== '[object Boolean]') throw TypeError(message)\n}\n\nexports.isBuffer = function (value, message) {\n if (!Buffer.isBuffer(value)) throw TypeError(message)\n}\n\nexports.isFunction = function (value, message) {\n if (toString.call(value) !== '[object Function]') throw TypeError(message)\n}\n\nexports.isNumber = function (value, message) {\n if (toString.call(value) !== '[object Number]') throw TypeError(message)\n}\n\nexports.isObject = function (value, message) {\n if (toString.call(value) !== '[object Object]') throw TypeError(message)\n}\n\n// RangeError\nexports.isBufferLength = function (buffer, length, message) {\n if (buffer.length !== length) throw RangeError(message)\n}\n\nexports.isBufferLength2 = function (buffer, length1, length2, message) {\n if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)\n}\n\nexports.isLengthGTZero = function (value, message) {\n if (value.length === 0) throw RangeError(message)\n}\n\nexports.isNumberInInterval = function (number, x, y, message) {\n if (number <= x || number >= y) throw RangeError(message)\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar bip66 = require('bip66')\n\nvar EC_PRIVKEY_EXPORT_DER_COMPRESSED = Buffer.from([\n // begin\n 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,\n // private key\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // middle\n 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,\n 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,\n 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,\n 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,\n 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,\n 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,\n // public key\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00\n])\n\nvar EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = Buffer.from([\n // begin\n 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,\n // private key\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // middle\n 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,\n 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,\n 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,\n 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,\n 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,\n 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,\n 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,\n 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,\n // public key\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00\n])\n\nexports.privateKeyExport = function (privateKey, publicKey, compressed) {\n var result = Buffer.from(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)\n privateKey.copy(result, compressed ? 8 : 9)\n publicKey.copy(result, compressed ? 181 : 214)\n return result\n}\n\nexports.privateKeyImport = function (privateKey) {\n var length = privateKey.length\n\n // sequence header\n var index = 0\n if (length < index + 1 || privateKey[index] !== 0x30) return\n index += 1\n\n // sequence length constructor\n if (length < index + 1 || !(privateKey[index] & 0x80)) return\n\n var lenb = privateKey[index] & 0x7f\n index += 1\n if (lenb < 1 || lenb > 2) return\n if (length < index + lenb) return\n\n // sequence length\n var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)\n index += lenb\n if (length < index + len) return\n\n // sequence element 0: version number (=1)\n if (length < index + 3 ||\n privateKey[index] !== 0x02 ||\n privateKey[index + 1] !== 0x01 ||\n privateKey[index + 2] !== 0x01) {\n return\n }\n index += 3\n\n // sequence element 1: octet string, up to 32 bytes\n if (length < index + 2 ||\n privateKey[index] !== 0x04 ||\n privateKey[index + 1] > 0x20 ||\n length < index + 2 + privateKey[index + 1]) {\n return\n }\n\n return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])\n}\n\nexports.signatureExport = function (sigObj) {\n var r = Buffer.concat([Buffer.from([0]), sigObj.r])\n for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);\n\n var s = Buffer.concat([Buffer.from([0]), sigObj.s])\n for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);\n\n return bip66.encode(r.slice(posR), s.slice(posS))\n}\n\nexports.signatureImport = function (sig) {\n var r = Buffer.alloc(32, 0)\n var s = Buffer.alloc(32, 0)\n\n try {\n var sigObj = bip66.decode(sig)\n if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)\n if (sigObj.r.length > 32) throw new Error('R length is too long')\n if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)\n if (sigObj.s.length > 32) throw new Error('S length is too long')\n } catch (err) {\n return\n }\n\n sigObj.r.copy(r, 32 - sigObj.r.length)\n sigObj.s.copy(s, 32 - sigObj.s.length)\n\n return { r: r, s: s }\n}\n\nexports.signatureImportLax = function (sig) {\n var r = Buffer.alloc(32, 0)\n var s = Buffer.alloc(32, 0)\n\n var length = sig.length\n var index = 0\n\n // sequence tag byte\n if (sig[index++] !== 0x30) return\n\n // sequence length byte\n var lenbyte = sig[index++]\n if (lenbyte & 0x80) {\n index += lenbyte - 0x80\n if (index > length) return\n }\n\n // sequence tag byte for r\n if (sig[index++] !== 0x02) return\n\n // length for r\n var rlen = sig[index++]\n if (rlen & 0x80) {\n lenbyte = rlen - 0x80\n if (index + lenbyte > length) return\n for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);\n for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]\n }\n if (rlen > length - index) return\n var rindex = index\n index += rlen\n\n // sequence tag byte for s\n if (sig[index++] !== 0x02) return\n\n // length for s\n var slen = sig[index++]\n if (slen & 0x80) {\n lenbyte = slen - 0x80\n if (index + lenbyte > length) return\n for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);\n for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]\n }\n if (slen > length - index) return\n var sindex = index\n index += slen\n\n // ignore leading zeros in r\n for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);\n // copy r value\n if (rlen > 32) return\n var rvalue = sig.slice(rindex, rindex + rlen)\n rvalue.copy(r, 32 - rvalue.length)\n\n // ignore leading zeros in s\n for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);\n // copy s value\n if (slen > 32) return\n var svalue = sig.slice(sindex, sindex + slen)\n svalue.copy(s, 32 - svalue.length)\n\n return { r: r, s: s }\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\n\nvar messages = require('../messages.json')\n\nvar ec = new EC('secp256k1')\nvar ecparams = ec.curve\n\nfunction loadCompressedPublicKey (first, xBuffer) {\n var x = new BN(xBuffer)\n\n // overflow\n if (x.cmp(ecparams.p) >= 0) return null\n x = x.toRed(ecparams.red)\n\n // compute corresponding Y\n var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()\n if ((first === 0x03) !== y.isOdd()) y = y.redNeg()\n\n return ec.keyPair({ pub: { x: x, y: y } })\n}\n\nfunction loadUncompressedPublicKey (first, xBuffer, yBuffer) {\n var x = new BN(xBuffer)\n var y = new BN(yBuffer)\n\n // overflow\n if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null\n\n x = x.toRed(ecparams.red)\n y = y.toRed(ecparams.red)\n\n // is odd flag\n if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null\n\n // x*x*x + b = y*y\n var x3 = x.redSqr().redIMul(x)\n if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null\n\n return ec.keyPair({ pub: { x: x, y: y } })\n}\n\nfunction loadPublicKey (publicKey) {\n var first = publicKey[0]\n switch (first) {\n case 0x02:\n case 0x03:\n if (publicKey.length !== 33) return null\n return loadCompressedPublicKey(first, publicKey.slice(1, 33))\n case 0x04:\n case 0x06:\n case 0x07:\n if (publicKey.length !== 65) return null\n return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))\n default:\n return null\n }\n}\n\nexports.privateKeyVerify = function (privateKey) {\n var bn = new BN(privateKey)\n return bn.cmp(ecparams.n) < 0 && !bn.isZero()\n}\n\nexports.privateKeyExport = function (privateKey, compressed) {\n var d = new BN(privateKey)\n if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)\n\n return Buffer.from(ec.keyFromPrivate(privateKey).getPublic(compressed, true))\n}\n\nexports.privateKeyNegate = function (privateKey) {\n var bn = new BN(privateKey)\n return bn.isZero() ? Buffer.alloc(32) : ecparams.n.sub(bn).umod(ecparams.n).toArrayLike(Buffer, 'be', 32)\n}\n\nexports.privateKeyModInverse = function (privateKey) {\n var bn = new BN(privateKey)\n if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_RANGE_INVALID)\n\n return bn.invm(ecparams.n).toArrayLike(Buffer, 'be', 32)\n}\n\nexports.privateKeyTweakAdd = function (privateKey, tweak) {\n var bn = new BN(tweak)\n if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)\n\n bn.iadd(new BN(privateKey))\n if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)\n if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)\n\n return bn.toArrayLike(Buffer, 'be', 32)\n}\n\nexports.privateKeyTweakMul = function (privateKey, tweak) {\n var bn = new BN(tweak)\n if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)\n\n bn.imul(new BN(privateKey))\n if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)\n\n return bn.toArrayLike(Buffer, 'be', 32)\n}\n\nexports.publicKeyCreate = function (privateKey, compressed) {\n var d = new BN(privateKey)\n if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)\n\n return Buffer.from(ec.keyFromPrivate(privateKey).getPublic(compressed, true))\n}\n\nexports.publicKeyConvert = function (publicKey, compressed) {\n var pair = loadPublicKey(publicKey)\n if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)\n\n return Buffer.from(pair.getPublic(compressed, true))\n}\n\nexports.publicKeyVerify = function (publicKey) {\n return loadPublicKey(publicKey) !== null\n}\n\nexports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {\n var pair = loadPublicKey(publicKey)\n if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)\n\n tweak = new BN(tweak)\n if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)\n\n return Buffer.from(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))\n}\n\nexports.publicKeyTweakMul = function (publicKey, tweak, compressed) {\n var pair = loadPublicKey(publicKey)\n if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)\n\n tweak = new BN(tweak)\n if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)\n\n return Buffer.from(pair.pub.mul(tweak).encode(true, compressed))\n}\n\nexports.publicKeyCombine = function (publicKeys, compressed) {\n var pairs = new Array(publicKeys.length)\n for (var i = 0; i < publicKeys.length; ++i) {\n pairs[i] = loadPublicKey(publicKeys[i])\n if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)\n }\n\n var point = pairs[0].pub\n for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)\n if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)\n\n return Buffer.from(point.encode(true, compressed))\n}\n\nexports.signatureNormalize = function (signature) {\n var r = new BN(signature.slice(0, 32))\n var s = new BN(signature.slice(32, 64))\n if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)\n\n var result = Buffer.from(signature)\n if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)\n\n return result\n}\n\nexports.signatureExport = function (signature) {\n var r = signature.slice(0, 32)\n var s = signature.slice(32, 64)\n if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)\n\n return { r: r, s: s }\n}\n\nexports.signatureImport = function (sigObj) {\n var r = new BN(sigObj.r)\n if (r.cmp(ecparams.n) >= 0) r = new BN(0)\n\n var s = new BN(sigObj.s)\n if (s.cmp(ecparams.n) >= 0) s = new BN(0)\n\n return Buffer.concat([\n r.toArrayLike(Buffer, 'be', 32),\n s.toArrayLike(Buffer, 'be', 32)\n ])\n}\n\nexports.sign = function (message, privateKey, noncefn, data) {\n if (typeof noncefn === 'function') {\n var getNonce = noncefn\n noncefn = function (counter) {\n var nonce = getNonce(message, privateKey, null, data, counter)\n if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)\n\n return new BN(nonce)\n }\n }\n\n var d = new BN(privateKey)\n if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)\n\n var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })\n return {\n signature: Buffer.concat([\n result.r.toArrayLike(Buffer, 'be', 32),\n result.s.toArrayLike(Buffer, 'be', 32)\n ]),\n recovery: result.recoveryParam\n }\n}\n\nexports.verify = function (message, signature, publicKey) {\n var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}\n\n var sigr = new BN(sigObj.r)\n var sigs = new BN(sigObj.s)\n if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)\n if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false\n\n var pair = loadPublicKey(publicKey)\n if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)\n\n return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})\n}\n\nexports.recover = function (message, signature, recovery, compressed) {\n var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}\n\n var sigr = new BN(sigObj.r)\n var sigs = new BN(sigObj.s)\n if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)\n\n try {\n if (sigr.isZero() || sigs.isZero()) throw new Error()\n\n var point = ec.recoverPubKey(message, sigObj, recovery)\n return Buffer.from(point.encode(true, compressed))\n } catch (err) {\n throw new Error(messages.ECDSA_RECOVER_FAIL)\n }\n}\n\nexports.ecdh = function (publicKey, privateKey) {\n var shared = exports.ecdhUnsafe(publicKey, privateKey, true)\n return createHash('sha256').update(shared).digest()\n}\n\nexports.ecdhUnsafe = function (publicKey, privateKey, compressed) {\n var pair = loadPublicKey(publicKey)\n if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)\n\n var scalar = new BN(privateKey)\n if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)\n\n return Buffer.from(pair.pub.mul(scalar).encode(true, compressed))\n}\n","'use strict'\nvar assert = require('./assert')\nvar der = require('./der')\nvar messages = require('./messages.json')\n\nfunction initCompressedValue (value, defaultValue) {\n if (value === undefined) return defaultValue\n\n assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)\n return value\n}\n\nmodule.exports = function (secp256k1) {\n return {\n privateKeyVerify: function (privateKey) {\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)\n },\n\n privateKeyExport: function (privateKey, compressed) {\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n compressed = initCompressedValue(compressed, true)\n var publicKey = secp256k1.privateKeyExport(privateKey, compressed)\n\n return der.privateKeyExport(privateKey, publicKey, compressed)\n },\n\n privateKeyImport: function (privateKey) {\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n\n privateKey = der.privateKeyImport(privateKey)\n if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey\n\n throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)\n },\n\n privateKeyNegate: function (privateKey) {\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n return secp256k1.privateKeyNegate(privateKey)\n },\n\n privateKeyModInverse: function (privateKey) {\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n return secp256k1.privateKeyModInverse(privateKey)\n },\n\n privateKeyTweakAdd: function (privateKey, tweak) {\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)\n assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)\n\n return secp256k1.privateKeyTweakAdd(privateKey, tweak)\n },\n\n privateKeyTweakMul: function (privateKey, tweak) {\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)\n assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)\n\n return secp256k1.privateKeyTweakMul(privateKey, tweak)\n },\n\n publicKeyCreate: function (privateKey, compressed) {\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n compressed = initCompressedValue(compressed, true)\n\n return secp256k1.publicKeyCreate(privateKey, compressed)\n },\n\n publicKeyConvert: function (publicKey, compressed) {\n assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)\n assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)\n\n compressed = initCompressedValue(compressed, true)\n\n return secp256k1.publicKeyConvert(publicKey, compressed)\n },\n\n publicKeyVerify: function (publicKey) {\n assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)\n return secp256k1.publicKeyVerify(publicKey)\n },\n\n publicKeyTweakAdd: function (publicKey, tweak, compressed) {\n assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)\n assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)\n\n assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)\n assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)\n\n compressed = initCompressedValue(compressed, true)\n\n return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)\n },\n\n publicKeyTweakMul: function (publicKey, tweak, compressed) {\n assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)\n assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)\n\n assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)\n assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)\n\n compressed = initCompressedValue(compressed, true)\n\n return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)\n },\n\n publicKeyCombine: function (publicKeys, compressed) {\n assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)\n assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)\n for (var i = 0; i < publicKeys.length; ++i) {\n assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)\n assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)\n }\n\n compressed = initCompressedValue(compressed, true)\n\n return secp256k1.publicKeyCombine(publicKeys, compressed)\n },\n\n signatureNormalize: function (signature) {\n assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)\n assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)\n\n return secp256k1.signatureNormalize(signature)\n },\n\n signatureExport: function (signature) {\n assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)\n assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)\n\n var sigObj = secp256k1.signatureExport(signature)\n return der.signatureExport(sigObj)\n },\n\n signatureImport: function (sig) {\n assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)\n assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)\n\n var sigObj = der.signatureImport(sig)\n if (sigObj) return secp256k1.signatureImport(sigObj)\n\n throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)\n },\n\n signatureImportLax: function (sig) {\n assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)\n assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)\n\n var sigObj = der.signatureImportLax(sig)\n if (sigObj) return secp256k1.signatureImport(sigObj)\n\n throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)\n },\n\n sign: function (message, privateKey, options) {\n assert.isBuffer(message, messages.MSG32_TYPE_INVALID)\n assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)\n\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n var data = null\n var noncefn = null\n if (options !== undefined) {\n assert.isObject(options, messages.OPTIONS_TYPE_INVALID)\n\n if (options.data !== undefined) {\n assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)\n assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)\n data = options.data\n }\n\n if (options.noncefn !== undefined) {\n assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)\n noncefn = options.noncefn\n }\n }\n\n return secp256k1.sign(message, privateKey, noncefn, data)\n },\n\n verify: function (message, signature, publicKey) {\n assert.isBuffer(message, messages.MSG32_TYPE_INVALID)\n assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)\n\n assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)\n assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)\n\n assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)\n assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)\n\n return secp256k1.verify(message, signature, publicKey)\n },\n\n recover: function (message, signature, recovery, compressed) {\n assert.isBuffer(message, messages.MSG32_TYPE_INVALID)\n assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)\n\n assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)\n assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)\n\n assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)\n assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)\n\n compressed = initCompressedValue(compressed, true)\n\n return secp256k1.recover(message, signature, recovery, compressed)\n },\n\n ecdh: function (publicKey, privateKey) {\n assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)\n assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)\n\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n return secp256k1.ecdh(publicKey, privateKey)\n },\n\n ecdhUnsafe: function (publicKey, privateKey, compressed) {\n assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)\n assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)\n\n assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)\n assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)\n\n compressed = initCompressedValue(compressed, true)\n\n return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)\n }\n }\n}\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n/**\n * An HTTP endpoint, which knows how to handle one or more HTTP methods.\n * Returns `405 - Method Not Allowed` errors for unknown methods,\n * and adds a default `OPTIONS` handler if needed.\n */\nfunction pickMethod(methods) {\n // Uppercase the method names:\n var cleanMethods = {};\n\n for (var _i = 0, _Object$keys = Object.keys(methods); _i < _Object$keys.length; _i++) {\n var name = _Object$keys[_i];\n cleanMethods[name.toUpperCase()] = methods[name];\n } // Add a default OPTIONS handler:\n\n\n if (cleanMethods.OPTIONS == null) {\n cleanMethods.OPTIONS = function () {\n return {\n status: 204,\n headers: optionsHeaders\n };\n };\n }\n\n var optionsHeaders = {\n 'content-length': '0',\n allow: Object.keys(cleanMethods).join(', ')\n };\n return function (request) {\n var handler = cleanMethods[request.method];\n if (handler != null) return handler(request);\n return {\n status: 405,\n headers: optionsHeaders\n };\n };\n}\n/**\n * A router, which picks a server based on a URL.\n */\n\nfunction pickPath(routes, fallback) {\n if (fallback === void 0) {\n fallback = function fallback() {\n return {\n status: 404\n };\n };\n }\n\n // Convert the routes to regular expressions:\n var table = [];\n\n for (var _i2 = 0, _Object$keys2 = Object.keys(routes); _i2 < _Object$keys2.length; _i2++) {\n var route = _Object$keys2[_i2];\n table.push({\n regexp: new RegExp(\"^\" + route + \"$\"),\n server: routes[route]\n });\n }\n\n return function (request) {\n for (var _iterator = _createForOfIteratorHelperLoose(table), _step; !(_step = _iterator()).done;) {\n var _step$value = _step.value,\n regexp = _step$value.regexp,\n server = _step$value.server;\n if (regexp.test(request.path)) return server(request);\n }\n\n return fallback(request);\n };\n}\n\n/**\n * Adds CORS headers to OPTIONS responses.\n */\nvar withCors = function withCors(server) {\n return /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (request) {\n var response = yield server(request);\n var _response$headers = response.headers,\n headers = _response$headers === void 0 ? {} : _response$headers;\n return _extends({}, response, {\n headers: _extends({}, headers, {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Headers': 'Accept, Authorization, Content-Type',\n 'Access-Control-Allow-Methods': 'DELETE, GET, OPTIONS, POST, PUT'\n })\n });\n });\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }();\n};\n\nvar utf8 = {\n parse: function parse(text) {\n var byteString = encodeURI(text);\n var out = new Uint8Array(byteString.length); // Treat each character as a byte, except for %XX escape sequences:\n\n var di = 0; // Destination index\n\n for (var i = 0; i < byteString.length; ++i) {\n var c = byteString.charCodeAt(i);\n\n if (c === 0x25) {\n out[di++] = parseInt(byteString.slice(i + 1, i + 3), 16);\n i += 2;\n } else {\n out[di++] = c;\n }\n } // Trim any over-allocated space (zero-copy):\n\n\n return out.subarray(0, di);\n },\n stringify: function stringify(data) {\n // Create a %XX escape sequence for each input byte:\n var byteString = '';\n\n for (var i = 0; i < data.length; ++i) {\n var _byte = data[i];\n byteString += '%' + (_byte >> 4).toString(16) + (_byte & 0xf).toString(16);\n }\n\n return decodeURIComponent(byteString);\n }\n};\n\n/**\n * The specific serverlet request type `makeFetchFunction` expects.\n */\n\n/**\n * Wraps a serverlet function in the fetch API.\n */\nfunction makeFetchFunction(serverlet) {\n return /*#__PURE__*/function () {\n var _fetch = _asyncToGenerator(function* (uri, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n var _opts = opts,\n _opts$body = _opts.body,\n body = _opts$body === void 0 ? '' : _opts$body,\n _opts$method = _opts.method,\n method = _opts$method === void 0 ? 'GET' : _opts$method,\n _opts$headers = _opts.headers,\n headers = _opts$headers === void 0 ? {} : _opts$headers;\n var request = {\n method: method,\n path: uri.replace(/https?:\\/\\/[^/]*/, ''),\n version: 'HTTP/1.1',\n headers: headers,\n body: typeof body === 'string' ? utf8.parse(body) : new Uint8Array(body)\n };\n var response = yield serverlet(request);\n return makeFetchResponse(response);\n });\n\n function fetch(_x, _x2) {\n return _fetch.apply(this, arguments);\n }\n\n return fetch;\n }();\n}\n/**\n * Turns a serverlet response into a fetch-style `Response` object.\n */\n\nfunction makeFetchResponse(response) {\n var _response$body = response.body,\n body = _response$body === void 0 ? '' : _response$body,\n _response$headers = response.headers,\n headers = _response$headers === void 0 ? {} : _response$headers,\n _response$status = response.status,\n status = _response$status === void 0 ? 200 : _response$status; // Use a promise wrapper to make all exceptions async:\n\n var bodyPromise = Promise.resolve(body);\n var out = {\n headers: makeFetchHeaders(headers),\n ok: status >= 200 && status < 300,\n status: status,\n arrayBuffer: function arrayBuffer() {\n return _asyncToGenerator(function* () {\n return yield bodyPromise.then(function (body) {\n return typeof body === 'string' ? utf8.parse(body).buffer : body;\n });\n })();\n },\n json: function json() {\n return _asyncToGenerator(function* () {\n return yield out.text().then(function (text) {\n return JSON.parse(text);\n });\n })();\n },\n text: function text() {\n return _asyncToGenerator(function* () {\n return yield bodyPromise.then(function (body) {\n return typeof body === 'string' ? body : utf8.stringify(new Uint8Array(body));\n });\n })();\n }\n };\n return out;\n}\n/**\n * Turns a simple key-value map into a fetch-style `Headers` object.\n */\n\nfunction makeFetchHeaders(headers) {\n var out = {\n forEach: function forEach(callback, thisArg) {\n for (var _i = 0, _Object$keys = Object.keys(headers); _i < _Object$keys.length; _i++) {\n var _name = _Object$keys[_i];\n callback.call(thisArg, headers[_name], _name);\n }\n },\n get: function get(name) {\n if (!out.has(name)) return null;\n return headers[name];\n },\n has: function has(name) {\n return Object.prototype.hasOwnProperty.call(headers, name);\n }\n };\n return out;\n}\n\nexports.makeFetchFunction = makeFetchFunction;\nexports.makeFetchResponse = makeFetchResponse;\nexports.pickMethod = pickMethod;\nexports.pickPath = pickPath;\nexports.withCors = withCors;\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var isHexPrefixed = require('is-hex-prefixed');\n\n/**\n * Removes '0x' from a given `String` is present\n * @param {String} str the string value\n * @return {String|Optional} a string by pass if necessary\n */\nmodule.exports = function stripHexPrefix(str) {\n if (typeof str !== 'string') {\n return str;\n }\n\n return isHexPrefixed(str) ? str.slice(2) : str;\n}\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nisSharedArrayBufferToString.working = (\n typeof SharedArrayBuffer !== 'undefined' &&\n isSharedArrayBufferToString(new SharedArrayBuffer())\n);\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBuffer === 'undefined') {\n return false;\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBuffer;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof global[typedArray] === 'function') {\n\t\t\tvar arr = new global[typedArray]();\n\t\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t\t}\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","import { base64 } from 'rfc4648';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n/**\n * @file\n * Bridgeable objects have a special \"magic\" property.\n * This file contains routines for working with these magic properties.\n */\n// An object is bridgeable if it has this key:\nvar MAGIC_KEY = '_yaob';\n/**\n * Magic data used to mark classes as bridgeable.\n */\n\nvar nextLocalId = 1;\nvar sharedData = {};\n/**\n * Adds or updates an object's magic data.\n */\n\nfunction addMagic(o, magic) {\n if (Object.prototype.hasOwnProperty.call(o, MAGIC_KEY)) {\n _extends(o[MAGIC_KEY], magic);\n } else {\n Object.defineProperty(o, MAGIC_KEY, {\n value: magic\n });\n }\n}\n/**\n * Makes a class bridgeable, including anything derived from it.\n */\n\n\nfunction bridgifyClass(Class) {\n var o = Class.prototype;\n\n if (!Object.prototype.hasOwnProperty.call(o, MAGIC_KEY)) {\n var magic = {};\n addMagic(o, magic);\n }\n\n return Class;\n}\n/**\n * Makes an object instance bridgeable.\n */\n\nfunction bridgifyObject(o) {\n if (!Object.prototype.hasOwnProperty.call(o, MAGIC_KEY) || o[MAGIC_KEY].localId == null) {\n var magic = {\n localId: nextLocalId++,\n bridges: [],\n listeners: {},\n watchers: {}\n };\n addMagic(o, magic);\n }\n\n return o;\n}\n/**\n * Gets the magic data from an object instance.\n */\n\nfunction getInstanceMagic(o) {\n // We only want to look at bridgeable objects:\n if (o[MAGIC_KEY] == null) throw new TypeError('Not a bridgeable object');\n bridgifyObject(o);\n return o[MAGIC_KEY];\n}\n/**\n * Creates a new `ProxyMagic` object.\n */\n\nfunction makeProxyMagic(remoteId) {\n return {\n // InstanceMagic:\n localId: nextLocalId++,\n bridges: [],\n listeners: {},\n watchers: {},\n // ProxyMagic:\n remoteId: remoteId,\n errors: {},\n props: {}\n };\n}\n/**\n * Adds items to the global shared data table.\n */\n\nfunction shareData(table, namespace) {\n if (namespace == null) namespace = '';else namespace += '.';\n\n for (var _i2 = 0, _Object$getOwnPropert2 = Object.getOwnPropertyNames(table); _i2 < _Object$getOwnPropert2.length; _i2++) {\n var n = _Object$getOwnPropert2[_i2];\n var shareId = namespace + n;\n\n if (sharedData[shareId] != null) {\n throw new Error(\"A shared value named \" + shareId + \" already exists\");\n }\n\n sharedData[shareId] = table[n];\n addMagic(table[n], {\n shareId: shareId\n });\n }\n}\n\n/**\n * The data-packing system uses this interface to turn\n * bridgeable objects into packedId's and vice-versa.\n */\n\n// Object properties\n\n/**\n * Prepares a value for sending over the wire.\n */\nfunction packData(table, data) {\n try {\n var map = mapData(table, data);\n var raw = packItem(table, map, data);\n return map !== '' ? {\n map: map,\n raw: raw\n } : {\n raw: raw\n };\n } catch (data) {\n return packThrow(table, data);\n }\n}\n/**\n * Prepares a thrown value for sending over the wire.\n */\n\nfunction packThrow(table, data) {\n var map = mapData(table, data);\n var raw = packItem(table, map, data);\n return {\n map: map,\n raw: raw,\n \"throw\": true\n };\n}\n/**\n * Restores a value that has been sent over the wire.\n */\n\nfunction unpackData(table, data, path, supress) {\n if (supress === void 0) {\n supress = false;\n }\n\n var map = data.map,\n raw = data.raw;\n var out = map != null ? unpackItem(table, map, raw, path, supress) : raw;\n if (data[\"throw\"]) throw out;\n return out;\n}\n/**\n * Searches through a value, looking for data we can't send directly.\n * Returns a map showing where fixes need to take place.\n */\n\nfunction mapData(table, data) {\n switch (typeof data) {\n case 'boolean':\n case 'number':\n case 'string':\n return '';\n\n case 'object':\n {\n if (data === null) return '';\n if (data instanceof Date) return 'd';\n if (data instanceof Error) return 'e';\n if (data instanceof ArrayBuffer) return 'ab';\n if (data instanceof Uint8Array) return 'u8';\n\n if (data[MAGIC_KEY] != null) {\n return data[MAGIC_KEY].shareId != null ? 's' : 'o';\n } // Arrays:\n\n\n if (Array.isArray(data)) {\n var _out = '';\n\n for (var i = 0; i < data.length; ++i) {\n var map = mapData(table, data[i]);\n\n if (map !== '' && _out === '') {\n _out = [];\n\n for (var j = 0; j < i; ++j) {\n _out[j] = '';\n }\n }\n\n if (_out !== '') _out[i] = map;\n }\n\n return _out;\n } // Data objects:\n\n\n var out = '';\n\n for (var n in data) {\n var _map = mapData(table, data[n]);\n\n if (_map !== '') {\n if (out === '') out = {};\n out[n] = _map;\n }\n }\n\n return out;\n }\n\n case 'undefined':\n return 'u';\n\n case 'function':\n // $FlowFixMe - MAGIC_KEY isn't a known property here\n return data[MAGIC_KEY] != null && data[MAGIC_KEY].shareId != null ? 's' : '?';\n\n default:\n return '?';\n }\n}\n/**\n * Breaks down an error object into a JSON representation.\n */\n\n\nfunction packError(table, o) {\n // Grab the properties off the object:\n var message = o.message,\n stack = o.stack;\n\n var props = _extends({\n message: message,\n stack: stack\n }, o);\n\n var base = null;\n if (o instanceof EvalError) base = 'EvalError';else if (o instanceof RangeError) base = 'RangeError';else if (o instanceof ReferenceError) base = 'ReferenceError';else if (o instanceof SyntaxError) base = 'SyntaxError';else if (o instanceof TypeError) base = 'TypeError';else if (o instanceof URIError) base = 'URIError'; // Build the JSON value:\n\n return _extends({\n base: base\n }, packData(table, props));\n}\n/**\n * Copies a value, removing any API objects identified in the types.\n */\n\n\nfunction packItem(table, map, data) {\n switch (map) {\n case '':\n return data;\n\n case '?':\n return typeof data;\n\n case 'd':\n return data.toISOString();\n\n case 'e':\n return packError(table, data);\n\n case 'o':\n return table.getPackedId(data);\n\n case 's':\n return data[MAGIC_KEY].shareId;\n\n case 'u':\n return null;\n\n case 'ab':\n return base64.stringify(new Uint8Array(data));\n\n case 'u8':\n return base64.stringify(data);\n\n default:\n {\n // Arrays:\n if (Array.isArray(map)) {\n var _out2 = [];\n\n for (var i = 0; i < map.length; ++i) {\n _out2[i] = packItem(table, map[i], data[i]);\n }\n\n return _out2;\n } // Objects:\n\n\n var out = {};\n\n for (var n in data) {\n out[n] = n in map ? packItem(table, map[n], data[n]) : data[n];\n }\n\n return out;\n }\n }\n}\n/**\n * Restores an error object from its JSON representation.\n */\n\n\nfunction unpackError(table, value, path) {\n var bases = {\n EvalError: EvalError,\n RangeError: RangeError,\n ReferenceError: ReferenceError,\n SyntaxError: SyntaxError,\n TypeError: TypeError,\n URIError: URIError\n }; // Make the object:\n\n var Base = value.base != null ? bases[value.base] || Error : Error;\n var out = new Base(); // Restore the properties:\n\n var props = unpackData(table, value, path, true);\n\n for (var n in props) {\n out[n] = props[n];\n }\n\n return out;\n}\n/**\n * Restores a value that has been sent over the wire.\n */\n\n\nfunction unpackItem(table, map, raw, path, supress) {\n switch (map) {\n case '':\n return raw;\n\n case '?':\n {\n var type = typeof raw === 'string' ? raw : '?';\n throw new TypeError(\"Unsupported value of type \" + type + \" at \" + path);\n }\n\n case 'd':\n return new Date(raw);\n\n case 'e':\n if (typeof raw !== 'object' || raw === null) {\n throw new TypeError(\"Expecting an error description at \" + path);\n }\n\n return unpackError(table, raw, path);\n\n case 'o':\n {\n if (raw === null) {\n throw new TypeError(\"Closed bridge object at \" + path);\n }\n\n if (typeof raw !== 'number') {\n throw new TypeError(\"Expecting a packedId at \" + path);\n }\n\n var _o = table.getObject(-raw);\n\n if (_o == null) throw new RangeError(\"Invalid packedId \" + raw + \" at \" + path);\n return _o;\n }\n\n case 's':\n {\n if (typeof raw !== 'string') {\n throw new TypeError(\"Expecting a shareId at \" + path);\n }\n\n var s = sharedData[raw];\n if (s == null) throw new RangeError(\"Invalid shareId '\" + raw + \"' at \" + path);\n return s;\n }\n\n case 'u':\n return undefined;\n\n case 'ab':\n if (typeof raw !== 'string') {\n throw new TypeError(\"Expecting a base64 string at \" + path);\n }\n\n return base64.parse(raw).buffer;\n\n case 'u8':\n if (typeof raw !== 'string') {\n throw new TypeError(\"Expecting a base64 string at \" + path);\n }\n\n return base64.parse(raw);\n\n default:\n {\n if (typeof map !== 'object' || map === null) {\n throw new TypeError(\"Invalid type information \" + map + \" at \" + path);\n }\n\n if (typeof raw !== 'object' || raw === null) {\n throw new TypeError(\"Expecting an array or object at \" + path);\n } // Arrays:\n\n\n if (Array.isArray(map)) {\n if (!Array.isArray(raw)) {\n throw new TypeError(\"Expecting an array at \" + path);\n }\n\n var _out3 = [];\n\n for (var i = 0; i < map.length; ++i) {\n if (supress === true && map[i] === '?') continue;\n _out3[i] = unpackItem(table, map[i], raw[i], path + \"[\" + i + \"]\", supress);\n }\n\n return _out3;\n } // Objects:\n\n\n var out = {};\n\n for (var n in raw) {\n if (supress === true && map[n] === '?') continue;\n out[n] = n in map ? unpackItem(table, map[n], raw[n], path + \".\" + n, supress) : raw[n];\n }\n\n return out;\n }\n }\n}\n\n/**\n * @file\n * Functions for managing updates, events, and object lifetime.\n */\n/**\n * Undoes the effect of `on`.\n */\n\n// No user-supplied value will ever be identical to this.\nvar dirtyValue$1 = {};\n/**\n * Subscribes to an event on a bridgeable object.\n */\n\nfunction addListener(o, name, f) {\n var _getInstanceMagic = getInstanceMagic(o),\n closed = _getInstanceMagic.closed,\n listeners = _getInstanceMagic.listeners;\n\n if (closed) return function () {};\n if (listeners[name] == null) listeners[name] = [f];else listeners[name].push(f);\n return function unsubscribe() {\n listeners[name] = listeners[name].filter(function (i) {\n return i !== f;\n });\n };\n}\n/**\n * Subscribes to property changes on a bridgeable object.\n */\n\nfunction addWatcher(o, name, f) {\n var _getInstanceMagic2 = getInstanceMagic(o),\n closed = _getInstanceMagic2.closed,\n watchers = _getInstanceMagic2.watchers; // Don't catch access errors, since we want the user to see them:\n\n\n var data = o[name];\n if (closed) return function () {};\n if (watchers[name] == null) watchers[name] = {\n data: data,\n fs: [f]\n };else watchers[name].fs.push(f);\n return function unsubscribe() {\n watchers[name].fs = watchers[name].fs.filter(function (i) {\n return i !== f;\n });\n };\n}\n/**\n * Destroys a proxy.\n * The remote client will completely forget about this object,\n * and accessing it will become an error.\n */\n\nfunction close(o) {\n var magic = getInstanceMagic(o); // Call local callbacks:\n\n var listeners = magic.listeners.close;\n\n if (listeners != null) {\n for (var _i2 = 0; _i2 < listeners.length; _i2++) {\n var _f = listeners[_i2];\n callCallback(o, _f, undefined, true);\n }\n }\n\n magic.closed = true;\n\n for (var _i4 = 0, _magic$bridges2 = magic.bridges; _i4 < _magic$bridges2.length; _i4++) {\n var bridge = _magic$bridges2[_i4];\n bridge.emitClose(magic.localId);\n }\n\n magic.bridges = [];\n magic.listeners = {};\n magic.watchers = {};\n}\n/**\n * Emits an event on a bridgeable object.\n */\n\nfunction emit(o, name, payload) {\n var magic = getInstanceMagic(o);\n if (magic.closed) throw new Error('Cannot emit event on closed object'); // Schedule outgoing event messages:\n\n for (var _i6 = 0, _magic$bridges4 = magic.bridges; _i6 < _magic$bridges4.length; _i6++) {\n var bridge = _magic$bridges4[_i6];\n bridge.emitEvent(magic.localId, name, payload);\n } // Call local callbacks:\n\n\n var listeners = magic.listeners[name];\n\n if (listeners != null) {\n for (var _i8 = 0; _i8 < listeners.length; _i8++) {\n var _f2 = listeners[_i8];\n callCallback(o, _f2, payload, name !== 'error');\n }\n }\n}\n/**\n * Marks an object as having changes. The proxy server will send an update.\n */\n\nfunction update(o, name) {\n var magic = getInstanceMagic(o);\n if (magic.closed) throw new Error('Cannot update closed object');\n\n for (var _i10 = 0, _magic$bridges6 = magic.bridges; _i10 < _magic$bridges6.length; _i10++) {\n var bridge = _magic$bridges6[_i10];\n bridge.markDirty(magic.localId, name);\n } // Blow away the cache if we have a name:\n\n\n if (name != null && magic.watchers[name] != null) {\n magic.watchers[name].data = dirtyValue$1;\n } // Call watcher callbacks:\n\n\n for (var n in magic.watchers) {\n var cache = magic.watchers[n];\n\n try {\n var data = o[n];\n\n if (data !== cache.data) {\n cache.data = data;\n\n for (var _i12 = 0, _cache$fs2 = cache.fs; _i12 < _cache$fs2.length; _i12++) {\n var _f3 = _cache$fs2[_i12];\n callCallback(o, _f3, cache.data, true);\n }\n }\n } catch (e) {}\n }\n}\n/**\n * Calls a user-supplied callback function with error checking.\n */\n\nfunction callCallback(o, f, payload, emitError) {\n try {\n var out = f(payload); // If the function returns a promise, emit an error if it rejects:\n\n if (emitError && out != null && typeof out.then === 'function') {\n out.then(undefined, function (e) {\n return emit(o, 'error', e);\n });\n }\n } catch (e) {\n if (emitError) emit(o, 'error', e);\n }\n}\n\n/**\n * @file\n * Routines for breaking bridgeable objects into messages,\n * and then restoring those messages into proxies on the other side.\n */\n// No user-supplied value will ever be identical to this.\nvar dirtyValue = {};\n/**\n * Examines a bridgeable object and prepares it for sending of the wire.\n * Returns a creation method an the initial value cache.\n */\n\nfunction packObject(state, o) {\n // Iterate the prototype chain, looking for property names:\n var allNames = {};\n var end = Object.prototype;\n\n for (var p = o; p !== end && p != null; p = Object.getPrototypeOf(p)) {\n for (var _i2 = 0, _Object$getOwnPropert2 = Object.getOwnPropertyNames(p); _i2 < _Object$getOwnPropert2.length; _i2++) {\n var _name = _Object$getOwnPropert2[_i2];\n\n if (_name !== MAGIC_KEY && !/^_/.test(_name) && _name !== 'constructor') {\n allNames[_name] = true;\n }\n }\n } // Iterate over the object's properties and add their names to\n // the method list or the value cache.\n\n\n var cache = {};\n var methods = [];\n var props = {};\n\n for (var n in allNames) {\n try {\n var data = o[n];\n\n if (typeof data === 'function' && (data[MAGIC_KEY] == null || data[MAGIC_KEY].shareId == null)) {\n methods.push(n);\n } else {\n cache[n] = data;\n props[n] = packData(state, data);\n }\n } catch (e) {\n cache[n] = dirtyValue;\n props[n] = packThrow(state, e);\n }\n }\n\n var _getInstanceMagic = getInstanceMagic(o),\n localId = _getInstanceMagic.localId;\n\n var create = {\n localId: localId,\n methods: methods,\n props: props\n };\n return {\n cache: cache,\n create: create\n };\n}\n/**\n * Checks an object for changes.\n * Updates the cache, and returns an object with the necessary changes.\n */\n\nfunction diffObject(state, o, cache) {\n var dirty = false;\n var props = {};\n\n for (var n in cache) {\n try {\n var value = o[n];\n\n if (value !== cache[n]) {\n dirty = true;\n props[n] = packData(state, value);\n cache[n] = value;\n }\n } catch (e) {\n props[n] = packThrow(state, e);\n cache[n] = dirtyValue;\n }\n }\n\n return {\n dirty: dirty,\n props: props\n };\n}\n/**\n * Creates an object proxy.\n * The object will have the same values and methods as the original,\n * but will send everything over the bridge.\n */\n\nfunction makeProxy(state, create) {\n var props = {}; // Make the magic property descriptor:\n\n var magic = makeProxyMagic(create.localId);\n props[MAGIC_KEY] = {\n value: magic\n }; // Add the getters:\n\n for (var n in create.props) {\n props[n] = {\n enumerable: true,\n get: makeProxyGetter(magic, n)\n };\n } // Add the methods:\n\n\n for (var _i4 = 0, _create$methods2 = create.methods; _i4 < _create$methods2.length; _i4++) {\n var _n = _create$methods2[_i4];\n props[_n] = {\n value: makeProxyMethod(state, magic, _n)\n };\n } // Make the object:\n\n\n return Object.create(Object.prototype, props);\n}\n/**\n * Unpacks a proxy's properties into the magic storage area.\n */\n\nfunction updateObjectProps(state, o, props) {\n var magic = o[MAGIC_KEY];\n\n for (var n in props) {\n try {\n magic.props[n] = unpackData(state, props[n], n);\n magic.errors[n] = false;\n } catch (e) {\n magic.props[n] = e;\n magic.errors[n] = true;\n }\n }\n}\n\nfunction makeProxyGetter(magic, name) {\n return function get() {\n if (magic.errors[name]) throw magic.props[name];\n return magic.props[name];\n };\n}\n\nfunction makeProxyMethod(state, magic, name) {\n return function method() {\n if (magic.closed) {\n return Promise.reject(new TypeError(\"Cannot call method '\" + name + \"' of closed proxy\"));\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return state.emitCall(magic.remoteId, name, args);\n };\n}\n\nvar BridgeState = /*#__PURE__*/function () {\n // Objects:\n // Outgoing method calls:\n // Pending message:\n // Update scheduling:\n function BridgeState(opts) {\n var sendMessage = opts.sendMessage,\n _opts$throttleMs = opts.throttleMs,\n throttleMs = _opts$throttleMs === void 0 ? 0 : _opts$throttleMs; // Objects:\n\n this.proxies = {};\n this.objects = {};\n this.caches = {}; // Outgoing method calls:\n\n this.nextCallId = 0;\n this.pendingCalls = {}; // Pending message:\n\n this.dirty = {};\n this.message = {}; // Update scheduling:\n\n this.throttleMs = throttleMs;\n this.lastUpdate = 0;\n this.sendPending = false;\n this.sendMessage = sendMessage;\n }\n /**\n * Close the bridge, so it will no longer send messages.\n * This also closes all proxies created by the bridge and rejects\n * all pending calls.\n */\n\n\n var _proto = BridgeState.prototype;\n\n _proto.close = function close$1(error) {\n for (var _callId in this.pendingCalls) {\n var call = this.pendingCalls[Number(_callId)];\n call.reject(error);\n }\n\n for (var _objectId in this.proxies) {\n close(this.proxies[Number(_objectId)]);\n }\n\n this.closed = true;\n }\n /**\n * Grabs an object by its proxy id.\n */\n ;\n\n _proto.getObject = function getObject(packedId) {\n return packedId < 0 ? this.proxies[-packedId] : this.objects[packedId];\n }\n /**\n * Returns an object's id relative to this bridge.\n * The id is positive for objects created on this side of the bridge,\n * and negative for proxy objects reflecting things on the other side.\n */\n ;\n\n _proto.getPackedId = function getPackedId(o) {\n var magic = getInstanceMagic(o);\n if (magic.closed) return null;\n\n if (magic.remoteId != null && this.proxies[magic.remoteId] != null) {\n return -magic.remoteId;\n }\n\n if (this.objects[magic.localId] == null) {\n // Add unknown objects to the bridge:\n this.objects[magic.localId] = o;\n\n var _packObject = packObject(this, o),\n cache = _packObject.cache,\n create = _packObject.create;\n\n this.caches[magic.localId] = cache;\n magic.bridges.push(this);\n this.emitCreate(create, o);\n }\n\n return magic.localId;\n }\n /**\n * Marks an object as needing changes.\n */\n ;\n\n _proto.markDirty = function markDirty(localId, name) {\n var cache = this.caches[localId];\n if (name != null && name in cache) cache[name] = dirtyValue;\n this.dirty[localId] = {\n cache: cache,\n object: this.objects[localId]\n };\n this.wakeup();\n }\n /**\n * Marks an object as being deleted.\n */\n ;\n\n _proto.emitClose = function emitClose(localId) {\n delete this.objects[localId];\n delete this.caches[localId];\n if (this.message.closed == null) this.message.closed = [];\n this.message.closed.push(localId);\n this.wakeup();\n }\n /**\n * Attaches an object to this bridge, sending a creation message.\n */\n ;\n\n _proto.emitCreate = function emitCreate(create, o) {\n if (this.message.created == null) this.message.created = [];\n this.message.created.push(create); // this.wakeup() not needed, since this is part of data packing.\n }\n /**\n * Enqueues a proxy call message.\n */\n ;\n\n _proto.emitCall = function emitCall(remoteId, name, args) {\n var _this = this;\n\n var callId = this.nextCallId++;\n\n var message = _extends({\n callId: callId,\n remoteId: remoteId,\n name: name\n }, packData(this, args));\n\n if (this.message.calls == null) this.message.calls = [];\n this.message.calls.push(message);\n this.wakeup();\n return new Promise(function (resolve, reject) {\n _this.pendingCalls[callId] = {\n name: name,\n resolve: resolve,\n reject: reject\n };\n });\n }\n /**\n * Enqueues an event message.\n */\n ;\n\n _proto.emitEvent = function emitEvent(localId, name, payload) {\n var message = _extends({\n localId: localId,\n name: name\n }, packData(this, payload));\n\n if (this.message.events == null) this.message.events = [];\n this.message.events.push(message);\n this.wakeup();\n }\n /**\n * Enqueues a function return message.\n */\n ;\n\n _proto.emitReturn = function emitReturn(callId, fail, value) {\n var message = _extends({\n callId: callId\n }, fail ? packThrow(this, value) : packData(this, value));\n\n if (this.message.returns == null) this.message.returns = [];\n this.message.returns.push(message);\n this.wakeup();\n }\n /**\n * Handles an incoming message,\n * updating state and triggering side-effects as needed.\n */\n ;\n\n _proto.handleMessage = function handleMessage(message) {\n var _this2 = this;\n\n // ----------------------------------------\n // Phase 1: Get our proxies up to date.\n // ----------------------------------------\n // Handle newly-created objects:\n if (message.created) {\n // Pass 1: Create proxies for the new objects:\n for (var _i2 = 0, _message$created2 = message.created; _i2 < _message$created2.length; _i2++) {\n var create = _message$created2[_i2];\n this.proxies[create.localId] = makeProxy(this, create);\n } // Pass 2: Fill in the values:\n\n\n for (var _i4 = 0, _message$created4 = message.created; _i4 < _message$created4.length; _i4++) {\n var _create = _message$created4[_i4];\n updateObjectProps(this, this.proxies[_create.localId], _create.props);\n }\n } // Handle updated objects:\n\n\n if (message.changed) {\n // Pass 1: Update all the proxies:\n for (var _i6 = 0, _message$changed2 = message.changed; _i6 < _message$changed2.length; _i6++) {\n var change = _message$changed2[_i6];\n var _localId = change.localId,\n props = change.props;\n var o = this.proxies[_localId];\n\n if (o == null) {\n throw new RangeError(\"Invalid localId \" + _localId);\n }\n\n updateObjectProps(this, o, props);\n } // Pass 2: Fire the callbacks:\n\n\n for (var _i8 = 0, _message$changed4 = message.changed; _i8 < _message$changed4.length; _i8++) {\n var _change = _message$changed4[_i8];\n update(this.proxies[_change.localId]);\n }\n } // ----------------------------------------\n // Phase 2: Handle events & method calls\n // ----------------------------------------\n // Handle events:\n\n\n if (message.events) {\n for (var _i10 = 0, _message$events2 = message.events; _i10 < _message$events2.length; _i10++) {\n var event = _message$events2[_i10];\n var _localId2 = event.localId,\n name = event.name;\n\n var _o = _localId2 === 0 ? this : this.proxies[_localId2];\n\n if (_o == null) continue;\n\n try {\n emit(_o, name, unpackData(this, event, name));\n } catch (e) {\n emit(_o, 'error', e); // Payload unpacking problem\n }\n }\n } // Handle method calls:\n\n\n if (message.calls) {\n var _loop = function _loop(_i12, _message$calls2) {\n var call = _message$calls2[_i12];\n var callId = call.callId,\n remoteId = call.remoteId,\n name = call.name;\n\n try {\n var _o2 = _this2.objects[remoteId];\n\n if (_o2 == null) {\n throw new TypeError(\"Cannot call method '\" + name + \"' of closed proxy (remote)\");\n }\n\n if (typeof _o2[name] !== 'function') {\n throw new TypeError(\"'\" + name + \"' is not a function\");\n }\n\n var args = unpackData(_this2, call, name + \".arguments\");\n Promise.resolve(_o2[name].apply(_o2, args)).then(function (value) {\n return _this2.emitReturn(callId, false, value);\n }, function (e) {\n return _this2.emitReturn(callId, true, e);\n });\n } catch (e) {\n _this2.emitReturn(callId, true, e);\n }\n };\n\n for (var _i12 = 0, _message$calls2 = message.calls; _i12 < _message$calls2.length; _i12++) {\n _loop(_i12, _message$calls2);\n }\n } // Handle method returns:\n\n\n if (message.returns) {\n for (var _i14 = 0, _message$returns2 = message.returns; _i14 < _message$returns2.length; _i14++) {\n var ret = _message$returns2[_i14];\n var _callId2 = ret.callId;\n var pendingCall = this.pendingCalls[_callId2];\n\n if (pendingCall == null) {\n throw new RangeError(\"Invalid callId \" + _callId2);\n }\n\n try {\n pendingCall.resolve(unpackData(this, ret, pendingCall.name + \".return\"));\n } catch (e) {\n pendingCall.reject(e);\n } finally {\n delete this.pendingCalls[_callId2];\n }\n }\n } // ----------------------------------------\n // Phase 3: Clean up closed objects\n // ----------------------------------------\n\n\n if (message.closed) {\n for (var _i16 = 0, _message$closed2 = message.closed; _i16 < _message$closed2.length; _i16++) {\n var _localId3 = _message$closed2[_i16];\n var _o3 = this.proxies[_localId3];\n if (_o3 == null) return;\n delete this.proxies[_localId3];\n\n close(_o3);\n }\n }\n }\n /**\n * Sends the current message.\n */\n ;\n\n _proto.sendNow = function sendNow() {\n if (this.closed) return; // Build change messages:\n\n for (var id in this.dirty) {\n var _localId4 = Number(id);\n\n var _this$dirty$_localId = this.dirty[_localId4],\n object = _this$dirty$_localId.object,\n cache = _this$dirty$_localId.cache;\n\n var _diffObject = diffObject(this, object, cache),\n dirty = _diffObject.dirty,\n props = _diffObject.props;\n\n if (dirty) {\n var _message = {\n localId: _localId4,\n props: props\n };\n if (this.message.changed == null) this.message.changed = [];\n this.message.changed.push(_message);\n }\n }\n\n var message = this.message;\n this.dirty = {};\n this.message = {};\n this.sendMessage(message);\n }\n /**\n * Something has changed, so prepare to send the pending message:\n */\n ;\n\n _proto.wakeup = function wakeup() {\n var _this3 = this;\n\n if (this.sendPending) return;\n this.sendPending = true;\n\n var task = function task() {\n _this3.sendPending = false;\n _this3.lastUpdate = Date.now();\n\n _this3.sendNow();\n }; // We really do want `setTimeout` here, even if the delay is 0,\n // since promises and other micro tasks should fire first.\n\n\n var delay = this.lastUpdate + this.throttleMs - Date.now();\n setTimeout(task, delay < 0 ? 0 : delay);\n };\n\n return BridgeState;\n}();\nbridgifyClass(BridgeState);\n\n/**\n * The bridge sends messages using this function.\n */\n\n/**\n * An object bridge.\n */\nvar Bridge = /*#__PURE__*/function () {\n function Bridge(opts) {\n var _this = this;\n\n this._state = new BridgeState(opts);\n this._rootPromise = new Promise(function (resolve) {\n return addListener(_this._state, 'root', resolve);\n });\n }\n\n var _proto = Bridge.prototype;\n\n _proto.handleMessage = function handleMessage(message) {\n this._state.handleMessage(message);\n };\n\n _proto.getRoot = function getRoot() {\n return this._rootPromise;\n };\n\n _proto.sendRoot = function sendRoot(root) {\n this._state.emitEvent(0, 'root', root);\n };\n\n _proto.close = function close(error) {\n this._state.close(error);\n };\n\n return Bridge;\n}();\n/**\n * Bridges a single object locally. This is great for unit tests,\n * where you want to verify that your API works correctly over a bridge,\n * but don't want to actually spawn a separate process.\n */\n\nfunction makeLocalBridge(o, opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n function nopClone(m) {\n return m;\n }\n\n var _opts = opts,\n _opts$cloneMessage = _opts.cloneMessage,\n cloneMessage = _opts$cloneMessage === void 0 ? nopClone : _opts$cloneMessage,\n throttleMs = _opts.throttleMs;\n var serverState = new BridgeState({\n sendMessage: function sendMessage(message) {\n clientState.handleMessage(cloneMessage(message));\n },\n throttleMs: throttleMs\n });\n var clientState = new BridgeState({\n sendMessage: function sendMessage(message) {\n serverState.handleMessage(cloneMessage(message));\n },\n throttleMs: throttleMs\n });\n var data = cloneMessage(packData(serverState, o));\n serverState.sendNow();\n return unpackData(clientState, cloneMessage(data), 'root');\n}\n\n/**\n * The `on` function,\n * but packaged as a method and ready to be placed on an object.\n */\n\nvar onMethod = function on(name, f) {\n return addListener(this, name, f);\n};\n/**\n * The `watch` function,\n * but packaged as a method and ready to be placed on an object.\n */\n\nvar watchMethod = function watch(name, f) {\n return addWatcher(this, name, f);\n};\nshareData({\n onMethod: onMethod,\n watchMethod: watchMethod\n});\n/**\n * The base class for all bridgeable API's. Provides callback capability.\n */\n\nvar Bridgeable = /*#__PURE__*/function () {\n function Bridgeable() {}\n\n var _proto = Bridgeable.prototype;\n\n _proto._close = function _close() {\n close(this);\n };\n\n _proto._emit = function _emit(name, payload) {\n return emit(this, name, payload);\n };\n\n _proto._update = function _update(name) {\n update(this, name);\n };\n\n return Bridgeable;\n}(); // Put the shared methods onto the prototype:\n\nvar hack = Bridgeable.prototype;\nhack.on = onMethod;\nhack.watch = watchMethod;\nbridgifyClass(Bridgeable);\n\nexport { Bridge, Bridgeable, bridgifyClass, bridgifyObject, close, emit, makeLocalBridge, onMethod, shareData, update, watchMethod };\n//# sourceMappingURL=yaob.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n// Standalone events:\n// Named events:\n\n/**\n * Create a standalone event.\n * Returns a subscriber function and an emitter function.\n */\nfunction makeEvent() {\n var callbacks = [];\n var callbacksLocked = false; // Clone the callback list if necessary,\n // so the changes will only apply on the next emit.\n\n function unlockCallbacks() {\n if (callbacksLocked) {\n callbacksLocked = false;\n callbacks = callbacks.slice();\n }\n }\n\n var on = function on(callback) {\n unlockCallbacks();\n callbacks.push(callback);\n var subscribed = true;\n return function unsubscribe() {\n if (subscribed) {\n subscribed = false;\n unlockCallbacks();\n callbacks.splice(callbacks.indexOf(callback), 1);\n }\n };\n };\n\n var emit = function emit(payload) {\n callbacksLocked = true;\n var snapshot = callbacks;\n\n for (var i = 0; i < snapshot.length; ++i) {\n snapshot[i](payload);\n }\n\n callbacksLocked = false;\n };\n\n return [on, emit];\n}\nfunction makeEvents() {\n var events = {};\n\n var on = function on(name, callback) {\n var event = events[name];\n if (event == null) event = events[name] = makeEvent();\n return event[0](callback);\n };\n\n var emit = function emit(name, payload) {\n var event = events[name];\n if (event != null) event[1](payload);\n };\n\n return [on, emit];\n}\n\nexports.makeEvent = makeEvent;\nexports.makeEvents = makeEvents;\n//# sourceMappingURL=index.js.map\n","/* (ignored) */","/* (ignored) */","/* (ignored) */","/* (ignored) */","'use strict';\n\nvar filter = require('array-filter');\n\nmodule.exports = function availableTypedArrays() {\n\treturn filter([\n\t\t'BigInt64Array',\n\t\t'BigUint64Array',\n\t\t'Float32Array',\n\t\t'Float64Array',\n\t\t'Int16Array',\n\t\t'Int32Array',\n\t\t'Int8Array',\n\t\t'Uint16Array',\n\t\t'Uint32Array',\n\t\t'Uint8Array',\n\t\t'Uint8ClampedArray'\n\t], function (typedArray) {\n\t\treturn typeof global[typedArray] === 'function';\n\t});\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","// Generated by rollup-plugin-mjs-entry\n\nimport cjs from './index.js';\n\nexport const asArray = cjs.asArray;\nexport const asBoolean = cjs.asBoolean;\nexport const asCodec = cjs.asCodec;\nexport const asDate = cjs.asDate;\nexport const asEither = cjs.asEither;\nexport const asJSON = cjs.asJSON;\nexport const asMap = cjs.asMap;\nexport const asMaybe = cjs.asMaybe;\nexport const asNone = cjs.asNone;\nexport const asNull = cjs.asNull;\nexport const asNumber = cjs.asNumber;\nexport const asObject = cjs.asObject;\nexport const asOptional = cjs.asOptional;\nexport const asString = cjs.asString;\nexport const asUndefined = cjs.asUndefined;\nexport const asUnknown = cjs.asUnknown;\nexport const asValue = cjs.asValue;\nexport const uncleaner = cjs.uncleaner;\n","// Generated by rollup-plugin-mjs-entry\n\nimport cjs from './index.js';\n\nexport const asChangeSet = cjs.asChangeSet;\nexport const asEdgeBox = cjs.asEdgeBox;\nexport const asFileChange = cjs.asFileChange;\nexport const asGetStoreParams = cjs.asGetStoreParams;\nexport const asGetStoreResponse = cjs.asGetStoreResponse;\nexport const asNonEmptyString = cjs.asNonEmptyString;\nexport const asPath = cjs.asPath;\nexport const asPostStoreBody = cjs.asPostStoreBody;\nexport const asPostStoreParams = cjs.asPostStoreParams;\nexport const asPostStoreResponse = cjs.asPostStoreResponse;\nexport const asPutStoreParams = cjs.asPutStoreParams;\nexport const asPutStoreResponse = cjs.asPutStoreResponse;\nexport const asServerErrorResponse = cjs.asServerErrorResponse;\nexport const asSyncKey = cjs.asSyncKey;\nexport const makeSyncClient = cjs.makeSyncClient;\nexport const syncKeyToRepoId = cjs.syncKeyToRepoId;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","// Generated by rollup-plugin-mjs-entry\n\nimport cjs from './index.js';\n\nexport const base16 = cjs.base16;\nexport const base32 = cjs.base32;\nexport const base32hex = cjs.base32hex;\nexport const base64 = cjs.base64;\nexport const base64url = cjs.base64url;\nexport const codec = cjs.codec;\nexport default cjs;\n","// Generated by rollup-plugin-mjs-entry\n\nimport cjs from './index.js';\n\nexport const makeFetchFunction = cjs.makeFetchFunction;\nexport const makeFetchResponse = cjs.makeFetchResponse;\nexport const pickMethod = cjs.pickMethod;\nexport const pickPath = cjs.pickPath;\nexport const withCors = cjs.withCors;\n","// Generated by rollup-plugin-mjs-entry\n\nimport cjs from './index.js';\n\nexport const makeEvent = cjs.makeEvent;\nexport const makeEvents = cjs.makeEvents;\n","// 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\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\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\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","// 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 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};","__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__.hmd = function(module) {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: function() {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// 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};","// \n\nimport './polyfills.js'\n\nimport hashjs from 'hash.js'\nimport HmacDRBG from 'hmac-drbg'\nimport { base64 } from 'rfc4648'\nimport { makeFetchResponse } from 'serverlet'\nimport { Bridge, bridgifyObject } from 'yaob'\n\nimport {\n addEdgeCorePlugins,\n lockEdgeCorePlugins,\n makeContext,\n makeFakeWorld\n} from '../../core/core.js'\n\n\n\n\n\nimport { makeNativeBridge } from './native-bridge.js'\n\n\n// Set up the bridges:\nconst [nativeBridge, reactBridge] =\n window.edgeCore != null\n ? [\n makeNativeBridge((id, name, args) => {\n window.edgeCore.call(id, name, JSON.stringify(args))\n }),\n new Bridge({\n sendMessage(message) {\n window.edgeCore.postMessage(JSON.stringify(message))\n }\n })\n ]\n : [\n makeNativeBridge((id, name, args) => {\n window.webkit.messageHandlers.edgeCore.postMessage([id, name, args])\n }),\n new Bridge({\n sendMessage(message) {\n window.webkit.messageHandlers.edgeCore.postMessage([\n 0,\n 'postMessage',\n [JSON.stringify(message)]\n ])\n }\n })\n ]\n\n// Set up global objects:\nwindow.addEdgeCorePlugins = addEdgeCorePlugins\nwindow.nativeBridge = nativeBridge\nwindow.reactBridge = reactBridge\n\nfunction loadPlugins(pluginUris) {\n const { head } = window.document\n if (head == null || pluginUris.length === 0) {\n lockEdgeCorePlugins()\n return\n }\n\n let loaded = 0\n const handleLoad = () => {\n if (++loaded >= pluginUris.length) lockEdgeCorePlugins()\n }\n\n for (const uri of pluginUris) {\n const script = document.createElement('script')\n script.addEventListener('error', handleLoad)\n script.addEventListener('load', handleLoad)\n script.charset = 'utf-8'\n script.defer = true\n script.src = uri\n head.appendChild(script)\n }\n}\n\nasync function makeIo(clientIo) {\n const csprng = new HmacDRBG({\n hash: hashjs.sha256,\n entropy: base64.parse(await nativeBridge.call('randomBytes', 32))\n })\n\n return {\n console,\n disklet: {\n delete(path) {\n return nativeBridge.call('diskletDelete', normalizePath(path))\n },\n getData(path) {\n return nativeBridge\n .call('diskletGetData', normalizePath(path))\n .then((data) => base64.parse(data))\n },\n getText(path) {\n return nativeBridge.call('diskletGetText', normalizePath(path))\n },\n list(path = '') {\n return nativeBridge.call('diskletList', normalizePath(path))\n },\n setData(path, data) {\n return nativeBridge.call(\n 'diskletSetData',\n normalizePath(path),\n base64.stringify(data)\n )\n },\n setText(path, text) {\n return nativeBridge.call('diskletSetText', normalizePath(path), text)\n }\n },\n\n random: bytes => csprng.generate(bytes),\n scrypt(data, salt, n, r, p, dklen) {\n return nativeBridge\n .call(\n 'scrypt',\n base64.stringify(data),\n base64.stringify(salt),\n n,\n r,\n p,\n dklen\n )\n .then((data) => base64.parse(data))\n },\n\n // Networking:\n fetch(uri, opts) {\n return window.fetch(uri, opts)\n },\n\n fetchCors(\n uri,\n opts = {}\n ) {\n return clientIo.fetchCors(uri, opts).then(makeFetchResponse)\n }\n }\n}\n\n/**\n * Interprets a path as a series of folder lookups,\n * handling special components like `.` and `..`.\n */\nexport function normalizePath(path) {\n if (/^\\//.test(path)) throw new Error('Absolute paths are not supported')\n const parts = path.split('/')\n\n // Shift down good elements, dropping bad ones:\n let i = 0 // Read index\n let j = 0 // Write index\n while (i < parts.length) {\n const part = parts[i++]\n if (part === '..') j--\n else if (part !== '.' && part !== '') parts[j++] = part\n\n if (j < 0) throw new Error('Path would escape folder')\n }\n\n // Array items from 0 to j are the path:\n return parts.slice(0, j).join('/')\n}\n\n// Send the root object:\nconst workerApi = bridgifyObject({\n async makeEdgeContext(clientIo, nativeIo, logBackend, pluginUris, opts) {\n loadPlugins(pluginUris)\n const io = await makeIo(clientIo)\n return makeContext({ io, nativeIo }, logBackend, opts)\n },\n\n async makeFakeEdgeWorld(\n clientIo,\n nativeIo,\n logBackend,\n pluginUris,\n users = []\n ) {\n loadPlugins(pluginUris)\n const io = await makeIo(clientIo)\n return makeFakeWorld({ io, nativeIo }, logBackend, users)\n }\n})\nreactBridge.sendRoot(workerApi)\n"],"names":["base64","require","ieee754","customInspectSymbol","Symbol","exports","Buffer","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","kMaxLength","TYPED_ARRAY_SUPPORT","typedArraySupport","console","error","arr","Uint8Array","proto","foo","Object","setPrototypeOf","prototype","e","defineProperty","enumerable","get","isBuffer","undefined","buffer","byteOffset","createBuffer","length","RangeError","buf","arg","encodingOrOffset","TypeError","allocUnsafe","from","poolSize","value","fromString","ArrayBuffer","isView","fromArrayView","isInstance","fromArrayBuffer","SharedArrayBuffer","valueOf","b","fromObject","toPrimitive","assertSize","size","alloc","fill","encoding","checked","allocUnsafeSlow","string","isEncoding","byteLength","actual","write","slice","fromArrayLike","array","i","arrayView","copy","obj","len","numberIsNaN","type","Array","isArray","data","toString","_isBuffer","compare","a","offset","x","y","Math","min","String","toLowerCase","concat","list","pos","set","call","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","swap16","swap32","swap64","apply","toLocaleString","equals","inspect","str","max","replace","trim","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","indexOf","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","j","includes","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","isFinite","Error","toJSON","_arr","fromByteArray","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","push","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","fromCharCode","ret","out","hexSliceLookupTable","bytes","newBuf","subarray","checkOffset","ext","readUintLE","readUIntLE","noAssert","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","lo","hi","BigInt","readBigUInt64BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUintLE","writeUIntLE","maxBytes","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","checkIEEE754","writeFloat","littleEndian","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","code","charCodeAt","errors","E","sym","getMessage","Base","writable","configurable","name","stack","message","range","input","msg","received","isInteger","abs","addNumericalSeparator","checkBounds","ERR_OUT_OF_RANGE","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","INVALID_BASE64_RE","base64clean","split","units","Infinity","leadSurrogate","byteArray","c","toByteArray","src","dst","constructor","alphabet","table","i16","fn","BufferBigIntNotDefined"],"sourceRoot":""}
|