gramene-search 2.0.1 → 2.0.4

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAM,qCAAe,CAAA;IACnB,IAAI,OAAO,KAAK,CAAC,QAAQ,EACvB,qBAAO,gCAAC;QAAE,MAAM,CAAC,+BAA+B,EAAE,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAI,MAAM;QAAE,QAAO;kBAAU,OAAO,KAAK,CAAC,KAAK;;IAE3H,OAAO,OAAO,KAAK,CAAC,KAAK;AAC3B;AACA,MAAM,uCAAiB,CAAA;IACrB,MAAM,aAAa,OAAO,KAAK;IAC/B,qBACE,iCAAC;;0BACC,gCAAC;gBACC,MAAK;gBACL,SAAS,OAAO,cAAc,CAAC,cAAc,CAAC,WAAW,GAAG;gBAC5D,UAAU,IAAM,OAAO,wBAAwB,CAAC,WAAW,GAAG;;YAC9D;YACK,WAAW,UAAU;YAAC;YAAE,WAAW,KAAK;;;AAGnD,4CAA4C;AAC9C;AACA,MAAM,gDAA0B,CAAA,GAAA,gCAAM,EACpC,wBACA,4BACA;AAEF,MAAM,8BAAQ,CAAA;IACZ,IAAI,UAAU,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC;IAC/C,IAAI,iBAAiB,EAAE;IACvB,IAAI,iBAAiB;QAAC;YAAE,OAAO;YAAY,cAAc;QAAwB;KAAE;IACnF,IAAI,WAAS,CAAC;IACd,QAAQ,OAAO,CAAC,CAAC,QAAQ;QACvB,IAAI,QAAQ,GAAG;YACb,IAAI,UAAU;gBACZ,YAAY;gBACZ,UAAU,EAAE;YACd;YACA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;gBACpB,QAAQ,QAAQ,CAAC,IAAI,CAAC;oBAAC,OAAO,OAAO,IAAI;oBAAE,cAAc;gBAAY;gBACrE,QAAQ,CAAC,OAAO,IAAI,CAAC,GAAG;YAC1B;YACA,eAAe,IAAI,CAAC;YACpB,IAAI,kBAAkB;gBACpB,YAAY;gBACZ,UAAU,EAAE;YACd;YACA,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;gBAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EACpB,gBAAgB,QAAQ,CAAC,IAAI,CAAC;oBAAC,OAAO,GAAG,IAAI;oBAAE,cAAc;gBAAY;YAE7E;YACA,eAAe,IAAI,CAAC;QACtB;QACA,IAAI,SAAS;YAAC,UAAU;QAAM;QAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;YACpB,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG;gBAAC,OAAO,OAAO,KAAK;YAAA;YAC1C,IAAI,OAAO,QAAQ,EAAE;gBACnB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,WAAW,GAAG,OAAO,QAAQ;gBACjD,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,GAAG,OAAO,EAAE;YACvC;QACF;QACA,OAAO,cAAc,CAAC,OAAO,CAAC,CAAA;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;gBAAC,OAAO,GAAG,KAAK;YAAA;YAClC,IAAI,GAAG,QAAQ,EAAE;gBACf,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,GAAG,GAAG,QAAQ;gBACzC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE;YAC/B;QACF;QACA,eAAe,IAAI,CAAC;IACtB;IACA,MAAM,CAAC,SAAS,WAAW,GAAG,CAAA,GAAA,qBAAO,EAAE;IACvC,MAAM,CAAC,SAAS,WAAW,GAAG,CAAA,GAAA,qBAAO,EAAE;IACvC,MAAM,gBAAgB,CAAA,GAAA,oBAAM,EAAE;QAC5B,OAAO;YACL,QAAQ;QACV;IACF,GAAG,EAAE;IACL,qBACE,iCAAC;;0BACC,gCAAC;gBAAI,WAAU;gBAAkB,OAAO;oBAAC,QAAQ,GAAG,KAAM,CAAA,QAAQ,MAAM,GAAG,CAAA,EAAG,EAAE,CAAC;gBAAA;0BAC/E,cAAA,gCAAC,CAAA,GAAA,8BAAU;oBAAE,SAAS;oBAAS,YAAY;oBAAS,eAAe;;;0BAErE,iCAAC;gBAAE,MAAM,CAAC,sCAAsC,EAAE,MAAM,EAAE,EAAE;;oBAAE;oBAAuB,MAAM,EAAE;;;;;AAGnG;IACA,2CAAe,CAAA,GAAA,gCAAM,EACnB,2BACA;;;;;;;;;;;;;;;;;;;AGvFF,MAAM,+BAAS;IACb;IACA,qEAAqE;IACrE,+EAA+E;IAC/E,uEAAuE;IACvE;IACA;CACD;AACD,MAAM,0CAAoB;AAC1B,MAAM,8BAAQ;IAAC;IAAO;IAAQ;IAAQ;IAAU;CAAY;AAC5D,MAAM,2CAAqB,CAAA,GAAA,6CAAwB,EAAG;IACpD,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,MAAM,IAAI,MAAM,sBAAsB,GAAG,UAAU,CAAC,KAAI,KAAK,IAAI;QACjE,MAAM,IAAI,MAAM,oBAAoB;QACpC,MAAM,IAAI,CAAC,oCAAoC,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC;QACzH,qFAAqF;QACrF,+BAA+B;QAC/B,OAAO,MAAM,MAAM,gBAAgB,KAAK,GACrC,IAAI,CAAC,CAAA;YACJ,OAAO,IAAI,IAAI;QACjB,GACC,IAAI,CAAC,CAAA;YACJ,IAAI,OAAO,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,GACjC,YAAY,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBAC1C,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACzB,KAAK,SAAS,GAAG;oBACjB,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAG;wBACxB,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EACtC,KAAK,SAAS,IAAI,KAAK,UAAU,CAAC,IAAI;oBAE1C;gBACF;YACF;YAEF,OAAO;QACT;IACJ;AACF;AAEA,yCAAmB,uBAAuB,GAAG,CAAA,GAAA,kCAAa,EACxD,wCACA,0BACA,CAAC,cAAc;IACb,IAAI,gBAAgB,aAClB,OAAO;QAAE,eAAe;IAA4B;AAExD;AAGF,yCAAmB,8BAA8B,GAAG,CAAA,GAAA,kCAAa,EAC/D,wCACA,qCACA,+BACA,0BACA,CAAC,cAAc,WAAW,gBAAgB;IACxC,IAAI,CAAC,aAAa,OAAO;IACzB,IAAI,cAAc,OAAO;IACzB,IAAI,WAAW,OAAO;IACtB,IAAI,eAAe,IAAI,EAAE,OAAO,eAAe,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,GAAG;IAC/E,QAAQ,KAAK,CAAC;IACd,OAAO;AACT;AAGF,yCAAmB,6BAA6B,GAAG,CAAA,GAAA,kCAAa,EAC9D,kCACA,CAAC;IACC,MAAM,QAAQ,OAAO;IACrB,OAAO,MAAM,IAAI,CAAC;AACpB;AAGF,yCAAmB,6BAA6B,GAAG,CAAA,MAAO,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;QAC7E,QAAQ,GAAG,CAAC;IACd;AAEA,SAAS,4CAAsB,IAAI;IACjC,MAAM,WAAW,KAAK,IAAI;IAC1B,MAAM,0BAA0B,SAAS,OAAO,CAAC,4CAA4C;IAC7F,IAAI;IACJ,IAAI,wBAAwB,MAAM,GAAG,IAAI;QACvC,IAAI,QAAQ,wBAAwB,KAAK,CAAC;QAC1C,IAAI,MAAM,MAAM,KAAK,GACnB,yBAAyB;QACzB,eAAe,wBAAwB,OAAO,CAAC,kBAAkB;QAEnE,IAAI,MAAM,MAAM,GAAG,GACjB,eAAe,wBAAwB,OAAO,CAAC,iCAAiC;IAEpF,OAEE,eAAe;IAEjB,KAAK,UAAU,GAAG;AACpB;AAEA,MAAM,wCAAkB,CAAA,GAAA,6CAAwB,EAAE;IAChD,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,OAAO,MAAM,GAAG,MAAM,gBAAgB,GAAG,gCAAgC,CAAC,EACvE,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;YACJ,IAAI,WAAW,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,UAAU;YACjC,SAAS,OAAO,CAAC,CAAA;gBACf,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,iCAAiC;gBACjD,4CAAsB;gBACtB,IAAI,EAAE,cAAc,CAAC,SACnB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;oBACb,MAAM,IAAI,QAAQ,CAAC,KAAK;oBACxB,IAAI,CAAC,EAAE,cAAc,CAAC,aAAa,EAAE,QAAQ,GAAG,EAAE;oBAClD,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG;gBACvB;YAEJ;YACA,OAAO;QACT;IACJ;AACF;AACA,sCAAgB,oBAAoB,GAAG,CAAA,GAAA,kCAAa,EAClD,qCACA,CAAC;IACC,IAAI,cACF,OAAO;QAAE,eAAe;IAAyB;AAErD;AAEF,MAAM,oCAAc,CAAA,GAAA,6CAAwB,EAAE;IAC5C,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,OAAO,MAAM,GAAG,MAAM,gBAAgB,GAAG,aAAa,CAAC,EACpD,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;YACJ,KAAK,OAAO,CAAC,CAAA;gBACX,EAAE,YAAY,GAAG,CAAC;gBAClB,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAM;oBAC7B,EAAE,YAAY,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;gBAChD;YACF;YACA,OAAO,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,MAAM;QACvB;IACJ;AACF;AACA,kCAAY,gBAAgB,GAAG,CAAA,GAAA,kCAAa,EAC1C,iCACA,CAAC;IACC,IAAI,cACF,OAAO;QAAE,eAAe;IAAqB;AAEjD;AAGF,MAAM,0CAAoB,CAAA,GAAA,6CAAwB,EAAG;IACnD,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,OAAO,MAAM,GAAG,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,EAC3D,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA,MAAO,CAAA,GAAA,uCAAA,EAAE,OAAO,CAAC,KAAK;IAChC;AACF;AACA,wCAAkB,sBAAsB,GAAG,CAAA,GAAA,kCAAa,EACtD,uCACA,CAAC;IACC,IAAI,cACF,OAAO;QAAE,eAAe;IAA2B;AAEvD;AAGF,MAAM,0CAAoB,CAAA,GAAA,6CAAwB,EAAG;IACnD,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,OAAO,MAAM,GAAG,MAAM,gBAAgB,GAAG,eAAe,CAAC,EACtD,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA,UAAW,CAAA,GAAA,uCAAA,EAAE,OAAO,CAAC,SAAS,eACnC,IAAI,CAAC,CAAA;YACJ,OAAO,IAAI,CAAC,SAAS,OAAO,CAAC,CAAA;gBAC3B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;oBACrB,OAAO,KAAK,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAI;gBAC3C;gBACA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAE,IAAM,EAAE,KAAK,GAAG,EAAE,KAAK;YAChD;YACA,OAAO;QACT;IACJ;AACF;AACA,wCAAkB,sBAAsB,GAAG,CAAA,GAAA,kCAAa,EACtD,uCACA,CAAC;IACC,IAAI,cACF,OAAO;QAAE,eAAe;IAA2B;AAEvD;AAGF,MAAM,qCAAe,CAAA,GAAA,6CAAwB,EAAG;IAC9C,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,OAAO,MAAM,CAAC,mFAAmF,CAAC,EAC/F,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA,WAAY,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,SAAS,KAAK,EAAE;IAC9C;AACF;AACA,mCAAa,iBAAiB,GAAG,CAAA,GAAA,kCAAa,EAC5C,kCACA,CAAC;IACC,IAAI,cACF,OAAO;QAAE,eAAe;IAAsB;AAElD;AAGF,MAAM,yCAAmB,CAAA,GAAA,6CAAwB,EAAG;IAClD,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,OAAO,MAAM,GAAG,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,EACzD,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;YACJ,IAAI,OAAO,CAAC,CAAA;gBACV,IAAI,CAAC,EAAE,MAAM,EACX,EAAE,MAAM,GAAG;YAEf;YACA,OAAO,CAAA,GAAA,uCAAA,EAAE,OAAO,CAAC,KAAK;QACxB;IACJ;AACF;AACA,uCAAiB,qBAAqB,GAAG,CAAA,GAAA,kCAAa,EACpD,sCACA,CAAC;IACC,IAAI,cACF,OAAO;QAAE,eAAe;IAA0B;AAEtD;AAEF,EAAE;AACF,+DAA+D;AAC/D,qCAAqC;AACrC,iDAAiD;AACjD,mBAAmB;AACnB,+BAA+B;AAC/B,iEAAiE;AACjE,iCAAiC;AACjC,uBAAuB;AACvB,uBAAuB;AACvB,iCAAiC;AACjC,wDAAwD;AACxD,yCAAyC;AACzC,cAAc;AACd,0EAA0E;AAC1E,2DAA2D;AAC3D,cAAc;AACd,wDAAwD;AACxD,gEAAgE;AAChE,cAAc;AACd,kCAAkC;AAClC,oCAAoC;AACpC,2CAA2C;AAC3C,+DAA+D;AAC/D,cAAc;AACd,YAAY;AACZ,uBAAuB;AACvB,WAAW;AACX,MAAM;AACN,MAAM;AACN,yEAAyE;AACzE,iDAAiD;AACjD,wBAAwB;AACxB,0BAA0B;AAC1B,mEAAmE;AACnE,QAAQ;AACR,MAAM;AACN,KAAK;AAEL,MAAM,qCAAe;IACnB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AACD,MAAM,oCAAc;IAClB,4BAA6B;QAC3B;YAAE,MAAM;YAAO,aAAa;YAA4B,OAAO;YAAK,WAAW;QAAqB;QACpG;YAAE,MAAM;YAAO,aAAa;YAAwB,OAAO;YAAK,WAAW;QAAqB;QAChG;YAAE,MAAM;YAAO,aAAa;YAA0D,OAAO;YAAK,WAAW;QAAqB;QAClI;YAAE,MAAM;YAAO,aAAa;YAAmD,OAAO;YAAK,WAAW;QAAqB;QAC3H;YAAE,MAAM;YAAO,aAAa;YAA4D,OAAO;YAAK,WAAW;QAAqB;QACpI,wIAAwI;QACxI,iIAAiI;QACjI;YAAE,MAAM;YAAO,aAAa;YAA+B,OAAO;YAAK,WAAW;QAAqB;QACvG;YAAE,MAAM;YAAO,aAAa;YAAwB,OAAO;YAAK,WAAW;QAAqB;QAChG;YAAE,MAAM;YAAO,aAAa;YAAuD,OAAO;YAAK,WAAW;QAAqB;KAChI;AACH;AACA,MAAM,oCAAc,iCAAW,CAAC,2BAA2B,CAAC,GAAG,CAC7D,oHAAoH;AACpH,CAAC,IAAM,CAAC,gHAAgH,EAAE,EAAE,SAAS,EAAE;AAGzI,MAAM,2CAAqB,CAAA,GAAA,6CAAwB,EAAG;IACpD,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,OAAO,MAAM,GAAG,MAAM,gBAAgB,GAAG,eAAe,CAAC,EAAE,IAAI,CAAC,CAAA,MAAO;IACzE;AACF;AACA,yCAAmB,uBAAuB,GAAG,CAAA,GAAA,kCAAa,EACxD,wCACA,8BACA,sBACA,CAAC,cAAc,QAAQ;IACrB,IAAI,gBAAiB,CAAA,WAAW,cAAc,WAAW,OAAM,GAAI;QACjE,MAAM,OAAO,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,MAAM,OAAO,EAAC;QACnC,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,MACxB,OAAO;YAAE,eAAe;QAA4B;IAExD;AACF;AAGF,MAAM,sCAAgB,CAAA,GAAA,6CAAwB,EAAE;IAC9C,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY,CAAC,SAAC,KAAK,EAAC;QAClB,MAAM,SAAS,MAAM,yBAAyB;QAC9C,MAAM,OAAO,MAAM,uBAAuB;QAC1C,MAAM,IAAI,MAAM,oBAAoB;QACpC,MAAM,IAAI,MAAM,iBAAiB;QACjC,MAAM,OAAO,OAAO,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA,MAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;QAC/D,IAAI,KAAG;QACP,IAAI,KAAK,MAAM,EAAE;YACf,QAAQ,GAAG,CAAC,wBAAuB;YACnC,KAAK,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C;QACA,8LAA8L;QAC9L,OAAO,MAAM,GAAG,MAAM,gBAAgB,GAAG,UAAU,EAAE,MAAM,+BAA+B,GAAG,aAAa,EAAE,6BAAO,MAAM,EAAE,KAAK,OAAO,EAAE,SAAS,IAAI,EACnJ,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;YACJ,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACxB,EAAE,QAAQ,GAAG,CAAC;gBACd,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;oBACrB,EAAE,QAAQ,CAAC,EAAE,GAAC;gBAChB;YACF;YACA,OAAO;QACT;IACJ;AACF;AACA,oCAAc,kBAAkB,GAAG,CAAA,GAAA,kCAAa,EAC9C,mCACA,8BACA,wBACA,CAAC,cAAc,QAAQ;IACrB,IAAI,gBAAgB,WAAW,YAAY,SACzC,OAAO;QAAE,eAAe;IAAuB;AAEnD;AAGF,SAAS,8CAAwB,CAAC;IAChC,IAAI,MAAM;QACR,OAAO,EAAE,MAAM,GAAC;QAChB,aAAa;QACb,MAAM,CAAC;QACP,QAAQ,EAAE;IACZ;IACA,IAAI,SAAS,EAAE;IACf,IAAI,IAAI,IAAE,GAAE,IAAE,EAAE,MAAM,EAAC,KAAG,EAAG;QAC3B,MAAM,KAAK;YACT,IAAI,CAAC,CAAC,CAAC,EAAE;YACT,OAAO,CAAC,CAAC,CAAC,IAAE,EAAE;QAChB;QACA,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;QACjB,OAAO,IAAI,CAAC;IACd;IACA,IAAI,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC,GAAE,IAAM,EAAE,EAAE,GAAG,EAAE,EAAE;IAC7C,OAAO;AACT;AAEA,mDAAmD;AACnD,MAAM,uCAAiB;IACrB,MAAM;IACN,YAAY;QACV,MAAM,eAAe,CAAC;QACtB,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAC,IAAI,WAAE,OAAO,EAAC;YAC3C,OAAO;QACT;IACF;IACA,sBAAsB,CAAA,GAAA,kCAAa,EACjC,uBACA,yBACA,qBACA,CAAC,eAAc,iBAAgB;QAC7B,IAAI,iBAAiB,mBAAmB,aAAa;YACnD,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK;gBACzB,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY;YAC9C;YACA,MAAM,gBAAgB,8CAAwB,cAAc,YAAY,CAAC,YAAY,CAAC,eAAe;YACrG,IAAI,cAAc,CAAA,GAAA,mDAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC;YAC1D,IAAI,YAAY,CAAA,GAAA,kDAAS,EAAE,IAAI,CAAC;YAChC,IAAI,UAAU,CAAA,GAAA,uCAAI,EAAE,WAAW;YAC/B,QAAQ,UAAU,CAAC,SAAQ;YAC3B,QAAQ,UAAU,CAAC;YACnB,OAAO;QACT;QACA,OAAO;IACT;AAEJ;AAEA,0DAA0D;AAC1D,0DAA0D;AAC1D,4FAA4F;AAC5F,MAAM,yCAAmB;IACvB,MAAM;IACN,YAAY;QACV,MAAM,eAAe,CAAC;QACtB,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAC,IAAI,WAAE,OAAO,EAAC;YAC3C,IAAI;YACJ,OAAQ;gBACN,KAAK;oBACH,IAAI,CAAC,MAAM,cAAc,CAAC,UAAU;wBAClC,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;wBAC7B,QAAQ,CAAC,QAAQ,GAAG,EAAE;wBACtB,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;YACpC;YACA,OAAO;QACT;IACF;IACA,oBAAoB,CAAA,SAAU,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YAC9C,MAAM,YAAY,MAAM,sBAAsB;YAC9C,IAAI,CAAC,UAAU,cAAc,CAAC,SAAS;gBACrC,SAAS;oBAAC,MAAM;oBAA+B,SAAS;gBAAM;gBAC9D,MAAM,MAAM,MAAM,gBAAgB;gBAClC,MAAM,UAAU,MAAM,mBAAmB;gBACzC,MAAM,GAAG,IAAI,kCAAkC,EAAE,OAAO,aAAa,EAAE,QAAQ,MAAM,CAAC,EACnF,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,IAAI,eAAe,CAAC;oBACpB,YAAY,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,IAAK,EAAE,EAAE;oBACtD,SAAS;wBAAC,MAAM;wBAA8B,SAAS;oBAAY;gBACrE;YACJ;QACF;IACA,wBAAwB,CAAA,QAAS,MAAM,gBAAgB;AACzD;AAEA,MAAM,wCAAkB;IACtB,MAAM;IACN,YAAY;QACV,MAAM,eAAe,CAAC;QACtB,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAC,IAAI,WAAE,OAAO,EAAC;YAC3C,IAAI;YACJ,OAAQ;gBACN,KAAK;oBACH,IAAI,CAAC,MAAM,cAAc,CAAC,UAAU;wBAClC,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;wBAC7B,QAAQ,CAAC,QAAQ,GAAG,EAAE;wBACtB,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;YACpC;YACA,OAAO;QACT;IACF;IACA,mBAAmB,CAAC,QAAO,WAAU,WAAa,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YAClE,MAAM,WAAW,MAAM,qBAAqB;YAC5C,IAAI,CAAC,SAAS,cAAc,CAAC,SAAS;gBACpC,SAAS;oBAAC,MAAM;oBAA8B,SAAS;gBAAM;gBAC7D,MAAM,MAAM,MAAM,gBAAgB;gBAClC,MAAM,IAAG,YAAY,CAAC,iBAAiB,EAAE,WAAW,GAAG,CAAC,iCAAiC,EAAE,QAAQ;gBACnG,MAAM,GAAG,IAAI,UAAU,EAAE,EAAE,uBAAuB,EAAE,UAAU,EAC3D,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,IAAI,cAAc,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC,QAAQ,GAAG,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,IAAK,EAAE,EAAE,IAAI;wBAAC;qBAAO;oBAC7F,SAAS;wBAAC,MAAM;wBAA6B,SAAS;oBAAW;gBACnE;YACJ;QACF;IACA,uBAAuB,CAAA,QAAS,MAAM,eAAe;AACvD;IAEA,0CAA0C;AAC1C,yEAAyE;AACzE,6BAA6B;AAC7B,6CAA6C;AAC7C,uBAAuB;AACvB,oCAAoC;AACpC,0DAA0D;AAC1D,sCAAsC;AACtC,UAAU;AACV,QAAQ;AACR,aAAa;AACb,0DAA0D;AAC1D,uCAAuC;AACvC,UAAU;AACV,iDAAiD;AACjD,QAAQ;AACR,qBAAqB;AACrB,MAAM;AACN,IAAI;AACJ,EAAE;AACF,+EAA+E;AAC/E,iFAAiF;AACjF,kFAAkF;AAClF,EAAE;AACF,qDAAqD;AACrD,4BAA4B;AAC5B,uCAAuC;AACvC,oBAAoB;AACpB,6BAA6B;AAC7B,0GAA0G;AAC1G,iCAAiC;AACjC,uEAAuE;AACvE,MAAM;AACN,EAAE;AACF,sDAAsD;AACtD,6BAA6B;AAC7B,wCAAwC;AACxC,oBAAoB;AACpB,6BAA6B;AAC7B,4GAA4G;AAC5G,iCAAiC;AACjC,wEAAwE;AACxE,MAAM;AACN,EAAE;AACF,sDAAsD;AACtD,6BAA6B;AAC7B,wCAAwC;AACxC,oBAAoB;AACpB,6BAA6B;AAC7B,6GAA6G;AAC7G,iCAAiC;AACjC,wEAAwE;AACxE,MAAM;AAGN,2CAAe;IAAC;IAAoB;IAAe;IAAoB;IAAa;IAAiB;IAAgB;IAAkB;IAAiB;IAAc;IAAkB;IAAmB;CAAkB;;;;;;ACzjB7N,MAAM,0CAAoB;AAE1B,SAAS,0CAAoB,IAAI,EAAE,GAAG;IACpC,IAAI,KAAK,OAAO,KAAK,KACnB,OAAO;IAET,IAAI,SAAO;IACX,IAAI,KAAK,OAAO,GAAG,OAAO,KAAK,cAAc,CAAC,aAC5C,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAA;QACpB,IAAI,MAAM,QAAQ,GAAG,KAAK;YACxB,MAAM,SAAS,GAAG,KAAK,OAAO;YAC9B,MAAM,MAAM,0CAAoB,OAAO;YACvC,IAAI,KAAK,SAAS;QACpB;IACF;IAEF,OAAO;AACT;AAEA,SAAS,kCAAY,IAAI,EAAE,MAAM,EAAE,MAAM;IACvC,KAAK,MAAM,GAAI,KAAK,OAAO,IAAI,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ;IACjF,IAAI,QAAQ,KAAK,MAAM,GAAG,CAAC,KAAK,MAAM;IACtC,IAAI,KAAK,cAAc,CAAC,aACtB,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAA;QACpB,kCAAY,OAAO,QAAQ;IAC7B;AAEJ;AAEA,SAAS,kCAAY,IAAI,EAAE,GAAG;IAC5B,KAAK,OAAO,GAAG;IACf;IACA,IAAI,KAAK,cAAc,CAAC,aACtB,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAA;QACpB,MAAM,kCAAY,OAAO;IAC3B;IAEF,KAAK,QAAQ,GAAG;IAChB;IACA,OAAO;AACT;AAEA,MAAM,uCAAiB;IACrB,MAAM;IACN,YAAY;QACV,MAAM,eAAe;YACnB,QAAQ;YACR,WAAW;YACX,QAAQ;YACR,QAAQ;YACR,SAAS;YACT,UAAU;YACV,UAAU,EAAE;YACZ,YAAY;YACZ,UAAU;YACV,cAAc;YACd,cAAc;YACd,MAAM;QACR;QACA,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAC,IAAI,WAAE,OAAO,EAAC;YAC3C,IAAI;YACJ,OAAQ;gBACN,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,cAAc;wBACzC,QAAQ;wBACR,UAAU,EAAE;oBACd;oBACA,OAAO;gBAET,KAAK;oBAAwB;wBAC3B,MAAM,MAAM,MAAM,QAAQ;wBAC1B,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;4BAClC,QAAQ;4BACR,YAAY;4BACZ,UAAU,MAAM;4BAChB,cAAc;wBAChB;wBACA,IAAI,QAAQ,CAAA,GAAA,uCAAA,EAAE,IAAI,CAAC,SAAS;4BAAC;4BAAY;4BAAY;4BAAQ;yBAAW;wBACxE,MAAM,OAAO,GAAG;wBAChB,MAAM,QAAQ,GAAG,MAAM;wBACvB,MAAM,MAAM,GAAG;wBACf,MAAM,QAAQ,GAAG;wBACjB,SAAS,QAAQ,CAAC,IAAI,CAAC;wBACvB,kCAAY,UAAU,OAAO;wBAC7B,OAAO;oBACT;gBACA,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAClC,QAAQ;wBACR,YAAY;wBACZ,UAAU,QAAQ,QAAQ,GAAG;wBAC7B,cAAc;oBAChB;oBACA,SAAS,QAAQ,CAAC,IAAI,CAAC;oBACvB,kCAAY,UAAU,SAAS;oBAC/B,OAAO;gBAET,KAAK;oBAA4B;wBAC/B,0EAA0E;wBAC1E,IAAI,SAAS;4BACX,SAAS,MAAM,QAAQ;4BACvB,UAAU,MAAM,QAAQ,GAAG,AAAC,QAAQ,OAAO,CAAC,MAAM,GAAI,IAAI;4BAC1D,WAAW,QAAQ,SAAS;4BAC5B,QAAQ;4BACR,UAAU;4BACV,UAAU,QAAQ,OAAO;wBAC3B;wBACA,IAAI,QAAQ,OAAO,EACjB,OAAO,OAAO,GAAG,QAAQ,OAAO;wBAElC,IAAI,UAAU,OAAO,OAAO,GAAC;wBAC7B,QAAQ,OAAO,CAAC,OAAO,CAAC,CAAA;4BACtB,EAAE,OAAO,GAAG;4BACZ,EAAE,QAAQ,GAAG;4BACb,EAAE,MAAM,GAAG;4BACX,EAAE,QAAQ,GAAG;wBACf;wBACA,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;4BAClC,QAAQ;4BACR,YAAY;4BACZ,cAAc;4BACd,UAAU,OAAO,QAAQ,GAAG;wBAC9B;wBACA,SAAS,QAAQ,CAAC,IAAI,CAAC;wBACvB,kCAAY,UAAU,QAAQ;wBAC9B,OAAO;oBACT;gBACA,KAAK;oBAA0B;wBAC7B,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;4BAClC,QAAQ;4BACR,YAAY;4BACZ,cAAc;wBAChB;wBACA,IAAI,OAAO,0CAAoB,UAAU,QAAQ,OAAO;wBACxD,IAAI,MAAM;4BACR,KAAK,MAAM,GAAG,CAAC,KAAK,MAAM;4BAC1B,kCAAY,UAAU,MAAM;4BAC5B,OAAO;wBACT;wBACA;oBACF;gBACA,KAAK;oBAA0B;wBAC7B,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;4BAClC,QAAQ;4BACR,YAAY;4BACZ,cAAc;wBAChB;wBACA,IAAI,OAAO,0CAAoB,UAAU,QAAQ,OAAO;wBACxD,IAAI,MAAM;4BACR,IAAI,SAAS,0CAAoB,UAAU,KAAK,SAAS;4BACzD,OAAO,QAAQ,GAAG,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA,QAAS,MAAM,OAAO,KAAK,KAAK,OAAO;4BAChF,kCAAY,UAAU;4BACtB,kCAAY,UAAU,QAAQ;4BAC9B,OAAO;wBACT;wBACA;oBACF;gBACA,KAAK;oBACH,IAAI,QAAQ,cAAc,CAAC,cAAc;wBACvC,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;4BAClC,QAAQ;4BACR,YAAY;4BACZ,cAAc;wBAChB;wBACA,IAAI,OAAO,0CAAoB,UAAU,QAAQ,OAAO;wBACxD,KAAK,SAAS,GAAG,KAAK,SAAS,KAAK,QAAQ,OAAO;wBACnD,kCAAY,UAAU,MAAM;wBAC5B,OAAO;oBACT;oBACA;gBAEF,KAAK;oBAAwB;wBAC3B,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;4BAClC,QAAQ;4BACR,YAAY;4BACZ,cAAc;4BACd,cAAc;wBAChB;wBACA,IAAI,SAAS,0CAAoB,UAAU,QAAQ,MAAM,CAAC,OAAO;wBACjE,IAAI,SAAS,0CAAoB,UAAU,QAAQ,MAAM,CAAC,OAAO;wBACjE,IAAI,UAAU,QAAQ;4BACpB,OAAO,QAAQ,GAAG;4BAClB,IAAI,SAAS,0CAAoB,UAAU,OAAO,SAAS;4BAC3D,OAAO,QAAQ,GAAG,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA,QAAS,MAAM,OAAO,KAAK,OAAO,OAAO;4BAClF,OAAO,QAAQ,GAAG;4BAClB,IAAI,CAAC,OAAO,cAAc,CAAC,aAAa;gCACtC,IAAI,aAAa,OAAO,MAAM,CAAC,CAAC,GAAG;gCACnC,OAAO,QAAQ,GAAG;oCAAC;iCAAW;gCAC9B,OAAO,SAAS,GAAG;gCACnB,OAAO,MAAM,GAAG;gCAChB,OAAO,OAAO,QAAQ;gCACtB,OAAO,OAAO,QAAQ;gCACtB,OAAO,OAAO,IAAI;gCAClB,OAAO,OAAO,QAAQ;4BACxB;4BACA,OAAO,QAAQ,CAAC,IAAI,CAAC;4BACrB,kCAAY,UAAU;4BACtB,kCAAY,UAAU,QAAQ;4BAC9B,OAAO;wBACT;wBACA;oBACF;gBACA,KAAK;oBAAyB;wBAC5B,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;4BAClC,QAAQ;4BACR,YAAY;4BACZ,cAAc;4BACd,cAAc;wBAChB;wBACA,IAAI,SAAS,0CAAoB,UAAU,QAAQ,MAAM,CAAC,OAAO;wBACjE,IAAI,SAAS,0CAAoB,UAAU,QAAQ,MAAM,CAAC,OAAO;wBACjE,IAAI,UAAU,QAAQ;4BACpB,OAAO,QAAQ,GAAG;4BAClB,IAAI,CAAC,OAAO,cAAc,CAAC,aAAa;gCACtC,IAAI,aAAa,OAAO,MAAM,CAAC,CAAC,GAAG;gCACnC,OAAO,QAAQ,GAAG;oCAAC;iCAAW;gCAC9B,OAAO,SAAS,GAAG;gCACnB,OAAO,MAAM,GAAG;gCAChB,OAAO,OAAO,QAAQ;gCACtB,OAAO,OAAO,QAAQ;gCACtB,OAAO,OAAO,IAAI;gCAClB,OAAO,OAAO,QAAQ;4BACxB;4BACA,IAAI,aAAa,OAAO,MAAM,CAAC,CAAC,GAAG;4BACnC,OAAO,QAAQ,CAAC,IAAI,CAAC;4BACrB,kCAAY,UAAU;4BACtB,kCAAY,UAAU,QAAQ;4BAC9B,OAAO;wBACT;wBACA;oBACF;gBACA,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAClC,YAAY;wBACZ,cAAc,QAAQ,IAAI;wBAC1B,gBAAgB,QAAQ,MAAM;oBAChC;oBACA,kCAAY,UAAU,QAAQ,MAAM,EAAE;oBACtC,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAClC,YAAY;oBACd;oBACA,OAAO;gBACT,KAAK;oBACH,QAAQ,MAAM,GAAG;oBACjB,QAAQ,YAAY,GAAG;oBACvB,OAAO;gBACT,KAAK;oBACH,IAAI,CAAE,CAAA,MAAM,MAAM,KAAK,WAAW,YAAY,SAAQ,GACpD,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAAC,QAAQ;oBAAO;oBAElD;gBACF,KAAK;oBACH,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAAC,YAAY;oBAAO;gBACtD,KAAK;oBACH,QAAQ,QAAQ,GAAG,CAAC,QAAQ,QAAQ;oBACpC,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG;gBAC3B,KAAK;oBACH,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAAC,QAAQ;wBAAU,cAAc,UAAU,MAAM,IAAI;oBAAA;gBACvF,KAAK;oBACH,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAAC,QAAQ;oBAAS;gBACpD,KAAK;oBACH,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAAC,QAAQ;oBAAU;gBACrD,KAAK;oBACH,IAAI,MAAM,MAAM,KAAK,SACnB,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAAC,QAAQ;oBAAQ;gBAErD,KAAK;oBACH,IAAI,MAAM,MAAM,KAAK,SACnB,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,cAAc;wBAAC,UAAS,EAAE;oBAAA;oBAErD;gBACF,KAAK;oBACH,IAAI,MAAM,UAAU,EAClB,OAAO,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO;wBAAC,YAAY;oBAAK;YAExD;YACA,OAAO;QACT;IACF;IACA,uBAAuB,CAAA,SAAU,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YACpD,SAAS;gBACP,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAA0B,SAAS;oBAAM;iBACjD;YACH;QACF;IACA,uBAAuB,CAAA,SAAU,CAAC,YAAC,QAAQ,EAAC;YAC1C,SAAS;gBACP,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;oBAA0B;oBACjC;wBAAC,MAAM;wBAA0B,SAAS;oBAAM;iBACjD;YACH;QACF;IACA,gCAAgC,CAAA,SAAU,CAAC,YAAC,QAAQ,EAAC;YACnD,SAAS;gBACP,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAAoC,SAAS;oBAAM;iBAC3D;YACH;QACF;IACA,2BAA2B,CAAC,SAAW,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YAC1D,MAAM,QAAQ;YACd,IAAI,MAAM,cAAc,CAAC,YAAY,EAAE;gBACrC,MAAM,SAAS,MAAM,cAAc,CAAC,cAAc;gBAClD,SAAS;oBACP,MAAM;oBAAiB,SAAS;wBAC9B;4BAAC,MAAM;wBAAwB;wBAC/B;4BAAC,MAAM,CAAC,eAAe,EAAE,MAAM,cAAc,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC;4BAAE,SAAS;wCAAC;wCAAQ;4BAAM;wBAAC;qBACvG;gBACH;YACF;QACF;IACA,qBAAqB,CAAC,QAAQ,SAAW,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YAC5D,SAAS;gBACP,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAAyB,SAAS;oCAAC;oCAAQ;wBAAM;oBAAC;iBAC1D;YACH;QACF;IACA,4BAA4B,CAAC,QAAQ,OAAS,CAAC,YAAC,QAAQ,EAAC;YACvD,SAAS;gBAAC,MAAM;gBAAiC,SAAS;oBAAC,QAAO;oBAAQ,MAAK;gBAAI;YAAC;QACtF;IACA,8BAA8B,IAAM,CAAC,YAAC,QAAQ,EAAC;YAC7C,SAAS;gBAAC,MAAM;YAAiC;QACnD;IACA,2BAA2B,CAAA,aAAc,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YAC5D,IAAI,CAAC,WAAW,IAAI,EAClB,WAAW,IAAI,GAAG,WAAW,YAAY;YAE3C,SAAS;gBACP,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAAwB,SAAS;oBAAU;iBACnD;YACH;QACF;IACA,wBAAwB,CAAA,QAAS,CAAC,YAAC,QAAQ,EAAC;YAC1C,SAAS;gBACP,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAA4B,SAAS;4BAAC,WAAW;4BAAO,SAAS;wBAAK;oBAAC;iBAC/E;YACH;QACF;IACA,2BAA2B,CAAA,OAAQ,CAAC,YAAC,QAAQ,EAAC;YAC5C,SAAS;gBAAC,MAAM;gBAA+B,SAAS;YAAI;QAC9D;IACA,sBAAsB,CAAA,OAAQ,CAAC,YAAC,QAAQ,EAAC;YACvC,SACE;gBAAC,MAAM;gBAAiB,SAAS;oBAC/B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAAiC,SAAS;oBAAI;iBACtD;YACH;QACF;IACA,yBAAyB,CAAA,UAAW,CAAC,YAAC,QAAQ,EAAC;YAC7C,SAAS;gBACP,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAA4B,SAAS;oBAAO;iBACpD;YACH;QACF;IACA,uBAAuB,IAAM,CAAC,YAAC,QAAQ,EAAC;YACtC,SAAS;gBACP,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;oBAAyB;iBACjC;YACH;QACF;IACA,sBAAsB,CAAA,QAAS,MAAM,cAAc;IACnD,4BAA4B,CAAA,QAAS,MAAM,cAAc,CAAC,MAAM;IAChE,iCAAiC,CAAA;QAC/B,MAAM,YAAY,IAAI,OAAO;QAC7B,MAAM,UAAU,IAAI,OAAO;QAC3B,MAAM,gBAAgB,IAAI,OAAO;QACjC,MAAM,cAAc,IAAI,OAAO;QAC/B,SAAS,SAAS,IAAI;YACpB,MAAM,SAAS,KAAK,MAAM,GAAG,SAAS;YACtC,IAAI,KAAK,cAAc,CAAC,aACtB,oBAAoB;YACpB,OAAO,GAAG,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAA,IAAK,SAAS,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAE1F;gBACH,4BAA4B;gBAC5B,IAAI,KAAK,QAAQ,KAAK,cAAc,cAAc,IAAI,CAAC,KAAK,QAAQ,GAClE,OAAO,GAAG,SAAS,KAAK,QAAQ,EAAE;gBACpC,IAAI,QAAQ,IAAI,CAAC,KAAK,QAAQ,GAC5B,OAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAK,QAAQ;gBACxD,IAAI,UAAU,IAAI,CAAC,KAAK,QAAQ,GAC9B,OAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC;qBAClD,IAAI,YAAY,IAAI,CAAC,KAAK,QAAQ,GACrC,OAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAK,QAAQ;qBAEvE,OAAO,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,EAAE,KAAK,QAAQ,EAAE;YACvD;QACF;QACA,IAAI,MAAM,cAAc,CAAC,QAAQ,KAAK,GACpC,OAAO;QAET,OAAO,CAAC,SAAS,EAAE,SAAS,MAAM,cAAc,EAAE,CAAC,CAAC;IACtD;IACA,2BAA2B,CAAA,QAAS,MAAM,cAAc,CAAC,YAAY;IACrE,yBAAyB,CAAA,QAAS,MAAM,cAAc,CAAC,IAAI;AAC7D;AAEA,MAAM,qCAAe,CAAC;IACpB,IAAI,UAAU;QAAC;YAAC,MAAM;QAAwB;KAAE;IAChD,IAAI,MAAM,CAAA,GAAA,uCAAA,EAAE,IAAI,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC;IAC1C,IAAI,UAAU;IACd,IAAI,IAAI,MAAM,GAAG,yCAAmB;QAClC,MAAM,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,KAAK,GAAG;QACtB,UAAU,CAAC,yCAAyC,EAAE,wCAAkB,MAAM,CAAC;IACjF;IACA,IAAI,UAAU,IAAI,GAAG,CAAC,CAAC,IAAG;QACxB,OAAO;YACL,UAAU;YACV,MAAM;YACN,UAAU;YACV,UAAU;QACZ;IACF;IACA,IAAI,QAAQ,MAAM,KAAK,GACrB,QAAQ,IAAI,CAAC;QAAC,MAAM;QAAwB,SAAS,OAAO,CAAC,EAAE;IAAA;SAE5D;QACH,IAAI,SAAS;YAAC,MAAM;YAA4B,SAAS;gBAAC,WAAW;gBAAM,SAAQ;YAAO;QAAC;QAC3F,IAAI,SACF,OAAO,OAAO,CAAC,OAAO,GAAG;QAE3B,QAAQ,IAAI,CAAC;IACf;IACA,OAAO;QAAE,MAAM;QAAiB,SAAS;IAAQ;AACnD;AAEA,qCAAe,mBAAmB,GAAG,CAAA,GAAA,kCAAa,EAChD,qBACA,wBACA,uBACA,mBACA,CAAC,aAAa,SAAS,SAAS;IAC9B,IAAI,QAAQ,MAAM,KAAK,QAAQ;QAC7B,IAAI,YAAY,OAAO,EAAE;YACvB,MAAM,aAAa,KAAK,KAAK,CAAC,YAAY,OAAO;YACjD,IAAI,UAAU;gBACZ;oBAAC,MAAM;gBAAwB;gBAC/B;oBAAC,MAAM;oBAA4B,SAAS;gBAAU;aACvD;YACD,IAAI,YAAY,OAAO,EAAE;gBACvB,IAAI,SAAO,CAAC;gBACZ,YAAY,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAA;oBACrC,MAAM,CAAC,EAAE,GAAC;gBACZ;gBACA,QAAQ,IAAI,CAAC;oBAAC,MAAM;oBAA2B,SAAS;gBAAM;YAChE;YACA,OAAO;gBAAE,MAAM;gBAAiB,SAAS;YAAQ;QACnD;QACA,IAAI,YAAY,cAAc,CAAC,SAC7B,OAAO;YACL,MAAM;YAAiB,SAAS;gBAC9B;oBAAC,MAAM;gBAAwB;gBAC/B;oBAAC,MAAM;oBAAwB,SAAS,KAAK,KAAK,CAAC,YAAY,IAAI;gBAAC;aACrE;QACH;QAEF,IAAI,YAAY,cAAc,CAAC,eAAe;YAC5C,MAAM,MAAM,IAAI,IAAI,MAAM,IAAI;YAC9B,IAAI,MAAM,GAAG;YACb,OAAO;gBACL,MAAM;gBAAiB,SAAS;oBAC9B;wBAAC,MAAM;wBAAe,SAAS;4BAAC,KAAK,IAAI,IAAI;4BAAE,SAAQ;wBAAK;oBAAC;oBAC7D;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAA6B,SAAS;4BAAC,OAAO,YAAY,UAAU;wBAAA;oBAAC;iBAC7E;YACH;QACF;QACA,IAAI,YAAY,cAAc,CAAC,WAC7B,OAAO,mCAAa;QAEtB,IAAI,YAAY,cAAc,CAAC,eAAe,YAAY,cAAc,CAAC,eACpE,YAAY,cAAc,CAAC,eAAe,YAAY,cAAc,CAAC,SACxE,OAAO;YACL,MAAM;YAAiB,SAAS;gBAC9B;oBAAC,MAAM;gBAAwB;gBAC/B;oBAAC,MAAM;oBAAwB,SAAS;gBAAW;aACpD;QACH;QAEF,MAAM,MAAM,IAAI,IAAI,MAAM,IAAI;QAC9B,IAAI,IAAI,QAAQ,KAAK,UACnB,OAAO;YAAC,MAAM;QAAyB;IAE3C;IACA,IAAI,QAAQ,MAAM,KAAK,YAAY;QACjC,MAAM,MAAM,IAAI,IAAI,MAAM,IAAI;QAC9B,IAAI,MAAM,GAAG,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC,OAAO,MAAM,CAAC,CAAC,GAAG,SAAS;YAAC,QAAQ;QAAM,IAAI,SAAS,EAAE,QAAQ,IAAI,CAAC,MAAM;QACnH,CAAA,GAAA,yCAAM,EAAE,KAAK,CAAC;YACZ,UAAU;YACV,QAAQ;YACR,OAAO,IAAI,MAAM;QACnB;QACA,OAAO;YACL,MAAM;YAAiB,SAAS;gBAC9B;oBAAC,MAAM;oBAAe,SAAS;wBAAC,KAAK,IAAI,IAAI;wBAAE,SAAQ;oBAAK;gBAAC;gBAC7D;oBAAC,MAAM;oBAAkC,SAAS;gBAAO;aAC1D;QACH;IACF;AACF;IAGF,2CAAe;;;;ACxgBf,MAAM,qCAAe;IACnB,MAAM;IACN,YAAY;QACV,MAAM,eAAe;YACnB,SAAS;gBACP;oBACE,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,cAAc;gBAChB;gBACA;oBACE,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,cAAc;gBAChB;gBACA;oBACE,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,cAAc;gBAChB;gBACA;oBACE,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,cAAc;gBAChB;gBACA;oBACE,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,cAAc;oBACd,gBAAgB,CAAC;gBACnB;gBACA;oBACE,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,cAAc;gBAChB;gBACA;oBACE,IAAI;oBACJ,MAAM;oBACN,MAAM;oBACN,cAAc;gBAChB;aAWD;YACD,SAAS,CAAC;QACZ;QACA,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAC,IAAI,WAAE,OAAO,EAAC;YAC3C,IAAI;YACJ,OAAQ;gBACN,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAE;oBAC5B,SAAS,OAAO,GAAG;wBAAE,GAAI,MAAM,OAAO,IAAI,CAAC,CAAC;wBAAG,CAAC,QAAQ,EAAE;oBAAK;oBAC/D,SAAS,OAAO,CAAC,OAAO,CAAC,CAAA;wBACvB,KAAK,YAAY,GAAG;wBACpB,IAAI,KAAK,EAAE,KAAK,SAAS;4BACvB,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,QAAQ;4BACzC,KAAK,YAAY,GAAG,KAAK,IAAI,KAAK;wBACpC;oBACF;oBACA,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,OAAO,GAAG;wBAAE,GAAI,MAAM,OAAO,IAAI,CAAC,CAAC;wBAAG,CAAC,QAAQ,EAAE;oBAAK;oBAC/D,SAAS,OAAO,CAAC,OAAO,CAAC,CAAA;wBACvB,KAAK,YAAY,GAAG;wBACpB,IAAI,KAAK,EAAE,KAAK,SAAS;4BACvB,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,OAAO;4BACxC,KAAK,YAAY,GAAG,KAAK,IAAI,KAAK;wBACpC;oBACF;oBACA,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,OAAO,CAAC,OAAO,CAAC,CAAA,IAAK,EAAE,YAAY,GAAG;oBAC/C,OAAO;gBACT;oBACE,OAAO;YACX;QACF;IACF;IACA,qBAAqB,CAAA,MAAO,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YAC/C,SAAS;gBAAC,MAAM;gBAAwB,SAAS;YAAG;QACtD;IACA,uBAAuB,CAAA,MAAO,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YACjD,SAAS;gBAAC,MAAM;gBAAwB,SAAS;YAAG;QACtD;IACA,sBAAsB,IAAM,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YAC/C,SAAS;gBAAC,MAAM;gBAAyB,SAAS;YAAI;QACxD;IACA,uBAAuB,CAAA,QAAS,MAAM,YAAY;IAClD,oBAAoB,CAAA,GAAA,kCAAa,EAC/B,yBACA,uBACA,uBACA,wBACA,CAAC,KAAK,QAAQ,QAAQ;QACpB,MAAM,YAAY,AAAC,UAAU,OAAO,KAAK,IAAK;QAC9C,MAAM,UAAU,IAAI,OAAO,IAAI,CAAC;QAChC,MAAM,WAAW,AAAC,UAAU,OAAO,QAAQ,IAAI,OAAO,QAAQ,CAAC,QAAQ,IAAK;QAC5E,MAAM,aAAa,CAAC,CAAE,CAAA,WAAW,QAAQ,QAAQ,GAAG,CAAA;QACpD,MAAM,qBAAqB,IAAI,IAAI;YAAC;YAAY;SAAO;QACvD,MAAM,cAAc,AAAC,aAAa,KAAM,CAAC;QACzC,MAAM,cAAc,CAAC,CAAE,CAAA,UAAU,OAAO,cAAc,AAAD;QAErD,IAAI,UAAU,IAAI,OAAO;QACzB,IAAI,CAAC,aACH,UAAU,QAAQ,MAAM,CAAC,CAAA,IAAK,EAAE,EAAE,KAAK;QAEzC,IAAI,WACF,UAAU,QAAQ,MAAM,CAAC,CAAA,IAAK,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK;QAEpD,UAAU,QAAQ,GAAG,CAAC,CAAA;YACpB,IAAI,mBAAmB,GAAG,CAAC,EAAE,EAAE,KAAK,aAClC,OAAO;gBAAE,GAAG,CAAC;gBAAE,MAAM;YAAM;YAE7B,IAAI,CAAC,WAAW,OAAO;YACvB,MAAM,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,OAAO;YACf,IAAI,MAAM,YAAY,OAAO;gBAAE,GAAG,CAAC;gBAAE,MAAM;YAAW;YACtD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO;YAC1B,OAAO;gBAAE,GAAG,CAAC;gBAAE,MAAM;YAAE;QACzB;QACA,OAAO;YAAE,GAAG,GAAG;qBAAE;QAAQ;IAC3B;AAEJ;IAEA,2CAAe;;;AChJf,MAAM,oCAAc;IAClB,MAAM;IACN,YAAY;QACV,MAAM,eAAe;YACnB,OAAO,CAAC;YACR,OAAO,CAAC;YACR,SAAS,CAAC;YACV,UAAU,CAAC;YACX,YAAY,CAAC;YACb,WAAW,CAAC;YACZ,cAAc,CAAC;YACf,cAAc,CAAC;YACf,SAAS,CAAC;YACV,gBAAgB,CAAC;YACjB,cAAc,CAAC;QACjB;QACA,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAC,IAAI,WAAE,OAAO,EAAC;YAC3C,IAAI;YACJ,OAAQ;gBACN,KAAK;oBACH,IAAI,CAAC,MAAM,YAAY,CAAC,cAAc,CAAC,UAAU;wBAC/C,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;wBAC7B,SAAS,YAAY,CAAC,QAAQ,GAAG,CAAC;wBAClC,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,YAAY,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,YAAY,EAAE;oBAC9D,OAAO;gBACT,KAAK;oBACH,IAAI,CAAC,MAAM,KAAK,CAAC,cAAc,CAAC,UAAU;wBACxC,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;wBAC7B,SAAS,KAAK,CAAC,QAAQ,GAAG,CAAC;wBAC3B,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,KAAK,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,KAAK,EAAE;oBAChD,OAAO;gBACT,KAAK;oBACH,IAAI,CAAC,MAAM,KAAK,CAAC,cAAc,CAAC,UAAU;wBACxC,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;wBAC7B,SAAS,KAAK,CAAC,QAAQ,GAAG,CAAC;wBAC3B,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,KAAK,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,KAAK,EAAE;oBAChD,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,QAAQ,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,QAAQ,EAAE;oBACtD,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,OAAO,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,OAAO,EAAE;oBACpD,OAAO;gBACT,KAAK;oBACH,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY;wBAC1D,WAAW,OAAO,MAAM,CAAC,CAAC,GAAE;wBAC5B,SAAS,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE;wBAC3C,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,GAAG,QAAQ,OAAO;oBAC3D,OAAO;gBACT,KAAK;oBACH,IAAI,CAAC,MAAM,SAAS,CAAC,cAAc,CAAC,UAAU;wBAC5C,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;wBAC7B,SAAS,SAAS,CAAC,QAAQ,GAAG,CAAC;wBAC/B,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,IAAI,CAAC,MAAM,YAAY,CAAC,cAAc,CAAC,UAAU;wBAC/C,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;wBAC7B,SAAS,YAAY,CAAC,QAAQ,GAAG,CAAC;wBAClC,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,IAAI,CAAC,MAAM,YAAY,CAAC,cAAc,CAAC,UAAU;wBAC/C,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;wBAC7B,SAAS,YAAY,CAAC,QAAQ,GAAG,CAAC;wBAClC,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,SAAS,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,SAAS;oBACtD,SAAS,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,QAAQ,OAAO;oBAChD,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,YAAY,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,YAAY;oBAC5D,SAAS,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,QAAQ,MAAM;oBAClD,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,YAAY,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,YAAY;oBAC5D,SAAS,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,QAAQ,MAAM;oBAClD,OAAO;gBACT,KAAK;oBACH,IAAI,CAAC,MAAM,UAAU,CAAC,cAAc,CAAC,UAAU;wBAC7C,WAAW,OAAO,MAAM,CAAC,CAAC,GAAE;wBAC5B,SAAS,UAAU,CAAC,QAAQ,GAAG,EAAE;wBACjC,OAAO;oBACT;oBACA;gBACF,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,UAAU,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,UAAU;oBACxD,SAAS,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,QAAQ,QAAQ;oBAClD,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,cAAc,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,cAAc;oBAChE,IAAI,SAAS,cAAc,CAAC,cAAc,CAAC,UACzC,OAAO,SAAS,cAAc,CAAC,QAAQ;yBAGvC,SAAS,cAAc,CAAC,QAAQ,GAAG;wBAAC,QAAQ;oBAAM;oBAEpD,OAAO;YACX;YACA,OAAO;QACT;IACF;IACA,0BAA0B,CAAA,KAAM,CAAC,YAAC,QAAQ,EAAC;YACzC,SAAS;gBAAC,MAAM;gBAA6B,SAAS;YAAE;QAC1D;IACA,cAAc,CAAA,KAAM,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YACpC,MAAM,eAAe,MAAM,yBAAyB;YACpD,IAAI,CAAC,aAAa,cAAc,CAAC,KAAK;gBACpC,SAAS;oBAAC,MAAM;oBAAkC,SAAS;gBAAE;gBAC7D,MAAM,GAAG,MAAM,gBAAgB,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,EAC/D,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,IAAI,QAAQ,CAAC;oBACb,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;wBACxB,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG;oBAChB;oBACA,SAAS;wBAAC,MAAM;wBAAiC,SAAS;oBAAK;gBACjE;YACJ;QACF;IACA,sBAAsB,CAAA,KAAM,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YAC5C,MAAM,QAAQ,MAAM,kBAAkB;YACtC,IAAI,CAAC,MAAM,cAAc,CAAC,KAAK;gBAC7B,SAAS;oBAAC,MAAM;oBAA0B,SAAS;gBAAE;gBACrD,MAAM,GAAG,MAAM,gBAAgB,GAAG,cAAc,EAAE,IAAI,EACnD,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,IAAI,QAAQ,CAAC;oBACb,IAAI,OAAO,CAAC,CAAA;wBACV,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG;oBACjB;oBACA,SAAS;wBAAC,MAAM;wBAAyB,SAAS;oBAAK;gBACzD;YACJ;QACF;IACA,sBAAsB,CAAA,KAAM,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YAC5C,MAAM,QAAQ,MAAM,kBAAkB;YACtC,MAAM,OAAO,MAAM,iBAAiB;YACpC,IAAI,CAAC,MAAM,cAAc,CAAC,KAAK;gBAC7B,SAAS;oBAAC,MAAM;oBAA0B,SAAS;gBAAE;gBACrD,MAAM,GAAG,MAAM,gBAAgB,GAAG,kBAAkB,EAAE,IAAI,EACvD,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,IAAI,QAAQ,CAAC;oBACb,IAAI,OAAO,CAAC,CAAA;wBACV,SAAS,kBAAkB,IAAI;4BAC7B,IAAI,KAAK,cAAc,CAAC,KAAK,QAAQ,GACnC,KAAK,UAAU,GAAG,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,YAAY;iCAE/C,IAAI,KAAK,QAAQ,KAAK,YACzB,KAAK,UAAU,GAAG;4BAEpB,IAAI,KAAK,QAAQ,KAAK,YAAY,KAAK,cAAc,CAAC,aACpD,KAAK,UAAU,GAAG;4BAEpB,IAAI,KAAK,QAAQ,KAAK,YAAY,KAAK,cAAc,CAAC,aACpD,KAAK,UAAU,GAAG;4BAEpB,IAAI,KAAK,QAAQ,KAAK,aAAa,KAAK,cAAc,CAAC,aACrD,KAAK,UAAU,GAAG;4BAEpB,IAAI,KAAK,cAAc,CAAC,aACtB,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAA,IAAK,kBAAkB;wBAEjD;wBACA,kBAAkB;wBAClB,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG;oBACjB;oBACA,SAAS;wBAAC,MAAM;wBAAyB,SAAS;oBAAK;gBACzD;YACJ;QACF;IACA,0BAA0B,CAAA,MAAO,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YACjD,MAAM,WAAW,MAAM,qBAAqB;YAC5C,IAAI,SAAS,IAAI,MAAM,CAAC,CAAA,KAAM,CAAC,SAAS,cAAc,CAAC;YACvD,IAAI,QAAQ;gBACV,SAAS;oBAAC,MAAM;oBAA8B,SAAS;gBAAM;gBAC7D,IAAI,OAAO,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC;gBACrC,MAAM,GAAG,MAAM,gBAAgB,GAAG,iBAAiB,EAAE,OAAO,IAAI,CAAC,MAAM,EACpE,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,IAAI,WAAW,CAAC;oBAChB,IAAI,OAAO,CAAC,CAAA;wBACV,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG;oBACpB;oBACA,SAAS;wBAAC,MAAM;wBAA6B,SAAS;oBAAQ;gBAChE;YACJ;QACF;IACA,4BAA4B,CAAA,KAAM,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YAClD,MAAM,GAAG,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,EACpD,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;gBACJ,IAAI,UAAU;oBAAC,MAAK,CAAC;oBAAE,SAAQ,CAAC;gBAAC;gBACjC,IAAI,OAAO,CAAC,CAAA;oBACV,QAAQ,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG;oBACtB,IAAI,CAAE,QAAQ,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,GAC7C,QAAQ,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE;oBAElC,QAAQ,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG;gBACxC;gBACA,SAAS;oBAAC,MAAM;oBAA0B,SAAS;gBAAO;YAC5D;QACJ;IACA,wBAAwB,CAAA,KAAM,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YAC9C,MAAM,UAAU,MAAM,kBAAkB;YACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY;gBAC/C,SAAS;oBAAC,MAAM;oBAA2B,SAAS;gBAAE;gBACtD,MAAM,GAAG,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,GAAG,QAAQ,CAAC,EAChE,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,SAAS;wBAAC,MAAM;wBAA0B,SAAS;gCAAC;qCAAI;wBAAO;oBAAC;gBAClE;YACJ;QACF;IACA,uBAAuB,CAAA,OAAQ,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YAC/C,MAAM,OAAO,MAAM,iBAAiB;YACpC,MAAM,OAAO,MAAM,mBAAmB;YACtC,MAAM,KAAK,KAAK,GAAG;YACnB,MAAM,YAAY;YAClB,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK;gBAC5B,SAAS;oBAAC,MAAM;oBAA2B,SAAS;gBAAE;gBACtD,MAAM,QAAQ,KAAK,QAAQ,CAAC,KAAK,GAAG,YAAY,KAAK,QAAQ,CAAC,KAAK,GAAG,YAAY;gBAClF,MAAM,YAAY,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC;gBACxE,MAAM,MAAM,KAAK,QAAQ,CAAC,GAAG,GAAG,YAAY,YAAY,YAAY,KAAK,QAAQ,CAAC,GAAG,GAAG;gBACxF,MAAM,GAAG,MAAM,gBAAgB,GAAG,iBAAiB,EAAE,KAAK,WAAW,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC,EACnK,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,MAAM,IAAI,QAAQ,EAAE,CAAC,KAAK,CAAC;oBAC3B,QAAQ,MAAM,GAAG,CAAC,CAAC,EAAE;oBACrB,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;oBACrB,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE;oBACnB,SAAS;wBAAC,MAAM;wBAA0B,SAAS;gCAAC;qCAAI;wBAAO;oBAAC;gBAClE;YACJ;QACF;IACA,sBAAsB,CAAC,IAAG,OAAS,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YACnD,MAAM,OAAO,MAAM,kBAAkB;YACrC,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK;gBAC5B,SAAS;oBAAC,MAAM;oBAA0B,SAAS;gBAAE;gBACrD,MAAM,GAAG,MAAM,gBAAgB,GAAG,aAAa,EAAE,GAAG,SAAS,EAAE,KAAK,WAAW,CAAC,wCAAwC,CAAC,EACtH,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,SAAS;wBAAC,MAAM;wBAAyB,SAAS;gCAAC;oCAAI;wBAAM;oBAAC;gBAChE;YACJ;QACF;IACA,sBAAsB,CAAC,IAAG,OAAS,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YACnD,MAAM,OAAO,MAAM,kBAAkB;YACrC,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK;gBAC5B,SAAS;oBAAC,MAAM;oBAA0B,SAAS;gBAAE;gBACrD,MAAM,GAAG,MAAM,gBAAgB,GAAG,aAAa,EAAE,GAAG,SAAS,EAAE,KAAK,WAAW,CAAC,2CAA2C,CAAC,EACzH,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,SAAS;wBAAC,MAAM;wBAAyB,SAAS;gCAAC;oCAAI;wBAAM;oBAAC;gBAChE;YACJ;QACF;IACA,4BAA4B,CAAA,KAAM,CAAC,YAAC,QAAQ,SAAE,KAAK,EAAC;YAClD,MAAM,OAAO,MAAM,uBAAuB;YAC1C,IAAI,CAAC,KAAK,cAAc,CAAC,KAAK;gBAC5B,SAAS;oBAAC,MAAM;oBAAgC,SAAS;gBAAE;gBAC3D,MAAM,GAAG,MAAM,gBAAgB,GAAG,2CAA2C,EAAE,GAAG,qCAAqC,CAAC,EACrH,IAAI,CAAC,CAAA,MAAO,IAAI,IAAI,IACpB,IAAI,CAAC,CAAA;oBACJ,MAAM,WAAW;oBACjB,MAAM,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;wBACrC,IAAI,IAAI;4BACN,IAAI,EAAE,EAAE;4BACR,MAAM,EAAE,IAAI;4BACZ,aAAa,CAAC;4BACd,KAAI;4BACJ,KAAI;wBACN;wBACA,IAAI,EAAE,QAAQ,EAAE;4BACd,EAAE,QAAQ,GAAG,EAAE,QAAQ;4BACvB,OAAO,EAAE,QAAQ;wBACnB;wBACA,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE,IAAI;wBACb,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC,CAAA;4BACxB,MAAM,SAAS,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;4BAC9B,MAAM,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAI,KAAK,OAAO,CAAC,SAAQ;4BACxD,IAAI,CAAE,EAAE,WAAW,CAAC,cAAc,CAAC,OACjC,EAAE,WAAW,CAAC,KAAK,GAAG,EAAE;4BAE1B,MAAM,IAAI,MAAM,CAAC,EAAE,GAAG;4BACtB,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;4BACrB,IAAI,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG;4BACvB,IAAI,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG;4BACvB,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG;wBAC3B;wBACA,OAAO;oBACT,GAAG,GAAG,CAAC,CAAA;wBACL,IAAK,MAAM,QAAQ,EAAE,WAAW,CAC9B,EAAE,WAAW,CAAC,KAAK,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,IAAK,KAAK;wBAE7D,OAAO;oBACT;oBACA,SAAS;wBAAC,MAAM;wBAA+B,SAAS;gCAAC;sCAAI;wBAAQ;oBAAC;gBACxE;YACJ;QACF;IACA,oBAAoB,CAAA,QAAS,MAAM,WAAW,CAAC,KAAK;IACpD,2BAA2B,CAAA,QAAS,MAAM,WAAW,CAAC,YAAY;IAClE,oBAAoB,CAAA,QAAS,MAAM,WAAW,CAAC,KAAK;IACpD,uBAAuB,CAAA,QAAS,MAAM,WAAW,CAAC,QAAQ;IAC1D,yBAAyB,CAAA,QAAS,MAAM,WAAW,CAAC,UAAU;IAC9D,qBAAqB,CAAA,QAAS,MAAM,WAAW,CAAC,SAAS;IACzD,oBAAoB,CAAA,QAAS,MAAM,WAAW,CAAC,YAAY;IAC3D,oBAAoB,CAAA,QAAS,MAAM,WAAW,CAAC,YAAY;IAC3D,oBAAoB,CAAA,QAAS,MAAM,WAAW,CAAC,OAAO;IACtD,sBAAsB,CAAA,QAAS,MAAM,WAAW,CAAC,cAAc;AACjE;IAEA,2CAAe;;;;ACzVf,MAAM,uCAAiB;IACrB,MAAM;IACN,YAAY;QACV,MAAM,eAAe;YACnB,MAAM;YACN,QAAQ,CAAC;QACX;QACA,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAC,IAAI,WAAE,OAAO,EAAC;YAC3C,IAAI;YACJ,OAAQ;gBACN,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAE;oBAC5B,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI;oBAC9B,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,SAAS,MAAM,GAAG;oBAClB,OAAO;gBACT,KAAK;oBACH,WAAW,OAAO,MAAM,CAAC,CAAC,GAAG;oBAC7B,OAAO,IAAI,CAAC,SAAS,OAAO,CAAC,CAAA;wBAAQ,SAAS,MAAM,CAAC,IAAI,GAAG;oBAAK;oBACjE,OAAO;gBACT;oBACE,OAAO;YACX;QACF;IACF;IACA,sBAAsB,IAAM,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YAC/C,SAAS;gBAAC,MAAM;YAAyB;QAC3C;IACA,4BAA4B,CAAA,UAAW,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YAC1D,SAAS;gBAAC,MAAM;gBAAiB,SAAS;oBACtC;wBAAC,MAAM;oBAAwB;oBAC/B;wBAAC,MAAM;wBAA2B,SAAS;oBAAO;iBAAE;YAAA;QAC1D;IACA,wBAAwB,CAAA,UAAW,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YACtD,SAAS;gBAAC,MAAM;gBAAiB,SAAS;oBACtC;wBAAC,MAAM;wBAA2B,SAAS;oBAAO;oBAClD;wBAAC,MAAM;oBAAyB;oBAChC;wBAAC,MAAM;oBAAwB;iBAAE;YAAA;QACvC;IACA,uBAAuB,CAAA,SAAU,CAAC,YAAC,QAAQ,YAAE,QAAQ,EAAC;YACpD,MAAM,QAAQ;YACd,IAAI,OAAO,IAAI,CAAC,MAAM,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS;gBAC9G,IAAI,SAAS,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,cAAc,CAAC,MAAM;gBAC1D,MAAM,CAAC,OAAO,GAAC;gBACf,SAAS;oBAAC,MAAM;oBAA2B,SAAS;gBAAM;YAC5D;QACF;IACA,sBAAsB,CAAA,QAAS,MAAM,cAAc;IACnD,qBAAqB,CAAA;QACnB,OAAO,OAAO,IAAI,CAAC,MAAM,cAAc,CAAC,MAAM;IAChD;IACA,yBAAyB,CAAA,GAAA,kCAAa,EACpC,qBACA,wBACA,CAAC,MAAK;QACJ,IAAI,QAAQ,SACV,OAAO,OAAO,IAAI,CAAC,QAAQ,MAAM,EAAE,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,MAAM;QAEvE,OAAO;IACT;AAEJ;IAEA,2CAAe;;;;;AElEf,4BAAiB,KAAK,KAAK,CAAC;;;ACArB,MAAM,4CAAa;IACxB,mBAAmB;QACjB,KAAK;YAAE,OAAO;YAAc,MAAM;QAAM;QACxC,KAAK;YAAE,OAAO;YAAoB,MAAM;QAAM;QAC9C,KAAK;YAAE,OAAO;YAAU,MAAM;QAAM;QACpC,KAAK;YAAE,OAAO;YAAoB,MAAM;QAAM;QAC9C,KAAK;YAAE,OAAO;YAAkB,MAAM;QAAM;QAC5C,KAAK;YAAE,OAAO;YAAa,MAAM;QAAM;QACvC,KAAK;YAAE,OAAO;YAAmB,MAAM;QAAM;QAC7C,KAAK;YAAE,OAAO;YAA4B,MAAM;QAAM;IACxD;IACA,eAAe;QACb,MAAM;YAAE,OAAO;YAAiB,MAAM;QAAM;IAC9C;IACA,gBAAgB;QACd,KAAK;YAAE,OAAO;YAAW,MAAM;QAAM;QACrC,MAAM;YAAE,OAAO;YAAW,MAAM;QAAM;QACtC,MAAM;YAAE,OAAO;YAAuB,MAAM;QAAM;QAClD,MAAM;YAAE,OAAO;YAAc,MAAM;QAAM;IAC3C;IACA,aAAa;QAAE,MAAM;YAAE,OAAO;YAAW,MAAM;QAAM;IAAE;IACvD,sBAAsB;QAAE,MAAM;YAAE,OAAO;YAAW,MAAM;QAAM;IAAE;IAChE,uBAAuB;QAAE,MAAM;YAAE,OAAO;YAAW,MAAM;QAAM;IAAE;IACjE,oBAAoB;QAAE,MAAM;YAAE,OAAO;YAAW,MAAM;QAAM;IAAE;AAChE;;;AFpBA,0DAA0D;AAC1D,MAAM,6CAAuB;IAC3B;IACA;IACA;IACA;IACA;CACD;AAED,SAAS,qCAAe,IAAI;IAC1B,IAAI,CAAC,MAAM,OAAO,EAAE;IACpB,MAAM,OAAO,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI;IAC1C,OAAO,KACJ,KAAK,CAAC,KACN,GAAG,CAAC,CAAA,IAAK,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,KACpC,MAAM,CAAC;AACZ;AAEA,SAAS,uCAAiB,IAAI;IAC5B,OAAO,2CAAqB,IAAI,CAAC,CAAA,KAAM,GAAG,IAAI,CAAC,SAAS;QAAC;KAAE,GAAG;AAChE;AAEA,SAAS,oCAAc,GAAG,EAAE,KAAK;IAC/B,IAAI,CAAC,KAAK,OAAO;IACjB,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,GAAG,IAAM,KAAK,CAAC,CAAC,EAAE,IAAI;AACxD;AAEA,SAAS,qCAAe,WAAW;IACjC,MAAM,KAAK,QAAQ,IAAI,GAAG,eAAe,EAAE;IAC3C,MAAM,OAAO,AAAC,CAAA,CAAA,GAAA,yCAAa,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA,CAAE,CAAC,IAAI;IAChD,IAAI,MAAM,OAAO,KAAK,KAAK;IAC3B,OAAO,GAAG,OAAO,CAAC,EAAE,KAAK;AAC3B;AAEA,SAAS,yCAAmB,WAAW;IACrC,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,eAAe,EAAE;IACpD,MAAM,OAAO,AAAC,CAAA,CAAA,GAAA,yCAAa,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA,CAAE,CAAC,IAAI;IAChD,MAAM,OAAO,AAAC,QAAQ,KAAK,IAAI,IAAK;IACpC,MAAM,QAAQ,AAAC,QAAQ,KAAK,KAAK,IAAK,GAAG,OAAO,CAAC,EAAE,KAAK;IACxD,OAAO,GAAG,KAAK,IAAC,EAAE,OAAO,IAAC,EAAE,IAAI,IAAC,EAAE,OAAO;AAC5C;AAEA,SAAS,qCAAe,WAAW;IACjC,MAAM,CAAC,KAAK,GAAG,eAAe,EAAE;IAChC,IAAI,SAAS,OAAO,OAAO;IAC3B,IAAI,SAAS,OAAO,OAAO;IAC3B,OAAO,CAAC,OAAO,EAAE,KAAK,WAAW,CAAC;AACpC;AAEA,SAAS,yCAAmB,WAAW;IACrC,MAAM,CAAC,KAAK,GAAG,eAAe,EAAE;IAChC,OAAO,CAAC,UAAO,EAAE,MAAM;AACzB;AAEA,SAAS,kCAAY,IAAI,EAAE,QAAQ;IACjC,KAAK,MAAM,KAAK,SAAU;QACxB,MAAM,KAAK,IAAI,OAAO,EAAE,KAAK;QAC7B,MAAM,IAAI,KAAK,KAAK,CAAC;QACrB,IAAI,GACF,OAAO;YACL,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,KAAK;YACd,OAAO,oCAAc,EAAE,aAAa,EAAE,MAAM;YAC5C,aAAa,CAAC,CAAC,EAAE,WAAW;YAC5B,YAAY,CAAC,CAAC,EAAE,UAAU;YAC1B,UAAU,CAAC,CAAC,EAAE,SAAS;YACvB,aAAa,EAAE,KAAK,CAAC;QACvB;IAEJ;IACA,OAAO;AACT;AAEA,SAAS,gCAAU,KAAK;IACtB,IAAI,UAAU,QAAQ,UAAU,WAAW,OAAO;IAClD,IAAI,MAAM,OAAO,CAAC,QAChB,OAAO,WAAY,CAAA,MAAM,MAAM,GAAG,gCAAU,KAAK,CAAC,EAAE,IAAI,SAAQ,IAAK;IAEvE,OAAO,OAAO;AAChB;AAEA,SAAS,mCAAa,UAAU;IAC9B,MAAM,SAAS,IAAI,IAAI,CAAA,GAAA,gEAAM,EAAE,MAAM,IAAI,EAAE;IAC3C,MAAM,gBAAgB,CAAA,GAAA,gEAAM,EAAE,MAAM,IAAI,CAAC;IACzC,MAAM,WAAW,CAAA,GAAA,gEAAM,EAAE,QAAQ,IAAI,EAAE;IACvC,MAAM,aAAa,CAAA,GAAA,gEAAM,EAAE,MAAM,IAAI,CAAC;IAEtC,8EAA8E;IAC9E,MAAM,OAAO,IAAI,IAAI,OAAO,IAAI,CAAC;IACjC,MAAM,eAAe,CAAC;IACtB,KAAK,MAAM,OAAQ,cAAc,EAAE,CACjC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,OAAO,OAAO,CAAC,KAAM;QACxC,KAAK,GAAG,CAAC;QACT,IAAI,CAAE,CAAA,KAAK,YAAW,GAAI,YAAY,CAAC,EAAE,GAAG;IAC9C;IAGF,MAAM,SAAS,CAAC;IAChB,KAAK,MAAM,QAAQ,KAAM;QACvB,IAAI,OAAO,GAAG,CAAC,OAAO;QAEtB,MAAM,eAAe,aAAa,CAAC,KAAK;QACxC,MAAM,aAAa,eAAe,OAAO,kCAAY,MAAM;QAC3D,IAAI,cAAc,WAAW,QAAQ,EAAE;QACvC,MAAM,YAAY,YAAY,CAAC,KAAK;QACpC,MAAM,aAAa,cAAc,YAAY,gCAAU,aAAa;QAEpE,MAAM,QAAQ,AAAC,gBAAgB,aAAa,KAAK,IAC3C,cAAc,WAAW,KAAK,IAC/B;QAEL,IAAI,QAAQ,AAAC,gBAAgB,aAAa,KAAK,IACzC,cAAc,WAAW,KAAK,IAC/B;QACL,IAAI,YAAY;QAChB,IAAI,cAAc,WAAW,SAAS,KAAK,cAAc;YACvD,QAAQ,qCAAe,WAAW,WAAW;YAC7C,YAAY,yCAAmB,WAAW,WAAW;QACvD,OAAO,IAAI,cAAc,WAAW,SAAS,KAAK,cAAc;YAC9D,QAAQ,qCAAe,WAAW,WAAW;YAC7C,YAAY,yCAAmB,WAAW,WAAW;QACvD;QAEA,MAAM,cAAc,AAAC,gBAAgB,aAAa,WAAW,IACvD,cAAc,WAAW,WAAW,IACpC,cAAc,WAAW,UAAU,CAAC,aACrC;QAEL,MAAM,CAAC,KAAK,GAAG;kBACb;mBACA;uBACA;mBACA;YACA,OAAO,gBAAgB,aAAa,KAAK,IAAI,OAAO,aAAa,KAAK,GAAG;YACzE,aAAa,AAAC,gBAAgB,aAAa,WAAW,IAAK;YAC3D,MAAM,cAAc;yBACpB;YACA,WAAW,aAAa,WAAW,SAAS,GAAG;YAC/C,aAAa,aAAa,WAAW,WAAW,GAAG;YACnD,YAAY,CAAC,CAAE,CAAA,cAAc,WAAW,UAAU,AAAD;YACjD,QAAQ,eAAe,YAAY;QACrC;IACF;IAEA,0EAA0E;IAC1E,MAAM,WAAW,IAAI,KAAK,QAAQ,CAAC,WAAW;QAAE,SAAS;QAAM,aAAa;IAAO;IACnF,MAAM,gBAAgB,CAAC,GAAG;QACxB,MAAM,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;QAChC,IAAI,MAAM,QAAQ,MAAM,QAAQ,OAAO,IAAI,OAAO,KAAK;QACvD,IAAI,MAAM,QAAQ,MAAM,MAAM,OAAO;QACrC,IAAI,MAAM,QAAQ,MAAM,MAAM,OAAO;QACrC,OAAO,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK;IAC1C;IACA,MAAM,WAAW,IAAI,IAAI,OAAO,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAA,IAAK,EAAE,KAAK;IAC/D,MAAM,SAAS,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA,KAAO,CAAA;gBAC7C;YACA,OAAO,AAAC,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,IAAK;YACnD,OAAO,AAAC,CAAA,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,AAAD,KAAM,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG;YACjF,QAAQ,OAAO,MAAM,CAAC,QACnB,MAAM,CAAC,CAAA,IAAK,EAAE,KAAK,KAAK,IACxB,IAAI,CAAC,eACL,GAAG,CAAC,CAAA,IAAK,EAAE,IAAI;QACpB,CAAA,GAAI,IAAI,CAAC,CAAC,GAAG,IAAM,EAAE,KAAK,GAAG,EAAE,KAAK;IAEpC,OAAO;QACL,WAAW,KAAK,GAAG;gBACnB;gBACA;IACF;AACF;AAEA,MAAM,4CAAsB,CAAA,GAAA,6CAAwB,EAAE;IACpD,MAAM;IACN,gBAAgB;IAChB,SAAS;IACT,YAAY;IACZ,YAAY,CAAC,SAAE,KAAK,EAAE;QACpB,MAAM,MAAM,MAAM,gBAAgB;QAClC,MAAM,MAAM,GAAG,IAAI,gCAAgC,CAAC;QACpD,OAAO,MAAM,KACV,IAAI,CAAC,CAAA,IAAK,EAAE,IAAI,IAChB,IAAI,CAAC,CAAA,OAAQ,qCAAe,OAC5B,KAAK,CAAC,IAAM;IACjB;AACF;AAEA,SAAS,uCAAiB,KAAK;IAC7B,IAAI,CAAC,OAAO,OAAO;IACnB,MAAM,UAAU,MAAM,OAAO,CAAC,MAAM,MAAM,IAAI,MAAM,MAAM,GAAG,EAAE;IAC/D,MAAM,SAAS,QAAQ,GAAG,CAAC,CAAA,IAAK,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;IACrD,IAAI,OAAO,MAAM,EAAE,OAAO,OAAO,IAAI,CAAC;IACtC,MAAM,QAAQ,MAAM,OAAO,CAAC,MAAM,cAAc,IAAI,MAAM,cAAc,GAAG,EAAE;IAC7E,MAAM,QAAQ,MAAM,IAAI,CAAC,CAAA,IAAK,KAAK,EAAE,IAAI,KAAK;IAC9C,OAAO,AAAC,SAAS,MAAM,KAAK,IAAK;AACnC;AAEA,SAAS,sCAAgB,aAAa,EAAE,WAAW;IACjD,MAAM,MAAM,iBACP,cAAc,YAAY,IAC1B,cAAc,YAAY,CAAC,YAAY,IACvC,cAAc,YAAY,CAAC,YAAY,CAAC,QAAQ;IACrD,IAAI,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,OAAO;IAC/C,uEAAuE;IACvE,iFAAiF;IACjF,yEAAyE;IACzE,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI,CAAC,aAAa,MAAM,EAAE,OAAO;IAC7D,MAAM,cAAc,IAAI;IACxB,IAAK,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,EAAE,KAAK,EAAG;QACtC,MAAM,MAAM,GAAG,CAAC,EAAE;QAClB,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG;QACrB,MAAM,MAAM,WAAW,CAAC,IAAI;QAC5B,MAAM,SAAS,OAAO,IAAI,eAAe;QACzC,YAAY,GAAG,CAAC,OAAO,UAAU;IACnC;IACA,OAAO,YAAY,IAAI,GAAG,cAAc;AAC1C;AAEA,SAAS,gDAA0B,iBAAiB;IAClD,MAAM,QAAQ,CAAC;IACf,IAAI,CAAC,mBAAmB,OAAO;IAC/B,KAAK,MAAM,CAAC,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,mBAAoB;QAC5D,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM;QACzB,KAAK,MAAM,KAAK,IAAK,IAAI,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO;IAC7D;IACA,OAAO;AACT;AAEA,SAAS,gDAA0B,iBAAiB;IAClD,MAAM,QAAQ,CAAC;IACf,IAAI,CAAC,mBAAmB,OAAO;IAC/B,KAAK,MAAM,OAAO,OAAO,MAAM,CAAC,mBAAoB;QAClD,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM;QACzB,KAAK,MAAM,KAAK,IACd,IAAI,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,WAAW,IAAI,EAAE,KAAK,IAAI;IAE/D;IACA,OAAO;AACT;AAEA,SAAS,4CAAsB,WAAW;IACxC,MAAM,MAAM,CAAC;IACb,IAAI,CAAC,aAAa,OAAO;IACzB,KAAK,MAAM,KAAK,OAAO,MAAM,CAAC,aAC5B,IAAI,KAAK,EAAE,eAAe,IAAI,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,EACnD,GAAG,CAAC,EAAE,eAAe,CAAC,GAAG,EAAE,YAAY,IAAI,OAAO,EAAE,eAAe;IAGvE,OAAO;AACT;AAEA,SAAS,wCAAkB,IAAI;IAC7B,IAAI,IAAI,KAAK,KAAK,CAAC;IACnB,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM;IACjC,IAAI,KAAK,KAAK,CAAC;IACf,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM;IACjC,OAAO;AACT;AAEA,MAAM,kCAAY;IAAE,MAAM;IAAG,OAAO;IAAG,MAAM;AAAE;AAE/C,SAAS,kDAA4B,SAAS,EAAE,SAAS,EAAE,QAAQ;IACjE,KAAK,MAAM,YAAY,UACrB,KAAK,MAAM,YAAa,SAAS,SAAS,IAAI,EAAE,CAAG;QACjD,MAAM,cAAc,IAAI;QACxB,MAAM,SAAS,EAAE;QACjB,KAAK,MAAM,QAAS,SAAS,MAAM,IAAI,EAAE,CAAG;YAC1C,MAAM,IAAI,SAAS,CAAC,KAAK;YACzB,IAAI,CAAC,KAAK,EAAE,SAAS,KAAK,YAAY;gBAAE,OAAO,IAAI,CAAC;gBAAO;YAAU;YACrE,MAAM,KAAK,EAAE,WAAW,IAAI,EAAE;YAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,MAAM,YAAY,GAAG,CAAC;YAC1B,IAAI,CAAC,KAAK;gBAAE,MAAM,EAAE;gBAAE,YAAY,GAAG,CAAC,KAAK;YAAM;YACjD,IAAI,IAAI,CAAC;QACX;QACA,MAAM,YAAY;eAAI;SAAO;QAC7B,KAAK,MAAM,SAAS,YAAY,MAAM,GAAI;YACxC,IAAI,MAAM,MAAM,KAAK,GAAG;gBAAE,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAG;YAAU;YAC9D,MAAM,IAAI,CAAC,CAAC,GAAG;gBACb,MAAM,KAAK,+BAAS,CAAC,AAAC,CAAA,SAAS,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,AAAD,CAAE,CAAC,EAAE,CAAC,IAAI;gBAC7D,MAAM,KAAK,+BAAS,CAAC,AAAC,CAAA,SAAS,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,AAAD,CAAE,CAAC,EAAE,CAAC,IAAI;gBAC7D,IAAI,OAAO,IAAI,OAAO,KAAK;gBAC3B,OAAO,SAAS,OAAO,CAAC,GAAG;YAC7B;YACA,MAAM,MAAM,KAAK,CAAC,EAAE;YACpB,MAAM,WAAW,SAAS,CAAC,IAAI;YAC/B,MAAM,QAAQ,AAAC,CAAA,SAAS,KAAK,IAAI,GAAE,EAAG,OAAO,CAAC,8BAA8B;YAC5E,SAAS,CAAC,IAAI,GAAG;gBAAE,GAAG,QAAQ;uBAAE;gBAAO,cAAc,MAAM,KAAK;YAAG;YACnE,UAAU,IAAI,CAAC;QACjB;QACA,SAAS,MAAM,GAAG;IACpB;AAEJ;AAEA,SAAS,+CAAyB,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,QAAQ;IAC/G,MAAM,UAAU,IAAI;IACpB,MAAM,UAAU,EAAE;IAClB,MAAM,gBAAgB,OAAO,IAAI,CAAC,gBAAgB,MAAM,GAAG;IAC3D,KAAK,MAAM,QAAQ,WAAY;QAC7B,MAAM,QAAQ,wCAAkB;QAChC,IAAI,CAAC,OAAO;YAAE,QAAQ,IAAI,CAAC;YAAO;QAAU;QAC5C,MAAM,QAAQ,cAAc,CAAC,MAAM;QACnC,IAAI,CAAC,OAAO;YACV,IAAI,eAAe;YACnB,QAAQ,IAAI,CAAC;YACb;QACF;QACA,IAAI,aAAa,QAAQ,GAAG,CAAC;QAC7B,IAAI,CAAC,YAAY;YACf,aAAa,IAAI;YACjB,QAAQ,GAAG,CAAC,OAAO;QACrB;QACA,IAAI,WAAW,WAAW,GAAG,CAAC;QAC9B,IAAI,CAAC,UAAU;YACb,WAAW,EAAE;YACb,WAAW,GAAG,CAAC,OAAO;QACxB;QACA,SAAS,IAAI,CAAC;IAChB;IAEA,MAAM,cAAc,EAAE;IACtB,KAAK,MAAM,CAAC,OAAO,OAAO,IAAI,QAAS;QACrC,MAAM,cAAc,EAAE;QACtB,KAAK,MAAM,CAAC,OAAO,MAAM,IAAI,OAAQ;YACnC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK;YAC5E,MAAM,QAAQ,oBAAoB,gBAAgB,CAAC,MAAM;YACzD,YAAY,IAAI,CAAC;gBACf,IAAI,SAAS;gBACb,OAAO,QAAQ,GAAG,MAAM,UAAG,EAAE,OAAO,GAAG;gBACvC,QAAQ;YACV;QACF;QACA,YAAY,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK;QAC5D,YAAY,IAAI,CAAC;YACf,IAAI,SAAS;YACb,OAAO,YAAY,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO;mBAC9C;YACA,WAAW;QACb;IACF;IACA,YAAY,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK;IAE5D,OAAO;QAAE,WAAW;iBAAa;IAAQ;AAC3C;AAEA,SAAS,wCAAkB,UAAU,EAAE,SAAS,EAAE,QAAQ;IACxD,MAAM,UAAU;QACd,KAAK;YAAE,QAAQ,EAAE;YAAE,UAAU,IAAI;QAAM;QACvC,KAAK;YAAE,QAAQ,EAAE;YAAE,UAAU,IAAI;QAAM;IACzC;IACA,MAAM,UAAU,EAAE;IAElB,KAAK,MAAM,QAAQ,WAAY;QAC7B,MAAM,IAAI,SAAS,CAAC,KAAK;QACzB,IAAI,CAAC,GAAG;YAAE,QAAQ,IAAI,CAAC;YAAO;QAAU;QACxC,IAAI,EAAE,SAAS,KAAK,cAAc;YAChC,MAAM,OAAO,AAAC,EAAE,WAAW,IAAI,EAAE,WAAW,CAAC,EAAE,IAAK;YACpD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;iBACxC,QAAQ,IAAI,CAAC;QACpB,OAAO,IAAI,EAAE,SAAS,KAAK,cAAc;YACvC,MAAM,KAAK,EAAE,WAAW,IAAI,EAAE;YAC9B,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG;YACnC,MAAM,OAAO,AAAC,CAAA,CAAA,GAAA,yCAAa,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA,CAAE,CAAC,IAAI;YAChD,MAAM,OAAO,QAAQ,KAAK,IAAI;YAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBAAE,QAAQ,IAAI,CAAC;gBAAO;YAAU;YACpD,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtC,IAAI,CAAC,MAAM;gBACT,OAAO,IAAI;gBACX,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ;YACrC;YACA,IAAI,MAAM,KAAK,GAAG,CAAC;YACnB,IAAI,CAAC,KAAK;gBACR,MAAM,EAAE;gBACR,KAAK,GAAG,CAAC,KAAK;YAChB;YACA,IAAI,IAAI,CAAC;QACX,OACE,QAAQ,IAAI,CAAC;IAEjB;IAEA,MAAM,aAAa;QAAE,KAAK;QAAuB,KAAK;IAAqB;IAC3E,MAAM,YAAY,EAAE;IACpB,KAAK,MAAM,QAAQ;QAAC;QAAO;KAAM,CAAE;QACjC,MAAM,SAAS,OAAO,CAAC,KAAK;QAC5B,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,GAAG;QAEzD,MAAM,eAAe,EAAE;QACvB,KAAK,MAAM,CAAC,QAAQ,KAAK,IAAI,OAAO,QAAQ,CAAE;YAC5C,MAAM,YAAY,EAAE;YACpB,KAAK,MAAM,CAAC,KAAK,MAAM,IAAI,KAAM;gBAC/B,MAAM,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK;gBAC5E,UAAU,IAAI,CAAC;oBACb,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK;oBAClC,OAAO,QAAQ,QAAQ,iBAAiB;oBACxC,QAAQ;gBACV;YACF;YACA,UAAU,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK;YAC1D,aAAa,IAAI,CAAC;gBAChB,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,QAAQ;gBAC3B,OAAO,OAAO,OAAO,CAAC,MAAM;gBAC5B,WAAW;YACb;QACF;QACA,aAAa,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK;QAE7D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK;QAEpF,UAAU,IAAI,CAAC;YACb,IAAI,CAAC,IAAI,EAAE,MAAM;YACjB,OAAO,UAAU,CAAC,KAAK;YACvB,QAAQ,OAAO,MAAM;YACrB,WAAW;QACb;IACF;IAEA,OAAO;mBAAE;iBAAW;IAAQ;AAC9B;AAEA,SAAS,mCAAa,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW;IAC7F,IAAI,CAAC,WAAW,CAAC,QAAQ,MAAM,EAAE,OAAO;IACxC,IAAI,CAAC,mBAAmB,OAAO;IAE/B,MAAM,WAAW,IAAI,KAAK,QAAQ,CAAC,WAAW;QAAE,SAAS;QAAM,aAAa;IAAO;IACnF,MAAM,gBAAgB,sCAAgB,eAAe;IACrD,MAAM,iBAAiB,gDAA0B;IACjD,MAAM,mBAAmB,gDAA0B;IACnD,MAAM,UAAU,IAAI;IACpB,MAAM,YAAY,CAAC;IAEnB,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,OAAO,OAAO,CAAC,QAAQ,MAAM,EAAG;QACtD,IAAI,EAAE,SAAS,KAAK,UAAU,EAAE,SAAS,KAAK,YAAY;YACxD,SAAS,CAAC,KAAK,GAAG;YAClB;QACF;QACA,MAAM,KAAK,EAAE,WAAW,IAAI,EAAE;QAC9B,MAAM,iBAAiB,EAAE,CAAC,EAAE;QAC5B,IAAI,CAAC,gBAAgB;YAAE,SAAS,CAAC,KAAK,GAAG;YAAG;QAAU;QACtD,MAAM,eAAe,eAAe,OAAO,CAAC,MAAM;QAElD,IAAI,eAAe;YACjB,MAAM,WAAW,cAAc,CAAC,aAAa;YAC7C,IAAI,YAAY,CAAC,cAAc,GAAG,CAAC,WAAW;gBAC5C,QAAQ,GAAG,CAAC;gBACZ;YACF;QACF;QAEA,MAAM,SAAS,iBAAiB,CAAC,aAAa,IAAI,EAAE;QACpD,IAAI,WAAW,EAAE,KAAK;QACtB,IAAI,EAAE,SAAS,KAAK,QAAQ;YAC1B,MAAM,IAAI,MAAM,EAAE,CAAC,EAAE;YACrB,MAAM,QAAQ,OAAO,IAAI,CAAC,CAAA,IAAK,KAAK,EAAE,KAAK,KAAK;YAChD,MAAM,OAAO,uCAAiB;YAC9B,WAAW,OAAO,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,GAAG;QAC5E,OAAO;YACL,MAAM,KAAK,MAAM,EAAE,CAAC,EAAE;YACtB,MAAM,KAAK,MAAM,EAAE,CAAC,EAAE;YACtB,MAAM,SAAS,EAAE,CAAC,EAAE;YACpB,MAAM,KAAK,OAAO,IAAI,CAAC,CAAA,IAAK,KAAK,EAAE,KAAK,KAAK;YAC7C,MAAM,KAAK,OAAO,IAAI,CAAC,CAAA,IAAK,KAAK,EAAE,KAAK,KAAK;YAC7C,MAAM,KAAK,uCAAiB;YAC5B,MAAM,KAAK,uCAAiB;YAC5B,MAAM,OAAO,MAAM,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,GAAG;YAC7C,WAAW,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM;QAChE;QAEA,SAAS,CAAC,KAAK,GAAG,aAAa,EAAE,KAAK,GAAG;YAAE,GAAG,CAAC;YAAE,OAAO;QAAS,IAAI;IACvE;IAEA,4EAA4E;IAC5E,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,cAAc,EAAE;IACtB,KAAK,MAAM,CAAC,cAAc,OAAO,IAAI,OAAO,OAAO,CAAC,mBAAoB;QACtE,IAAI,eAAe;YACjB,MAAM,WAAW,cAAc,CAAC,aAAa;YAC7C,IAAI,YAAY,CAAC,cAAc,GAAG,CAAC,WAAW;QAChD;QACA,MAAM,aAAa,aAAa,OAAO,CAAC,MAAM;QAC9C,KAAK,MAAM,SAAS,OAAQ;YAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,EAAE;YAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC;YACjD,IAAI,SAAS,CAAC,KAAK,EAAE;YACrB,MAAM,OAAO,uCAAiB;YAC9B,SAAS,CAAC,KAAK,GAAG;sBAChB;gBACA,OAAO,OAAO,GAAG,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,MAAM,KAAK,EAAE;gBAC1F,OAAO;gBACP,aAAa;gBACb,MAAM;gBACN,aAAa;gBACb,WAAW;gBACX,aAAa;oBAAC;oBAAY,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM;iBAAI;gBACxD,YAAY;gBACZ,QAAQ;YACV;YACA,YAAY,IAAI,CAAC;QACnB;IACF;IAEA,MAAM,eAAe,4CAAsB;IAE3C,MAAM,SAAS,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,OAAO,QAAQ,IAAI,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA,IAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM;QAC1E,IAAI,EAAE,EAAE,KAAK,gBAAgB,YAAY,MAAM,EAAE;YAC/C,MAAM,WAAW,IAAI,IAAI;YACzB,OAAO;mBAAI;mBAAS,YAAY,MAAM,CAAC,CAAA,IAAK,CAAC,SAAS,GAAG,CAAC;aAAI;QAChE;QACA,IAAI,EAAE,EAAE,KAAK,OAAO;YAClB,MAAM,aAAE,SAAS,WAAE,OAAO,EAAE,GAAG,wCAAkB,MAAM,WAAW;YAClE,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK;YAC9E,OAAO;gBAAE,GAAG,CAAC;gBAAE,QAAQ;2BAAS;YAAU;QAC5C;QACA,IAAI,EAAE,EAAE,KAAK,gBAAgB,EAAE,EAAE,KAAK,gBACpC,OAAO,SAAS,EAAE,MAAM,GAAG,IAAI;YAAE,GAAG,CAAC;YAAE,QAAQ;QAAK;QAEtD,MAAM,aAAE,SAAS,WAAE,OAAO,EAAE,GAAG,+CAC7B,MAAM,WAAW,gBAAgB,kBAAkB,cAAc;QAEnE,IAAI,EAAE,EAAE,KAAK,gBACX,kDAA4B,WAAW,WAAW;QAEpD,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAM,SAAS,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK;QAC9E,OAAO;YAAE,GAAG,CAAC;YAAE,QAAQ;uBAAS;QAAU;IAC5C;IAEA,OAAO;QAAE,GAAG,OAAO;QAAE,QAAQ;gBAAW;IAAO;AACjD;AAEA,SAAS,mDAA6B,OAAO,EAAE,OAAO;IACpD,IAAI,CAAC,WAAW,CAAC,QAAQ,MAAM,IAAI,CAAC,SAAS,OAAO;IACpD,MAAM,iBAAiB,CAAC;IACxB,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,OAAO,OAAO,CAAC,QAAQ,MAAM,EACnD,IAAI,QAAQ,GAAG,CAAC,OAAO,cAAc,CAAC,KAAK,GAAG;IAEhD,MAAM,aAAa,CAAC,IAClB,AAAC,EAAE,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,KAC9B,EAAE,SAAS,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;IACnC,MAAM,cAAc,CAAC;QACnB,MAAM,SAAS,AAAC,CAAA,EAAE,MAAM,IAAI,EAAE,AAAD,EAAG,MAAM,CAAC,CAAA,IAAK,QAAQ,GAAG,CAAC;QACxD,MAAM,YAAY,AAAC,CAAA,EAAE,SAAS,IAAI,EAAE,AAAD,EAChC,GAAG,CAAC,aACJ,MAAM,CAAC;QACV,OAAO;YAAE,GAAG,CAAC;oBAAE;uBAAQ;QAAU;IACnC;IACA,MAAM,SAAS,AAAC,CAAA,QAAQ,MAAM,IAAI,EAAE,AAAD,EAAG,GAAG,CAAC,aAAa,MAAM,CAAC;IAC9D,OAAO;QAAE,GAAG,OAAO;QAAE,QAAQ;gBAAgB;IAAO;AACtD;AAEA,0CAAoB,kBAAkB,GAAG,CAAA,GAAA,kCAAa,EACpD,6BACA,2BACA,2BACA,uBACA,qBACA,CAAC,YAAY,SAAS,SAAS,QAAQ;IACrC,IAAI,CAAC,cAAc,CAAC,WAAW,MAAM,EAAE,OAAO;IAC9C,MAAM,UAAU,IAAI,IAAI;IACxB,0EAA0E;IAC1E,wEAAwE;IACxE,iEAAiE;IACjE,oCAAoC;IACpC,MAAM,MAAM,CAAC;IACb,KAAK,MAAM,QAAQ,QAAS;QAC1B,GAAG,CAAC,KAAK,GAAG,uCAAiB;QAC7B,IAAI,gBAAgB,IAAI,CAAC,OAAO;YAC9B,GAAG,CAAC,KAAK,OAAO,CAAC,UAAU,UAAU,GAAG;YACxC,GAAG,CAAC,KAAK,OAAO,CAAC,UAAU,WAAW,GAAG;QAC3C;IACF;IACA,MAAM,UAAU,mCAAa;QAAC;KAAI;IAClC,MAAM,WAAW,mCAAa,SAAS,SAAS,SAAS,QAAQ;IACjE,OAAO,mDAA6B,UAAU;AAChD;AAGF,0CAAoB,wBAAwB,GAAG,CAAA,GAAA,kCAAa,EAC1D,sBACA,CAAC,UAAY,AAAC,WAAW,QAAQ,MAAM,IAAK,EAAE;AAGhD,0CAAoB,wBAAwB,GAAG,CAAA,GAAA,kCAAa,EAC1D,sBACA,CAAC,UAAY,AAAC,WAAW,QAAQ,MAAM,IAAK,CAAC;IAG/C,2CAAe;;;;AMhlBf,MAAM,sCAAgB;AACtB,MAAM,0CAAoB;AAEnB,MAAM,4CAA2B;IACtC;IACA;IACA;IACA;IACA;CACD;AAEM,MAAM,4CAA+B;IAC1C;IACA;IACA;IACA;IACA;IACA;CACD;AAEM,SAAS,0CAAmB,IAAI;IACrC,MAAM,IAAI,KAAK,KAAK,CAAC;IACrB,IAAI,CAAC,GAAG,OAAO;IACf,OAAO;QACL,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM;QACjC,OAAO,MAAM,CAAC,CAAC,EAAE;QACjB,WAAW;IACb;AACF;AAEO,SAAS,0CAAuB,IAAI;IACzC,MAAM,IAAI,KAAK,KAAK,CAAC;IACrB,IAAI,CAAC,GAAG,OAAO;IACf,OAAO;QACL,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM;QACjC,QAAQ,MAAM,CAAC,CAAC,EAAE;QAClB,QAAQ,MAAM,CAAC,CAAC,EAAE;QAClB,MAAM,CAAC,CAAC,EAAE;QACV,WAAW;IACb;AACF;AAEO,SAAS,0CAAkB,IAAI,EAAE,OAAO;IAC7C,MAAM,QAAQ,WAAW,QAAQ,MAAM,IAAI,QAAQ,MAAM,CAAC,KAAK;IAC/D,IAAI,SAAS,MAAM,UAAU,EAAE,OAAO;IACtC,OAAO,0CAAmB,UAAU;AACtC;AAEO,SAAS,0CAAsB,IAAI,EAAE,OAAO;IACjD,MAAM,QAAQ,WAAW,QAAQ,MAAM,IAAI,QAAQ,MAAM,CAAC,KAAK;IAC/D,IAAI,SAAS,MAAM,cAAc,EAAE,OAAO;IAC1C,OAAO,0CAAuB,UAAU;AAC1C;AAEO,SAAS,0CAAgB,UAAU,EAAE,OAAO;IACjD,MAAM,mBAAmB,EAAE;IAC3B,MAAM,uBAAuB,EAAE;IAC/B,MAAM,sBAAsB,EAAE;IAC9B,KAAK,MAAM,KAAK,WAAY;QAC1B,IAAI,0CAAsB,GAAG,UAAU,qBAAqB,IAAI,CAAC;aAC5D,IAAI,0CAAkB,GAAG,UAAU,iBAAiB,IAAI,CAAC;aACzD,oBAAoB,IAAI,CAAC;IAChC;IACA,OAAO;0BAAE;8BAAkB;6BAAsB;IAAoB;AACvE;AAEA,SAAS,iCAAW,GAAG;IACrB,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,OAAO;IAChC,OAAO,IAAI,GAAG,CAAC,CAAA,IAAK,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC;AACzD;AAEO,SAAS,yCAAqB,iBAAiB;IACpD,MAAM,QAAQ,CAAC;IACf,IAAI,CAAC,mBAAmB,OAAO;IAC/B,KAAK,MAAM,OAAO,OAAO,MAAM,CAAC,mBAAoB;QAClD,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM;QACzB,KAAK,MAAM,KAAK,IAAK,IAAI,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG;IACtD;IACA,OAAO;AACT;AAEA,SAAS,gCAAU,iBAAiB,EAAE,YAAY,EAAE,KAAK;IACvD,IAAI,CAAC,mBAAmB,OAAO;IAC/B,MAAM,MAAM,iBAAiB,CAAC,aAAa;IAC3C,IAAI,CAAC,KAAK,OAAO;IACjB,OAAO,IAAI,IAAI,CAAC,CAAA,IAAK,EAAE,KAAK,KAAK,UAAU;AAC7C;AAEO,SAAS,0CAAwB,GAAG,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,OAAO;IAC1G,MAAM,OAAO,EAAE;IACf,MAAM,kBAAkB,yCAAqB;IAC7C,MAAM,SAAS,WAAW,QAAQ,UAAU;IAC5C,MAAM,eAAe,WAAW,QAAQ,WAAW,aAAa,WAAW,MAAM,OAAO,QAAQ,CAAC,CAAC;IAClG,KAAK,MAAM,aAAa,iBAAkB;QACxC,MAAM,SAAS,0CAAmB;QAClC,IAAI,CAAC,QAAQ;QACb,MAAM,MAAM,GAAG,CAAC,UAAU;QAC1B,IAAI,QAAQ,aAAa,QAAQ,MAAM;QACvC,IAAI,gBAAiB,CAAA,CAAC,OAAO,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAK,GAAI;QAChE,MAAM,MAAM,eAAe,CAAC,OAAO,YAAY,CAAC;QAChD,MAAM,QAAQ,gCAAU,mBAAmB,OAAO,YAAY,EAAE,OAAO,KAAK;QAC5E,KAAK,IAAI,CAAC;YACR,OAAO;YACP,YAAY,OAAO,YAAY;YAC/B,iBAAiB,MAAO,IAAI,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,KAAM;YAC1E,OAAO,OAAO,KAAK;YACnB,QAAQ,QAAQ,iCAAW,MAAM,MAAM,KAAK,iCAAW,MAAM,cAAc,IAAI;YAC/E,OAAO;QACT;IACF;IACA,OAAO;AACT;AAEO,SAAS,0CAA4B,GAAG,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,OAAO;IAClH,MAAM,kBAAkB,yCAAqB;IAC7C,MAAM,aAAa,IAAI;IACvB,KAAK,MAAM,aAAa,qBAAsB;QAC5C,MAAM,SAAS,0CAAuB;QACtC,IAAI,CAAC,QAAQ;QACb,MAAM,MAAM,GAAG,CAAC,UAAU;QAC1B,IAAI,QAAQ,aAAa,QAAQ,MAAM;QACvC,MAAM,MAAM,GAAG,OAAO,YAAY,CAAC,CAAC,EAAE,OAAO,MAAM,CAAC,CAAC,EAAE,OAAO,MAAM,EAAE;QACtE,IAAI,QAAQ,WAAW,GAAG,CAAC;QAC3B,IAAI,CAAC,OAAO;YACV,QAAQ;gBACN,cAAc,OAAO,YAAY;gBACjC,QAAQ,OAAO,MAAM;gBACrB,QAAQ,OAAO,MAAM;gBACrB,MAAM;gBACN,MAAM;YACR;YACA,WAAW,GAAG,CAAC,KAAK;QACtB;QACA,IAAI,OAAO,IAAI,KAAK,QAAQ,MAAM,IAAI,GAAG;aACpC,MAAM,IAAI,GAAG,KAAK,gBAAgB;IACzC;IACA,MAAM,UAAU,WAAW,QAAQ,WAAW;IAC9C,MAAM,gBAAgB,YAAY,QAAQ,YAAY,aAAa,YAAY,MAAM,OAAO,QAAQ,CAAC,CAAC;IACtG,MAAM,OAAO,EAAE;IACf,KAAK,MAAM,SAAS,WAAW,MAAM,GAAI;QACvC,IAAI,eAAe;YACjB,MAAM,KAAK,CAAC,MAAM,IAAI;YACtB,IAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,KAAK,CAAC,SAAS;QAC7C;QACA,MAAM,MAAM,eAAe,CAAC,MAAM,YAAY,CAAC;QAC/C,MAAM,SAAS,gCAAU,mBAAmB,MAAM,YAAY,EAAE,MAAM,MAAM;QAC5E,MAAM,SAAS,gCAAU,mBAAmB,MAAM,YAAY,EAAE,MAAM,MAAM;QAC5E,KAAK,IAAI,CAAC;YACR,iBAAiB,MAAM,YAAY;YACnC,sBAAsB,MAAO,IAAI,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,KAAM;YAC/E,gBAAgB,SAAS,iCAAW,OAAO,MAAM,KAAK,iCAAW,OAAO,cAAc,IAAI,MAAM,MAAM;YACtG,gBAAgB,SAAS,iCAAW,OAAO,MAAM,KAAK,iCAAW,OAAO,cAAc,IAAI,MAAM,MAAM;YACtG,MAAM,MAAM,IAAI;YAChB,MAAM,MAAM,IAAI;QAClB;IACF;IACA,OAAO;AACT;;;AC7JA,gEAAgE;AACzD,MAAM,4CAAqB;IAChC,eAAe;IACf,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;AACvB;AAGO,MAAM,4CAA2B;IACtC,eAAe;IACf,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;AACvB;AAEO,MAAM,4CAAyB;IACpC;IACA;IACA;IACA;CACD;AAEM,SAAS,0CAAgB,IAAI;IAClC,OAAO,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,2CAAoB;AAClE;AAEO,SAAS,0CAAwB,UAAU;IAChD,MAAM,WAAW,EAAE;IACnB,MAAM,QAAQ,EAAE;IAChB,KAAK,MAAM,KAAK,WACd,IAAI,0CAAgB,IAAI,SAAS,IAAI,CAAC;SACjC,MAAM,IAAI,CAAC;IAElB,OAAO;kBAAE;eAAU;IAAM;AAC3B;AAGO,SAAS,0CAAmB,IAAI,EAAE,UAAU;IACjD,MAAM,QAAQ,CAAC;IACf,KAAK,MAAM,QAAQ,WAAY;QAC7B,MAAM,MAAM,yCAAkB,CAAC,KAAK;QACpC,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI;QAClC,KAAK,MAAM,KAAM,QAAQ,EAAE,CAAG;YAC5B,MAAM,IAAI,KAAK,CAAC,CAAC,KAAK;YACtB,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI;YACvB,KAAK,MAAM,MAAM,EAAG,IAAI,MAAM,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD;IACF;IACA,MAAM,MAAM,CAAC;IACb,KAAK,MAAM,KAAK,OAAO,IAAI,CAAC,OAAQ,GAAG,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE;IAChE,OAAO;AACT;AAEA,SAAS,wCAAkB,MAAM,EAAE,EAAE,EAAE,GAAG;IACxC,IAAI,CAAC,KAAK,OAAO;IACjB,MAAM,QAAQ,CAAC;IACf,IAAI,WAAW,YAAY;QACzB,MAAM,IAAI,IAAI,QAAQ;QACtB,OAAO,AAAC,KAAK,CAAC,CAAC,MAAM,IAAK;IAC5B;IACA,IAAI,WAAW,YAAY;QACzB,MAAM,IAAI,IAAI,QAAQ;QACtB,OAAO,AAAC,KAAK,CAAC,CAAC,MAAM,IAAK;IAC5B;IACA,MAAM,SAAS,IAAI,UAAU,IAAI,IAAI,UAAU,CAAC,OAAO;IACvD,OAAO,AAAC,UAAU,MAAM,CAAC,MAAM,IAAK;AACtC;AAEA,iDAAiD;AACjD,SAAS,wCAAkB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG;IACxD,IAAI,CAAC,QAAQ,OAAO;IACpB,IAAI,WAAW,YAAY;QACzB,MAAM,UAAU,IAAI;QACpB,MAAM,QAAQ,MAAM,OAAO,CAAC,OAAO,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,EAAE;QACnE,MAAM,WAAW,AAAC,OAAO,IAAI,QAAQ,IAAK,CAAC;QAC3C,MAAO,MAAM,MAAM,CAAE;YACnB,MAAM,MAAM,CAAC,MAAM,GAAG;YACtB,IAAI,QAAQ,GAAG,CAAC,MAAM;YACtB,QAAQ,GAAG,CAAC;YACZ,MAAM,SAAS,QAAQ,CAAC,IAAI;YAC5B,IAAI,UAAU,MAAM,OAAO,CAAC,OAAO,IAAI,GAAG;gBACxC,KAAK,MAAM,KAAK,OAAO,IAAI,CAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC;YAChE;QACF;QACA,OAAO,MAAM,IAAI,CAAC;IACpB;IACA,IAAI,WAAW,YAAY;QACzB,MAAM,WAAW,cAAc,OAAO,CAAC,UAAU,EAAE,YAAY,GAAG;QAClE,IAAI,MAAM,YAAY,MAAM,CAAC,SAAS;QACtC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM;YACvB,MAAM,YAAY,IAAI;YACtB,KAAK,MAAM,KAAK,OAAO,IAAI,CAAC,QAAS;gBACnC,IAAI,EAAE,UAAU,CAAC,iBAAiB,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,GACvD,KAAK,MAAM,KAAK,MAAM,CAAC,EAAE,CAAE,UAAU,GAAG,CAAC,CAAC;YAE9C;YACA,MAAM,MAAM,IAAI,CAAC;QACnB;QACA,OAAO,IAAI,MAAM,CAAC,CAAA,IAAK,CAAC,MAAM,CAAC,OAAO,GAAG;IAC3C;IACA,6DAA6D;IAC7D,IAAI,MAAM,OAAO,CAAC,OAAO,SAAS,GAChC,OAAO,OAAO,SAAS,CAAC,MAAM,CAAC,CAAA,IAAK,CAAC,MAAM,CAAC,OAAO,GAAG;IAExD,OAAO,EAAE;AACX;AAEO,SAAS,0CAAa,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;IACvD,IAAI,CAAC,MAAM,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,GAAG,OAAO,EAAE;IACtD,MAAM,cAAc,IAAI;IACxB,IAAI,cAAc;IAClB,KAAK,MAAM,MAAM,IAAK;QACpB,MAAM,MAAM,wCAAkB,QAAQ,IAAI;QAC1C,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;QACzB,cAAc;QACd,MAAM,MAAM,wCAAkB,QAAQ,KAAK,YAAY;QACvD,IAAI,CAAC,KAAK;QACV,KAAK,MAAM,KAAK,IAAK,YAAY,GAAG,CAAC,CAAC;IACxC;IACA,IAAI,CAAC,aAAa,OAAO,IAAI,KAAK;IAClC,OAAO,IAAI,MAAM,CAAC,CAAA,KAAM,CAAC,YAAY,GAAG,CAAC,CAAC;AAC5C;AAEA,SAAS,uCAAiB,MAAM,EAAE,EAAE,EAAE,GAAG;IACvC,MAAM,MAAM,wCAAkB,QAAQ,IAAI;IAC1C,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,OAAO;QAAE,IAAI,OAAO;QAAK,MAAM;IAAG;IAC3D,MAAM,YAAY,IAAI,EAAE,IAAI,OAAO,OAAO,IAAI,EAAE,IAAI,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,GAAG;IACvF,IAAI,OAAO,IAAI,IAAI,IAAI;IACvB,IAAI,WAAW,cAAc,CAAC,MAAM,OAAO,IAAI,YAAY,IAAI;IAC/D,OAAO;QAAE,IAAI;QAAW,MAAM,OAAO;IAAM;AAC7C;AAEO,SAAS,0CAAuB,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;IACjE,MAAM,WAAW,0CAAa,QAAQ,KAAK,YAAY;IACvD,OAAO,SAAS,GAAG,CAAC,CAAA;QAClB,MAAM,EAAE,IAAI,IAAI,QAAE,IAAI,EAAE,GAAG,uCAAiB,QAAQ,IAAI;QACxD,OAAO,OAAO,GAAG,KAAK,CAAC,EAAE,MAAM,GAAG;IACpC,GAAG,IAAI,CAAC;AACV;AAEO,SAAS,yCAAoB,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;IAC9D,MAAM,WAAW,0CAAa,QAAQ,KAAK,YAAY;IACvD,OAAO,SAAS,GAAG,CAAC,CAAA,KAAM,uCAAiB,QAAQ,IAAI;AACzD;AAEA,SAAS,wCAAkB,MAAM,EAAE,GAAG;IACpC,IAAI,CAAC,KAAK,OAAO;IACjB,IAAI,WAAW,MAAM,OAAO,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI;IACzD,IAAI,WAAW,YAAY,OAAO,IAAI,IAAI,IAAI;IAC9C,OAAO,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI;AACtC;AAIO,SAAS,0CAAuB,GAAG,EAAE,cAAc,EAAE,GAAG;IAC7D,MAAM,OAAO,EAAE;IACf,KAAK,MAAM,aAAa,eAAgB;QACtC,MAAM,SAAS,yCAAkB,CAAC,UAAU;QAC5C,IAAI,CAAC,QAAQ;QACb,MAAM,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,GAAG,EAAE;QAC/D,IAAI,CAAC,IAAI,MAAM,EAAE;QACjB,MAAM,WAAW,0CAAa,QAAQ,KAAK,IAAI,QAAQ,EAAE;QACzD,MAAM,YAAY,yCAAwB,CAAC,UAAU,IAAI;QACzD,KAAK,MAAM,MAAM,SAAU;YACzB,MAAM,MAAM,wCAAkB,QAAQ,IAAI;YAC1C,MAAM,EAAE,IAAI,IAAI,QAAE,IAAI,EAAE,GAAG,uCAAiB,QAAQ,IAAI;YACxD,KAAK,IAAI,CAAC;2BACR;gBACA,SAAS;gBACT,WAAW;gBACX,WAAW,wCAAkB,QAAQ;YACvC;QACF;IACF;IACA,OAAO;AACT;;;AFvKA,SAAS,+BAAS,CAAC;IACjB,OAAO,OAAO,GAAG,OAAO,CAAC,aAAa;AACxC;AAEA,SAAS,oCAAc,KAAK;IAC1B,IAAI,UAAU,QAAQ,UAAU,WAAW,OAAO;IAClD,IAAI,MAAM,OAAO,CAAC,QAAQ,OAAO,MAAM,GAAG,CAAC,qCAAe,IAAI,CAAC;IAC/D,IAAI,OAAO,UAAU,UAAU,OAAO,KAAK,SAAS,CAAC;IACrD,OAAO,+BAAS;AAClB;AAEA,SAAS,wCAAkB,GAAG,EAAE,IAAI,EAAE,WAAW;IAC/C,IAAI,CAAA,GAAA,yCAAc,EAAE,OAAO;QACzB,MAAM,SAAS,CAAA,GAAA,yCAAiB,CAAC,CAAC,KAAK;QACvC,MAAM,MAAM,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,EAAE;QACrD,OAAO,+BAAS,CAAA,GAAA,yCAAqB,EAAE,QAAQ,KAAK,IAAI,QAAQ,EAAE;IACpE;IACA,OAAO,oCAAc,GAAG,CAAC,KAAK;AAChC;AAEO,SAAS,0CAAe,UAAU,EAAE,OAAO;IAChD,OAAO,WAAW,GAAG,CAAC,CAAA;QACpB,MAAM,IAAI,WAAW,QAAQ,MAAM,IAAI,QAAQ,MAAM,CAAC,EAAE;QACxD,IAAI,CAAC,GAAG,OAAO;QACf,OAAO,EAAE,SAAS,IAAI,EAAE,KAAK;IAC/B;AACF;AAEO,SAAS,0CAAY,GAAG,EAAE,UAAU,EAAE,WAAW;IACtD,OAAO,WAAW,GAAG,CAAC,CAAA,IAAK,wCAAkB,KAAK,GAAG;AACvD;AAEA,MAAM,uCAAiB,CAAA,GAAA,yCAAuB,EAAE,GAAG,CAAC,IAAM;AAC1D,MAAM,uCAAiB,CAAA,GAAA,yCAA2B,EAAE,GAAG,CAAC,IAAM;AAC9D,MAAM,sCAAgB,CAAA,GAAA,yCAAqB,EAAE,GAAG,CAAC,IAAM;AAEvD,SAAS,qCAAe,EAAE;IACxB,OAAO;QACL,+BAAS,GAAG,UAAU;QACtB,+BAAS,GAAG,eAAe;QAC3B,+BAAS,GAAG,KAAK;QACjB,+BAAS,GAAG,MAAM;QAClB,+BAAS,GAAG,KAAK;KAClB;AACH;AAEA,SAAS,qCAAe,EAAE;IACxB,OAAO;QACL,+BAAS,GAAG,eAAe;QAC3B,+BAAS,GAAG,oBAAoB;QAChC,+BAAS,GAAG,cAAc;QAC1B,+BAAS,GAAG,cAAc;QAC1B,+BAAS,GAAG,IAAI;QAChB,+BAAS,GAAG,IAAI;KACjB;AACH;AAEA,SAAS,oCAAc,EAAE;IACvB,OAAO;QACL,+BAAS,GAAG,SAAS;QACrB,+BAAS,GAAG,OAAO;QACnB,+BAAS,GAAG,SAAS;QACrB,+BAAS,GAAG,SAAS;KACtB;AACH;AAEA,SAAS,4CAAsB,mBAAmB;IAChD,MAAM,iBAAiB,EAAE;IACzB,MAAM,cAAc,EAAE;IACtB,KAAK,MAAM,KAAK,oBACd,IAAI,CAAA,GAAA,yCAAc,EAAE,IAAI,eAAe,IAAI,CAAC;SACvC,YAAY,IAAI,CAAC;IAExB,OAAO;wBAAE;qBAAgB;IAAY;AACvC;AAEA,SAAS,wCAAkB,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW;IAC/G,MAAM,oBAAoB,eAAe,YAAY,iBAAiB;IACtE,MAAM,oBAAoB,eAAe,YAAY,iBAAiB;IACtE,MAAM,UAAU,eAAe,YAAY,OAAO;IAClD,MAAM,UAAU,iBAAiB,MAAM,GAAG;IAC1C,MAAM,UAAU,qBAAqB,MAAM,GAAG;IAC9C,MAAM,SAAS,eAAe,MAAM,GAAG;IACvC,MAAM,OAAO,EAAE;IACf,KAAK,MAAM,OAAQ,QAAQ,EAAE,CAAG;QAC9B,MAAM,YAAY,0CAAY,KAAK,aAAa;QAChD,MAAM,UAAU,SACZ,CAAA,GAAA,yCAAqB,EAAE,KAAK,gBAAgB,eAC5C,EAAE;QACN,MAAM,WAAW,UACb,CAAA,GAAA,yCAAsB,EAAE,KAAK,kBAAkB,mBAAmB,mBAAmB,WACrF,EAAE;QACN,MAAM,WAAW,UACb,CAAA,GAAA,yCAA0B,EAAE,KAAK,sBAAsB,mBAAmB,mBAAmB,WAC7F,EAAE;QACN,MAAM,WAAW,QAAQ,MAAM,GAAG,QAAQ,GAAG,CAAC,uCAAkB,SAAS;YAAC;SAAc,GAAG;YAAC;SAAK;QACjG,MAAM,YAAY,SAAS,MAAM,GAAG,SAAS,GAAG,CAAC,wCAAmB,UAAU;YAAC;SAAe,GAAG;YAAC;SAAK;QACvG,MAAM,YAAY,SAAS,MAAM,GAAG,SAAS,GAAG,CAAC,wCAAmB,UAAU;YAAC;SAAe,GAAG;YAAC;SAAK;QACvG,KAAK,MAAM,KAAK,SAAU;YACxB,KAAK,MAAM,KAAK,UACd,KAAK,MAAM,KAAK,UAAW;gBACzB,MAAM,MAAM;uBAAI;iBAAU;gBAC1B,IAAI,GAAG,IAAI,IAAI,IAAI;gBACnB,IAAI,GAAG,IAAI,IAAI,IAAI;gBACnB,IAAI,GAAG,IAAI,IAAI,IAAI;gBACnB,KAAK,IAAI,CAAC;YACZ;QAEJ;IACF;IACA,OAAO;AACT;AAEO,SAAS,0CAAM,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW;IAC1D,MAAM,oBAAE,gBAAgB,wBAAE,oBAAoB,uBAAE,mBAAmB,EAAE,GAAG,CAAA,GAAA,yCAAc,EAAE,YAAY;IACpG,MAAM,kBAAE,cAAc,eAAE,WAAW,EAAE,GAAG,4CAAsB;IAE9D,IAAI,iBAAiB,MAAM,KAAK,KAAK,qBAAqB,MAAM,KAAK,KAAK,eAAe,MAAM,KAAK,GAAG;QACrG,MAAM,SAAS,0CAAe,YAAY,SAAS,IAAI,CAAC;QACxD,MAAM,OAAO,AAAC,CAAA,QAAQ,EAAE,AAAD,EAAG,GAAG,CAAC,CAAA,IAAK,0CAAY,GAAG,YAAY,aAAa,IAAI,CAAC;QAChF,OAAO;YAAC;eAAW;SAAK,CAAC,IAAI,CAAC;IAChC;IAEA,MAAM,SAAS;WACV,0CAAe,aAAa;WAC3B,eAAe,MAAM,GAAG,CAAA,GAAA,yCAAqB,IAAI,EAAE;WACnD,iBAAiB,MAAM,GAAG,CAAA,GAAA,yCAAuB,IAAI,EAAE;WACvD,qBAAqB,MAAM,GAAG,CAAA,GAAA,yCAA2B,IAAI,EAAE;KACpE,CAAC,IAAI,CAAC;IAEP,MAAM,OAAO,wCAAkB,MAAM,aAAa,gBAAgB,kBAAkB,sBAAsB;IAC1G,OAAO;QAAC;WAAW,KAAK,GAAG,CAAC,CAAA,IAAK,EAAE,IAAI,CAAC;KAAO,CAAC,IAAI,CAAC;AACvD;AAEO,SAAS,0CAAe,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW;IACnE,MAAM,oBAAE,gBAAgB,wBAAE,oBAAoB,uBAAE,mBAAmB,EAAE,GAAG,CAAA,GAAA,yCAAc,EAAE,YAAY;IACpG,MAAM,kBAAE,cAAc,eAAE,WAAW,EAAE,GAAG,4CAAsB;IAE9D,IAAI,iBAAiB,MAAM,KAAK,KAAK,qBAAqB,MAAM,KAAK,KAAK,eAAe,MAAM,KAAK,GAClG,OAAO;QACL,QAAQ,0CAAe,YAAY;QACnC,YAAY,WAAW,KAAK;QAC5B,MAAM,AAAC,CAAA,QAAQ,EAAE,AAAD,EAAG,GAAG,CAAC,CAAA,IAAK,0CAAY,GAAG,YAAY;IACzD;IAGF,MAAM,SAAS;WACV,0CAAe,aAAa;WAC3B,eAAe,MAAM,GAAG,CAAA,GAAA,yCAAqB,IAAI,EAAE;WACnD,iBAAiB,MAAM,GAAG,CAAA,GAAA,yCAAuB,IAAI,EAAE;WACvD,qBAAqB,MAAM,GAAG,CAAA,GAAA,yCAA2B,IAAI,EAAE;KACpE;IACD,MAAM,aAAa;WACd;WACC,eAAe,MAAM,GAAG,CAAA,GAAA,yCAAqB,IAAI,EAAE;WACnD,iBAAiB,MAAM,GAAG,CAAA,GAAA,yCAAuB,IAAI,EAAE;WACvD,qBAAqB,MAAM,GAAG,CAAA,GAAA,yCAA2B,IAAI,EAAE;KACpE;IACD,MAAM,OAAO,wCAAkB,MAAM,aAAa,gBAAgB,kBAAkB,sBAAsB;IAC1G,OAAO;gBAAE;oBAAQ;cAAY;IAAK;AACpC;AAEO,SAAS,0CAAW,IAAI,EAAE,UAAU,EAAE,WAAW;IACtD,OAAO,AAAC,CAAA,QAAQ,EAAE,AAAD,EAAG,GAAG,CAAC,CAAA;QACtB,MAAM,MAAM,CAAC;QACb,KAAK,MAAM,KAAK,WACd,IAAI,CAAA,GAAA,yCAAc,EAAE,IAAI;YACtB,MAAM,SAAS,CAAA,GAAA,yCAAiB,CAAC,CAAC,EAAE;YACpC,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE;YAC3C,GAAG,CAAC,EAAE,GAAG,CAAA,GAAA,wCAAkB,EAAE,QAAQ,KAAK,EAAE,QAAQ,EAAE;QACxD,OACE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,EAAE,GAAG;QAGzC,OAAO;IACT;AACF;AAEO,SAAS,0CAAO,IAAI,EAAE,UAAU,EAAE,WAAW;IAClD,OAAO,KAAK,SAAS,CAAC,0CAAW,MAAM,YAAY,cAAc,MAAM;AACzE;;;;ADjMA,MAAM,kCAAY;AAElB,SAAS,qCAAe,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IACjD,MAAM,SAAS;QACb,CAAC,EAAE,EAAE,GAAG;QACR,CAAC,KAAK,EAAE,MAAM;QACd,CAAC,MAAM,EAAE,OAAO;QAChB;KACD;IACD,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,GAAG,EAAE,mBAAmB,KAAK;IAClD,OAAO,GAAG,IAAI,QAAQ,EAAE,OAAO,IAAI,CAAC,OAAO,IAAI;AACjD;AAEA,SAAS,yCAAmB,IAAI,EAAE,QAAQ;IACxC,MAAM,MAAM,IAAI,eAAe,CAAC;IAChC,MAAM,IAAI,SAAS,aAAa,CAAC;IACjC,EAAE,IAAI,GAAG;IACT,EAAE,QAAQ,GAAG;IACb,SAAS,IAAI,CAAC,WAAW,CAAC;IAC1B,EAAE,KAAK;IACP,SAAS,IAAI,CAAC,WAAW,CAAC;IAC1B,WAAW,IAAM,IAAI,eAAe,CAAC,MAAM;AAC7C;AAEO,eAAe,0CAAoB,YAAE,QAAQ,SAAE,KAAK,aAAE,SAAS,UAAE,MAAM,gBAAE,YAAY,EAAE;IAC5F,MAAM,MAAM,MAAM,gBAAgB;IAClC,MAAM,IAAI,MAAM,+BAA+B;IAC/C,MAAM,IAAI,MAAM,oBAAoB;IACpC,MAAM,IAAI,MAAM,iBAAiB,MAAM,CAAC;IACxC,MAAM,OAAO,OAAO,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA,MAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;IAC/E,MAAM,KAAK,KAAK,MAAM,GAAG,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG;IACjE,MAAM,SAAS,MAAM,4BAA4B;IACjD,MAAM,KAAK,OAAO,IAAI,CAAC;IACvB,MAAM,SAAS,MAAM,oBAAoB;IACzC,MAAM,UAAU,MAAM,kBAAkB;IACxC,MAAM,oBAAoB,MAAM,uBAAuB;IACvD,MAAM,oBAAoB,MAAM,uBAAuB;IACvD,MAAM,iBAAiB,OAAO,MAAM,CAAC,CAAA,IAAK,CAAA,GAAA,yCAAiB,CAAC,CAAC,EAAE;IAE/D,MAAM,UAAU,MAAM,qBAAqB,IAAI,MAAM,qBAAqB;IAC1E,MAAM,mBAAmB,IAAO,CAAA;+BAC9B;+BACA;YACA,UAAU,MAAM,qBAAqB;YACrC,UAAU,MAAM,qBAAqB;YACrC,YAAY,MAAM,gBAAgB;qBAClC;QACF,CAAA;IAEA,MAAM,wBAAwB,OAAO;QACnC,IAAI,eAAe,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,GAAG;QACtD,MAAM,WAAW,CAAA,GAAA,yCAAiB,EAAE,MAAM;QAC1C,MAAM,QAAQ,EAAE;QAChB,KAAK,MAAM,CAAC,QAAQ,IAAI,IAAI,OAAO,OAAO,CAAC,UAAW;YACpD,IAAI,CAAC,IAAI,MAAM,EAAE;YACjB,IAAI,WAAW,YAAY;YAC3B,IAAI,WAAW,YAAY;gBACzB,MAAM,gBAAgB,MAAM,qBAAqB,MAAM,CAAC;gBACxD,MAAM,UAAU,IAAI,MAAM,CAAC,CAAA,KAAM,CAAC,cAAc,cAAc,CAAC;gBAC/D,IAAI,QAAQ,MAAM,EAAE,MAAM,wBAAwB,CAAC;gBACnD;YACF;YACA,MAAM,IAAI,MAAM,uBAAuB,CAAC,QAAQ;YAChD,IAAI,KAAK,OAAO,EAAE,IAAI,KAAK,YAAY,MAAM,IAAI,CAAC;QACpD;QACA,IAAI,MAAM,MAAM,EAAE,MAAM,QAAQ,GAAG,CAAC;IACtC;IAEA,MAAM,YAAY,CAAC,MAAQ,MAAM,KAAK;oBAAE;QAAO,GAAG,IAAI,CAAC,CAAA;YACrD,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE;YAC7C,OAAO,EAAE,IAAI;QACf;IAEA,MAAM,WAAW,qCAAe,KAAK,GAAG,MAAM,GAAG,GAAG;IACpD,MAAM,YAAY,MAAM,UAAU;IAClC,MAAM,QAAQ,AAAC,aAAa,UAAU,QAAQ,IAAI,UAAU,QAAQ,CAAC,QAAQ,IAAK;IAElF,SAAS;QAAE,MAAM;QAA6B,SAAS;uBAAE;mBAAW;QAAM;IAAE;IAE5E,IAAI,UAAU,GAAG;QACf,SAAS;YAAE,MAAM;YAA+B,SAAS;2BAAE;gBAAW,SAAS;YAAE;QAAE;QACnF;IACF;IAEA,MAAM,YAAY,EAAE;IACpB,MAAM,WAAW,EAAE;IACnB,IAAI,WAAW;IAEf,IAAI,WAAW,OAAO;QACpB,MAAM,UAAE,MAAM,EAAE,GAAG,CAAA,GAAA,yCAAa,EAAE,EAAE,EAAE,QAAQ,SAAS;QACvD,UAAU,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;IACrC;IAEA,IAAI,QAAQ;IACZ,MAAO,QAAQ,MAAO;QACpB,IAAI,gBAAgB;YAClB,SAAS;gBAAE,MAAM;gBAA+B,SAAS;+BAAE;gBAAU;YAAE;YACvE;QACF;QACA,MAAM,MAAM,qCAAe,KAAK,GAAG,IAAI,iCAAW,OAAO;QACzD,MAAM,OAAO,MAAM,UAAU;QAC7B,MAAM,OAAO,AAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAK,EAAE;QAChE,IAAI,KAAK,MAAM,KAAK,GAAG;QAEvB,MAAM,sBAAsB;QAC5B,MAAM,cAAc;QAEpB,IAAI,WAAW,OAAO;YACpB,MAAM,QAAE,IAAI,EAAE,GAAG,CAAA,GAAA,yCAAa,EAAE,MAAM,QAAQ,SAAS;YACvD,KAAK,MAAM,OAAO,KAAM,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;QAC1D,OAAO;YACL,MAAM,OAAO,CAAA,GAAA,yCAAS,EAAE,MAAM,QAAQ;YACtC,KAAK,MAAM,KAAK,KAAM,SAAS,IAAI,CAAC;QACtC;QAEA,SAAS,KAAK,MAAM;QACpB,WAAW;QACX,SAAS;YAAE,MAAM;YAA8B,SAAS;2BAAE;0BAAW;YAAS;QAAE;IAClF;IAEA,IAAI,gBAAgB;QAClB,SAAS;YAAE,MAAM;YAA+B,SAAS;2BAAE;YAAU;QAAE;QACvE;IACF;IAEA,MAAM,QAAQ,IAAI,OAAO,WAAW,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,SAAS;IACrE,IAAI;IACJ,IAAI;IACJ,IAAI,WAAW,OAAO;QACpB,OAAO,IAAI,KAAK,WAAW;YAAE,MAAM;QAA4B;QAC/D,WAAW,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC1C,OAAO;QACL,OAAO,IAAI,KAAK;YAAC,KAAK,SAAS,CAAC,UAAU,MAAM;SAAG,EAAE;YAAE,MAAM;QAAmB;QAChF,WAAW,CAAC,eAAe,EAAE,MAAM,KAAK,CAAC;IAC3C;IAEA,yCAAmB,MAAM;IACzB,SAAS;QAAE,MAAM;QAA+B,SAAS;uBAAE;YAAW,SAAS;QAAS;IAAE;AAC5F;;;AD1IA,MAAM,uCAAiB;IAAC;IAAM;IAAQ;IAAe;CAAU;AAC/D,MAAM,qCAAe;AACrB,MAAM,4CAAsB;AAE5B,SAAS,8CAAwB,KAAK;IACpC,MAAM,IAAI,MAAM,+BAA+B;IAC/C,MAAM,IAAI,MAAM,oBAAoB;IACpC,MAAM,IAAI,MAAM,iBAAiB,MAAM,CAAC;IACxC,MAAM,OAAO,OAAO,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA,MAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;IAC/E,OAAO,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM;AACxC;AAEA,IAAI,sCAAgB;AACpB,IAAI,yCAAmB;AACvB,IAAI,0CAAoB;AACxB,IAAI,kDAA4B;AAEhC,MAAM,kCAAY,CAAC,UAAa,CAAA;QAAE,GAAG,OAAO;QAAE,QAAQ;IAAQ,CAAA;AAE9D,MAAM,iCAAW;IACf,MAAM;IAEN,YAAY;QACV,MAAM,eAAe;YACnB,gBAAgB;YAChB,QAAQ;YACR,SAAS;gBAAE,YAAY;gBAAK,aAAa;YAAK;YAC9C,SAAS;gBAAE,QAAQ;gBAAS,MAAM;gBAAM,OAAO;gBAAM,WAAW;gBAAG,WAAW;YAAK;YACnF,UAAU;gBAAE,QAAQ;gBAAQ,UAAU;gBAAG,OAAO;gBAAG,OAAO;gBAAM,WAAW;YAAE;QAC/E;QACA,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAE,IAAI,WAAE,OAAO,EAAE;YAC7C,OAAQ;gBACN,KAAK;oBAA0B;wBAC7B,MAAM,MAAM,MAAM,cAAc,CAAC,OAAO,CAAC;wBACzC,MAAM,iBAAiB,QAAQ,KAC3B;+BAAI,MAAM,cAAc;4BAAE;yBAAQ,GAClC,MAAM,cAAc,CAAC,MAAM,CAAC,CAAA,IAAK,MAAM;wBAC3C,OAAO;4BAAE,GAAG,KAAK;4CAAE;wBAAe;oBACpC;gBACA,KAAK;oBACH,OAAO;wBAAE,GAAG,KAAK;wBAAE,gBAAgB;oBAAQ;gBAC7C,KAAK;oBAA4B;wBAC/B,MAAM,SAAE,KAAK,YAAE,QAAQ,EAAE,GAAG;wBAC5B,IAAI,CAAC,MAAM,OAAO,CAAC,UAAU,MAAM,MAAM,KAAK,GAAG,OAAO;wBACxD,IAAI,UAAU;4BACZ,MAAM,WAAW,IAAI,IAAI,MAAM,cAAc;4BAC7C,MAAM,YAAY,MAAM,MAAM,CAAC,CAAA,IAAK,CAAC,SAAS,GAAG,CAAC;4BAClD,IAAI,UAAU,MAAM,KAAK,GAAG,OAAO;4BACnC,OAAO;gCAAE,GAAG,KAAK;gCAAE,gBAAgB;uCAAI,MAAM,cAAc;uCAAK;iCAAU;4BAAC;wBAC7E;wBACA,MAAM,SAAS,IAAI,IAAI;wBACvB,MAAM,OAAO,MAAM,cAAc,CAAC,MAAM,CAAC,CAAA,IAAK,CAAC,OAAO,GAAG,CAAC;wBAC1D,IAAI,KAAK,MAAM,KAAK,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO;wBACxD,OAAO;4BAAE,GAAG,KAAK;4BAAE,gBAAgB;wBAAK;oBAC1C;gBACA,KAAK;oBACH,OAAO;wBAAE,GAAG,KAAK;wBAAE,QAAQ;oBAAQ;gBACrC,KAAK;oBACH,OAAO;wBAAE,GAAG,KAAK;wBAAE,SAAS;4BAAE,GAAG,MAAM,OAAO;4BAAE,GAAI,WAAW,CAAC,CAAC;wBAAE;oBAAE;gBACvE,KAAK;oBACH,OAAO;wBAAE,GAAG,KAAK;wBAAE,gBAAgB,EAAE;oBAAC;gBACxC,KAAK;oBACH,OAAO;wBAAE,GAAG,KAAK;wBAAE,SAAS,gCAAU,MAAM,OAAO;oBAAE;gBAEvD,KAAK;oBACH,OAAO;wBACL,GAAG,KAAK;wBACR,SAAS;4BAAE,GAAG,MAAM,OAAO;4BAAE,QAAQ;4BAAW,WAAW,QAAQ,SAAS;4BAAE,OAAO;4BAAM,WAAW,QAAQ,SAAS;wBAAC;oBAC1H;gBACF,KAAK;oBACH,IAAI,QAAQ,SAAS,KAAK,MAAM,OAAO,CAAC,SAAS,EAAE,OAAO;oBAC1D,OAAO;wBACL,GAAG,KAAK;wBACR,SAAS;4BAAE,QAAQ;4BAAS,MAAM,QAAQ,IAAI;4BAAE,OAAO;4BAAM,WAAW,QAAQ,SAAS;4BAAE,WAAW,MAAM,OAAO,CAAC,SAAS;wBAAC;oBAChI;gBACF,KAAK;oBACH,IAAI,QAAQ,SAAS,KAAK,MAAM,OAAO,CAAC,SAAS,EAAE,OAAO;oBAC1D,OAAO;wBACL,GAAG,KAAK;wBACR,SAAS;4BAAE,GAAG,MAAM,OAAO;4BAAE,QAAQ;4BAAS,OAAO,QAAQ,KAAK;wBAAC;oBACrE;gBAEF,KAAK;oBACH,OAAO;wBACL,GAAG,KAAK;wBACR,UAAU;4BAAE,QAAQ;4BAAa,UAAU;4BAAG,OAAO;4BAAG,OAAO;4BAAM,WAAW,QAAQ,SAAS;wBAAC;oBACpG;gBACF,KAAK;oBACH,IAAI,QAAQ,SAAS,KAAK,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO;oBAC3D,OAAO;wBACL,GAAG,KAAK;wBACR,UAAU;4BAAE,GAAG,MAAM,QAAQ;4BAAE,QAAQ;4BAAe,OAAO,QAAQ,KAAK;wBAAC;oBAC7E;gBACF,KAAK;oBACH,IAAI,QAAQ,SAAS,KAAK,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO;oBAC3D,OAAO;wBACL,GAAG,KAAK;wBACR,UAAU;4BAAE,GAAG,MAAM,QAAQ;4BAAE,UAAU,QAAQ,QAAQ;wBAAC;oBAC5D;gBACF,KAAK;oBACH,IAAI,QAAQ,SAAS,KAAK,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO;oBAC3D,OAAO;wBACL,GAAG,KAAK;wBACR,UAAU;4BAAE,GAAG,MAAM,QAAQ;4BAAE,QAAQ;4BAAQ,UAAU,QAAQ,OAAO,IAAI,MAAM,QAAQ,CAAC,QAAQ;wBAAC;oBACtG;gBACF,KAAK;oBACH,IAAI,QAAQ,SAAS,KAAK,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO;oBAC3D,OAAO;wBACL,GAAG,KAAK;wBACR,UAAU;4BAAE,GAAG,MAAM,QAAQ;4BAAE,QAAQ;wBAAY;oBACrD;gBACF,KAAK;oBACH,IAAI,QAAQ,SAAS,KAAK,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO;oBAC3D,OAAO;wBACL,GAAG,KAAK;wBACR,UAAU;4BAAE,GAAG,MAAM,QAAQ;4BAAE,QAAQ;4BAAS,OAAO,QAAQ,KAAK;wBAAC;oBACvE;gBACF,KAAK;oBACH,OAAO;wBACL,GAAG,KAAK;wBACR,UAAU;4BAAE,QAAQ;4BAAQ,UAAU;4BAAG,OAAO;4BAAG,OAAO;4BAAM,WAAW,MAAM,QAAQ,CAAC,SAAS;wBAAC;oBACtG;gBACF;oBACE,OAAO;YACX;QACF;IACF;IAEA,uBAAuB,CAAA,YAAa,CAAC,YAAE,QAAQ,EAAE,GAC/C,SAAS;gBAAE,MAAM;gBAA0B,SAAS;YAAU;IAEhE,yBAAyB,CAAA,YAAa,CAAC,YAAE,QAAQ,EAAE,GACjD,SAAS;gBAAE,MAAM;gBAA6B,SAAS;YAAU;IAEnE,yBAAyB,CAAC,OAAO,WAAa,CAAC,YAAE,QAAQ,EAAE,GACzD,SAAS;gBAAE,MAAM;gBAA4B,SAAS;2BAAE;8BAAO;gBAAS;YAAE;IAE5E,qBAAqB,CAAA,MAAO,CAAC,YAAE,QAAQ,EAAE,GACvC,SAAS;gBAAE,MAAM;gBAAuB,SAAS;YAAI;IAEvD,sBAAsB,CAAA,UAAW,CAAC,YAAE,QAAQ,EAAE,GAC5C,SAAS;gBAAE,MAAM;gBAAwB,SAAS;YAAQ;IAE5D,uBAAuB,IAAM,CAAC,YAAE,QAAQ,EAAE,GACxC,SAAS;gBAAE,MAAM;YAA0B;IAE7C,wBAAwB,IAAM,CAAC,YAAE,QAAQ,SAAE,KAAK,EAAE;YAChD,aAAa;YACb,MAAM,YAAY,EAAE;YACpB,MAAM,YAAY,8CAAwB;YAC1C,SAAS;gBAAE,MAAM;gBAA4B,SAAS;+BAAE;+BAAW;gBAAU;YAAE;YAC/E,sCAAgB,WAAW;gBACzB,IAAI,cAAc,wCAAkB;gBAEpC,MAAM,MAAM,MAAM,gBAAgB;gBAClC,MAAM,IAAI,MAAM,+BAA+B;gBAC/C,MAAM,IAAI,MAAM,oBAAoB;gBACpC,MAAM,IAAI,MAAM,iBAAiB,MAAM,CAAC;gBACxC,MAAM,OAAO,OAAO,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA,MAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;gBAC/E,MAAM,KAAK,KAAK,MAAM,GAAG,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG;gBACjE,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,EAAE,WAAW,EAAE,qCAAe,IAAI;gBAEjE,MAAM,KACH,IAAI,CAAC,CAAA,IAAK,EAAE,IAAI,IAChB,IAAI,CAAC,CAAA;oBACJ,MAAM,OAAO,AAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAK,EAAE;oBAChE,SAAS;wBAAE,MAAM;wBAA8B,SAAS;uCAAE;4BAAW,MAAM;wBAAK;oBAAE;gBACpF,GACC,KAAK,CAAC,CAAA;oBACL,SAAS;wBAAE,MAAM;wBAA2B,SAAS;uCAAE;4BAAW,OAAO,OAAO;wBAAK;oBAAE;gBACzF;YACJ,GAAG;QACL;IAEA,sBAAsB,CAAA,GAAA,kCAAa,EACjC,kBACA,8BACA,mCACA,wBACA,qBACA,CAAC,KAAK,eAAe,GAAG,GAAG;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE;QAC1B,IAAI,kBAAkB,QAAQ;QAC9B,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;QACtC,MAAM,OAAO,KAAK,CAAC;QACnB,MAAM,OAAO,OAAO,IAAI,CAAC,AAAC,KAAK,EAAE,MAAM,IAAK,CAAC,GAAG,MAAM,CAAC,CAAA,MAAO,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;QAC5F,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC,MAAM;QAC3C,IAAI,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QACrE,OAAO;YAAE,eAAe;QAAyB;IACnD;IAGF,yBAAyB,IAAM,CAAC,YAAE,QAAQ,SAAE,KAAK,EAAE;YACjD,IAAI,iDACF,gDAA0B,KAAK;YAEjC,MAAM,YAAY,EAAE;YACpB,MAAM,aAAa,IAAI;YACvB,kDAA4B;YAC5B,SAAS;gBAAE,MAAM;gBAA+B,SAAS;+BAAE;gBAAU;YAAE;YAEvE,MAAM,eAAe,IAAM,cAAc;YAEzC,CAAA,GAAA,yCAAkB,EAAE;0BAClB;uBACA;2BACA;gBACA,QAAQ,WAAW,MAAM;8BACzB;YACF,GAAG,KAAK,CAAC,CAAA;gBACP,IAAI,OAAO,IAAI,IAAI,KAAK,cACtB,SAAS;oBAAE,MAAM;oBAA+B,SAAS;mCAAE;oBAAU;gBAAE;qBAEvE,SAAS;oBAAE,MAAM;oBAA4B,SAAS;mCAAE;wBAAW,OAAO,OAAO;oBAAK;gBAAE;YAE5F;QACF;IAEA,0BAA0B,IAAM,CAAC,YAAE,QAAQ,EAAE;YAC3C,IAAI,iDAA2B;gBAC7B,gDAA0B,KAAK;gBAC/B,kDAA4B;YAC9B;YACA;QACF;IAEA,yBAAyB,IAAM,CAAC,YAAE,QAAQ,EAAE,GAC1C,SAAS;gBAAE,MAAM;YAA0B;IAE7C,gBAAgB,CAAA,QAAS,MAAM,QAAQ;IACvC,8BAA8B,CAAA,QAAS,MAAM,QAAQ,CAAC,cAAc;IACpE,sBAAsB,CAAA,QAAS,MAAM,QAAQ,CAAC,MAAM;IACpD,uBAAuB,CAAA,QAAS,MAAM,QAAQ,CAAC,OAAO;IACtD,uBAAuB,CAAA,QAAS,MAAM,QAAQ,CAAC,OAAO;IACtD,wBAAwB,CAAA,QAAS,MAAM,QAAQ,CAAC,QAAQ;AAC1D;IAEA,2CAAe;;;AKhPf,MAAM,iCAAW;IAAC;IAAM;IAAM;IAAM;CAAU;AAC9C,MAAM,mCAAa;AAEnB,MAAM,iCAAW,CAAC;AAElB,MAAM,mCAAa;IACjB,MAAM;IACN,YAAY;QACV,MAAM,eAAe;YAAE,IAAI,CAAC;YAAG,IAAI,CAAC;YAAG,IAAI,CAAC;YAAG,SAAS,CAAC;QAAE;QAC3D,OAAO,CAAC,QAAQ,YAAY,EAAE,QAAE,IAAI,WAAE,OAAO,EAAE;YAC7C,OAAQ;gBACN,KAAK;oBAA8B;wBACjC,MAAM,OAAE,GAAG,OAAE,GAAG,EAAE,GAAG;wBACrB,MAAM,SAAS;4BAAE,GAAG,KAAK,CAAC,IAAI;wBAAC;wBAC/B,KAAK,MAAM,MAAM,IACf,IAAI,CAAC,OAAO,cAAc,CAAC,KAAK,MAAM,CAAC,GAAG,GAAG;wBAE/C,OAAO;4BAAE,GAAG,KAAK;4BAAE,CAAC,IAAI,EAAE;wBAAO;oBACnC;gBACA,KAAK;oBAA6B;wBAChC,MAAM,OAAE,GAAG,WAAE,OAAO,EAAE,GAAG;wBACzB,OAAO;4BAAE,GAAG,KAAK;4BAAE,CAAC,IAAI,EAAE;gCAAE,GAAG,KAAK,CAAC,IAAI;gCAAE,GAAG,OAAO;4BAAC;wBAAE;oBAC1D;gBACA;oBACE,OAAO;YACX;QACF;IACF;IAEA,yBAAyB,CAAC,KAAK,MAAQ,CAAC,YAAE,QAAQ,SAAE,KAAK,EAAE;YACzD,IAAI,CAAC,+BAAS,QAAQ,CAAC,MAAM,OAAO,QAAQ,OAAO;YACnD,IAAI,CAAC,MAAM,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,GAAG,OAAO,QAAQ,OAAO;YACnE,MAAM,WAAW,MAAM,gBAAgB,EAAE,CAAC,IAAI,IAAI,CAAC;YACnD,MAAM,UAAU,EAAE;YAClB,KAAK,MAAM,MAAM,IAAK;gBACpB,IAAI,MAAM,MAAM;gBAChB,MAAM,QAAQ,CAAC;gBACf,IAAI,CAAC,SAAS,cAAc,CAAC,UAAU,CAAE,CAAA,8BAAQ,CAAC,IAAI,IAAI,8BAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK,GAC/E,QAAQ,IAAI,CAAC;YAEjB;YACA,IAAI,QAAQ,MAAM,KAAK,GAAG,OAAO,QAAQ,OAAO;YAEhD,IAAI,CAAC,8BAAQ,CAAC,IAAI,EAAE,8BAAQ,CAAC,IAAI,GAAG,IAAI;YACxC,KAAK,MAAM,MAAM,QAAS,8BAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5C,SAAS;gBAAE,MAAM;gBAA8B,SAAS;yBAAE;oBAAK,KAAK;gBAAQ;YAAE;YAE9E,MAAM,MAAM,MAAM,gBAAgB;YAClC,MAAM,UAAU,EAAE;YAClB,IAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,MAAM,EAAE,KAAK,iCACvC,QAAQ,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,IAAI;YAGpC,MAAM,aAAa,CAAC;gBAClB,MAAM,SAAS,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC;gBACjE,OAAO,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,QAAQ,EAAE,OAAO,MAAM,EAAE,MAAM,MAAM,GAAG,GAAG,EACnE,IAAI,CAAC,CAAA,IAAK,EAAE,IAAI,IAChB,IAAI,CAAC,CAAA;oBACJ,MAAM,UAAU,CAAC;oBACjB,KAAK,MAAM,KAAM,QAAQ,EAAE,CACzB,IAAI,KAAK,EAAE,GAAG,IAAI,MAAM,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG;oBAE3C,KAAK,MAAM,MAAM,MACf,IAAI,CAAC,QAAQ,cAAc,CAAC,KAAK,OAAO,CAAC,GAAG,GAAG;wBAAE,KAAK;wBAAI,SAAS;oBAAK;oBAE1E,SAAS;wBAAE,MAAM;wBAA6B,SAAS;iCAAE;qCAAK;wBAAQ;oBAAE;gBAC1E,GACC,KAAK,CAAC;oBACL,MAAM,UAAU,CAAC;oBACjB,KAAK,MAAM,MAAM,MAAO,OAAO,CAAC,GAAG,GAAG;wBAAE,KAAK;wBAAI,SAAS;oBAAK;oBAC/D,SAAS;wBAAE,MAAM;wBAA6B,SAAS;iCAAE;qCAAK;wBAAQ;oBAAE;gBAC1E,GACC,OAAO,CAAC;oBACP,KAAK,MAAM,MAAM,MAAO,8BAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/C;YACJ;YAEA,OAAO,QAAQ,GAAG,CAAC,QAAQ,GAAG,CAAC;QACjC;IAEA,kBAAkB,CAAA,QAAS,MAAM,UAAU;AAC7C;IAEA,2CAAe;;;Id1Ef,2CAAe;OAAI,CAAA,GAAA,wCAAS;IAAG,CAAA,GAAA,wCAAS;IAAG,CAAA,GAAA,wCAAW;IAAG,CAAA,GAAA,wCAAU;IAAG,CAAA,GAAA,wCAAY;IAAG,CAAA,GAAA,wCAAiB;IAAG,CAAA,GAAA,wCAAa;IAAG,CAAA,GAAA,wCAAe;CAAE;;;;;;AeN1I,MAAM,6BAAO,CAAC,QAAC,IAAI,EAAC;IAClB,qBAAO,gCAAC;QAAI,WAAU;kBAAO,KAAK,EAAE;;AACtC;AAEA,MAAM,8BAAQ,CAAC,SAAS,MAAM;IAC5B,IAAI,WAAW,QAAQ,QAAQ,GAAG,GAAG;QACnC,MAAM,aAAa,AAAC,QAAQ,QAAQ,GAAG,qBACnC,gCAAC;YAAO,SAAS,CAAA,IAAK,iBAAiB,SAAQ;sBAAK;aACpD;QACJ,MAAM,cAAc,AAAC,OAAO,mBACxB,gCAAC;YAAO,SAAS,CAAA,IAAK,iBAAiB,SAAQ;sBAAM;aACrD;QACJ,MAAM,aAAa,QAAQ,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAE;QACjD,qBACE,iCAAC;YAAI,IAAG;YAAQ,WAAU;;8BACxB,gCAAC;oBAAI,WAAU;8BACb,cAAA,gCAAC;kCAAG;;;gBAEL,WAAW,GAAG,CAAC,CAAC,KAAI,oBAAQ,gCAAC;wBAAe,MAAM;uBAAX;gBACvC;gBAAa;;;IAGpB;AACF;AAEA,MAAM,gCAAU,CAAC,WAAC,OAAO,EAAC;IACxB,qBAAO,gCAAC;QAAI,WAAU;kBAAO,QAAQ,IAAI;;AAC3C;AACA,MAAM,iCAAW,CAAA;IACf,IAAI,WAAW,QAAQ,QAAQ,GAAG,GAChC,qBACE,iCAAC;QAAI,IAAG;QAAW,WAAU;;0BAC3B,gCAAC;gBAAI,WAAU;0BACb,cAAA,gCAAC;8BAAG;;;YAEL,QAAQ,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAI,oBAAS,gCAAC;oBAAkB,SAAS;mBAAd;;;AAI1D;AAEA,MAAM,+BAAS,CAAC,UAAC,MAAM,EAAC;IACtB,qBAAO,gCAAC;QAAI,WAAU;kBAAO,OAAO,EAAE;;AACxC;AACA,MAAM,gCAAU,CAAA;IACd,IAAI,WAAW,QAAQ,QAAQ,GAAG,GAChC,qBACE,iCAAC;QAAI,IAAG;QAAU,WAAU;;0BAC1B,gCAAC;gBAAI,WAAU;0BACb,cAAA,gCAAC;8BAAG;;;YAEL,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,KAAI,oBAAS,gCAAC;oBAAiB,QAAQ;mBAAb;;;AAIxD;AAEA,MAAM,8BAAQ,CAAC,SAAC,KAAK,EAAC;IACpB,qBAAO,gCAAC;QAAI,WAAU;kBAAO,MAAM,EAAE;;AACvC;AACA,MAAM,gCAAU,CAAA;IACd,IAAI,WAAW,QAAQ,QAAQ,GAAG,GAChC,qBACE,iCAAC;QAAI,IAAG;QAAU,WAAU;;0BAC1B,gCAAC;gBAAI,WAAU;0BACb,cAAA,gCAAC;8BAAG;;;YAEL,QAAQ,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAI,oBAAS,gCAAC;oBAAgB,OAAO;mBAAZ;;;AAIxD;AAEA,MAAM,mCAAa,CAAC,gBAAC,YAAY,kBAAE,cAAc,mBAAE,eAAe,mBAAE,eAAe,YAAE,QAAQ,iBAAE,aAAa,oBAAE,gBAAgB,EAAC;IAC7H,IAAI,SAAS,OAAO,EAClB,qBACE,iCAAC;QAAI,IAAG;QAAU,WAAU;;0BAC1B,gCAAC;gBAAI,WAAU;0BACb,cAAA,gCAAC;8BAAG;;;YAEL,SAAS,KAAK,IAAI,4BAAM,cAAc,SAAS,IAAI,CAAC,KAAK,EAAE;YAC3D,SAAS,OAAO,IAAI,8BAAQ;YAC5B,SAAS,QAAQ,IAAI,+BAAS;YAC9B,SAAS,OAAO,IAAI,8BAAQ;;;SAKjC,OAAO;AAEX;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,sBACA,wBACA,yBACA,yBACA,kBACA,uBACA,oBACA;;;;;;ACpGF,MAAM,kCAAY,CAAC,KAAK,SAAS,WAAW;IAC1C,MAAM,QAAQ,UAAU,QAAQ,QAAQ,iBAAG,gCAAC;QAAI,KAAI;;IACpD,qBACE,iCAAC;QAAG,WAAU;;0BACZ,gCAAC;gBAAM,MAAK;gBAAW,SAAS;gBAAW,UAAU,CAAA,IAAK,OAAO;;0BACjE,iCAAC;gBAAE,aAAW;gBAAC,MAAM,CAAC,CAAC,EAAE,KAAK;gBAAE,WAAU;;oBAAmB;kCAAI,gCAAC;wBAAK,OAAO;4BAAC,OAAM;wBAAO;kCAAI;;;;;;AAGtG;AAEA,MAAM,sCAAgB,CAAC,gBAAC,YAAY,mBAAE,eAAe,kBAAE,cAAc,mBAAE,eAAe,YAAE,QAAQ,iBAAE,aAAa,oBAAE,gBAAgB,EAAC;IAChI,MAAM,SAAS,eACb,aAAa,QAAQ,iBACzB,gCAAC;QAAI,KAAI;;IACP,IAAI,SAAS,OAAO,EAAE,qBACpB,iCAAC;QAAG,WAAU;;0BACd,iCAAC;gBAAE,SAAS,CAAA,IAAK,iBAAiB;;oBAAY;kCAClC,gCAAC;wBAAK,OAAO;4BAAC,OAAM;wBAAO;kCAAI;;;;0BAE3C,iCAAC;gBAAG,WAAU;;oBACb,gCAAU,SAAS,cAAc,SAAS,KAAK,EAAE;oBACnD,gCAAU,WAAW,gBAAgB,SAAS,OAAO,EAAE;oBACvD,gCAAU,YAAY,iBAAiB,SAAS,QAAQ,EAAE;oBAC1D,gCAAU,WAAW,iBAAiB,SAAS,OAAO,EAAE;;;;;SAItD,qBACD,gCAAC;QAAG,WAAU;kBACd,cAAA,iCAAC;YAAE,SAAS,CAAA,IAAK,iBAAiB;;gBAAY;8BAClC,gCAAC;oBACf,OAAO;wBAAC,OAAM;oBAAO;8BAAI;;;;;AAI3B;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,sBACA,yBACA,wBACA,yBACA,kBACA,uBACA,oBACA;;;;;;;;;AC1CF,SAAS,kCAAY,IAAI,EAAE,CAAC;IAC1B,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;IAC9B,IAAI,QAAQ,KAAK,KAAK,CAAC;IACvB,qBAAO,gCAAC;kBACL,MAAM,GAAG,CAAC,CAAC,KAAK;YACf,IAAI,MAAM,MAAM,GACd,qBAAO,gCAAC;gBAAe,OAAO;oBAAC,YAAW;gBAAQ;0BAAI;eAApC;YAEpB,qBAAO,gCAAC;0BAAgB;eAAN;QACpB;;AAEJ;AAEA,SAAS,gCAAU,IAAI;IACrB,CAAA,GAAA,yCAAM,EAAE,KAAK,CAAC;QACZ,UAAU;QACV,QAAQ;QACR,OAAO,KAAK,IAAI;IAClB;AACF;AACA,SAAS,kDAA4B,IAAI,EAAE,QAAQ;IACjD,IAAI;IACJ,KAAK,OAAO,CAAC,CAAA;QACX,IAAI,CAAC,KACH,MAAM;eAAI,QAAQ,CAAC,IAAI,CAAC,SAAS;SAAC;aAC7B;YACL,IAAI,YAAY,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS;YAC/C,MAAO,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,EAAE,EAC1B,IAAI,KAAK;QAEb;IACF;IACA,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,UAAU;AACpC;AAEA,MAAM,+BAAS,CAAC;IACd,MAAM,QAAQ,MAAM,KAAK;IACzB,MAAM,MAAM,MAAM,GAAG;IACrB,qBAAO,gCAAC;QAAI,WAAU;kBACpB,cAAA,gCAAC;YAAE,QAAO;YAAS,MAAM,IAAI,GAAG,GAAG,iBAAiB;sBAClD,cAAA,gCAAC;gBAAI,KAAK,IAAI,GAAG;gBAAE,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE;;;;AAGvD;AAEA,MAAM,uCAAiB,CAAA;IACrB,MAAM,QAAQ,MAAM,KAAK;IACzB,MAAM,SAAS,MAAM,MAAM;IAC3B,IAAI,QAAQ,OAAO,IAAI,CAAC,OAAO,OAAO;IACtC,qBAAO,iCAAC;;0BACN,iCAAC,CAAA,GAAA,2BAAI;gBAAE,SAAS;;oBAAQ;kCAA8C,gCAAC;kCAAG;;oBAAU;;;YACnF,MAAM,GAAG,CAAC,CAAC,GAAG,oBAAQ,gCAAC;oBAAiB,OAAO;oBAAO,KAAK,OAAO,OAAO,CAAC,EAAE;mBAAzC;;;AAExC;AAEA,MAAM,oCAAc,CAAA;IAClB,IAAI,cAAc,MAAM,kBAAkB;IAC1C,IAAI,eAAe,YAAY,OAAO,EAAE;QACtC,IAAI,YAAY,OAAO,CAAC,QAAQ,CAAC,OAAO,KAAK,GAAG;YAC9C,IAAI,QAAQ;gBACV,UAAU;gBACV,UAAU,MAAM,gBAAgB;gBAChC,MAAM,CAAC,kBAAkB,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC;gBACpD,UAAU;YACZ;YACA,IAAI,QAAQ;gBACV,UAAU;gBACV,UAAU,GAAG,MAAM,gBAAgB,CAAC,CAAC,CAAC;gBACtC,MAAM,CAAC,gBAAgB,EAAE,MAAM,gBAAgB,CAAC,EAAE,CAAC;gBACnD,UAAU;YACZ;YACA,qBACE,iCAAC;gBAAI,OAAO;oBAAC,QAAQ;oBAAQ,UAAU;gBAAO;;kCAC5C,iCAAC,CAAA,GAAA,2BAAI;wBAAE,SAAS;;0CAAQ,gCAAC;0CAAG;;4BAA0B;;;kCACtD,gCAAC,CAAA,GAAA,4BAAK;wBAAE,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,SAAS;4BAAO,gCAAU;4BAAQ,MAAM,kBAAkB,CAAC;4BAAQ,MAAM,yBAAyB,CAAC;wBAAM;kCAC9G,CAAC,iCAAiC,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC;;kCAEhE,gCAAC,CAAA,GAAA,4BAAK;wBAAE,IAAI;wBACJ,MAAM;wBACN,SAAS;wBACT,SAAS;4BAAO,gCAAU;4BAAQ,MAAM,kBAAkB,CAAC;4BAAQ,MAAM,yBAAyB,CAAC;wBAAM;kCAC9G,CAAC,gDAAgD,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC;;kCAE/E,gCAAC;wBAAe,OAAO,MAAM,gBAAgB;wBAAE,QAAQ,MAAM,aAAa;;;;QAGhF,OAEE,qBACE,iCAAC;YAAI,OAAO;gBAAC,QAAQ;YAAM;;gBACxB,YAAY,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAE;oBACxC,qBAAO,iCAAC;wBAAc,IAAG;;0CACvB,gCAAC;gCAAG,WAAU;0CAAQ,EAAE,UAAU;;4BACjC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAK,oBACxB,iCAAC,CAAA,GAAA,4BAAK;oCAAE,IAAI,GAAG,IAAI,CAAC,EAAE,KAAK;oCAEnB,UAAU,KAAK,SAAS,KAAK;oCAC7B,MAAK;oCACL,SAAQ;oCACR,SAAS;wCAAO,gCAAU;wCAAO,MAAM,kBAAkB,CAAC;wCAAO,MAAM,yBAAyB,CAAC;oCAAK;;wCAC3G,kCAAY,KAAK,YAAY,EAAC,MAAM,gBAAgB;wCAAG;sDACxD,gCAAC,CAAA,GAAA,2BAAI;4CAAE,IAAG;sDAAa,KAAK,SAAS;;sDACrC,iCAAC;;gDAAE;gDAAO,kDAA4B,KAAK,QAAQ,EAAE,MAAM,eAAe;;;;mCAP/D;;uBAJA;gBAenB;8BACF,gCAAC;oBAAe,OAAO,MAAM,gBAAgB;oBAAE,QAAQ,MAAM,aAAa;;;;IAIlF,OAEE,qBAAO,gCAAC;AAEZ;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,4BACA,0BACA,yBACA,uBACA,sBACA,6BACA;;;;;;;;;;;;;;;;;;;;AGhIF,SAAS,oCAAc,KAAK;IAC1B,sCAAsC;IACtC,MAAM,YAAY,CAAA,GAAA,mBAAK,EAAE;IACzB,MAAM,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,qBAAO,EAAE,MAAM,iBAAiB;IAExE,CAAA,GAAA,sBAAQ,EAAE;QACR,MAAM,gBAAgB,CAAC;YACrB,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,gBACtB,gBAAgB,MAAM,IAAI,CAAC,MAAM,GAAG;QAExC;QAEA,OAAO,gBAAgB,CAAC,WAAW;QAEnC,OAAO,IAAM,OAAO,mBAAmB,CAAC,WAAW;IACrD,GAAG,EAAE;IAEL,qBACE,gCAAC;QACC,KAAK;QACL,KAAK,MAAM,GAAG;QACd,OAAM;QACN,OAAO;YAAE,OAAO;YAAQ,QAAQ,GAAG,aAAa,EAAE,CAAC;YAAE,QAAQ;QAAO;;AAG1E;AAEA,MAAM,+BAAS,CAAA;IACb,MAAM,OAAO,MAAM,QAAQ,CAAC,MAAM,YAAY,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,iBAAiB,mBAAmB,GAAG,CAAA,GAAA,qBAAO,EAAE;IACvD,MAAM,CAAC,qBAAqB,uBAAuB,GAAG,CAAA,GAAA,qBAAO,EAAE,EAAE;IACjE,MAAM,CAAC,aAAa,eAAe,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC/C,MAAM,CAAC,SAAS,WAAW,GAAG,CAAA,GAAA,qBAAO,EAAE;IACvC,MAAM,CAAC,WAAW,aAAa,GAAG,CAAA,GAAA,qBAAO,EAAE;IAE3C,MAAM,uBAAuB,CAAC;QAC5B,WAAW,MAAM,MAAM,CAAC,OAAO;IACjC;IACA,CAAA,GAAA,sBAAQ,EAAE;QACR,MAAM,MAAM,KAAK,KAAK,CAAC,KAAK,QAAQ,GAAG;QACvC,IAAI,MAAM,iBAAiB,CAAC,IAAI,EAAE;YAChC,IAAI,SAAO;gBAAC,cAAc,CAAC;gBAAG,UAAU,CAAC;YAAC;YAC1C,IAAI,QAAQ,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAE;gBAC/C,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,WAAW,IAAI,EAAE,GAAG,EAAE;gBACpD,MAAM,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,WAAW,IAAI,EAAE,GAAG,EAAE;gBACpD,OAAO,SAAS,SAAS,KAAK;YAChC;YACA,IAAI,MAAM,YAAY,CAAC,cAAc,CAAC,6BAA6B;gBACjE,MAAM,SAAS,IAAI,IAAI,MAAM,YAAY,CAAC,wBAAwB;gBAClE,QAAQ,MAAM,MAAM,CAAC,CAAA,IAAK,OAAO,GAAG,CAAC,EAAE,GAAG;YAC5C;YACA,MAAM,OAAO,CAAC,CAAA;gBAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA,SAAU,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,GAAG;YAAG;YAC5E,uBAAuB;YACvB,eAAe;YACf,IAAI,SAAS,MAAM,MAAM,CAAC,CAAA,IAAK,EAAE,KAAK;YACtC,IAAI,OAAO,MAAM,KAAK,GACpB,mBAAmB,MAAM,CAAC,EAAE,CAAC,GAAG;iBAEhC,yCAAyC;YACzC,mBAAmB,KAAK,CAAC,EAAE,CAAC,GAAG;QAEnC;IACF,GAAG;QAAC,MAAM,iBAAiB;KAAC;IAE5B,IAAI;IACJ,IAAI,WAAW,CAAC,sDAAsD,EAAE,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,UAAU,EAAE,SAAS;IACvH,IAAI,WAAW,EAAE;IACjB,IAAI,MAAM,eAAe,IAAI,MAAM,eAAe,CAAC,KAAK,GAAG,CAAC,EAC1D,WAAW,MAAM,eAAe,CAAC,KAAK,GAAG,CAAC;SACrC,IAAI,KAAK,QAAQ,EACtB,MAAM,iBAAiB,CAAC,KAAK,GAAG,EAAE,KAAK,QAAQ,CAAC,SAAS,EAAE,KAAK,QAAQ;IAE1E,kHAAkH;IAClH,sEAAsE;IACtE,IAAI;IACJ,IAAI,SAAS,MAAM,GAAG,KAAK,iBACzB,eAAc,CAAC,sDAAsD,EAAE,SAAS,IAAI,CAAC,KAAK,YAAY,EAAE,gBAAgB,UAAU,EAAE,SAAS;IAE/I,qBAAO,iCAAC,CAAA,GAAA,0BAAG;QAAE,WAAW;QAAW,UAAU,CAAC,IAAM,aAAa;;YAC9D,8BACC,iCAAC,CAAA,GAAA,yBAAE;gBAAE,cAAa;gBAAM,UAAS;gBAAW,OAAO,CAAC,QAAQ,CAAC;;kCAC3D,gCAAC,CAAA,GAAA,0BAAG,EAAE,MAAM;wBAAC,cAAW;wBACX,aAAY;wBACZ,UAAU,CAAC,IAAM,mBAAmB,EAAE,MAAM,CAAC,KAAK;kCAC3D,oBAAoB,GAAG,CAAC,CAAC,GAAE,oBAC3B,iCAAC;gCAAiB,OAAO,EAAE,GAAG;;oCAAG,EAAE,IAAI;oCAAC;oCAAG,EAAE,WAAW,IAAI,EAAE,GAAG;;+BAApD;;oBAGhB,cAAc,4BAAc,gCAAC;wBAAc,KAAK;;;eARgB;0BAWrE,gCAAC,CAAA,GAAA,yBAAE;gBAAE,cAAa;gBAAM,UAAS;gBAAO,OAAM;0BAQ3C,cAAc,wBAAU,gCAAC;oBAAc,KAAK;;eARiB;YAU/D,CAAA,GAAA,gCAAM,EAAE,uBACP,gCAAC,CAAA,GAAA,yBAAE;gBAAE,cAAa;gBAAM,UAAS;gBAAM,OAAM;0BAAwB,cAAA,gCAAC,CAAA,GAAA,kDAAE;oBAAE,MAAM;;eAAjB;;;AAGrE;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,yBACA,2BACA,qBACA,+BAA+B;AAC/B;;;;;;;;;;;;;;;;AE9GK,MAAM,4CAAS,CAAA;IACpB,IAAI,gBAAgB,CAAA,GAAA,4CAAI,EAAE,MAAM,QAAQ,EAAE;IAC1C,qBACE,iCAAC;QAAI,WAAU;;0BACb,iCAAC;gBAAI,WAAU;;oBACZ,cAAc,KAAK;oBACnB,cAAc,WAAW;;;0BAE5B,gCAAC;gBAAI,WAAU;0BACZ,cAAc,OAAO;;0BAExB,iCAAC;gBAAI,WAAU;;kCACb,gCAAC;wBAAI,WAAU;wBAAiB,IAAI;wBAAI,IAAI;kCACzC,cAAc,OAAO;;kCAExB,gCAAC;wBAAI,WAAU;wBAAiB,IAAI;wBAAI,IAAI;kCACzC,cAAc,KAAK;;;;;;AAK9B;AAEO,MAAM,4CAAQ,CAAA,sBAAS,gCAAC;kBAAI,MAAM,QAAQ;;AAC1C,MAAM,4CAAc,CAAA,sBAAS,gCAAC;QAAE,WAAU;kBAAe,MAAM,QAAQ;;AACvE,MAAM,4CAAU,CAAA,sBAAS,gCAAC;QAAI,WAAU;kBAAW,MAAM,QAAQ;;AAExE,MAAM,kCAAY,CAAA;IAChB,IAAI,UAAU,MAAM;IACpB,OAAO,MAAM,IAAI;IACjB,IAAI,MAAM,QAAQ,EAChB,WAAW,MAAM,QAAQ,GAAG;IAE9B,IAAI,CAAA,GAAA,uCAAA,EAAE,QAAQ,CAAC,MAAM,KAAK,GACxB,sBAAQ,gCAAC,CAAA,GAAA,2BAAI;QAAE,OAAO;YAAC,YAAY;QAAQ;QAAG,IAAG;kBAAa,MAAM,KAAK;;IAE3E,qBACE,iCAAC,CAAA,GAAA,4BAAK;QAAE,SAAQ;QAAe,SAAS,MAAM,WAAW;;YACtD;YAAU;YAAM;;;AAGvB;AAEA,SAAS,yCAAmB,YAAY;IACtC,OAAO,aAAa,GAAG,CACrB,CAAC,aAAa,oBACZ,gCAAC;YAAqB,GAAG,WAAW;WAApB;AAEtB;AACO,MAAM,4CAAU,CAAA,sBACrB,iCAAC;QAAI,WAAU;;0BACb,gCAAC;0BAAG;;0BACJ,gCAAC;0BACE,yCAAmB,MAAM,YAAY;;;;AAK5C,SAAS,kCAAY,KAAK;IACxB,IAAI,yBAAW,iCAAC;QAAM,OAAM;;YAA+C;0BAAC,gCAAC,CAAA,GAAA,kCAAa;;;IAC1F,OAAO,MAAM,GAAG,CAAC,CAAC,MAAM,oBACtB,gCAAC;sBACC,cAAA,iCAAC;gBAAE,MAAM,KAAK,GAAG;gBAAE,QAAO;gBAAS,WAAU;gBAAgB,SAAS;oBACpE,CAAA,GAAA,yCAAM,EAAE,KAAK,CAAC;wBACZ,UAAU;wBAAiB,QAAQ;wBAAU,OAAO,KAAK,IAAI;oBAC/D;gBACF;;oBAAI,KAAK,IAAI;oBAAE;;;WALR;AAgBb;AAEO,MAAM,4CAAQ,CAAA,sBACnB,iCAAC;QAAI,WAAU;;0BACb,gCAAC;0BAAG;;0BACJ,gCAAC;0BACE,kCAAY,MAAM,KAAK;;;;;;;ACxFvB,MAAM,4CAAiB,CAAC;IAC7B,IAAI,CAAC,QAAQ,OAAO;IACpB,MAAM,OAAO,OAAO,SAAS,IAAI;IACjC,IAAI,CAAA,GAAA,0BAAM,IAAI,IAAI,CAAC,CAAA,IAAK,EAAE,IAAI,KAAK,OAAO,OAAO,CAAA,GAAA,yBAAK,EAAE;IACxD,OAAO,CAAA,GAAA,gCAAY,EAAE,QAAQ;AAC/B;AAEO,MAAM,4CAAsB,CAAC;IAClC,OAAO;QACL,QAAQ;QACR,MAAM;QACN,WAAW;QACX,QAAQ;QACR,SAAS;QACT,UAAU;QACV,UAAU;YACR;gBACE,UAAU,WAAW,QAAQ;gBAC7B,UAAU,WAAW,QAAQ;gBAC7B,MAAM,WAAW,IAAI;gBACrB,UAAU,WAAW,QAAQ;gBAC7B,SAAS;gBACT,UAAU;gBACV,QAAQ;gBACR,QAAQ;YACV;SACD;IACH;AACF;;;;;;AFnBA,MAAM,uCAAiB,CAAA,GAAA,sCAAI,EAAE,SAAS;IACpC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,YAAY,CAAC,EAAE,GACtD,MAAM,WAAW,CAAC,MAAM,YAAY,CAAC,EAAE;QAEzC,IAAI,CAAC,QAAQ,GAAG,CAAA,GAAA,mDAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,eAAe;IAC/E;IACA,gBAAgB;QACd,qBACE,gCAAC;YAAI,WAAU;sBACb,cAAA,gCAAC,CAAA,GAAA,mDAAM;gBAAE,UAAU,IAAI,CAAC,IAAI;gBACnB,uBAAuB,IAAI,CAAC,IAAI;gBAChC,mBAAmB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM;gBACnD,UAAU,IAAI,CAAC,QAAQ;gBACvB,oBAAoB;gBACpB,WAAW;gBACX,gBAAgB;gBAChB,iBAAiB;gBACjB,mBAAmB;gBACnB,YAAY,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU;;;IAG9D;IACA,oBAAoB;QAClB,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA,GAAA,yCAAkB,EAAE;YACrD,UAAU;YACV,UAAU;YACV,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG;YACvB,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACvC;IACF;IACA,kBAAkB;QAChB,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA,GAAA,yCAAkB,EAAE;YACrD,UAAU;YACV,UAAU;YACV,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG;YACvB,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACxC;IACF;IACA,iBAAiB;QACf,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA,GAAA,yCAAkB,EAAE;YACrD,UAAU;YACV,UAAU;YACV,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG;YACvB,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACvC;IACF;IACA,kBAAkB;QAChB,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA,GAAA,yCAAkB,EAAE;YACrD,UAAU;YACV,UAAU;YACV,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACtC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;QACpC;IACF;IACA,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B;IAEA,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B;IAEA,cAAc,IAAI,EAAE;QAClB,IAAI,UAAU;QACd,WAAW,CAAA,GAAA,uCAAA,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QAC5B,aAAa,IAAI,CAAC,IAAI,CAAC,GAAG;QAE1B,IAAI,UAAU;YACZ,IAAI,WAAW,CAAA,GAAA,uCAAA,EAAE,UACd,MAAM,CAAC,SAAS,iBAAiB,KAAK,EAAE,IAAI;gBAC3C,OAAO,KAAK,OAAO,CAAC,UAAU;YAChC,GACC,MAAM,GACN,OAAO,GACP,IAAI,GACJ,KAAK;YAER,IAAI,CAAC,CAAA,GAAA,uCAAA,EAAE,OAAO,CAAC,WAAW;gBACxB,IAAI,CAAC,SAAS,QAAQ,CAAC,aAAa;oBAClC,QAAQ,GAAG,CAAC,wBAAuB;oBACnC,SAAS,IAAI,CAAC;gBAChB;gBACA,OAAO,UAAU,kFAAkF;YACrG;QACF;IACF;IACA,eAAe;QACb,IAAI,IAAI;YAAC;gBACP,MAAM;gBACN,UAAU;gBACV,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;gBAC1B,aAAa,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI;YAC/C;SAAE;QACF,IAAI,IAAI,CAAC,SAAS,EAChB,EAAE,IAAI,CAAC;YACL,MAAM;YACN,UAAU;YACV,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM;YAC5B,aAAa,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI;QAC7C;QAEF,IAAI,IAAI,CAAC,QAAQ,EACf,EAAE,IAAI,CAAC;YACL,MAAM;YACN,UAAU;YACV,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC3B,aAAa,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;QAC5C;QAEF,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAC9B,EAAE,IAAI,CAAC;YACL,MAAM,CAAC,SAAS,CAAC;YACjB,UAAU,CAAC,SAAS,CAAC;YACrB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;YACnC,aAAa,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI;QAC7C;QAEF,OAAO;IACT;IACA,QAAQ;QACN,IAAI,QAAQ;YACV;gBACE,MAAM;gBACN,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YAC7G;SACD;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GACnF,MAAM,IAAI,CAAC;YACT,MAAM;YACN,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG;QAC9C;QAEF,OAAO;IACT;IACA,SAAS;QACP,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;QACrC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,KACtC,qBAAO,gCAAC,CAAA,GAAA,6BAAM;QAEhB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;QACnC,MAAM,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;QAC9C,IAAI,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,SAC3C,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC;aAE7B;YACH,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO;YAC5C,IAAI,KAAK,cAAc,CAAC,aAAa;gBACnC,IAAI,CAAC,IAAI,GAAG,CAAA,GAAA,mDAAU,EAAE,QAAQ,CAAC,IAAI,CAAC;oBAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO;iBAAC;gBACvE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;gBAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW;YAClC;QACF;QACA,IAAI,UAAQ;QACZ,4FAA4F;QAC5F,gHAAgH;QAChH,IAAI;QACJ,qBACE,iCAAC,CAAA,GAAA,yCAAK;;8BACJ,gCAAC,CAAA,GAAA,yCAAI;8BAAc;mBAAR;8BACX,iCAAC,CAAA,GAAA,yCAAU;;wBAAoB;wBAE5B,UAAU,mBAAK,iCAAC,CAAA,GAAA,2BAAI;4BAAE,SAAS;;gCAAW;gCAA0E;gCAAQ;;;;mBAF9G;gBAIhB,IAAI,CAAC,IAAI,kBAAI,gCAAC,CAAA,GAAA,yCAAM;8BAAiB,IAAI,CAAC,aAAa;mBAA7B;gBAC1B,IAAI,CAAC,IAAI,kBAAI,gCAAC,CAAA,GAAA,yCAAM;oBAAgB,cAAc,IAAI,CAAC,YAAY;mBAAzC;8BAC3B,gCAAC,CAAA,GAAA,yCAAI;oBAAc,OAAO,IAAI,CAAC,KAAK;mBAAzB;;;IAGjB;AACF;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,yBACA,sBACA,wBACA,uBACA,kBACA,sBACA,wBACA,6BACA,2BACA;;;;;;;;;;;;;AK/LF,gFAAgF;AAChF,0DAA0D;AAC1D,+DAA+D;AAC/D,iEAAiE;AACjE,kEAAkE;AAElE,uBAAuB;AACvB,MAAM,+BAAS;AAEA,uDAA+B,CAAA,GAAA,sCAAI,EAAE,SAAS;IAE3D,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,mBAAmB,GAAG,MAAM,YAAY;IAC/C;IAEA,sBAAsB,QAAQ,EAAE;QAC9B,6CAA6C;QAC7C,IAAG,CAAA,GAAA,8CAAM,EAAE,SAAS,YAAY,EAAE,IAAI,CAAC,mBAAmB,GACxD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,SAAS,YAAY,CAAC,KAAK,EAAE,SAAS,YAAY,CAAC,GAAG;QAG5G,OAAO;IACT;IAEA,wBAAwB;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG;IAC/B;IAEA,UAAU;QACR,IAAI,GAAG,MAAM,OAAO,KAAK;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;QAC9B,QAAQ,KAAK,KAAK;QAClB,MAAM,KAAK,GAAG;QAEd,IAAI,CAAC,OAAO,GAAG,UAAU,IAAI,QAC3B;YACE,UAAU,IAAI,CAAC,qBAAqB;YACpC,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,WAAW;YACX,SAAS;YACT,WAAW,EAAE,GAAG,GAAG;YACnB,QAAQ;YAER,aAAa;gBACX,aAAa,EAAE,WAAW;gBAC1B,OAAO,EAAE,QAAQ;gBACjB,MAAM;gBACN,SAAS;gBACT,UAAU;YACZ;YAEA,SAAS;gBACP;oBACE,MAAM;oBACN,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW;oBACzC,SAAS,EAAE,WAAW;oBACtB,WAAW;gBACb;gBACA;oBACE,MAAM;oBACN,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW;oBAClC,WAAW;oBACX,SAAS,EAAE,WAAW;oBACtB,MAAM;wBAAC;wBAAQ;wBAAc;wBAAQ;qBAAM;gBAC7C;aACD;YAED,2CAA2C;YAC3C,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;YACjB,WAAW;YACX,eAAe;YACf,YAAY;YACZ,SAAS;YACT,iBAAiB;YACjB,eAAe;YACf,cAAc;YACd,cAAc;YACd,eAAe;YACf,UAAU;YACV,WAAW;YACX,QAAQ;YACR,cAAc;QAChB;QAGF,QAAQ,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;IACjD;IAEA,SAAS;QACP,IAAI,OAAO,IAAI,CAAC,SAAS,IAAI,UAAU;YACrC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS;YAClC,OAAO,IAAI,CAAC,SAAS;QACvB;IACF;IAEA,oBAAoB;QAClB,kBAAkB;QAClB,IAAI,CAAC,MAAM;QACX,IAAI,OAAO,IAAI;QACf,IAAI,CAAC,SAAS,GAAG,OAAO,UAAU,CAAC;YAAa,KAAK,OAAO;QAAG,GAAG;IACpE;IAEA,uBAAuB;QACrB,IAAI,CAAC,MAAM;IACb;IAEA,SAAS;QACP,qBACE,gCAAC;YAAI,IAAI,IAAI,CAAC,qBAAqB;;IAEvC;AACF,EAEA,iCAAiC;CACjC,6CAA6C;CAC7C,qDAAqD;CACrD,oCAAoC;CACpC,kDAAkD;CAClD,KAAK;;;AD1HU,uDAAsB,CAAA,GAAA,sCAAI,EAAE,SAAS;IAClD,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;IACR;IAEA,SAAS;QACP,qBACE,gCAAC;YAAI,WAAU;sBACb,cAAA,gCAAC,CAAA,GAAA,wCAAe;gBAAG,GAAG,IAAI,CAAC,KAAK;gBAAE,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;;;IAGzE;AAEF,EAEA,wBAAwB;CACxB,6CAA6C;CAC7C,oCAAoC;CACpC,qDAAqD;CACrD,kDAAkD;CAClD,KAAK;;;;;;;ADbL,MAAM,uCAAiB,CAAA,GAAA,sCAAI,EAAE,SAAS;IACpC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,UAAU;QACf,IAAI,CAAC,KAAK,GAAG;YACX,cAAc,IAAI,CAAC,gBAAgB;QACrC;IACF;IAEA,mBAAmB;QACjB,IAAI,UAAU,MAAM,SAAS;QAC7B,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;QAC7B,IAAG,CAAC,UACF,MAAM,IAAI,MAAM,CAAC,iDAAiD,CAAC;QAGrE,OAAO,SAAS,GAAG,GAAG,SAAS,KAAK,GAAG;QACvC,UAAU,KAAK,KAAK,CAAC,KAAK;QAE1B,SAAS;YACP,KAAK,SAAS,MAAM;YACpB,OAAO,SAAS,KAAK,GAAG;YACxB,KAAK,SAAS,GAAG,GAAG;QACtB;QAEA,OAAO,WAAW,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,EAAE;QAElE,OAAO;IACT;IAEA,aAAa;QACX,IAAI,QAAQ,cAAc,YAAY;QACtC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;QAClC,IAAI,QAAQ;YACV,eAAe,QAAQ,IAAI,CAAC;YAC5B,IAAI,cAAc;gBAChB,aAAa;gBACb,aAAa,gBAAgB;YAC/B,OACK;gBACH,aAAa;gBACb,aAAa;YACf;YACA,IAAI,CAAC,MAAM,GAAG;gBACZ,aAAa;gBACb,MAAM;gBACN,MAAM;YACR;QACF;IACF;IAGA,iBAAiB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;QAChC,IAAI,eAAe;YACjB,KAAK;YACL,OAAO;YACP,KAAK;YACL,aAAa,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK;QACvC;QAEA,IAAG,CAAC,CAAA,GAAA,8CAAM,EAAE,cAAc,IAAI,CAAC,KAAK,CAAC,YAAY,GAC/C,IAAI,CAAC,QAAQ,CAAC;YACZ,cAAc;QAChB;IAEJ;IAEA,YAAY,sBAAsB,EAAE;QAClC,IAAI,UAAU,UAAU,cAAc,QAAQ,mBAAmB;QACjE,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;QAC7B,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI;QACzB,yBAAyB;QACzB,2BAA2B;QAC3B,6BAA6B;QAC7B,0CAA0C;QAE1C,IAAI,QAAQ;YACV;gBACE,UAAU;gBACV,MAAM,SAAS,GAAG;gBAClB,UAAU;gBACV,UAAU,SAAS,GAAG;YACxB;YACA;gBACE,UAAU;gBACV,MAAM,SAAS,MAAM;gBACrB,UAAU;gBACV,UAAU,SAAS,MAAM;YAC3B;SACD;QACD,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE;QAExD,IAAI,wBAAwB;YAC1B,eAAe,IAAI,CAAC,KAAK,CAAC,YAAY;YAEtC,MAAM,IAAI,CAAC;gBACT,UAAU;gBACV,MAAM,GAAG,aAAa,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,EAAE;gBACjD,UAAU;gBACV,UAAU,CAAC,CAAC,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;YAC5D;YACA,MAAM,CAAC,aAAa,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,GAC9D,CAAC,SAAS,EAAE,aAAa,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,CAAC,EAAE,CAAC;YAE7D,oBAAoB,aAAa,WAAW;QAC9C,OACE,oBAAoB,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,WAAW;QAGhE,QAAQ,GAAG,CAAC;QACZ,SAAS;YACP,UAAU;YACV,IAAI;YACJ,IAAI;YACJ,cAAc;QAChB;QAEA,mCAAmC;QACnC,kCAAkC;QAClC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;IAClD;IAEA,eAAe;QACb,IAAI,SAAS;QACb,UAAU,IAAI,CAAC,KAAK,CAAC,YAAY;QACjC,SAAS;YACP;gBACE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAClC,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC;YACpC;SACD;QACD,IAAI,SACF,OAAO,IAAI,CAAC;YACV,MAAM,CAAC,WAAW,EAAE,CAAA,GAAA,0CAAM,EAAE,SAAS,gBAAgB;YACrD,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC;QACpC;QAEF,OAAO;IACT;IAEA,QAAQ;QACN,SAAS,OAAO,EAAE;YAChB,OAAO,GAAG,OAAO,CAAC,WAAU,UAAU,OAAO,CAAC,oBAAmB;QACnE;QACA,IAAI,OAAO,IAAI,CAAC,IAAI;QACpB,IAAI,QAAQ;YACV;gBAAC,MAAM;gBAAmB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,gBAAgB,EAAE,KAAK,GAAG,EAAE;YAAA;SAChH;QACD,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,OAC/C,MAAM,IAAI,CAAC;YAAC,MAAM;YAAa,KAAK,CAAC,6DAA6D,EAAE,OAAO,KAAK,GAAG,GAAG;QAAA;QACxH,IAAI,KAAK,QAAQ,KAAK,MACpB,MAAM,IAAI,CACR;YAAC,MAAM;YAAQ,KAAK,CAAC,qDAAqD,EAAE,KAAK,GAAG,CAAC,WAAW,CAAC;QAAA,GACjG;YAAC,MAAM;YAAa,KAAK,CAAC,qEAAqE,EAAE,KAAK,GAAG,CAAC,oBAAoB,CAAC;QAAA;QAEnI,IAAI,KAAK,QAAQ,KAAK,OACpB,MAAM,IAAI,CAAC;YAAC,MAAM;YAAU,KAAK,CAAC,0CAA0C,EAAE,KAAK,GAAG,EAAE;QAAA;QAC1F,MAAM,UAAU,IAAI,OAAO;QAC3B,IAAI,QAAQ,IAAI,CAAC,KAAK,GAAG,GACvB,MAAM,IAAI,CAAC;YAAC,MAAM;YAAY,KAAK,CAAC,yCAAyC,EAAE,KAAK,GAAG,EAAE;QAAA;QAC3F,OAAO;IACT;IAEA,SAAS;QACP,qBACE,iCAAC,CAAA,GAAA,yCAAK;;8BAEJ,iCAAC,CAAA,GAAA,yCAAU;;wBAAoB;wBAAoB,IAAI,CAAC,cAAc;wBAAG;wBAAO,IAAI,CAAC,iBAAiB;;mBAArF;8BACjB,gCAAC,CAAA,GAAA,yCAAM;8BACJ,IAAI,CAAC,aAAa;mBADR;8BAGb,gCAAC,CAAA,GAAA,yCAAM;oBAAgB,cAAc,IAAI,CAAC,YAAY;mBAAzC;8BACb,gCAAC,CAAA,GAAA,yCAAI;oBAAc,OAAO,IAAI,CAAC,KAAK;mBAAzB;;;IAGjB;IAGA,gBAAgB;QACd,qBACE,gCAAC,CAAA,GAAA,wCAAM;YAAE,MAAM,IAAI,CAAC,IAAI;YAAG,GAAG,IAAI,CAAC,KAAK;YAAG,GAAG,IAAI,CAAC,KAAK;YAAE,cAAe,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI;;IAE5G;IAEA,qBAAqB;QACnB,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ;QACjC,qBACE,iCAAC;YAAK,WAAU;;8BACd,gCAAC;oBAAK,WAAU;8BAAU,IAAI,CAAC,MAAM,CAAC,IAAI;;gBAAQ;8BAAC,gCAAC;oBAAK,WAAU;8BAAS,SAAS,KAAK;;gBAAQ;8BAAC,gCAAC;oBACpG,WAAU;8BAAO,SAAS,GAAG;;;;IAGnC;IAEA,iBAAiB;QACf,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,YAAY;QACtC,qBACE,iCAAC;YAAK,WAAU;;8BACd,gCAAC;oBAAK,WAAU;8BAAU,SAAS,GAAG;;gBAAQ;8BAAC,gCAAC;oBAAK,WAAU;8BAAS,SAAS,KAAK;;gBAAQ;8BAAC,gCAAC;oBAChG,WAAU;8BAAO,SAAS,GAAG;;;;IAGnC;IAEA,oBAAoB;QAClB,MAAM,OAAC,GAAG,SAAE,KAAK,OAAE,GAAG,EAAC,GAAG,IAAI,CAAC,gBAAgB;QAC/C,IAAI,CAAC,gBAAgB,CAAC,KAAK,OAAO;IACpC;IAEA,oBAAoB;QAClB,wEAAwE;QACxE,qBACE,gCAAC,CAAA,GAAA,4BAAK;YACJ,MAAK;YACL,SAAQ;YACR,SAAS,IAAM,IAAI,CAAC,iBAAiB;sBAAI;;IAI/C;AACF;IAEA,2CAAe,CAAA,GAAA,gCAAM,EAAE,0BAAyB;;;;;;;;;;;;;;AG7NhD,IAAI,oCAAc;AAElB,MAAM,uCAAiB,CAAA,GAAA,sCAAI,EAAE,SAAS;IACpC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,QAAQ,GAAG,CAAA,GAAA,mDAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,MAAM,eAAe;QAC7E,IAAI,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,YAAY,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,kBAAkB,IAAI,CAAC,IAAI,CAAC,GAAG;QAC/C,IAAI,CAAC,KAAK,GAAG;YAAE,aAAa;YAAM,QAAQ;QAAI;IAChD;IAEA,eAAe;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM;IACxC;IAEA,kBAAkB;QAChB,kDAAkD;QAClD,MAAM,cAAc;QACpB,MAAM,YAAY,IAAI,CAAC,YAAY;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,YAAY,cAAc;IACjE;IAEA,cAAc;QACZ,IAAI,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,MAAM,CAAC;YACrC,aAAa;YACb,aAAa,IAAI,CAAC,QAAQ;YAC1B,OAAO,IAAI,CAAC,eAAe;YAC3B,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;QAC3B;IACF;IAEA,YAAY,CAAC,EAAE;QACb,EAAE,cAAc;QAChB,MAAM,SAAS,EAAE,OAAO;QACxB,MAAM,cAAc,IAAI,CAAC,KAAK,CAAC,MAAM;QAErC,MAAM,cAAc,CAAC;YACnB,MAAM,YAAY,KAAK,GAAG,CAAC,KAAK,cAAe,CAAA,UAAU,OAAO,GAAG,MAAK;YACxE,IAAI,CAAC,QAAQ,CAAC;gBAAE,QAAQ;YAAU;QACpC;QAEA,MAAM,YAAY;YAChB,OAAO,mBAAmB,CAAC,aAAa;YACxC,OAAO,mBAAmB,CAAC,WAAW;YACtC,iCAAiC;YACjC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,EAAE;gBACzC,IAAI,CAAC,OAAO,CAAC,MAAM;gBACnB,IAAI,CAAC,OAAO,GAAG;gBACf,IAAI,CAAC,aAAa,GAAG;gBACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB;YACxC;QACF;QAEA,OAAO,gBAAgB,CAAC,aAAa;QACrC,OAAO,gBAAgB,CAAC,WAAW;IACrC;IAEA,aAAa;QACX,sEAAsE;QACtE,MAAM,eAAe,IAAI,CAAC,gBAAgB;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM;YACnB,IAAI,CAAC,OAAO,GAAG;YACf,IAAI,CAAC,aAAa,GAAG;QACvB;QACA,IAAI,CAAC,QAAQ,CAAC;YAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;QAAC,GAAG;YACtD,6DAA6D;YAC7D,0DAA0D;YAC1D,sBAAsB;gBACpB,IAAI,cACF,IAAI,CAAC,WAAW,CAAC;YAErB;QACF;IACF;IAEA,SAAS,IAAI,EAAE;QACb,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI;QAClF,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM;IAC9B;IAEA,YAAY,SAAS,EAAE,UAAU,EAAE;QACjC,IAAI,CAAC,gBAAgB,GAAG;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW;QACnC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAEzB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA,SAAU,MAAM;YAC3C,IAAI,CAAC,aAAa,GAAG;YACrB,IAAI,YACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAE1B,mFAAmF;YACnF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QACtC,CAAA,EAAE,IAAI,CAAC,IAAI;IACb;IAEA,oBAAoB;QAClB,IAAI,YAAY,SAAS,OAAO;aAI9B,OAAO,gBAAgB,CAAC,iBAAiB,CAAA,SAAU,CAAC;QAClD,qBAAqB;QACvB,CAAA,EAAE,IAAI,CAAC,IAAI;QAEb,IAAI,CAAC,aAAa,GAAG,CAAA,GAAA,uCAAA,EAAE,QAAQ,CAAC;YAC9B,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC5C,MAAM,eAAe,IAAI,CAAC,gBAAgB;gBAC1C,IAAI,IAAI,CAAC,OAAO,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,MAAM;oBACnB,IAAI,CAAC,OAAO,GAAG;oBACf,IAAI,CAAC,aAAa,GAAG;gBACvB;gBACA,IAAI,CAAC,WAAW,CAAC;YACnB;QACF,GAAG;QACH,OAAO,gBAAgB,CAAC,UAAU,IAAI,CAAC,aAAa;IACtD;IAEA,mBAAmB,SAAS,EAAE,SAAS,EAAE;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YACrD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAClC,IAAI,OAAO;gBAAC;aAAE;YACd,IAAI,SAAS;YACb,MAAO,KAAK,KAAK,CAAE;gBACjB,KAAK,IAAI,CAAC;gBACV,SAAS;gBACT,OAAO,KAAK,KAAK,CAAC,EAAE;YACtB;YACA,QAAQ,GAAG,CAAC,QAAO,MAAK;YACxB,IAAI,CAAC,SAAS,CAAC;QACjB;QACA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YAC5C,MAAM,WAAW,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA,KAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC;YACxF,IAAI,SAAS,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC9C,MAAM,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA,KAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG;gBACrE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK,IAAI,CAAC,IAAI,CAAC,QAAQ;YAClE;QACF;IACF;IAEA,qBAAqB;QACnB,IAAI,UAAU,YAAY;QAC1B,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ;QACzC,IAAG,CAAC,UACF,MAAM,IAAI,MAAM,uCAAuC,IAAI,CAAC,IAAI,CAAC,GAAG;QAGtE,IAAI,CAAC,UAAU,GAAG,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,SAAS,SAAS;QAC5C,SAAS,OAAO,CAAC,OAAO,CAAC,CAAA,SAAS,QAAQ;YACxC,IAAI,CAAC,GAAE,aAAY,GAAG,GAAG,SAAS,EAAE,CAAC,KAAK,CAAC;YAE3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxB,CAAA,EAAE,IAAI,CAAC,IAAI;QAEX,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU;IAEnD,kJAAkJ;IACpJ;IAEA,kBAAkB,IAAI,EAAC,QAAQ,EAAE;QAC/B,IAAI,eAAe,aAAW;QAC9B,IAAI,CAAE,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,eAAe;YAC1C,IAAI,MAAM,KAAK,KAAK,CAAC,WAAW;YAChC,eAAe,aAAW;QAC5B;QACA,IAAI,SAAS,KAAK,GAAG,CAAC,SAAS,GAAG;YAChC,IAAI,QAAQ,CAAA,GAAA,uCAAA,EAAE,IAAI,CAAC,KAAI;gBAAC;gBAAM;gBAAO;aAAO;YAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa;YACjC,OAAO;QACT;QACA,QAAQ,GAAG,CAAC;QACZ,OAAO;IACT;IAEA,uBAAuB;QACrB,4DAA4D;QAC5D,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;QACrC,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAO,mBAAmB,CAAC,UAAU,IAAI,CAAC,aAAa;YACvD,IAAI,CAAC,aAAa,CAAC,MAAM;QAC3B;IACF;IAEA,aAAa,IAAI,EAAE;QACjB,IAAI,WAAW,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,MAAK;QAC5B,IAAI,QAAQ,EAAE;QACd,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAU,KAAK;YACrC,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACnB,IAAI,MAAM,QAAQ,CAAC,MAAM;gBACzB,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI;oBAC/B,IAAI,eAAe,KAAK,MAAM,GAAG;oBACjC,MAAM,IAAI,CAAC;wBACT,IAAI;wBACJ,KAAK;wBACL,OAAO,IAAI,IAAI;wBACf,MAAM,IAAI,IAAI;wBACd,UAAU;wBACV,UAAU;wBACV,QAAQ,gBAAe,IAAI,IAAI,CAAC,aAAa,GAAG;oBAClD;gBACF;YACF;QACF;QAEA,IAAI,SAAS,IAAI,CAAA,GAAA,6CAAW,EAAE;YAC5B,UAAU;QACZ,GAAG,OAAO,CAAC;QAEX,IAAI,CAAC,QAAQ,CAAC;YAAC,WAAW;gBAAC;aAAO;YAAE,cAAc;QAAS;IAC7D;IACA,kBAAkB,IAAI,EAAE;QACtB,IAAI,CAAC,KAAK,QAAQ,EAAE;YAClB,IAAI,eAAe,IAAI,CAAC,KAAK,CAAC,YAAY;YAC1C,aAAa,QAAQ,GAAG;YACxB,KAAK,QAAQ,GAAG;YAChB,eAAe;YACf,IAAI,KAAK,IAAI,KAAK,WAAW;gBAC3B,IAAI,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACnC,IAAI,CAAC,WAAW,CAAC;YACnB,OACK;gBACH,IAAI,WAAW,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBACpC,IAAI,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG;gBACtD,IAAI,IAAI,CAAC,aAAa,KAAK,SACzB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;qBAErB;oBACH,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;oBAC7C,IAAI,CAAC,WAAW,CAAC,SAAQ;gBAC3B;YACF;YACA,IAAI,CAAC,QAAQ,CAAC;8BAAC;YAAY;QAC7B;IACF;IACA,UAAU,KAAK,EAAE;QACf,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS;QACpC,IAAI,eAAe,IAAI,CAAC,KAAK,CAAC,YAAY;QAC1C,IAAI,SAAS,MAAM,KAAK;QACxB,IAAI,UAAU,SAAS,CAAC,OAAO;QAC/B,IAAI,UAAU;YAAC;SAAQ;QACvB,MAAO,QAAQ,KAAK,CAAE;YACpB,UAAU,QAAQ,KAAK,CAAC,EAAE;YAC1B,QAAQ,OAAO,CAAC;QAClB;QACA,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS;YAC7B,IAAI,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACzC,IAAI,WAAW;YACf,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY;gBAClC,WAAW;gBACX,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACvC;YACA,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;gBACvB,eAAe;gBACf,OAAO,CAAC,EAAE,CAAC,QAAQ,GAAG;gBACtB,IAAI,IAAI,CAAC,aAAa,KAAK,SACzB,IAAI,CAAC,OAAO,CAAC,cAAc;qBAExB;oBACH,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;oBAC7C,IAAI,CAAC,WAAW,CAAC;gBACnB;YACF,OACK;gBACH,IAAI,cACF,aAAa,QAAQ,GAAG;gBAE1B,eAAe,OAAO,CAAC,EAAE;gBACzB,OAAO,CAAC,EAAE,CAAC,QAAQ,GAAG;gBACtB,IAAI,IAAI,CAAC,aAAa,KAAK;oBACzB,IAAI,UACF,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;yBAGxB,IAAI,CAAC,OAAO,CAAC,cAAc;uBAG1B;oBACH,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;oBAC7C,IAAI,UACF,IAAI,CAAC,WAAW,CAAC,SAAS;yBAG1B,IAAI,CAAC,WAAW,CAAC;gBAErB;YACF;YACA,IAAI,CAAC,QAAQ,CAAC;gBAAC,WAAW;gBAAW,cAAc;YAAY;QACjE;IACF;IAEA,kBAAkB;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACxB,IAAI,OAAO,EAAE;YACb,IAAI,WAAW,EAAE;YACjB,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS;YAChC,MAAO,MAAO;gBACZ,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG;gBACtB,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC;gBACxB,IAAI,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,UAC1B,QAAQ,KAAK,CAAC,EAAE,CAAC,KAAK;qBAGtB,QAAQ;YAEZ;YACA,qBAAqB;YACrB,qBAAO,gCAAC,CAAA,GAAA,oDAAO;gBACb,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS;gBAC1B,WAAW;gBACX,aAAa,CAAC,OAAS,IAAI,CAAC,iBAAiB,CAAC;gBAC9C,cAAc,CAAC,OAAS,QAAQ,GAAG,CAAC,eAAe;gBACnD,kBAAkB,KAAK,IAAI,CAAC;gBAC5B,kBAAkB;;QAEpB,WAAW;QACX,cAAc;QACd,kCAAkC;QAClC,4CAA4C;QAC5C,6CAA6C;QAC7C,sBAAsB;QACtB,yBAAyB;QACzB,kDAAkD;QAClD,OAAO;QACP,KAAK;QACP;QACA,qBAAO,gCAAC,CAAA,GAAA,6BAAM;IAChB;IAEA,cAAc;QACZ,QAAQ,GAAG,CAAC,6BAA4B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI;QAEpE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC;YACnC,UAAU;YACV,UAAU;YACV,UAAU,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;YACpC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK;QACrC;IACF;IAEA,SAAS;QACP,IAAI,cAAa;QAEjB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YAC3B,IAAI,UAAU,CAAA,GAAA,uCAAA,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAC;YACtC,IAAI,QAAQ;gBACV;oBAAC,MAAM,oBAAkB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI;oBAAE,KAAK,GAAG,kCAAY,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG;gBAAA;aACzI;YACD,IAAI,QAAQ,cAAc,CAAC,8BACzB,MAAM,IAAI,CAAC;gBAAC,MAAM;gBAAuB,KAAK,GAAG,kCAAY,gBAAgB,EAAE,QAAQ,yBAAyB,CAAC,GAAG,CAAC,EAAE,EAAE;YAAA;YAE3H,6BAAe,gCAAC,CAAA,GAAA,yCAAI;gBAAc,OAAO;eAAf;YAC1B,IAAI,UAAU;gBACZ;oBACE,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE;oBACzD,aAAa,IAAI,IAAI,CAAC,WAAW;gBACnC;aACD;YACD,6BAAe,gCAAC,CAAA,GAAA,yCAAM;gBAAgB,cAAc;eAAxB;QAC9B;QACA,MAAM,YAAY,IAAI,CAAC,YAAY;QACnC,qBACE,iCAAC;YAAI,KAAK,CAAC;gBAAS,IAAI,CAAC,UAAU,GAAG;YAAI;YAAG,WAAU;;8BACrD,iCAAC;oBAAI,WAAU;oBAAkB,OAAO;wBAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;oBAAA;;sCAChE,gCAAC;4BACC,WAAU;4BACV,SAAS,IAAM,IAAI,CAAC,UAAU;4BAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,2BAA2B;sCAE1D,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,WAAM;;wBAEjC,IAAI,CAAC,KAAK,CAAC,WAAW,kBACrB,gCAAC;4BAAI,WAAU;sCACZ,IAAI,CAAC,eAAe;;sCAGzB,gCAAC;4BAAI,WAAU;4BAAyB,IAAI,IAAI,CAAC,QAAQ;;;;8BAE3D,gCAAC;oBACC,WAAU;oBACV,aAAa,CAAC,IAAM,IAAI,CAAC,WAAW,CAAC;oBACrC,OAAM;;gBAEP;gBACA;;;IAGP;AACF;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,yBACA,yBACA,4BACA,6BACA;;;;;;;;;;;;;;AC7YF,MAAM,8BAAQ;IACZ,OAAO;IACP,MAAM;IACN,KAAK;IACL,SAAS;IACT,WAAW;IACX,UAAU;IACV,MAAM;AACR;AAEA,MAAM,qCAAe;IAAC,KAAK;QAAC,OAAO;QAAW,MAAM;IAAK;AAAC;AAC1D,MAAM,sCAAgB,CAAC,aAAC,SAAS,WAAE,OAAO,EAAC;IACzC,MAAM,WAAW,UAAU,YAAY;IACvC,MAAM,MAAM,2BAAK,CAAC,SAAS;IAC3B,IAAI,UAAU,cAAc,EAAE;QAC5B,MAAM,UAAU,UAAU,cAAc;QACxC,IAAI,WAAW,OAAO,YAAY,KAChC,qBAAO,iCAAC;YAAE,QAAO;YAAS,MAAM,GAAG,MAAM,SAAS;;gBAC/C,UAAU,MAAM;gBAAC;gBAAG;gBAAS;;;IAEpC;IACA,IAAI,aAAa,aACf,qBACE,iCAAC;QAAK,IAAI,UAAU,MAAM;QAAE,QAAQ;QAAK,QAAO;QAAO,QAAO;;0BAC5D,gCAAC;gBAAM,MAAK;gBAAS,MAAK;gBAAS,OAAO,QAAQ,OAAO,CAAC,WAAU;;0BACpE,gCAAC;gBAAM,MAAK;gBAAS,MAAK;gBAAS,OAAM;;0BACzC,gCAAC;gBAAO,MAAK;gBAAS,WAAU;0BAAmB;;;;IAIzD,IAAI,UAAU,MAAM,KAAK,QAAQ,UAAU,YAAY,KAAK,aAC1D,qBAAO,iCAAC;QAAE,QAAO;QAAS,MAAM,2BAAK,CAAC,WAAW;;YAAG,UAAU,MAAM;YAAC;;;IAEvE,qBAAO,gCAAC;kBAAM,UAAU,MAAM;;AAChC;AACA,SAAS,uCAAiB,CAAC,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,WAAW,UAAU;IACrC,MAAM,OAAO,GAAG,WAAW,UAAU;IACrC,MAAM,SAAS,KAAK,aAAa,CAAC,MAAM,MAAM;QAAE,aAAa;IAAS;IACtE,IAAI,WAAW,GAAG,OAAO;IAEzB,MAAM,OAAO,GAAG,WAAW,UAAU;IACrC,MAAM,OAAO,GAAG,WAAW,UAAU;IACrC,OAAO,KAAK,aAAa,CAAC,MAAM,MAAM;QAAE,aAAa;IAAS;AAChE;AACA,SAAS,sCAAgB,IAAI,EAAE,YAAY,EAAE,OAAO;IAClD,IAAI,iBAAiB,EAAE;IACvB,OAAO,OAAO,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,KAAI,WAAW;QAC/C,MAAM,QAAQ,IAAI,KAAK,CAAC;QACxB,IAAI,KAAK,CAAC,EAAE,KAAK,OACf;YAAA,IAAI,KAAK,CAAC,EAAE,KAAK,UACf,WAAW,MAAM,CAAC,CAAA,SAAU,aAAa,cAAc,CAAC,SAAS,OAAO,CAAC,CAAA;gBACvE,MAAM,YAAY,YAAY,CAAC,OAAO,CAAC,EAAE;gBACzC,MAAM,MAAM,CAAA,GAAA,yCAAS,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,MAAM,SAAS,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAI;gBACvC,MAAM,SAAS,KAAK,CAAC,EAAE,KAAK,QAAQ,iBAAiB;gBACrD,MAAM,UAAU;oBACd,KAAK;wBAAC,IAAI,KAAK;wBAAC;wBAAO;qBAAO,CAAC,IAAI,CAAC;oBACpC,WAAW;oBACX,KAAK;gBACP;gBACA,eAAe,IAAI,CAAC;YACtB;QACF;IAEJ;IACA,oCAAoC;IACpC,MAAM,SAAS,CAAA,GAAA,uCAAA,EAAE,OAAO,CAAC,gBAAgB;IACzC,IAAI,UAAU,EAAE;IAChB,IAAI,KAAG;IACP,OAAO,IAAI,CAAC,QAAQ,IAAI,GAAG,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,KAAI,QAAO,OAAO,GAAG,MAAM,KAAK,CAAC;QACxC;QACA,MAAM,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM;QAClC,QAAQ,IAAI,CAAC;YACX,IAAI;YACJ,OAAO;YACP,SAAS;YACT,KAAK;YACL,QAAQ;YACR,QAAQ;YACR,OAAO;QACT;QACA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAkB,OAAO,CAAC,CAAA;YAC3C;YACA,QAAQ,IAAI,CAAC;gBACX,IAAI;gBACJ,OAAO;gBACP,SAAS;gBACT,KAAI;gBACJ,QAAQ;gBACR,QAAQ;gBACR,WAAW;gBACX,OAAO;YACT;QACF;IACF;IACA,OAAO;AACT;AACA,MAAM,kCAAY;AAClB,MAAM,uCAAiB,CAAC,UAAC,MAAM,WAAC,OAAO,UAAC,MAAM,EAAC;IAC7C,MAAM,CAAC,SAAS,WAAW,GAAG,CAAA,GAAA,qBAAO,EAAE;IAEvC,MAAM,kBAAkB,CAAC;IACzB,QAAQ,OAAO,CAAC,CAAC;QACf,IAAI,IAAI,OAAO,EACb,eAAe,CAAC,IAAI,KAAK,CAAC,GAAI,IAAI,KAAK,GAAG;IAE9C;IACA,MAAM,CAAC,gBAAgB,kBAAkB,GAAG,CAAA,GAAA,qBAAO,EAAE;IAGrD,0BAA0B;IAC1B,MAAM,cAAc,CAAC;QACnB,kBAAkB,CAAC,qBAAwB,CAAA;gBACzC,GAAG,kBAAkB;gBACrB,CAAC,MAAM,EAAE,CAAC,kBAAkB,CAAC,MAAM;YACrC,CAAA;IACF;IAEA,sEAAsE;IACtE,MAAM,oBAAoB;QACxB,MAAM,cAAc,EAAE;QACtB,QAAQ,OAAO,CAAC,CAAC;YACf,IAAI,IAAI,OAAO,EACb;gBAAA,IAAI,IAAI,KAAK,GAAG,GACd,YAAY,IAAI,CAAC;YACnB,OACK,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAClC,YAAY,IAAI,CAAC,MAAM,iDAAiD;QAE5E;QACA,OAAO;IACT;IAEA,6DAA6D;IAC7D,MAAM,aAAa;QACjB;YAAE,OAAO;YAAO,YAAY;YAAoB,MAAM;YAAG,UAAU;YACjE,cAAc,CAAC;gBACb,IAAI,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,GAC/C,OAAO,OAAO,KAAK;gBAErB,OAAO;YACT;QACF;QACA;YAAE,OAAO;YAAU,YAAY;YAAmB,MAAM;YAAG,UAAU;YACnE,cAAc,CAAC;gBACb,IAAI,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,GAC/C,OAAO,OAAO,KAAK;gBAErB,OAAO;YACT;QACF;QACA;YAAE,OAAO;YAAU,YAAY;YAAiB,MAAM;YAAG,UAAU;YACjE,cAAc,CAAC;gBACb,IAAI,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,GAC/C,OAAO,OAAO,KAAK;gBAErB,OAAO;YACT;QACF;QACA;YAAE,OAAO;YAAa,YAAY,SAAS,oBAAoB;YAAa,MAAM;YAAG,UAAU;YAC7F,iBAAiB,CAAC;gBAChB,qBACE,iCAAC;oBAAI,OAAO;wBAAC,SAAS;wBAAQ,YAAY;oBAAQ;;wBAC/C,wBAAU,gCAAC;4BAAE,WAAU;sCAAuB;;sCAC/C,gCAAC;sCAAM,MAAM,WAAW;;;;YAG9B;YACA,cAAc,CAAC;gBACb,IAAI,OAAO,KAAK,EACd,qBAAO,gCAAC;oBAAc,WAAW,OAAO,KAAK,CAAC,SAAS;oBAAE,SAAS;;gBAEpE,IAAI,OAAO,IAAI,CAAC,OAAO,EACrB,qBACE,iCAAC;oBACC,SAAS,IAAM,YAAY,OAAO,IAAI,CAAC,KAAK;;wBAE3C,OAAO,IAAI,CAAC,KAAK;wBAAC;wBAAa,cAAc,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,WAAM;;;gBAIhF,OAAO;YACT;QACF;QACA;YAAE,OAAO;YAAW,YAAY;YAAW,QAAO;YAAO,UAAS;YAAO,MAAM;YAAG,UAAU;YAAK,cAAc,CAAC;gBAC9G,IAAI,OAAO,IAAI,CAAC,SAAS,EACvB,OAAO,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM;gBAE/C,OAAO;YACT;QAAC;QACD;YAAE,OAAO;YAAU,YAAY;YAAiB,QAAO;YAAO,UAAU;YAAO,MAAM;YAAG,UAAU;YAAK,cAAc,CAAC;gBACpH,IAAI,OAAO,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,KAChH,OAAO,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM;gBAE/C,OAAO;YACP;QAAC;QACH;YAAE,OAAO;YAAU,YAAY;YAAiB,UAAS;YAAO,QAAO;YAAO,MAAM;YAAG,UAAU;YAC/F,cAAc,CAAC;gBACb,IAAI,OAAO,IAAI,CAAC,SAAS,EAAE;oBACzB,MAAM,aAAa,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI;oBAC/C,MAAM,YAAY,OAAO,IAAI,CAAC,SAAS;oBACvC,WAAW,MAAM,GAAG;oBACpB,WAAW,YAAY,CAAC,GAAG,CAAC,YAAY;oBACxC,WAAW,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrF,WAAW,YAAY,CAAC,GAAG,CAAC,YAAY,UAAU,SAAS,CAAC,MAAM;oBAClE,WAAW,YAAY,CAAC,GAAG,CAAC,QAAQ,UAAU,SAAS,CAAC,MAAM;oBAE9D,qBAAO,gCAAC,CAAA,GAAA,4BAAK;wBAAE,MAAK;wBAAK,MAAM,WAAW,QAAQ;kCAAI;;gBAExD;gBACA,OAAO;YACT;QACF;KACD;IAED,MAAM,gBAAgB;QACpB,UAAU;QACV,QAAQ;QACR,WAAW,CAAC;YACV,IAAI,OAAO,IAAI,CAAC,OAAO,EACrB,OAAO;gBAAC,QAAQ;YAAS;YAE3B,OAAO;QACT;IACF;IAEA,MAAM,WAAW,oBAAoB,MAAM;IAC3C,MAAM,cAAc,KAAK,KAAK,GAAG,CAAC,UAAU,MAAM;IAClD,qBACE,gCAAC;QAAI,OAAO;YAAE,WAAW;YAAQ,OAAO;YAAQ,UAAU;QAAS;kBACjE,cAAA,gCAAC;YACC,WAAU;YACV,OAAO;gBAAE,QAAQ;gBAAa,UAAU;gBAAS,OAAO;YAAO;sBAE/D,cAAA,gCAAC,CAAA,GAAA,8BAAU;gBACT,SAAS;gBACT,YAAY;gBACZ,cAAc,CAAC,OAAS,KAAK,EAAE;gBAC/B,aAAa;gBACb,eAAe;;;;AAKzB;AAEA,MAAM,+BAAS,CAAA;IACb,MAAM,OAAO,MAAM,QAAQ,CAAC,MAAM,YAAY,CAAC,EAAE,CAAC;IAClD,IAAI,MAAM,mBAAmB,IAAI,MAAM,mBAAmB,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,gBAAgB,EAAE;QAC9F,MAAM,SAAS,sCAAgB,MAAM,MAAM,gBAAgB,EAAE,MAAM,mBAAmB,CAAC,KAAK,GAAG,CAAC;QAEhG,qBAAO,iCAAC;;8BACN,gCAAC;8BAAG;;8BACJ,iCAAC;;wBAAK;sCAA+C,gCAAC;4BAAE,QAAO;4BAC5D,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,qCAAqC,EAAE,MAAM,YAAY,CAAC,EAAE,EAAE;sCAAE;;wBAC5G;;;8BACnB,gCAAC;oBAAe,QAAW;oBAAQ,SAAS,KAAK,GAAG;oBAAE,QAAQ,CAAC,MAAM,aAAa,CAAC,cAAc,CAAC;;;;IAEtG,OAAO;QACL,MAAM,YAAY,CAAC,KAAK,GAAG;QAC3B,qBAAO,gCAAC;sBAAI;;IACd;AACF;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA,6BACA,0BACA,gBACA;;;;;;;;;ACnRF,MAAM,oDAA8B;AAEpC,MAAM,mCAAa,CAAA,GAAA,sCAAI,EAAE,SAAS;IAChC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,KAAK,GAAG;YAAC,SAAS;QAAK;IAC9B;IAEA,gBAAgB;QACd,IAAI,CAAC,QAAQ,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;QAAA;IAC7C;IAEA,qBAAqB,IAAI,EAAE;QACzB,IAAI,UAAU,cAAc;QAE5B,IAAI,KAAK,MAAM,GAAG,mDAA6B;YAC7C,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBACtB,eAAe,kBAAkB;gBACjC,gBAAgB;YAClB,OACK;gBACH,eAAe,sBAAkB,CAAA,KAAK,MAAM,GAAG,iDAA0B,IAAK;gBAC9E,gBAAgB;gBAChB,OAAO,KAAK,KAAK,CAAC,GAAG;YACvB;YAEA,yBACE,gCAAC;gBAAkB,WAAU;0BAC3B,cAAA,gCAAC;oBAAE,OAAO;oBAAe,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI;8BAAI;;eAD5D;YAKV,KAAK,IAAI,CAAC;QACZ;QAEA,OAAO;IACT;IAEA,SAAS;QACP,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;QAC9B,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;QAEhC,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI;QAErC,IAAI,OAAO,QAAQ,GAAG,CAAC,SAAU,IAAI,EAAE,GAAG;YACtC,IAAI,MAAM,OAAO,OACf,UAAU,MAAM,oDAA8B,YAAY;YAC5D,IAAI,yBAAW,iCAAC;gBAAM,OAAM;;oBAA+C;kCAAC,gCAAC;wBAAE,WAAU;;;;YACzF,qBACE,gCAAC;gBAAa,WAAW;0BACvB,cAAA,iCAAC;oBAAE,MAAM;oBAAK,QAAO;oBAAS,SAAS;wBACrC,CAAA,GAAA,yCAAM,EAAE,KAAK,CAAC;4BACZ,UAAU;4BAAiB,QAAQ;4BAAU,OAAO;wBACtD;oBACF;;wBAAI;wBAAM;;;eALH;QAeb;QAEF,OAAO,IAAI,CAAC,oBAAoB,CAAC;QAEjC,qBACE,iCAAC;;8BACC,gCAAC;oBAAG,WAAU;8BAAiB;;8BAC/B,gCAAC;oBAAG,WAAU;8BACZ,cAAA,gCAAC;wBAAG,WAAU;kCAAgB;;;;;IAItC;AACF;AAEA,SAAS,yCAAmB,IAAI;IAC9B,IAAG,CAAC,QAAQ,CAAC,CAAA,GAAA,uCAAA,EAAE,OAAO,CAAC,KAAK,KAAK,GAC/B,MAAM,IAAI,MAAM,kBAAkB,CAAA,GAAA,uCAAA,EAAE,GAAG,CAAC,KAAK,GAAG;IAElD,OAAO,KAAK,KAAK,CACd,MAAM,CAAC,CAAA,KAAM,CAAA,GAAA,+CAAM,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,EAAE,KAAK,UACjD,IAAI,GACJ,GAAG,CAAC,CAAC,IAAG;QACP,IAAI,OAAO,CAAA,GAAA,+CAAM,EAAE,KAAK,CAAC,GAAG,EAAE;QAC9B,qBACE,gCAAC;YAAe,MAAM;YAAM,SAAS,GAAG,GAAG;YAAE,QAAQ,GAAG,MAAM;YAAE,MAAM,GAAG,IAAI;WAAlE;IAEf;AACJ;AAEA,MAAM,8BAAQ,CAAC,gBAAC,YAAY,YAAE,QAAQ,EAAC,iBACrC,iCAAC,CAAA,GAAA,yCAAK;;0BACJ,gCAAC,CAAA,GAAA,yCAAI;0BAAc;eAAR;0BACX,gCAAC,CAAA,GAAA,yCAAU;0BAAoB;eAAd;0BACjB,gCAAC,CAAA,GAAA,yCAAM;0BACL,cAAA,iCAAC;oBAAM,WAAU;;sCACf,gCAAC;sCACD,cAAA,iCAAC;;kDACC,gCAAC;wCAAG,WAAU;kDAAgB;;kDAC9B,gCAAC;wCAAG,WAAU;kDAAiB;;;;;sCAGjC,gCAAC;sCACA,yCAAmB,QAAQ,CAAC,aAAa,EAAE,CAAC;;;;eATpC;;;IAgBjB,2CAAe;;;;;;;;;AClHf,MAAM,oDAA8B;AAEpC,MAAM,mCAAa,CAAA,GAAA,sCAAI,EAAE,SAAS;IAChC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,KAAK,GAAG;YAAC,SAAS;QAAK;IAC9B;IAEA,gBAAgB;QACd,IAAI,CAAC,QAAQ,CAAC;YAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;QAAA;IAC7C;IAEA,qBAAqB,IAAI,EAAE;QACzB,IAAI,UAAU,cAAc;QAE5B,IAAI,KAAK,MAAM,GAAG,mDAA6B;YAC7C,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;gBACtB,eAAe,kBAAkB;gBACjC,gBAAgB;YAClB,OACK;gBACH,eAAe,sBAAkB,CAAA,KAAK,MAAM,GAAG,iDAA0B,IAAK;gBAC9E,gBAAgB;gBAChB,OAAO,KAAK,KAAK,CAAC,GAAG;YACvB;YAEA,yBACE,gCAAC;gBAAkB,WAAU;0BAC3B,cAAA,gCAAC;oBAAE,OAAO;oBAAe,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI;8BAAI;;eAD5D;YAKV,KAAK,IAAI,CAAC;QACZ;QAEA,OAAO;IACT;IAEA,SAAS;QACP,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;QAC9B,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;QAEhC,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI;QAErC,IAAI,OAAO,QAAQ,GAAG,CAAC,SAAU,IAAI,EAAE,GAAG;YACtC,IAAI,MAAM,OAAO,OACf,UAAU,MAAM,oDAA8B,YAAY;YAC5D,IAAI,yBAAW,iCAAC;gBAAM,OAAM;;oBAA+C;kCAAC,gCAAC;wBAAE,WAAU;;;;YACzF,qBACE,gCAAC;gBAAa,WAAW;0BACvB,cAAA,iCAAC;oBAAE,MAAM;oBAAK,QAAO;oBAAS,SAAS;wBACrC,CAAA,GAAA,yCAAM,EAAE,KAAK,CAAC;4BACZ,UAAU;4BAAiB,QAAQ;4BAAU,OAAO;wBACtD;oBACF;;wBAAI;wBAAM;;;eALH;QAeb;QAEF,OAAO,IAAI,CAAC,oBAAoB,CAAC;QAEjC,qBACE,iCAAC;;8BAEC,gCAAC;oBAAG,WAAU;8BACZ,cAAA,gCAAC;wBAAG,WAAU;kCAAgB;;;8BAEhC,gCAAC;oBAAG,WAAU;8BAAiB,IAAI,CAAC,KAAK,CAAC,MAAM;;8BAChD,gCAAC;oBAAG,WAAU;8BAAkB,IAAI,CAAC,KAAK,CAAC,IAAI;;;;IAGrD;AACF;AAEA,SAAS,wCAAkB,IAAI;IAC7B,IAAG,CAAC,QAAQ,CAAC,CAAA,GAAA,uCAAA,EAAE,OAAO,CAAC,KAAK,KAAK,GAC/B,MAAM,IAAI,MAAM,kBAAkB,CAAA,GAAA,uCAAA,EAAE,GAAG,CAAC,KAAK,GAAG;IAElD,IAAI,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA,KAAM,GAAG,EAAE,KAAK;IAC7C,IAAI,KAAK,MAAM,KAAK,GAClB,qBAAO,gCAAC;kBAAG,cAAA,gCAAC;YAAG,SAAS;sBAAG;;;IAE7B,OAAO,KAAK,IAAI,CAAC,CAAC,GAAE;QAChB,IAAI,EAAE,MAAM,EAAE;YACZ,IAAI,EAAE,MAAM,EAAE;gBACZ,IAAI,EAAE,MAAM,GAAG,EAAE,MAAM,EACrB,OAAO;gBAET,IAAI,EAAE,MAAM,GAAG,EAAE,MAAM,EACrB,OAAO;YAEX,OAEE,OAAO;QAEX,OACK,IAAI,EAAE,MAAM,EACf,OAAO;QAET,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EACb,OAAO;QAET,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EACb,OAAO;QAET,OAAO;IACT,GACC,GAAG,CAAC,CAAC,IAAG;QACP,IAAI,OAAO,CAAA,GAAA,+CAAM,EAAE,KAAK,CAAC,GAAG,EAAE;QAC9B,qBACE,gCAAC;YAAe,MAAM;YAAM,SAAS,GAAG,GAAG;YAAE,QAAQ,GAAG,MAAM;YAAE,MAAM,GAAG,IAAI;WAAlE;IAEf;AACJ;AACA,MAAM,gCAAU;AAChB,MAAM,qCAAe,CAAC,gBAAC,YAAY,YAAE,QAAQ,EAAC,iBAC5C,iCAAC,CAAA,GAAA,yCAAK;;0BACJ,gCAAC,CAAA,GAAA,yCAAI;0BAAc;eAAR;0BACX,gCAAC,CAAA,GAAA,yCAAU;0BAAoB;eAAd;0BACjB,gCAAC,CAAA,GAAA,yCAAM;0BACL,cAAA,iCAAC;oBAAM,WAAU;;sCACf,gCAAC;sCACD,cAAA,iCAAC;;kDACC,gCAAC;wCAAG,WAAU;kDAAc;;kDAC5B,gCAAC;wCAAG,WAAU;kDAAc;;kDAC5B,gCAAC;wCAAG,WAAU;kDAAc;;;;;sCAG9B,gCAAC;sCACA,wCAAkB,QAAQ,CAAC,aAAa,EAAE,CAAC;;sCAE5C,gCAAC;sCACC,cAAA,gCAAC;0CACC,cAAA,iCAAC;oCAAG,SAAS;;wCAAG;sDAAuB,gCAAC;4CAAE,QAAO;4CAAS,MAAM,gCAAU,aAAa,EAAE;sDAAE;;;;;;;;eAdtF;;;IAsBjB,2CAAe;;;;;;;;;;ACpJf,MAAM,kCAAY,CAAA;IAChB,MAAM,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE;IAE/C,MAAM,CAAC,kBAAkB,oBAAoB,GAAG,CAAA,GAAA,qBAAO,EAAE;IAEzD,MAAM,WAAW;QACf,uDAAuD;QACvD,UAAU,SAAS,CAAC,SAAS,CAAC,YAC3B,IAAI,CAAC;YACJ,oBAAoB;QACtB,GACC,KAAK,CAAC,CAAC;YACN,QAAQ,KAAK,CAAC,+BAA+B;QAC/C;IACJ;IAEA,CAAA,GAAA,sBAAQ,EAAE;QACR,IAAI,kBAAkB;YACpB,MAAM,sBAAsB,WAAW;gBACrC,oBAAoB;YACtB,GAAG,OAAO,wCAAwC;YAElD,OAAO,IAAM,aAAa;QAC5B;IACF,GAAG;QAAC;KAAiB;IAErB,qBACE,iCAAC;QAAI,WAAU;;0BACb,iCAAC;gBAAK,WAAU;;kCAAQ,iCAAC;wBAAK,WAAU;;4BAAS;4BAAK,MAAM,EAAE;;;kCAAQ,gCAAC;oBACrE,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,OAAM,oBACtB,gCAAC;4BAAe,WAAW,MAAM,IAAI;sCAAG,MAAM,GAAG;2BAAtC;;;0BAGf,iCAAC;gBAAE,WAAU;;kCACX,gCAAC;kCAAE;;oBAAQ;kCACX,gCAAC;wBAAK,WAAU;kCAAc;;oBAAmB;kCAEjD,gCAAC;wBAAK,WAAU;kCAAa;;oBAAmB;kCAEhD,gCAAC;wBAAK,WAAU;kCAAc;;;;0BAEhC,gCAAC;gBAAO,WAAU;gBAAc,SAAS;0BAAU,cAAA,gCAAC,CAAA,GAAA,iCAAY;;YAC/D,kCAAoB,gCAAC;gBAAI,WAAU;0BAAe;;;;AAGzD;AAEA,MAAM,wCAAkB,CAAC,KAAK;IAC5B,IAAI,YAAY,EAAE;IAClB,IAAI,WAAW,cAAc,EAC3B,WAAW,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI;QACrC,IAAI,KAAK,WAAW,GAAG,CAAC,KAAK,IAAI,MAAM,WAAW,GAAG,CAAC,GAAG,EACvD,UAAU,IAAI,CAAC,KAAK,KAAK,CAAC,AAAC,CAAA,KAAK,WAAW,GAAG,CAAC,KAAK,AAAD,IAAK;IAE5D;IAEF,IAAI,UAAU,MAAM,KAAK,GACvB,OAAO;QAAC;YAAC,MAAK;YAAO,KAAI;QAAG;KAAE;IAEhC,IAAI,SAAS;IACb,IAAI,SAAS,EAAE;IACf,UAAU,OAAO,CAAC,CAAC,GAAG;QACpB,IAAI,OAAO,MAAM,MAAM,IAAI,QAAQ;QACnC,OAAO,IAAI,CAAC;YAAC,MAAM;YAAM,KAAK,IAAI,SAAS,CAAC,QAAQ;QAAE;QACtD,SAAS;IACX;IACA,OAAO,IAAI,CAAC;QAAC,MAAM,UAAU,MAAM,GAAG,MAAM,IAAI,QAAQ;QAAa,KAAK,IAAI,SAAS,CAAC,UAAU,GAAG;IAAG;IACxG,OAAO;AACT;AACA,MAAM,oCAAc,CAAC,SAAS,MAAM,IAAI,MAAM,KAAK;IACjD,uDAAuD;IACvD,IAAI,SAAS,EAAE;IACf,MAAM,aAAa,KAAK,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,KAAM,GAAG,EAAE,KAAK;IACxE,MAAM,SAAS,KAAK,QAAQ,CAAC,MAAM,KAAK,IACpC,KAAK,QAAQ,CAAC,KAAK,GAAG,QAAQ,KAAK,GACnC,QAAQ,GAAG,GAAG,KAAK,QAAQ,CAAC,GAAG;IACnC,IAAI,KAAK,GAAG;QACV,MAAM,MAAM,KAAK,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,OAAQ,KAAK,EAAE,KAAK,WAAW,KAAK,CAAC,EAAE,EAAE,KAAK;QACzF,OAAO,IAAI,CAAC;YACV,MAAK;YACL,KAAK,QAAQ,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,MAAM,GAAG,SAAS,MAAM,GAAG,WAAW;QACjF;IACF;IACA,qCAAqC;IACrC,IAAI,oBAAoB;IACxB,IAAI,cAAc;IAClB,IAAI,YAAY;IAChB,IAAI,QAAQ;IACZ,WAAW,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK;QAC7B,MAAM,OAAO,KAAK,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,OAAQ,KAAK,EAAE,KAAK;QAChE,IAAI,QAAQ,KAAK,SAAS,OAAO;YAC/B,OAAO,IAAI,CAAC;gBACV,MAAM;gBACN,KAAK,QAAQ,GAAG,CAAC,SAAS,CAAC,SAAS,aAAa,SAAS,KAAK,KAAK,GAAG,GAAG,WAAW;YACvF;YACA,cAAc,KAAK,KAAK,GAAC;QAC3B;QACA,IAAI,SAAS,OACX,QAAQ,QAAQ,MAAM,IAAI,WAAW;QAEvC,IAAI,cAAc,KAAK,GAAG,GAAG,KAAK,KAAK,GAAG;QAC1C,IAAI,WAAW,GAAG,IAAI,oBAAoB,WAAW,GAAG,CAAC,KAAK,IAAI,oBAAoB,eAAe,WAAW,GAAG,CAAC,KAAK,EAAE;YACzH,0BAA0B;YAC1B,MAAM,WAAW,WAAW,GAAG,CAAC,KAAK,GAAG,oBAAoB;YAC5D,IAAI,WAAW,GAAG;gBAChB,OAAO,IAAI,CAAC;oBACV,MAAM,YAAY;oBAClB,KAAK,QAAQ,GAAG,CAAC,SAAS,CAAC,SAAS,aAAa,SAAS,cAAc;gBAC1E;gBACA,eAAe;gBACf,eAAe;gBACf,oBAAoB,WAAW,GAAG,CAAC,KAAK,GAAG;YAC7C;YACA,YAAY;QACd;QACA,IAAI,cAAc,SAAS,oBAAoB,eAAe,WAAW,GAAG,CAAC,GAAG,EAAE;YAChF,wBAAwB;YACxB,MAAM,UAAU,WAAW,GAAG,CAAC,GAAG,GAAG;YACrC,IAAI,UAAU,GAAG;gBACf,OAAO,IAAI,CAAC;oBACV,MAAM,YAAY;oBAClB,KAAK,QAAQ,GAAG,CAAC,SAAS,CAAC,SAAS,aAAa,SAAS,cAAc;gBAC1E;gBACA,eAAe;gBACf,eAAe;gBACf,oBAAoB,WAAW,GAAG,CAAC,GAAG;YACxC;YACA,YAAY;QACd;QACA,IAAI,cAAc,GAChB,OAAO,IAAI,CAAC;YACV,MAAM,YAAY;YAClB,KAAK,QAAQ,GAAG,CAAC,SAAS,CAAC,SAAS,aAAa,SAAS,cAAc;QAC1E;QAEF,cAAc,KAAK,GAAG;QACtB,qBAAqB;IACvB;IACA,mEAAmE;IACnE,8FAA8F;IAC9F,IAAI,OAAO,GACT,OAAO,IAAI,CAAC;QACV,MAAK;QACL,KAAK,QAAQ,GAAG,CAAC,SAAS,CAAC,SAAS,aAAa,SAAS,cAAc,MAAM,WAAW;IAC3F;IAEF,OAAO;AACT;AACA,MAAM,gCAAU,CAAC,MAAM,SAAS,IAAI;IAClC,IAAI,KAAK,KAAK,QAAQ,CAAC,MAAM,KAAK,IAAI,KAAK,QAAQ,CAAC,KAAK,GAAG,KAAK,KAAK,QAAQ,CAAC,KAAK,GAAG;IACvF,IAAI,KAAK,KAAK,QAAQ,CAAC,MAAM,KAAK,IAAI,KAAK,QAAQ,CAAC,GAAG,GAAG,OAAO,KAAK,QAAQ,CAAC,GAAG,GAAG;IACrF,IAAI,SAAS,EAAE;IACf,IAAI,KAAK,QAAQ,CAAC,MAAM,KAAK,IAC3B,OAAO,IAAI,CAAC;IAEd,IAAI,KAAK,GACP,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI;IAE9B,IAAI,OAAO,GACT,OAAO,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM;IAElC,OAAO,GAAG,QAAQ,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,MAAM;AACjG;AACA,MAAM,+BAAS,CAAA;IACb,MAAM,OAAO,MAAM,QAAQ,CAAC,MAAM,YAAY,CAAC,EAAE,CAAC;IAClD,MAAM,CAAC,KAAK,OAAO,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC/B,MAAM,CAAC,UAAU,YAAY,GAAG,CAAA,GAAA,qBAAO,EAAE;IACzC,MAAM,CAAC,YAAY,cAAc,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC7C,MAAM,CAAC,KAAK,OAAO,GAAG,CAAA,GAAA,qBAAO,EAAE,KAAK,cAAc,CAAC,oBAAoB;IACvE,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI,MAAM,aAAa,IAAI,MAAM,aAAa,CAAC,KAAK,GAAG,CAAC,EACtD,UAAU,MAAM,aAAa,CAAC,KAAK,GAAG,CAAC;SAEpC;QACH,MAAM,qBAAqB,CAAC;QAC5B,qBAAO,gCAAC;sBAAI;;IACd;IACA,IAAI,MAAM,YAAY,IAAI,MAAM,YAAY,CAAC,IAAI,EAC/C,SAAS,MAAM,YAAY,CAAC,IAAI;SAE7B;QACH,MAAM,oBAAoB,CAAC,KAAK;QAChC,qBAAO,gCAAC;sBAAI;;IACd;IACA,MAAM,QAAQ,KAAK,QAAQ,CAAC,MAAM,KAAK,IAAI,KAAK,QAAQ,CAAC,KAAK,GAAG,QAAQ,KAAK,GAAG,QAAQ,GAAG,GAAG,KAAK,QAAQ,CAAC,GAAG;IAChH,MAAM,UAAU,KAAK,QAAQ,CAAC,MAAM,KAAK,KAAK,KAAK,QAAQ,CAAC,KAAK,GAAG,QAAQ,KAAK,GAAG,QAAQ,GAAG,GAAG,KAAK,QAAQ,CAAC,GAAG;IACnH,MAAM,aAAa,KAAK,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA,KAAM,GAAG,EAAE,KAAK;IACxE,IAAI;IACJ,IAAI,WAAW,WAAW,EAAE;QAC1B,QAAQ,WAAW,WAAW,CAAC,EAAE;QACjC,IAAI,MAAM,YAAY,IAAI,MAAM,YAAY,CAAC,MAAM,EACjD,SAAS,MAAM,YAAY,CAAC,MAAM;aAE/B;YACH,MAAM,oBAAoB,CAAC,OAAO;YAClC,qBAAO,gCAAC;0BAAI;;QACd;IACF;IACA,qBAAO,iCAAC,CAAA,GAAA,0BAAG;QAAE,WAAW;QACtB,UAAU,CAAC,IAAM,OAAO;;0BAExB,iCAAC,CAAA,GAAA,yBAAE;gBAAE,cAAa;gBAAM,UAAS;gBAAM,OAAM;;kCAC3C,iCAAC,CAAA,GAAA,+BAAQ;wBAAE,OAAO;4BAAE,UAAU;4BAAS,YAAY;wBAAC;;0CAClD,gCAAC,CAAA,GAAA,yBAAE;0CACD,cAAA,gCAAC,CAAA,GAAA,yBAAE;8CAAE,cAAA,gCAAC;kDAAE,cAAA,gCAAC;sDAAE;;;;;0CAEb,iCAAC;gCAAI,WAAU;;kDACb,gCAAC;wCAAK,WAAU;kDAAsB;;kDACtC,gCAAC;wCAAI,WAAU;;kDACf,gCAAC;wCAAK,WAAU;kDAAwB;;kDACxC,gCAAC;wCAAI,WAAU;;kDACf,gCAAC;wCAAK,WAAU;kDAAuB;;kDAEvC,gCAAC;wCAAK,WAAU;kDAAuB;;kDACvC,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;wCACT,WAAU;wCACV,OAAO;4CAAC,OAAO;wCAAM;wCACrB,OAAO;wCACP,UAAU,CAAC,IAAM,YAAY,EAAE,MAAM,CAAC,KAAK;wCAC3C,KAAK;wCACL,KAAK;wCACL,MAAM;;kDAER,gCAAC;kDACD,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;wCACT,OAAO;4CAAC,OAAO;wCAAM;wCACrB,OAAO;wCACP,UAAU,CAAC,IAAM,cAAc,EAAE,MAAM,CAAC,KAAK;wCAC7C,KAAK;wCACL,KAAK;wCACL,MAAM;;kDAER,gCAAC;wCAAK,WAAU;kDAAwB;;;;4BAEzC,KAAK,cAAc,CAAC,WAAW,CAAC,MAAM,GAAG,mBAC1C,gCAAC,CAAA,GAAA,yBAAE;0CACD,cAAA,iCAAC,CAAA,GAAA,yBAAE;;sDAAE,gCAAC;sDAAE,cAAA,gCAAC;0DAAE;;;sDAA4B,gCAAC;sDACtC,gCAAC,CAAA,GAAA,iCAAU;sDAAG,KAAK,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAE,IAAM,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI;gDAC7F,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,cAAc,CAAC,oBAAoB,GAAG,YAAY;gDACzE,IAAI,GAAG,EAAE,KAAK,KACZ,IAAI,CAAC,QAAQ,EAAE,GAAG;gDAEpB,qBAAO,gCAAC,CAAA,GAAA,kCAAW;oDACjB,SAAS;oDAET,IAAI,CAAC,MAAM,EAAE,KAAK;oDAClB,MAAK;oDACL,MAAM,GAAG,EAAE;oDACX,OAAO,GAAG,EAAE;oDACZ,SAAS,GAAG,EAAE,KAAK;oDACnB,UAAU,CAAA,IAAK,OAAO,EAAE,aAAa,CAAC,KAAK;8DACzC,GAAG,EAAE;mDAPF;4CAQT;;;;;;;oBAKL,yBAAW,gCAAC;wBAAU,IAAI,8BAAQ,MAAK,SAAQ,CAAC,UAAS,CAAC;wBAAa,KAAK,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAQ,KAAK,QAAQ,CAAC,GAAG,GAAG,KAAK,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC;wBAAa,QAAQ,kCAAY,SAAQ,MAAK,CAAC,UAAS,CAAC,YAAW,KAAI;;;;0BAEvP,iCAAC,CAAA,GAAA,yBAAE;gBAAE,cAAa;gBAAM,UAAS;gBAAM,OAAM;;kCAC3C,gCAAC,CAAA,GAAA,+BAAQ;wBAAE,OAAO;4BAAE,OAAO;4BAAS,YAAY;wBAAC;kCAC9C,KAAK,cAAc,CAAC,WAAW,CAAC,MAAM,GAAG,mBAC1C,gCAAC,CAAA,GAAA,yBAAE;sCACD,cAAA,iCAAC,CAAA,GAAA,yBAAE;;kDAAE,gCAAC;kDAAE,cAAA,gCAAC;sDAAE;;;kDAAyB,gCAAC;kDACnC,gCAAC,CAAA,GAAA,iCAAU;kDAAG,KAAK,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAE,IAAM,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI;4CAC7F,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,cAAc,CAAC,oBAAoB,GAAG,YAAY;4CACzE,IAAI,GAAG,EAAE,KAAK,KACZ,IAAI,CAAC,QAAQ,EAAE,GAAG;4CAEpB,qBAAO,gCAAC,CAAA,GAAA,kCAAW;gDACjB,SAAS;gDAET,IAAI,CAAC,MAAM,EAAE,KAAK;gDAClB,MAAK;gDACL,MAAM,GAAG,EAAE;gDACX,OAAO,GAAG,EAAE;gDACZ,SAAS,GAAG,EAAE,KAAK;gDACnB,UAAU,CAAA,IAAK,OAAO,EAAE,aAAa,CAAC,KAAK;0DACzC,GAAG,EAAE;+CAPF;wCAQT;;;;;;oBAKL,yBAAW,gCAAC;wBAAU,IAAI;wBAAK,KAAK,OAAO,GAAG;wBAAE,QAAQ,kCAAY,SAAQ,MAAK,GAAE,GAAE,KAAI;;;;YAE3F,KAAK,OAAO,KAAK,kCAChB,iCAAC,CAAA,GAAA,yBAAE;gBAAE,cAAa;gBAAM,UAAS;gBAAM,OAAM;;kCAC3C,gCAAC,CAAA,GAAA,+BAAQ;wBAAE,OAAO;4BAAE,OAAO;4BAAS,YAAY;wBAAC;kCAC9C,KAAK,cAAc,CAAC,WAAW,CAAC,MAAM,GAAG,mBAC5C,gCAAC,CAAA,GAAA,yBAAE;sCACD,cAAA,iCAAC,CAAA,GAAA,yBAAE;;kDAAE,gCAAC;kDAAE,cAAA,gCAAC;sDAAE;;;kDAAyB,gCAAC;kDACnC,gCAAC,CAAA,GAAA,iCAAU;kDAAG,KAAK,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAE,IAAM,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI;4CAC7F,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,cAAc,CAAC,oBAAoB,GAAG,YAAY;4CACzE,IAAI,GAAG,EAAE,KAAK,KACZ,IAAI,CAAC,QAAQ,EAAE,GAAG;4CAEpB,qBAAO,gCAAC,CAAA,GAAA,kCAAW;gDACjB,SAAS;gDAET,IAAI,CAAC,MAAM,EAAE,KAAK;gDAClB,MAAK;gDACL,MAAM,GAAG,EAAE;gDACX,OAAO,GAAG,EAAE;gDACZ,SAAS,GAAG,EAAE,KAAK;gDACnB,UAAU,CAAA,IAAK,OAAO,EAAE,aAAa,CAAC,KAAK;0DACzC,GAAG,EAAE;+CAPF;wCAQT;;;;;;oBAKH,yBAAW,gCAAC;wBAAU,IAAI;wBAAO,KAAK,OAAO,GAAG;wBAAE,QAAQ,sCAAgB,OAAO,GAAG,EAAC;;;;;;AAG9F;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA,uBACA,sBACA,sBACA,yBACA,wBACA,wBACA;;;;;;AZ9TF,IAAI,+CAAW,iCAAC;IAAM,OAAM;;QAA+C;sBAAC,gCAAC;YAAE,WAAU;;;;AAEzF,IAAI,kCAAY;IACd,WAAW,CAAA,GAAA,wCAAQ;IACnB,UAAU,CAAA,GAAA,wCAAO;IACjB,YAAY,CAAA,GAAA,wCAAS;IACrB,UAAU,CAAA,GAAA,wCAAO;IACjB,UAAU,CAAA,GAAA,wCAAO;IACjB,KAAK,CAAA,GAAA,wCAAE;IACP,OAAO,CAAA,GAAA,wCAAI;IACX,MAAM,CAAA,GAAA,wCAAW;AACnB;AAEA,SAAS,wCAAkB,YAAY;IACrC,MAAM,UAAU,aAAa,OAAO;IACpC,IAAG,WAAW,YAAY,UAAU,aAAa,WAAW,KAAK,wBAC/D,qBACE,gCAAC;QAAI,WAAU;kBACZ,kCAAY;;AAIrB;AAEA,SAAS,kCAAY,OAAO;IAC1B,IAAG,QAAQ,MAAM,GAAG,KAAK;QACvB,MAAM,QAAQ,QAAQ,MAAM,CAAC,GAAG;QAChC,MAAM,OAAO,QAAQ,MAAM,CAAC;QAC5B,qBAAO,iCAAC;;gBAAG;8BAAM,gCAAC;oBAAK,WAAU;8BAAW;;8BAAQ,gCAAC;oBAAK,WAAU;8BAAQ;;;;IAC9E,OAEE,qBAAO,gCAAC;kBAAG;;AAEf;AACA,MAAM,gCAAU,CAAC;IACf,MAAM,OAAO,MAAM,IAAI;IACvB,MAAM,MAAM,MAAM,GAAG;IACrB,qBAAO,gCAAC;QAAI,WAAU;kBACpB,cAAA,gCAAC;YAAE,QAAO;YAAS,MAAM,IAAI,GAAG,GAAG,aAAa,KAAK,EAAE;sBACrD,cAAA,gCAAC;gBAAI,KAAK,IAAI,GAAG;gBAAE,OAAO,CAAC,kBAAkB,EAAE,IAAI,IAAI,EAAE;;;;AAG/D;AAEA,MAAM,2CAAqB,CAAC,YAAE,QAAQ,EAAE;IACtC,qBACE,iCAAC;QAAI,WAAU;;0BACb,gCAAC;0BAAK;;YACL,SAAS,IAAI,GAAG,mBAAK,iCAAC;gBAAK,WAAU;;oBAAS;oBAAI,SAAS,IAAI;;;YAC/D,SAAS,OAAO,GAAG,qBAAO,iCAAC;gBAAK,WAAU;;oBAAS;oBAAI,SAAS,OAAO;;;;;AAG9E;AACA,MAAM,0CAAoB,CAAC,YAAE,QAAQ,QAAE,IAAI,EAAE;IAC3C,MAAM,QAAQ,SAAS,IAAI,GAAG,SAAS,OAAO;IAC9C,MAAM,YAAa,SAAS,IAAI,GAAG;IACnC,MAAM,eAAgB,SAAS,OAAO,GAAG;IACzC,MAAM,wBACJ,iCAAC,CAAA,GAAA,6BAAM;QAAE,IAAG;;0BACV,gCAAC;0BAAO;;0BAAuB,gCAAC;YAAI;YAC7B,SAAS,IAAI;YAAC;YACX,SAAS,OAAO;;;IAG9B,qBACE,gCAAC,CAAA,GAAA,oCAAa;QAAE,WAAU;QAAO,SAAS;kBACxC,cAAA,iCAAC;YAAE,WAAU;YAAgB,QAAO;YAAS,MAAM,CAAC,sDAAsD,EAAE,KAAK,EAAE,EAAE;;8BACnH,gCAAC;oBAAK,WAAU;oBAAO,OAAO;wBAAC,SAAS;oBAAS;8BAAG;;8BACpD,gCAAC;oBAAK,WAAU;oBAAU,OAAO;wBAAC,SAAS;oBAAY;8BAAG;;;;;AAIlE;AAEA,MAAM,2CAAqB,CAAC;IAC1B,IAAI,IAAI,UAAU,MAAM,MAAM,SAAS,WAAW;IAClD,MAAM,OAAO,MAAM,IAAI;IAEvB,IAAI,KAAK,cAAc,EAAE;QACvB,OAAO,KAAK,gBAAgB,IAAI,KAAK,cAAc;QACnD,OAAO,KAAK,uBAAuB;QACnC,UAAU,KAAK,wBAAwB;QACvC,KAAK,KAAK,cAAc;QACxB,WAAW,KAAK,oBAAoB;QACpC,YAAY;QACZ,WAAW,KAAK,oBAAoB,IAAI;IAC1C,OACK,IAAI,KAAK,YAAY,EAAE;QAC1B,OAAO,KAAK,cAAc,IAAI,KAAK,YAAY;QAC/C,OAAO,KAAK,qBAAqB;QACjC,UAAU,KAAK,sBAAsB;QACrC,KAAK,KAAK,YAAY;QACtB,WAAW,KAAK,kBAAkB;QAClC,YAAY;QACZ,WAAW,KAAK,kBAAkB,IAAI;IACxC;IACA,IAAI,OAAO,IAAI,OAAO;IACtB,IAAI,KAAK,IAAI,CAAC,OACZ,OAAK;IAGP,qBACE,iCAAC;QAAI,WAAW;QAAW,SAAS;YAClC,MAAM,qBAAqB,CAAC;YAC5B,MAAM,uBAAuB,CAAC,CAAA,GAAA,yCAAkB,EAAE;gBAChD,UAAU;gBACV,UAAU;gBACV,UAAU;gBACV,MAAM;YACR;QACF;;0BACE,gCAAC;gBAAI,WAAU;0BAAgB;;YAC9B,WAAW,mBAAK,gCAAC;gBAAI,WAAU;0BAAgB,KAAK,KAAK,CAAC,WAAS;;0BACpE,gCAAC;gBAAG,WAAU;0BAAW;;0BACzB,gCAAC;0BAAG;;;;AAGV;AAEA,MAAM,wCAAkB,CAAA,GAAA,gCAAM,EAC5B,2BAA0B,yBAC1B;AAGF,SAAS,4CAAsB,IAAI;IAEjC,IAAI,gDAA0B,OAE5B,yFAAyF;IACzF,iGAAiG;IACjG,wFAAwF;IACxF,qBACE,gCAAC;QAAgB,MAAM;;AAG7B;AAEA,8DAA8D;AAC9D,kHAAkH;AAClH,6FAA6F;AAC7F,SAAS,gDAA0B,YAAY;IAC7C,OACE,aAAa,cAAc,IACzB,aAAa,YAAY,IACzB,aAAa,YAAY,KAAK,aAAa,EAAE;AAGnD;AAEA,MAAM,mCAAa;IACjB;QACE,IAAI;QACJ,OAAO;QACP,OAAO;QACP,WAAW;IACb;IACA;QACE,IAAI;QACJ,OAAO;QACP,OAAO;QACP,WAAW;IACb;IACA;QACE,IAAI;QACJ,OAAO;QACP,OAAO;QACP,WAAW;IACb;IACA;QACE,IAAI;QACJ,OAAO;QACP,OAAO;QACP,WAAW;IACb;IACA;QACE,IAAI;QACJ,OAAO;QACP,OAAO;QACP,WAAW;IACb;IACA;QACE,IAAI;QACJ,OAAO;QACP,OAAO;QACP,WAAW;IACb;IACA;QACE,IAAI;QACJ,OAAO;QACP,OAAO;QACP,WAAW;IACb;IACA;QACE,IAAI;QACJ,OAAO;QACP,OAAO;QACP,WAAW;IACb;CACD;AAGD,MAAM,mCAAa,CAAA,GAAA,sCAAI,EAAE,SAAS;IAChC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,KAAK,GAAG;YACX,SAAS,iCAAW,GAAG,CAAC,CAAA,IAAM,CAAA;oBAAC,GAAG,CAAC;gBAAA,CAAA,GAAI,MAAM,CAAC,CAAA,IAAK,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAC7E,gBAAgB,MAAM,cAAc;QACtC;QACA,IAAI,UAAU,CAAC;QACf,MAAM,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YACtC,OAAO,CAAC,EAAE,GAAG;YACb,IAAI,MAAM,YACR,QAAQ,KAAK,GAAG;QAEpB;QACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA,IAAK,EAAE,SAAS,IAAI,QAAQ,cAAc,CAAC,EAAE,EAAE;IAC5E;IACA,gBAAgB,CAAC,EAAE;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,EAAE,EAAE,EAAE,OAAO;QAC/C,IAAI,EAAE,SAAS,EAAE,OAAO;QACxB,OAAO,EAAE,EAAE,KAAK,SAAS,UAAU;IACrC;IACA,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,SAAS,IAAI,EAAE,EAAE,KAAK;YAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,KAAK,EAAE,EAAE,EACpC,IAAI,CAAC,QAAQ,CAAC;gBAAC,gBAAgB;YAAI;iBAEhC;gBACH,MAAM,SAAS,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;gBACzC,IAAI,CAAE,CAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAM,GACpE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBAEzB,CAAA,GAAA,yCAAM,EAAE,KAAK,CAAC;oBACZ,UAAU;oBACV,QAAQ;oBACR,OAAO,EAAE,KAAK;gBAChB;gBACA,IAAI,CAAC,QAAQ,CAAC;oBAAC,gBAAgB,EAAE,EAAE;gBAAA;YACrC;;IAEJ;IACA,WAAW,EAAE,EAAE;QACb,IAAI,CAAE,CAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAE,GAAI;YACpE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YACvB,OAAO;QACT;QACA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD;IACA,iBAAiB;QACf,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY;QAClC,IAAI,KAAK,kBAAkB,EACzB,KAAK,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,kBAAkB,CAAC,CAAC,UAAU;QAErF,IAAI,KAAK,oBAAoB,EAC3B,KAAK,wBAAwB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,oBAAoB,CAAC,CAAC,UAAU;QAEzF,OAAO,wCAAkB,SAAS,4CAAsB;IAC1D;IACA,SAAS;QACP,MAAM,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO;QACzC,MAAM,eAAe,IAAI,CAAC,KAAK,CAAC,YAAY;QAC5C,MAAM,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO;QAClC,MAAM,WAAW,IAAI,CAAC,KAAK,CAAC,QAAQ;QACpC,oBAAoB;QACpB,sFAAsF;QACtF,kEAAkE;QAClE,IAAI;QACJ,MAAM,wBAAwB,aAAa,WAAW,CAAC,KAAK,CAAC,KAAK,MAAM;QACxE,qBACE,iCAAC;YAAI,WAAU;;8BACb,iCAAC;oBAAI,WAAU;;sCACb,iCAAC;4BAAI,WAAU;;gCACZ,QAAQ,cAAc,CAAC,aAAa,WAAW,mBAAK,gCAAC;oCAAQ,KAAK,OAAO,CAAC,aAAa,WAAW,CAAC;oCAAE,MAAM;;gCAC3G,0BAAY,gCAAC;oCAAkB,UAAU;oCAAU,MAAM;;8CAC1D,iCAAC;oCAAI,WAAU;;sDACb,gCAAC;4CAAI,WAAU;sDAAgB;;sDAC/B,iCAAC;4CAAG,WAAU;;gDAAa,aAAa,IAAI;gDACzC,aAAa,EAAE,KAAK,aAAa,IAAI,kBAAI,iCAAC;oDAAM,WAAU;;wDAAU;wDAAO,aAAa,EAAE;;;;;;;gCAG9F,aAAa,QAAQ,kBAAI,gCAAC;oCAAM,WAAU;8CAAiB,aAAa,QAAQ,CAAC,IAAI,CAAC;;gCACtF,aAAa,WAAW,KAAK,aAAc,CAAA,wBAAwB,KAAK,aAAa,QAAQ,CAAC,IAAI,AAAD,mBAAM,gCAAC;oCAAE,WAAU;8CAAoB,aAAa,WAAW;;;;wBAElK,IAAI,CAAC,cAAc;;;8BAEtB,gCAAC;oBAAI,WAAU;8BACZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAE,oBACzB,gCAAC,CAAA,GAAA,oCAAa;4BAEZ,WAAW;4BACX,uBACE,gCAAC,CAAA,GAAA,6BAAM;gCAAE,IAAI,CAAC,OAAO,CAAC;0CAAG,EAAE,KAAK;;sCAGlC,cAAA,gCAAC;gCACE,WAAW,CAAC,qCAAqC,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;gCAC5E,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC;0CAC/B,EAAE,KAAK;+BAHC;2BANL;;gBAaV,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,mBAAK,gCAAC;oBAAI,WAAU;8BAAkB,cAAA,CAAA,GAAA,sCAAI,EAAE,aAAa,CAAC,+BAAS,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,KAAK;;;;IAG7K;AACF;AAEA,MAAM,iCAAW,CAAA;IACf,IAAI,MAAM,aAAa,IAAI,MAAM,aAAa,CAAC,QAAQ,IAAI,MAAM,eAAe,EAAE;QAChF,IAAI,MAAK,MAAK;QACd,MAAM,WAAW,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ;QACtD,IAAI,WAAW,MAAM,iBAAiB,EAAE;YACtC,MAAM,UAAU,MAAM,mBAAmB,GAAC,MAAM,iBAAiB;YACjE,qBAAO,iCAAC;gBAAK,OAAO;oBAAC,SAAQ;gBAAM;;oBAAG;kCAAK,gCAAC;kCAAG,UAAU;;oBAAM;kCAAI,gCAAC;kCAAG,KAAK,IAAI,CAAC,WAAS,MAAM,iBAAiB;;;;YACjH,qBAAO,gCAAC,CAAA,GAAA,yBAAI;YACZ,IAAI,UAAU,GACZ,qBAAO,gCAAC,CAAA,GAAA,2BAAI;gBAAE,SAAS,IAAI,MAAM,oBAAoB,CAAC,UAAU;0BAAI,cAAA,gCAAC,CAAA,GAAA,kCAAa;;YAEpF,qBAAO,gCAAC,CAAA,GAAA,yBAAI;YACZ,IAAI,WAAW,MAAM,mBAAmB,GAAG,MAAM,iBAAiB,EAChE,qBAAO,gCAAC,CAAA,GAAA,2BAAI;gBAAE,SAAS,IAAI,MAAM,oBAAoB,CAAC,UAAU;0BAAI,cAAA,gCAAC,CAAA,GAAA,8BAAS;;QAElF;QACA,qBAAO,iCAAC;;8BACN,iCAAC;;wBAAK;wBAAM;wBAAM;;;gBACjB,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAE,oBACxC,gCAAC;wBACK,cAAc;wBACd,QAAQ,MAAM,aAAa;wBAC3B,SAAS,MAAM,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI;wBAC/C,UAAU,MAAM,YAAY;wBAC5B,aAAa,MAAM,oBAAoB;wBACvC,kBAAkB,MAAM,kBAAkB;wBAC1C,WAAW,MAAM,gBAAgB;wBACjC,QAAQ,MAAM,eAAe;wBAC7B,UAAU,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,CAAC,GAAG;wBAC1D,gBAAgB,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ,KAAK,KAAK,EAAE,QAAQ,CAAC,QAAQ,GAAG,aAAa;uBAV7F;gBAaZ;gBAAM;gBAAM;;;IAEjB;IACA,OAAO;AACT;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA,uBACA,yBACA,sBACA,0BACA,6BACA,2BACA,sBACA,wBACA,sBACA,wBACA;;;;;;;;;;;;;Ac9WF,SAAS,qCAAe,UAAU,EAAE,QAAQ;IAC1C,MAAM,gBAAgB,uCAAiB,YAAY;IACnD,MAAM,mBAAmB,SAAS,KAAK,CAAC,OAAO,CAAC,KAAK;IACrD,MAAM,KAAK,uCAAiB;IAE5B,OAAO;QACL,eAAe,cAAc,YAAY;0BACzC;YACA;QACA,iBAAiB,cAAc,SAAS;QACxC,yBAAyB,cAAc,YAAY,GAAG;IACxD;AACF;AAEA,SAAS,uCAAiB,SAAS,EAAE,QAAQ;IAC3C,OAAO,CAAA,GAAA,uCAAA,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU;QACpC,MAAM,OAAO,SAAS,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,GAAG;QAC5D,SAAS,SAAS,IAAI,KAAK,MAAM;QACjC,SAAS,YAAY,IAAI,CAAA,GAAA,uCAAA,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,MAAQ,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE;QAC/E,OAAO;IACT,GAAG;QAAC,cAAc;QAAG,WAAW;IAAC;AACnC;AAEA,MAAM,6CAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9E,SAAS,uCAAiB,UAAU;IAClC,MAAM,eAAe,WAAW,GAAG,CAAC;IACpC,OAAO,CAAC,iBAAiB,EAAE,aAAa,IAAI,CAAC,KAAK,CAAC,CAAC;AACtD;AAEA,MAAM,mCAAa,CAAC,cAAC,UAAU,YAAE,QAAQ,6BAAE,yBAAyB,YAAE,QAAQ,EAAC;IAC7E,MAAM,QAAQ,qCAAe,YAAY;IAEzC,MAAM,YAAY;QAChB,0BAA0B;YACxB,UAAU;YACV,UAAU;YACV,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,4CAAsB,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/D,MAAM,GAAG,WAAW,MAAM,CAAC,OAAO,EAAE,WAAW,MAAM,KAAK,IAAI,KAAG,KAAK;QACxE;QACA;IACF;IAEA,MAAM,mBAAmB,CAAC,OAAS,MAAO,CAAA,CAAA,GAAA,uCAAA,EAAE,QAAQ,CAAC,QAAQ,CAAA,GAAA,wCAAM,EAAE,MAAM,MAAM,CAAC,UAAU,SAAQ,IAAK;IAEzG,qBACE,gCAAC;kBACC,cAAA,gCAAC,CAAA,GAAA,2BAAI;sBACH,cAAA,gCAAC;0BACD,cAAA,iCAAC;;sCACC,gCAAC;sCAAG;;sCACJ,iCAAC;;gCAAI,MAAM,aAAa;gCAAC;gCAAE,iBAAiB,MAAM,uBAAuB;;;sCACzE,gCAAC;sCAAG,cAAA,iCAAC,CAAA,GAAA,4BAAK;gCAAE,MAAK;gCAAK,SAAS;;oCAAW;kDAAiB,gCAAC,CAAA,GAAA,2BAAI;kDAAG,MAAM,aAAa;;;;;;;;;;AAOhG;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,6BACA;;;;ADhEF,MAAM,sCAAgB,CAAA,GAAA,sCAAI,EAAE,SAAS;IACnC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,KAAK,GAAG;YACX,iBAAiB;YACjB,aAAa;YACb,aAAa,MAAM,aAAa,CAAC,cAAc,CAAC;QAClD;IACF;IACA,gBAAgB,UAAU,EAAE;QAC1B,IAAI,CAAC,QAAQ,CAAC;wBAAC;QAAU;IAC3B;IACA,gBAAgB,SAAS,EAAE;QACzB,IAAI,CAAC,QAAQ,CAAC;uBAAC;QAAS;IAC1B;IACA,eAAe;QACb,IAAI,CAAC,QAAQ,CAAC;YAAC,YAAW;QAAI;IAChC;IACA,gBAAgB;QACd,IAAI,CAAC,QAAQ,CAAC;YAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe;QAAA;IAC7D;IACA,gBAAgB;QACd,IAAI,CAAC,QAAQ,CAAC;YAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;QAAA;IACrD;IACA,SAAS;QACP,IAAI,eAAe,CAAC;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAC5B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,MAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,CAAA;gBACtG,YAAY,CAAC,IAAI,GAAG;YACtB;iBAEA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,EACtF,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA,MAAO,YAAY,CAAC,IAAI,GAAG;iBAEvE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA,MAAO,YAAY,CAAC,IAAI,GAAE;YAGpF,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAC5E,OAAO,IAAI,CAAC,cAAc,OAAO,CAAC,CAAA;gBAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EACzC,OAAO,YAAY,CAAC,IAAI;YAE5B;QAEJ;QACA,qBACE,iCAAC;YAAI,WAAU;;gBACZ,IAAI,CAAC,KAAK,CAAC,cAAc,kBAAI,iCAAC;;sCAC7B,iCAAC;4BAAO,MAAK;4BACL,WAAU;4BACV,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI;;gCAC5C,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,WAAW;gCAAW;;;wBAEnD,IAAI,CAAC,KAAK,CAAC,WAAW,kBAAI,iCAAC;4BAAO,MAAK;4BAChC,WAAU;4BACV,SAAS,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI;;gCAAG;gCACxC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,gBAAgB;;;;;gBAIlD,IAAI,CAAC,KAAK,CAAC,cAAc,kBAAI,gCAAC,CAAA,GAAA,iDAAE;oBAAE,UAAU,IAAI,CAAC,KAAK,CAAC,cAAc;oBACnC,cAAc;oBACd,aAAa,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI;oBAC3C,aAAa,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI;;gBAE7E,IAAI,CAAC,eAAe;;;IAG3B;IACA,kBAAkB;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EACpD,qBAAO,gCAAC,CAAA,GAAA,wCAAQ;YAAE,UAAU,IAAI,CAAC,KAAK,CAAC,cAAc;YACnC,cAAc,CAAC;YACf,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU;YACjC,UAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI;;IAE3D;AACF;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA,wBACA,wBACA,uBACA,qBACA;;;;;;;;AEvFF,MAAM,iCAAW;IACf;QACE,SAAS;YACP,OAAM;YACN,SAAQ;YACR,MAAK;QACP;QACA,MAAM;QACN,SAAS;YACP,QAAQ;YACR,MAAM;YACN,WAAW;YACX,QAAQ;YACR,SAAS;YACT,UAAU;YACV,UAAU;gBACR;oBACE,UAAU;oBACV,UAAU;oBACV,MAAM;oBACN,UAAU;oBACV,SAAQ;oBACR,UAAS;oBACT,QAAQ;oBACR,QAAQ;gBACV;gBACA;oBACE,UAAU;oBACV,UAAU;oBACV,MAAM;oBACN,UAAU;oBACV,SAAQ;oBACR,UAAS;oBACT,QAAQ;oBACR,QAAQ;gBACV;aACD;QACH;IACF;IACA;QACE,SAAS;YACP,WAAU;QACZ;QACA,MAAM;QACN,SAAS;YACP,QAAQ;YACR,MAAM;YACN,WAAW;YACX,QAAQ;YACR,SAAS;YACT,UAAU;YACV,UAAU;gBACR;oBACE,UAAU;oBACV,UAAU;oBACV,MAAM;oBACN,UAAU;oBACV,SAAQ;oBACR,UAAS;oBACT,QAAQ;oBACR,QAAQ;gBACV;gBACA;oBACE,UAAU;oBACV,UAAU;oBACV,MAAM;oBACN,UAAU;oBACV,SAAQ;oBACR,UAAS;oBACT,QAAQ;oBACR,QAAQ;gBACV;aACD;QACH;IACF;CACD;AACD,MAAM,iCAAW,CAAC,iBAAC,aAAa,2BAAC,uBAAuB,EAAC,iBACvD,iCAAC,CAAA,GAAA,+BAAQ;QAAE,KAAK;QAAC,OAAO;YAAC,SAAS;QAAM;;0BACtC,gCAAC,CAAA,GAAA,yBAAE;0BACD,cAAA,gCAAC;8BAAG;;;0BAEN,gCAAC,CAAA,GAAA,yBAAE;0BACD,cAAA,iCAAC,CAAA,GAAA,+BAAQ;oBAAE,OAAO;wBAAC,OAAM;oBAAK;;sCAC5B,gCAAC,CAAA,GAAA,0BAAG;4BAAE,OAAO;gCAAC,mBAAkB;gCAAW,eAAc;4BAAS;sCAChE,cAAA,iCAAC,CAAA,GAAA,0BAAG,EAAE,IAAI;;kDACR,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;kDAAC;;kDACZ,gCAAC,CAAA,GAAA,0BAAG,EAAE,IAAI;kDAAC;;kDACX,gCAAC;wCAAI,WAAU;;;;;sCAGnB,gCAAC,CAAA,GAAA,0BAAG;4BAAE,OAAO;gCAAC,mBAAkB;gCAAW,eAAc;4BAAS;sCAChE,cAAA,iCAAC,CAAA,GAAA,0BAAG,EAAE,IAAI;;kDACR,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;kDAAC;;kDACZ,gCAAC,CAAA,GAAA,0BAAG,EAAE,IAAI;kDAAC;;kDACX,gCAAC;wCAAI,WAAU;;;;;sCAGnB,gCAAC,CAAA,GAAA,0BAAG;4BAAE,OAAO;gCAAC,mBAAkB;gCAAW,eAAc;4BAAS;sCAChE,cAAA,iCAAC,CAAA,GAAA,0BAAG,EAAE,IAAI;;kDACR,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;kDAAC;;kDACZ,gCAAC,CAAA,GAAA,0BAAG,EAAE,IAAI;kDAAC;;kDACX,gCAAC;wCAAI,WAAU;;;;;;;;0BAKvB,gCAAC,CAAA,GAAA,yBAAE;0BACD,cAAA,gCAAC;8BAAG;;;0BAEN,gCAAC,CAAA,GAAA,yBAAE;0BACD,cAAA,iCAAC;;wBAAM;sCAC+C,gCAAC;sCACrD,gCAAC;sCACE,+BAAS,MAAM,CAAC,CAAA,IAAK,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAE,oBAC1D,gCAAC;8CAAa,cAAA,gCAAC;wCAAE,SAAS,IAAM,wBAAwB,EAAE,OAAO;kDAAI,EAAE,IAAI;;mCAAlE;;;;;;;IAQrB,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA,2BACA;;;;;;;;AErGa,kDAAsB,UAAE,MAAM,SAAE,KAAK,EAAE;IACpD,MAAM,SAAS,OAAO,gBAAgB,CAAC;IAEvC,qBACE,gCAAC;QAAI,OAAO;YAAE,YAAY;YAA0D,YAAY;QAAK;kBAClG,OAAO,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,WAAW,MAAM,iBAC7C,gCAAC;gBAEC,WAAW;gBACX,YAAY;gBACZ,QAAQ;eAHH;;AAQf;AAEA,SAAS,iCAAW,aAAE,SAAS,cAAE,UAAU,UAAE,MAAM,EAAE;IACnD,MAAM,SAAS,YAAY,KAAK,CAAC,IAAM,MAAM,CAAC,EAAE,SAAS,CAAC;IAE1D,MAAM,UAAU,CAAA,GAAA,oBAAM,EACpB,IAAM;YACJ;gBAAE,KAAK;gBAAU,OAAO;gBAAe,KAAK;YAAI;YAChD;gBAAE,KAAK;gBAAU,OAAO;gBAAe,KAAK;gBAAK,MAAM;YAAK;YAC5D;gBAAE,KAAK;gBAAU,OAAO;gBAAe,KAAK;YAAI;YAChD;gBAAE,KAAK;gBAAU,OAAO;gBAAe,KAAK;YAAI;YAChD;gBAAE,KAAK;gBAAU,OAAO;gBAAe,KAAK;YAAI;YAChD;gBAAE,KAAK;gBAAU,OAAO;gBAAe,KAAK;YAAI;YAChD;gBAAE,KAAK;gBAAU,OAAO;gBAAe,KAAK;YAAI;YAChD;gBAAE,KAAK;gBAAU,OAAO;gBAAe,KAAK;YAAI;SACjD,EACD,EAAE;IAGJ,MAAM,UAAU,CAAA,GAAA,oBAAM,EACpB,IAAM,QAAQ,GAAG,CAAC,CAAC,IAAO,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,GAC/D;QAAC;KAAQ;IAGX,MAAM,aAAE,SAAS,eAAE,WAAW,YAAE,QAAQ,EAAE,GAAG,0CAAoB;QAC/D,eAAe;QACf,WAAW,QAAQ,GAAG,CAAC,CAAC,IAAM,EAAE,GAAG,IAAI;IACzC;IAEA,MAAM,QAAQ,CAAA,GAAA,oBAAM,EAAE,IAAM,IAAI,KAAK,YAAY,CAAC,SAAS;YAAE,uBAAuB;QAAE,IAAI,EAAE;IAC5F,MAAM,UAAU,CAAA,GAAA,oBAAM,EACpB,IAAM,IAAI,KAAK,YAAY,CAAC,SAAS;YAAE,uBAAuB;YAAG,uBAAuB;QAAE,IAC1F,EAAE;IAGJ,qBACE,iCAAC;QAAQ,OAAO;YAAE,cAAc;QAAG;;0BACjC,iCAAC;gBAAO,OAAO;oBAAE,SAAS;oBAAQ,YAAY;oBAAY,KAAK;oBAAI,cAAc;gBAAE;;kCACjF,gCAAC;wBAAG,OAAO;4BAAE,QAAQ;4BAAG,UAAU;wBAAG;kCAAI;;oBACxC,CAAC,wBAAU,gCAAC;wBAAK,OAAO;4BAAE,UAAU;4BAAI,OAAO;wBAAO;kCAAG;;;;0BAG5D,gCAAC;gBACC,OAAO;oBACL,WAAW;oBACX,QAAQ;oBACR,cAAc;oBACd,WAAW;gBACb;0BAEA,cAAA,iCAAC;oBAAM,OAAO;;sCACZ,gCAAC;sCACE,UAAU,GAAG,CAAC,CAAC,GAAG,kBACjB,gCAAC;oCAAY,OAAO;wCAAE,OAAO;oCAAE;mCAArB;;sCAId,gCAAC;sCACD,cAAA,gCAAC;0CACE,QAAQ,GAAG,CAAC,CAAC,KAAK,kBACjB,gCAAC;wCAEC,OAAO,IAAI,KAAK;wCAChB,OAAO;wCACP,eAAe;uCAHV,IAAI,GAAG;;;sCASlB,gCAAC;sCACA,WAAW,GAAG,CAAC,CAAC;gCACf,MAAM,IAAI,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC;gCAClC,qBACE,iCAAC;;sDACC,gCAAC;4CAAG,IAAI;4CAAC,OAAO,EAAE,SAAS;sDAAG,EAAE,IAAI;;sDACpC,gCAAC;4CAAG,OAAO,EAAE,WAAW;sDAAG,EAAE,WAAW;;sDACxC,gCAAC;4CAAG,OAAM;sDAAS,+BAAS,EAAE,IAAI,EAAI,EAAE,KAAK,EAAE,MAAO,OAAO;;sDAC7D,gCAAC;4CAAG,OAAM;sDAAS,+BAAS,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAO,OAAO;;sDAC7D,gCAAC;4CAAG,OAAM;sDAAS,+BAAS,EAAE,GAAG,EAAK,EAAE,KAAK,EAAE,OAAO,OAAO;;sDAC7D,gCAAC;4CAAG,OAAM;sDAAS,+BAAS,EAAE,GAAG,EAAK,EAAE,KAAK,EAAE,OAAO,OAAO;;sDAC7D,gCAAC;4CAAG,OAAM;sDAAS,+BAAS,EAAE,KAAK,EAAE;;sDACrC,gCAAC;sDACC,cAAA,gCAAC;gDACC,gBAAgB,EAAE,WAAW;gDAC7B,KAAK,EAAE,GAAG;gDACV,KAAK,EAAE,GAAG;;;;mCAZP,EAAE,SAAS;4BAiBxB;;;;;0BAKJ,iCAAC;gBAAI,OAAO;oBAAE,WAAW;oBAAG,UAAU;oBAAI,OAAO;gBAAO;;kCACtD,gCAAC;kCAAG;;oBAAS;oBACZ,0BAAY,gCAAC;wBAAK,OAAO;4BAAE,YAAY;4BAAG,OAAO;wBAAO;kCAAG;;;;;;AAIpE;AAEA,qEAAqE,GAErE;;;CAGC,GACD,SAAS,8CAAwB,GAAG;IAClC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,OAAO,EAAE;IAClC,MAAM,MAAM,EAAE;IACd,IAAK,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,GAAG,GAAG,KAAK,EACvC,IAAI,IAAI,CAAC;QAAC,OAAO,GAAG,CAAC,EAAE;QAAG,GAAG,CAAC,IAAI,EAAE;KAAC;IAEvC,OAAO;AACT;AAEA,SAAS,uCAAiB,KAAK,EAAE,GAAG,EAAE,GAAG;IACvC,IAAI,CAAC,SAAS,QAAQ,CAAC,SAAS,QAAQ,OAAO,OAAO,CAAC,SAAS,QAAQ,OAAO;IAC/E,OAAO,AAAC,CAAA,QAAQ,GAAE,IAAM,CAAA,MAAM,GAAE;AAClC;AAEA,yBAAyB;AACzB,SAAS,qCAAe,KAAK;IAC3B,MAAM,IAAI,8BAAQ;IAClB,MAAM,KAAK,KAAK,KAAK,CAAC,MAAO,CAAA,IAAI,CAAA;IACjC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;AACjC;AACA,SAAS,8BAAQ,CAAC;IAChB,IAAI,OAAO,MAAM,YAAY,CAAC,SAAS,IAAI,OAAO;IAClD,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG;AACjC;AACA,SAAS,+BAAS,CAAC;IACjB,IAAI,KAAK,QAAQ,CAAC,SAAS,IAAI,OAAO;IACtC,OAAO,EAAE,OAAO,CAAC;AACnB;AAEA;;;;CAIC,GACD,SAAS,kDAA4B,kBAAE,cAAc,OAAE,GAAG,OAAE,GAAG,EAAE;IAC/D,MAAM,QAAQ,CAAA,GAAA,oBAAM,EAAE,IAAM,8CAAwB,iBAAiB;QAAC;KAAe;IACrF,MAAM,IAAI,MAAM,MAAM,IAAI,GAAG,qBAAqB;IAClD,MAAM,aAAa,SAAS,QAAQ,SAAS,QAAQ,MAAM;IAE3D,qBACE,gCAAC;QAAI,OAAO;YAAE,GAAG,oCAAc;YAAE,qBAAqB,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC;QAAC;kBACvE,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE;YACvB,MAAM,SAAS,OAAO,QAAQ,YAAY,SAAS,OAAO,MAAM;YAChE,MAAM,OAAO,UAAU,OAAO,OAAQ,aAAa,uCAAiB,QAAQ,KAAK,OAAO;YACxF,MAAM,KAAK,QAAQ,OAAO,YAAY,qCAAe;YACrD,MAAM,QAAQ,GAAG,KAAK,cAAO,EAAE,+BAAS,QAAQ,OAAO,EAAE,+BAAS,MAAM,CAAC,CAAC;YAC1E,qBAAO,gCAAC;gBAAgC,YAAY;gBAAI,OAAO;eAAzC,GAAG,KAAK,CAAC,EAAE,KAAK;QACxC;;AAGN;AAEA,SAAS,+BAAS,cAAE,UAAU,SAAE,KAAK,EAAE;IACrC,MAAM,CAAC,OAAO,SAAS,GAAG,CAAA,GAAA,qBAAO,EAAE;IACnC,qBACE,gCAAC;QACC,OAAO;YAAE,GAAG,8BAAQ;wBAAE;QAAW;QACjC,cAAc,IAAM,SAAS;QAC7B,cAAc,IAAM,SAAS;QAC7B,OAAO;kBAEN,uBAAS,gCAAC;YAAK,OAAO;sBAAU;;;AAGvC;AAEA,iEAAiE,GAEjE,SAAS,0CAAoB,iBAAE,aAAa,aAAE,SAAS,EAAE;IACvD,MAAM,CAAC,WAAW,aAAa,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC3C,MAAM,CAAC,UAAU,YAAY,GAAG,CAAA,GAAA,qBAAO,EAAE;IACzC,MAAM,YAAY,CAAA,GAAA,mBAAK,EAAE,OAAO,4BAA4B;IAE5D,CAAA,GAAA,sBAAQ,EAAE;QACR,IAAI,eAAe,QAAQ,aAAa;IAC1C,GAAG;QAAC,eAAe;KAAO,GAAG,kDAAkD;IAE/E,MAAM,cAAc,CAAC;QACnB,IAAI,CAAC,UAAU,OAAO,EAAE;QACxB,MAAM,SAAE,KAAK,UAAE,MAAM,UAAE,MAAM,EAAE,GAAG,UAAU,OAAO;QACnD,MAAM,KAAK,EAAE,OAAO,GAAG;QACvB,MAAM,OAAO;eAAI;SAAU;QAC3B,MAAM,OAAO,WAAW,CAAC,MAAM,IAAI;QACnC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,MAAM,SAAS;QACtC,aAAa;IACf;IAEA,MAAM,YAAY;QAChB,UAAU,OAAO,GAAG;QACpB,YAAY;QACZ,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG;QAC7B,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;QACjC,OAAO,mBAAmB,CAAC,aAAa;QACxC,OAAO,mBAAmB,CAAC,WAAW;IACxC;IAEA,MAAM,cAAc,CAAC,OAAO;QAC1B,MAAM,SAAS,GAAG,OAAO;QACzB,MAAM,SAAS,SAAS,CAAC,MAAM;QAC/B,UAAU,OAAO,GAAG;mBAAE;oBAAO;oBAAQ;QAAO;QAC5C,YAAY;QACZ,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG;QAC7B,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;QACjC,OAAO,gBAAgB,CAAC,aAAa;QACrC,OAAO,gBAAgB,CAAC,WAAW;IACrC;IAEA,CAAA,GAAA,sBAAQ,EAAE;QACR,OAAO;YACL,OAAO,mBAAmB,CAAC,aAAa;YACxC,OAAO,mBAAmB,CAAC,WAAW;QACxC;IACF,GAAG,EAAE,GAAG,kDAAkD;IAE1D,OAAO;mBAAE;sBAAW;qBAAc;kBAAa;IAAS;AAC1D;AAEA,SAAS,kCAAY,SAAE,KAAK,SAAE,KAAK,iBAAE,aAAa,EAAE;IAClD,qBACE,gCAAC;QAAG,OAAO;kBACT,cAAA,iCAAC;YAAI,OAAO;gBAAE,UAAU;gBAAY,OAAO;YAAO;;8BAChD,gCAAC;8BAAM;;8BACP,gCAAC;oBACC,aAAa,CAAC,IAAM,cAAc,OAAO;oBACzC,MAAK;oBACL,oBAAiB;oBACjB,OAAM;oBACN,OAAO;;;;;AAKjB;AAEA,kEAAkE,GAElE,SAAS,+BAAS,CAAC,EAAE,KAAK;IACxB,IAAI,MAAM,QAAQ,MAAM,WAAW,OAAO;IAC1C,OAAO,MAAM,MAAM,CAAC;AACtB;AAEA,SAAS,+BAAS,CAAC,EAAE,QAAQ,GAAG,EAAE,SAAS,KAAK,EAAE,KAAK,EAAE,OAAO;IAC9D,IAAI,MAAM,QAAQ,MAAM,aAAa,OAAO,KAAK,CAAC,IAAI,OAAO;IAC7D,MAAM,YAAY,UAAU;IAC5B,OAAO,aAAa,CAAC,SAAS,MAAM,MAAM,CAAC,KAAK,QAAQ,MAAM,CAAC;AACjE;AAEA,8DAA8D,GAE9D,SAAS,yBAAG,YAAE,QAAQ,SAAE,QAAQ,cAAQ,OAAO,cAAO,KAAK,EAAE;IAC3D,qBACE,gCAAC;QACC,OAAO;QACP,OAAO;YACL,GAAG,8BAAQ;YACX,WAAW;YACX,cAAc;YACd,SAAS;YACT,YAAY,OAAO,mDAAmD;YACtE,YAAY;YACZ,UAAU;YACV,cAAc;YACd,eAAe;QACjB;kBAEC;;AAGP;AAEA,MAAM,mCAAa;IACjB,OAAO;IACP,gBAAgB;IAChB,aAAa;IACb,UAAU;AACZ;AAEA,MAAM,iCAAW;IACf,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,cAAc;AAChB;AAEA,MAAM,gCAAU;IACd,GAAG,8BAAQ;IACX,WAAW;IACX,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,UAAU;AACZ;AAEA,MAAM,qCAAe;IACnB,UAAU;IACV,OAAO;IACP,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,WAAW;AACb;AAEA,MAAM,uCAAiB;IACrB,SAAS;IACT,KAAK;IACL,YAAY;IACZ,OAAO;IACP,UAAU;AACZ;AAEA,MAAM,iCAAW;IACf,QAAQ;IACR,cAAc;IACd,UAAU;IACV,WAAW;AACb;AAEA,MAAM,gCAAU;IACd,UAAU;IACV,MAAM;IACN,KAAK;IACL,WAAW;IACX,SAAS;IACT,UAAU;IACV,YAAY;IACZ,OAAO;IACP,cAAc;IACd,YAAY;IACZ,eAAe;AACjB;;;AD5XA,MAAM,0CAAoB,CAAA,GAAA,sCAAI,EAAE,SAAS;IACvC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,IAAI,CAAC,KAAK,GAAG,CACb;IACF;IACA,SAAS;QACP,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC7D,MAAM,SAAS,IAAI,CAAC,KAAK,CAAC,kBAAkB;YAC5C,MAAM,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK;YAC5C,qBAAO,gCAAC,CAAA,GAAA,wCAAW;gBAAE,QAAQ;gBAAQ,OAAO;;QAC9C;QACA,OAAO;IACT;AACF;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA,4BACA;;;;;;;;AEpBF,6EAA6E;AAC7E,MAAM,qCAAe;IACnB,eAAsB;IACtB,aAAsB;IACtB,cAAsB;IACtB,kBAAsB;IACtB,WAAsB;IACtB,YAAsB;IACtB,gBAAsB;IACtB,cAAsB;AACxB;AAEA,SAAS,gCAAU,GAAG;IACpB,OAAO,OAAO,MAAM,CAAC,KAAK,MAAM,CAAC,CAAA,IAC/B,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA,IAAK,GAAG,CAAC,EAAE;AAE9D;AAEA,yEAAyE;AACzE,SAAS,+BAAS,IAAI,EAAE,GAAG,EAAE,IAAI;IAC/B,MAAM,UAAU,EAAE;IAClB,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;QAAE,KAAK,MAAM,GAAG;QAAM,QAAQ,IAAI,CAAC,KAAK,GAAG;IAAG;IACjE,CAAA,KAAK,QAAQ,IAAI,EAAE,AAAD,EAAG,OAAO,CAAC,CAAA;QAC5B,MAAM,QAAQ,GAAG,CAAC,IAAI;QACtB,IAAI,CAAC,OAAO;QACZ,+BAAS,OAAO,KAAK;QACrB,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA,KAAM,QAAQ,IAAI,CAAC;IAC3C;IACA,KAAK,OAAO,GAAG;AACjB;AAEA,2EAA2E;AAC3E,yCAAyC;AACzC,SAAS,oCAAc,IAAI,EAAE,GAAG,EAAE,IAAI;IACpC,MAAM,QAAQ;QAAC;KAAK;IACpB,IAAI,MAAM;IACV,MAAO,KAAM;QACX,MAAM,OAAO,AAAC,CAAA,IAAI,QAAQ,IAAI,EAAE,AAAD,EAC5B,GAAG,CAAC,CAAA,MAAO,GAAG,CAAC,IAAI,EACnB,MAAM,CAAC,CAAA,IAAK,KAAK,EAAE,OAAO,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG;QACpD,IAAI,KAAK,MAAM,KAAK,GAAG;QACvB,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;QACnB,MAAM,IAAI,CAAC,EAAE;QACb,MAAM,IAAI,CAAC;IACb;IACA,OAAO;eAAE;QAAO,UAAU;IAAI;AAChC;AAEA,8EAA8E;AAC9E,2EAA2E;AAC3E,MAAM,0CAAoB;AAC1B,SAAS,kCAAY,KAAK;IACxB,MAAM,SAAS,CAAA,IAAK,EAAE,UAAU,IAAI,EAAE,IAAI;IAC1C,IAAI,MAAM,MAAM,IAAI,yCAClB,OAAO,MAAM,GAAG,CAAC,CAAC,GAAG,kBACnB,iCAAC,CAAA,GAAA,sCAAI,EAAE,QAAQ;;gBACZ,IAAI,mBAAK,gCAAC;oBAAK,WAAU;8BAAU;;gBACnC,OAAO;;WAFW,EAAE,GAAG;IAM9B,MAAM,QAAQ,KAAK,CAAC,EAAE;IACtB,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,GAAG,EAAE;IACpC,MAAM,SAAS,MAAM,KAAK,CAAC,GAAG;IAC9B,MAAM,YAAY,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC;IACzC,qBACE;;YACG,OAAO;0BACR,gCAAC;gBAAK,WAAU;0BAAU;;0BAC1B,iCAAC;gBAAK,WAAU;gBAAe,OAAO;;kCACpC,gCAAC;wBAAK,WAAU;kCAAqB;;kCACrC,gCAAC;wBAAK,WAAU;kCACb,OAAO,GAAG,CAAC,CAAA,kBACV,iCAAC,CAAA,GAAA,sCAAI,EAAE,QAAQ;;oCACZ,OAAO;kDACR,gCAAC;wCAAK,WAAU;kDAAU;;;+BAFP,EAAE,GAAG;;;;0BAOhC,gCAAC;gBAAK,WAAU;0BAAU;;YACzB,OAAO;;;AAGd;AAEA,2EAA2E;AAC3E,8EAA8E;AAC9E,4EAA4E;AAC5E,SAAS,oCAAc,KAAK;IAC1B,MAAM,MAAM,EAAE;IACd,KAAK,MAAM,KAAK,MACd,IAAI,IAAI,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,EACnD,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,GAAG,kCAAkC;SAE3D,IAAI,IAAI,CAAC;IAGb,OAAO;AACT;AAEA,mEAAmE;AACnE,SAAS,8BAAQ,IAAI;IACnB,MAAM,IAAI,QAAQ,KAAK,IAAI;IAC3B,OAAO,KAAK,MAAM,YAAY,IAAI;AACpC;AAEA,uFAAuF;AACvF,SAAS,qCAAe,KAAK,EAAE,GAAG;IAChC,MAAM,IAAI,MAAM,IAAI,GAAG,WAAW;IAClC,IAAI,CAAC,GAAG,OAAO,EAAE;IACjB,MAAM,MAAM,EAAE;IACd,OAAO,MAAM,CAAC,KAAK,OAAO,CAAC,CAAA;QACzB,MAAM,OAAO,EAAE,IAAI,IAAI;QACvB,MAAM,SAAS,KAAK,WAAW;QAC/B,IAAI,OAAO,QAAQ,CAAC,IAAI;YACtB,IAAI,IAAI,CAAC;gBAAE,MAAM;gBAAG,SAAS;gBAAM,KAAK;gBAAQ,QAAQ,OAAO,UAAU,CAAC;YAAG;YAC7E;QACF;QACA,MAAM,OAAO,EAAE,OAAO,IAAI,EAAE;QAC5B,KAAK,MAAM,KAAK,KAAM;YACpB,MAAM,MAAM,EAAE,WAAW;YACzB,IAAI,IAAI,QAAQ,CAAC,IAAI;gBACnB,IAAI,IAAI,CAAC;oBAAE,MAAM;oBAAG,SAAS;oBAAG,KAAK;oBAAW,QAAQ,IAAI,UAAU,CAAC;gBAAG;gBAC1E;YACF;QACF;IACF;IACA,IAAI,IAAI,CAAC,CAAC,GAAG,IACX,AAAC,CAAA,EAAE,MAAM,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA,KAC1C,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,IAAI;IAE1C,OAAO,IAAI,KAAK,CAAC,GAAG;AACtB;AAEA,qEAAqE;AACrE,sEAAsE;AACtE,2EAA2E;AAC3E,gEAAgE;AAChE,SAAS,uCAAiB,KAAK;IAC7B,MAAM,eAAE,WAAW,mBAAE,eAAe,kBAAE,cAAc,EAAE,GAAG;IACzD,MAAM,aAAa,OAAO,IAAI,CAAC,eAAe,MAAM,IAAI,CAAC;IACzD,MAAM,UAAU,WAAW,MAAM,KAAK;IACtC,MAAM,WAAW,IAAI;IACrB,OAAO,MAAM,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,CAAA;QACvC,IAAI,EAAE,MAAM,EAAE;QACd,IAAI,WAAW,eAAe,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ;IAC3E;IACA,MAAM,WAAW,IAAI;IACrB,IAAI,iBACF,SAAS,OAAO,CAAC,CAAA;QACf,IAAI,MAAM,eAAe,CAAC,IAAI;QAC9B,MAAM,OAAO,IAAI;QACjB,MAAO,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,EAAG;YAChC,KAAK,GAAG,CAAC,IAAI,GAAG;YAChB,SAAS,GAAG,CAAC,IAAI,GAAG;YACpB,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE;YACnC,MAAM,MAAM,eAAe,CAAC,IAAI,GAAG;QACrC;IACF;IAEF,OAAO;kBAAE;kBAAU;IAAS;AAC9B;AAEA,MAAM,4CAAsB,CAAA,GAAA,sCAAI,EAAE,SAAS;IACzC,YAAY,KAAK,CAAE;QACjB,KAAK,CAAC;QACN,MAAM,eAAE,WAAW,mBAAE,eAAe,EAAE,GAAG;QAEzC,IAAI,QAAQ,EAAE;QACd,IAAI,iBAAiB;YACnB,QAAQ,gCAAU;YAClB,MAAM,OAAO,CAAC,CAAA,IAAK,+BAAS,GAAG,iBAAiB;QAClD;QAEA,MAAM,YAAE,QAAQ,YAAE,QAAQ,EAAE,GAAG,uCAAiB;QAChD,IAAI,CAAC,KAAK,GAAG;sBACX;sBACA;mBACA;YACA,OAAO;YACP,aAAa;YACb,WAAW;QACb;QACA,IAAI,CAAC,OAAO,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,EAAE;QAClB,IAAI,CAAC,YAAY,GAAG;IACtB;IAEA,kBAAkB,CAAC,EAAE;QACnB,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC,KAAK;YAAE,WAAW;QAAE;IACtD;IAEA,oBAAoB,CAAC,EAAE;QACrB,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;QAC9B,IAAI,EAAE,GAAG,KAAK,aAAa;YACzB,IAAI,MAAM,GAAG;YACb,EAAE,cAAc;YAChB,IAAI,CAAC,QAAQ,CAAC;gBAAE,WAAW,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,IAAI;YAAG;QACvE,OAAO,IAAI,EAAE,GAAG,KAAK,WAAW;YAC9B,IAAI,MAAM,GAAG;YACb,EAAE,cAAc;YAChB,IAAI,CAAC,QAAQ,CAAC;gBAAE,WAAW,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG;YAAG;QACnE,OAAO,IAAI,EAAE,GAAG,KAAK,SAAS;YAC5B,IAAI,MAAM,GAAG;YACb,EAAE,cAAc;YAChB,MAAM,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;YACnE,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI;QAClC,OAAO,IAAI,EAAE,GAAG,KAAK,UACnB;YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACpB,EAAE,cAAc;gBAChB,IAAI,CAAC,QAAQ,CAAC;oBAAE,OAAO;oBAAI,WAAW;gBAAE;YAC1C;QAAA;IAEJ;IAEA,mBAAmB,SAAS,EAAE,SAAS,EAAE;QACvC,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,WAAW,UAAU,cAAc,IAAI,UAAU,cAAc,CAAC,IAAI;QAC1E,MAAM,UAAU,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI;QAC3E,IAAI,CAAC,YAAY,SAAS;YACxB,MAAM,YAAE,QAAQ,YAAE,QAAQ,EAAE,GAAG,uCAAiB,IAAI,CAAC,KAAK;YAC1D,IAAI,CAAC,QAAQ,CAAC;0BAAE;0BAAU;gBAAU,OAAO;gBAAI,WAAW;gBAAG,aAAa;YAAK;QACjF;QACA,mEAAmE;QACnE,IAAI,UAAU,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EACnE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;YAAE,OAAO;QAAU;IAExD;IAEA,UAAU,IAAI,EAAE;QACd,qEAAqE;QACrE,MAAM,mBAAE,eAAe,EAAE,GAAG,IAAI,CAAC,KAAK;QACtC,MAAM,WAAW,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC5C,IAAI,MAAM;QACV,MAAM,OAAO,IAAI;QACjB,MAAO,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,EAAG;YAChC,KAAK,GAAG,CAAC,IAAI,GAAG;YAChB,SAAS,GAAG,CAAC,IAAI,GAAG;YACpB,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE;YACnC,MAAM,MAAM,eAAe,CAAC,IAAI,GAAG;QACrC;QACA,IAAI,CAAC,QAAQ,CAAC;sBAAE;YAAU,OAAO;YAAI,aAAa,KAAK,GAAG;QAAC,GAAG;YAC5D,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC;YACjC,IAAI,MAAM,GAAG,cAAc,EAAE,GAAG,cAAc,CAAC;gBAAE,OAAO;gBAAU,UAAU;YAAS;YACrF,aAAa,IAAI,CAAC,QAAQ;YAC1B,IAAI,CAAC,QAAQ,GAAG,WAAW,IAAM,IAAI,CAAC,QAAQ,CAAC;oBAAE,aAAa;gBAAK,IAAI;QACzE;IACF;IAEA,aAAa,EAAE,EAAE;QACf,MAAM,WAAW,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC5C,SAAS,GAAG,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC;sBAAE;QAAS;IAC3B;IAEA,WAAW,OAAO,EAAE;QAClB,MAAM,WAAW,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC5C,SAAS,GAAG,CAAC,WAAW,SAAS,MAAM,CAAC,WAAW,SAAS,GAAG,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC;sBAAE;QAAS;IAC3B;IAEA,cAAc,QAAQ,EAAE;QACtB,MAAM,WAAW,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC5C,MAAM,QAAQ,SAAS,OAAO,CAAC,KAAK,CAAC,CAAA,KAAM,SAAS,GAAG,CAAC;QACxD,SAAS,OAAO,CAAC,OAAO,CAAC,CAAA,KAAM,QAAQ,SAAS,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC;sBAAE;QAAS;IAC3B;IAEA,YAAY;QACV,MAAM,IAAI,IAAI;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC5C,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,QAAQ;QACjC;QACA,IAAI,CAAC,QAAQ,CAAC;YAAE,UAAU;QAAE;IAC9B;IAEA,aAAa;QACX,IAAI,CAAC,QAAQ,CAAC;YAAE,UAAU,IAAI;QAAM;IACtC;IAEA,cAAc;QACZ,MAAM,SAAS,CAAC;QAChB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAAQ,MAAM,CAAC,GAAG,GAAG;QAAM;QACvD,IAAI,OAAO,IAAI,CAAC,QAAQ,MAAM,KAAK,GACjC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;YAC5C,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG;QACtC;QAEF,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;IACpC;IAEA,WAAW,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE;QACtC,MAAM,mBAAE,eAAe,eAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK;QACnD,MAAM,YAAE,QAAQ,YAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK;QAEzC,MAAM,EAAE,OAAO,QAAQ,YAAE,QAAQ,EAAE,GAAG,oCAAc,MAAM,iBAAiB;QAC3E,MAAM,QAAQ,oCAAc;QAC5B,MAAM,UAAU,SAAS,OAAO;QAChC,IAAI,QAAQ,MAAM,KAAK,GAAG,OAAO;QAEjC,MAAM,WAAW,QAAQ,MAAM,CAAC,CAAC,GAAG,KAAO,IAAK,CAAA,SAAS,GAAG,CAAC,MAAM,IAAI,CAAA,GAAI;QAC3E,MAAM,QAAQ,QAAQ,MAAM;QAC5B,MAAM,QAAQ,aAAa;QAC3B,MAAM,SAAS,WAAW,KAAK,CAAC;QAEhC,MAAM,cAAc,AAAC,CAAA,SAAS,QAAQ,IAAI,EAAE,AAAD,EACxC,GAAG,CAAC,CAAA,MAAO,eAAe,CAAC,IAAI,EAC/B,MAAM,CAAC,CAAA,IAAK,KAAK,EAAE,OAAO,CAAC,MAAM,GAAG;QACvC,MAAM,UAAU,YAAY,MAAM,GAAG;QACrC,MAAM,mBAAmB,CAAC,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC;QAEpD,MAAM,SAAS,SAAS,GAAG,CAAC,SAAS,GAAG;QAExC,mEAAmE;QACnE,MAAM,QAAQ,MAAM,MAAM,CACxB,CAAC,KAAK,IAAM,kCAAY,CAAC,EAAE,IAAI,CAAC,IAAI,KACpC;QAGF,MAAM,gBAAgB,SAAS,IAAI,CAAC,CAAA,IAAK,EAAE,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW;QAEzE,qBACE,iCAAC;YAEC,WAAW,aAAc,CAAA,gBAAgB,wBAAwB,EAAC;YAClE,OAAO;gBAAE,YAAY;YAAM;YAC3B,KAAK,CAAA;gBACH,qEAAqE;gBACrE,kEAAkE;gBAClE,SAAS,OAAO,CAAC,CAAA;oBAAO,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG;gBAAI;YACpD;;8BAEA,iCAAC;oBAAI,WAAU;oBAAU,OAAO;wBAAE,aAAa,QAAQ;oBAAE;;wBACtD,wBACC,gCAAC;4BACC,WAAU;4BACV,SAAS,IAAM,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG;sCAE5C,uBAAS,gCAAC,CAAA,GAAA,iCAAY,uBAAM,gCAAC,CAAA,GAAA,kCAAa;2CAG7C,gCAAC;4BAAK,WAAU;;sCAGlB,gCAAC;4BACC,MAAK;4BACL,SAAS;4BACT,KAAK,CAAA;gCAAQ,IAAI,IAAI,GAAG,aAAa,GAAG;4BAAQ;4BAChD,UAAU;gCACR,IAAI,SAAS,IAAI,CAAC,aAAa,CAAC;qCAC3B,IAAI,kBAAkB,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG;4BACzD;;wBAED;sCACD,gCAAC;4BAAK,WAAW,UAAU,iCAAiC;sCACzD,kCAAY;;wBAGb,CAAA,WAAW,gBAAe,mBAC1B,iCAAC;4BAAK,WAAU;;gCAAY;gCAAG;gCAAS;gCAAI;gCAAM;;;wBAGnD,WAAW,kCACV,iCAAC;4BAAM,WAAU;;8CACf,gCAAC;oCACC,MAAK;oCACL,SAAS,SAAS,GAAG,CAAC,SAAS,GAAG;oCAClC,UAAU,IAAM,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG;;8CAE9C,gCAAC;8CAAG;;;;;;gBAKT,WAAW,wBACV,gCAAC;oBAAI,WAAU;8BACZ,YAAY,GAAG,CAAC,CAAA,IAAK,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG;;;WArDnD,SAAS,GAAG;IA0DvB;IAEA,SAAS;QACP,MAAM,SAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK;QAC5B,MAAM,mBAAE,eAAe,eAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK;QAEnD,uEAAuE;QACvE,MAAM,WAAW,EAAE;QACnB,MAAM,OAAO,CAAC,CAAA;YACZ,MAAM,YAAE,QAAQ,EAAE,GAAG,oCAAc,GAAG,mBAAmB,CAAC,GAAG,eAAe,CAAC;YAC5E,CAAA,SAAS,QAAQ,IAAI,EAAE,AAAD,EAAG,OAAO,CAAC,CAAA;gBAChC,MAAM,QAAQ,mBAAmB,eAAe,CAAC,IAAI;gBACrD,IAAI,SAAS,MAAM,OAAO,IAAI,MAAM,OAAO,CAAC,MAAM,GAAG,GACnD,SAAS,IAAI,CAAC;YAElB;QACF;QAEA,qBACE,iCAAC,CAAA,GAAA,2BAAI;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI;YACpC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;YAClC,MAAK;;8BAEL,gCAAC,CAAA,GAAA,2BAAI,EAAE,MAAM;oBAAC,WAAW;8BACvB,cAAA,gCAAC,CAAA,GAAA,2BAAI,EAAE,KAAK;kCAAC;;;8BAEf,iCAAC,CAAA,GAAA,2BAAI,EAAE,IAAI;;sCACT,gCAAC,CAAA,GAAA,4BAAK;4BAAE,SAAQ;4BAAoB,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;sCAAG;;wBAAa;sCACrF,gCAAC,CAAA,GAAA,4BAAK;4BAAE,SAAQ;4BAAoB,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI;sCAAG;;wBAEvE,CAAA;4BACA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAC5B,qCAAe,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,KACrD,EAAE;4BACN,MAAM,UAAU,IAAI,CAAC,QAAQ;4BAC7B,MAAM,YAAY,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,GAAG,QAAQ,MAAM,GAAG;4BAC9E,qBACE,iCAAC;gCAAI,WAAU;;kDACb,gCAAC;wCACC,MAAK;wCACL,WAAU;wCACV,aAAY;wCACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;wCACvB,UAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI;wCAC1C,WAAW,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI;;oCAE9C,IAAI,CAAC,KAAK,CAAC,KAAK,kBACf,gCAAC;wCAAI,WAAU;kDACZ,QAAQ,MAAM,KAAK,kBAClB,gCAAC;4CAAI,WAAU;sDAAmB;6CAChC,QAAQ,GAAG,CAAC,CAAC,QAAE,IAAI,WAAE,OAAO,OAAE,GAAG,EAAE,EAAE;4CACvC,MAAM,OAAO,8BAAQ;4CACrB,MAAM,QAAQ,AAAC,KAAK,OAAO,IAAI,KAAK,OAAO,CAAC,MAAM,IAAK;4CACvD,MAAM,SAAS,CAAC,CAAE,CAAA,eAAe,WAAW,CAAC,KAAK,GAAG,CAAC,AAAD;4CACrD,MAAM,WAAW,MAAM;4CACvB,qBACE,iCAAC;gDAEC,KAAK,CAAA;oDAAQ,IAAI,UAAU,IAAI,CAAC,YAAY,GAAG;gDAAI;gDACnD,WAAW,mBAAoB,CAAA,WAAW,2BAA2B,EAAC;gDACtE,aAAa,CAAA,IAAK,EAAE,cAAc;gDAClC,cAAc,IAAM,IAAI,CAAC,QAAQ,CAAC;wDAAE,WAAW;oDAAE;gDACjD,SAAS,IAAM,IAAI,CAAC,SAAS,CAAC;;kEAE9B,gCAAC;wDAAK,WAAU;kEAAmB,KAAK,IAAI;;oDAC3C,QAAQ,2BACP,iCAAC;wDAAK,WAAU;;4DAAiB;4DAAE;4DAAQ;0EAAC,gCAAC;0EAAG;;;;oDAEjD,sBAAQ,iCAAC;wDAAK,WAAU;;4DAAkB;4DAAE;;;oDAC5C,CAAC,wBACA,iCAAC;wDAAK,WAAU;;4DAAmB;4DAAI;4DAAM;4DAAQ,UAAU,IAAI,KAAK;;;;+CAbrE,KAAK,GAAG;wCAiBnB;;;;wBAKV,CAAA;sCAEA,gCAAC;4BAAI,WAAU;sCACZ,SAAS,GAAG,CAAC,CAAA,IAAK,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG;;sCAE3C,gCAAC,CAAA,GAAA,4BAAK;4BAAE,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI;sCAAG;;;;;;IAItD;AACF;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,wBACA,qBACA,yBACA,0BACA;;;;;;;;;;;ACheF,MAAM,gDAAY,CAAA,GAAA,sCAAI,EAAE,IAAI,CAAC,IAAM;AAEnC,MAAM,kCAAY,CAAA;IAChB,qBAAO,gCAAC,CAAA,GAAA,+BAAQ;QAAE,UAAU;QAAC,kBAAkB,MAAM,OAAO,CAAC,MAAM,KAAK,IAAI,YAAY;kBACrF,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO;YACzB,qBACE,iCAAC,CAAA,GAAA,+BAAQ,EAAE,IAAI;gBAAW,UAAU,WAAS;;kCAC3C,gCAAC,CAAA,GAAA,+BAAQ,EAAE,MAAM;kCAAE,MAAM,WAAW;;kCACpC,gCAAC,CAAA,GAAA,+BAAQ,EAAE,IAAI;kCAIb,cAAA,gCAAC,CAAA,GAAA,cAAI;4BAAE,IAAI,MAAM,GAAG;;;;eANH;QAUzB;;AAEJ;AAEA,MAAM,mCAAa,CAAA;IACjB,IAAI,aAAa,CAAC;IAClB,IAAI,MAAM,aAAa,EAAE;QACvB,MAAM,iBAAiB,MAAM,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ;QAC7E,eAAe,MAAM,CAAC,CAAC,KAAK,MAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,CAAA;YACzD,IAAI,MAAM,SAAS;gBACjB,MAAM,OAAO,KAAK,KAAK,CAAC,MAAM;gBAC9B,IAAI,MAAM,iBAAiB,CAAC,KAAK,EAC/B,UAAU,CAAC,KAAK,GAAG;YAEvB,OAEE,UAAU,CAAC,IAAI,GAAG;QAEtB;IACF;IACA,MAAM,gBAAgB,OAAO,IAAI,CAAC,MAAM,iBAAiB,EACtD,MAAM,CAAC,CAAA,MAAO,UAAU,CAAC,IAAI,EAC7B,IAAI,CAAC,CAAC,GAAE,IAAM,MAAM,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU;IAC1G,OAAO,iBAAiB,MAAM,eAAe,kBAC3C,iCAAC;;0BACC,iCAAC;;oBAAI;kCAGH,iCAAC,CAAA,GAAA,4BAAK;wBACJ,SAAS,QAAQ,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,cAAc;;4BACtD;4BAAe,OAAO,IAAI,CAAC,MAAM,cAAc,EAAE,MAAM;4BAAC;;;;;0BAE3D,gCAAC,CAAA,GAAA,+BAAQ;gBAAE,UAAU;gBAAC,kBAAkB,cAAc,MAAM,KAAK,IAAI,UAAU;0BAC5E,cAAc,GAAG,CAAC,CAAC,KAAK;oBACvB,MAAM,kBAAkB,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,QAAS,MAAM,IAAI,KAAK;oBACpF,MAAM,IAAI,gBAAgB,MAAM;oBAChC,qBAAO,iCAAC,CAAA,GAAA,+BAAQ,EAAE,IAAI;wBAAW,UAAU,SAAO;;0CAChD,iCAAC,CAAA,GAAA,+BAAQ,EAAE,MAAM;;oCAAE,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI;oCAAC;oCAAI;oCAAE;oCAAE,MAAM,IAAI,UAAU;;;0CAC/E,gCAAC,CAAA,GAAA,+BAAQ,EAAE,IAAI;0CAAC,cAAA,gCAAC;oCAAU,SAAS;;;;uBAFV;gBAI9B;;;;AAGR;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA,uBACA,yBACA,qBACA,2BACA,wBACA;;;;;;;;;ACnEF,MAAM,qCAAe,MAAM,gDAAgD;AAE3E,MAAM,wCAAkB,CAAC;IACvB,IAAI,CAAC,OAAO,OAAO;IACnB,MAAM,IAAI,IAAI,KAAK;IACnB,IAAI,MAAM,EAAE,OAAO,KAAK,OAAO;IAC/B,OAAO,EAAE,kBAAkB;AAC7B;AAEA,MAAM,wCAAkB,CAAC,OAAO,QAAQ;IACtC,MAAM,IAAI,OAAO,IAAI,GAAG,WAAW;IACnC,IAAI,SAAS,IACT,MAAM,MAAM,CAAC,CAAA,IAAK,AAAC,CAAA,EAAE,KAAK,IAAI,EAAC,EAAG,WAAW,GAAG,QAAQ,CAAC,MACzD,MAAM,KAAK;IACf,MAAM,OAAE,GAAG,OAAE,GAAG,EAAE,GAAG;IACrB,MAAM,OAAO,QAAQ,QAAQ,IAAI;IACjC,OAAO,IAAI,CAAC,CAAC,GAAG;QACd,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI;QAC5B,IAAI,QAAQ,aAAa;YACvB,KAAK,KAAK,IAAI,KAAK,IAAI,OAAO,KAAK;YACnC,KAAK,KAAK,IAAI,KAAK,IAAI,OAAO,KAAK;QACrC,OAAO,IAAI,QAAQ,WAAW;YAC5B,KAAK,MAAM;YACX,KAAK,MAAM;QACb,OAAO;YACL,KAAK,AAAC,CAAA,MAAM,EAAC,EAAG,QAAQ,GAAG,WAAW;YACtC,KAAK,AAAC,CAAA,MAAM,EAAC,EAAG,QAAQ,GAAG,WAAW;QACxC;QACA,IAAI,KAAK,IAAI,OAAO,KAAK;QACzB,IAAI,KAAK,IAAI,OAAO,IAAI;QACxB,OAAO;IACT;IACA,OAAO;AACT;AAEA,MAAM,mCAAa,CAAC,SAAE,KAAK,WAAE,OAAO,QAAE,IAAI,YAAE,QAAQ,EAAE;IACpD,MAAM,SAAS,KAAK,GAAG,KAAK;IAC5B,MAAM,YAAY,SAAU,KAAK,GAAG,KAAK,QAAQ,YAAO,YAAQ;IAChE,qBACE,iCAAC;QACC,OAAO;YAAE,QAAQ;YAAW,YAAY;YAAQ,UAAU;YAAU,KAAK;YAAG,YAAY;YAAQ,QAAQ;QAAE;QAC1G,SAAS,IAAM,SAAS;;YAEvB;YAAO;;;AAGd;AAEA,MAAM,0CAAoB;IAAE,UAAU;IAAU,KAAK;IAAG,YAAY;IAAQ,QAAQ;AAAE;AAEtF,MAAM,iDAA2B,CAAA;IAC/B,MAAM,CAAC,iBAAiB,mBAAmB,GAAG,CAAA,GAAA,qBAAO,EAAE,EAAE;IACzD,MAAM,CAAC,kBAAkB,oBAAoB,GAAG,CAAA,GAAA,qBAAO,EAAE,EAAE;IAC3D,MAAM,CAAC,OAAO,SAAS,GAAG,CAAA,GAAA,qBAAO,EAAE;IACnC,MAAM,CAAC,QAAQ,UAAU,GAAG,CAAA,GAAA,qBAAO,EAAE;IACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAA,GAAA,qBAAO,EAAE,CAAC;IAClC,MAAM,CAAC,WAAW,aAAa,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC3C,MAAM,CAAC,WAAW,aAAa,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC3C,MAAM,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,qBAAO,EAAE;IACjD,MAAM,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,qBAAO,EAAE;IACjD,MAAM,CAAC,QAAQ,UAAU,GAAG,CAAA,GAAA,qBAAO,EAAE;IACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAA,GAAA,qBAAO,EAAE;QAAE,KAAK;QAAa,KAAK;IAAO;IACjE,MAAM,OAAO,MAAM,IAAI;IACvB,IAAI,MAAM,CAAA,GAAA,sCAAiB,EAAE,MAAM,CAAC,OAAS,QAAQ;IAErD,MAAM,aAAa,CAAC,MAAQ,QAAQ,CAAA,IAClC,EAAE,GAAG,KAAK,MAAM;qBAAE;gBAAK,KAAK,EAAE,GAAG,KAAK,QAAQ,SAAS;YAAM,IAAI;qBAAE;gBAAK,KAAK;YAAM;IAGrF,MAAM,aAAa,QAAQ,KAAK,GAAG;IACnC,MAAM,cAAc,CAAA,GAAA,oBAAM,EAAE;QAC1B,MAAM,OAAO,IAAI;QACjB;eAAI;eAAoB;SAAiB,CAAC,OAAO,CAAC,CAAA,IAAK,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE;QACvE,OAAO,MAAM,IAAI,CAAC,KAAK,MAAM;IAC/B,GAAG;QAAC;QAAiB;KAAiB;IAEtC,MAAM,iBAAiB,CAAA,GAAA,oBAAM,EAC3B,IAAM,sCAAgB,aAAa,QAAQ,OAC3C;QAAC;QAAa;QAAQ;KAAK;IAG7B,MAAM,wBAAwB;QAC5B,IAAI,CAAC,MAAM;YACT,oBAAoB,EAAE;YACtB,SAAS;YACT,UAAU;YACV;QACF;QACA,IAAI,CAAC,QAAQ,OAAO,KAAK,UAAU,KAAK,YAAY;YAClD,oBAAoB,EAAE;YACtB,SAAS;YACT,UAAU;YACV;QACF;QACA,IAAI;YACF,MAAM,QAAQ,MAAM,KAAK,UAAU;YACnC,MAAM,WAAW,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE;gBACxF,QAAQ;gBACR,SAAS;oBACP,gBAAgB;oBAChB,iBAAiB,CAAC,OAAO,EAAE,OAAO;gBACpC;YACF;YACA,MAAM,SAAS,MAAM,SAAS,IAAI;YAElC,IAAI,SAAS,EAAE,EAAE;gBACf,SAAS;gBACT,UAAU;gBACV,oBAAoB;YACtB,OACE,SAAS;QAEb,EAAE,OAAO,KAAK;YACZ,SAAS;QACX;IACF;IACA,yDAAyD;IACzD,MAAM,uBAAuB;QAC3B,IAAI;YACF,8DAA8D;YAC9D,MAAM,WAAW,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC;YACvF,MAAM,SAAS,MAAM,SAAS,IAAI;YAElC,IAAI,SAAS,EAAE,EACb,mBAAmB,SAAS,4BAA4B;iBAExD,SAAS;QAEb,EAAE,OAAO,KAAK;YACZ,SAAS;QACX;IACF;IAEA,mDAAmD;IACnD,MAAM,eAAe,CAAC;QACpB,MAAM,SAAS,CAAC;YACd,UAAU;YACV,UAAU;YACV,UAAU,KAAK,IAAI;YACnB,MAAM,KAAK,KAAK;QAClB;IACF;IAEA,MAAM,YAAY,CAAC;QACjB,aAAa,KAAK,GAAG;QACrB,aAAa,KAAK,KAAK,IAAI;QAC3B,gBAAgB,CAAC,CAAC,KAAK,QAAQ;IACjC;IAEA,MAAM,aAAa;QACjB,aAAa;QACb,aAAa;QACb,gBAAgB;IAClB;IAEA,MAAM,WAAW,OAAO;QACtB,IAAI;YACF,MAAM,QAAQ,MAAM,KAAK,UAAU;YACnC,MAAM,WAAW,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,SAAS,EAAE;gBAC3F,QAAQ;gBACR,SAAS;oBACP,gBAAgB;oBAChB,iBAAiB,CAAC,OAAO,EAAE,OAAO;gBACpC;gBACA,MAAM,KAAK,SAAS,CAAC;oBAAE,OAAO;oBAAW,UAAU;gBAAa;YAClE;YACA,IAAI,SAAS,EAAE,EAAE;gBACf;gBACA,SAAS;gBACT,MAAM;gBACN,MAAM;YACR,OAAO,IAAI,SAAS,MAAM,KAAK,KAC7B,SAAS;iBACJ,IAAI,SAAS,MAAM,KAAK,KAC7B,SAAS;iBACJ,IAAI,SAAS,MAAM,KAAK,KAC7B,SAAS;iBAET,SAAS;QAEb,EAAE,OAAO,KAAK;YACZ,SAAS;QACX;IACF;IAEA,MAAM,gBAAgB,CAAC,OAAS,gBAAgB;IAChD,MAAM,eAAe,IAAM,gBAAgB;IAE3C,MAAM,gBAAgB;QACpB,IAAI,CAAC,cAAc;QACnB,MAAM,SAAS,aAAa,GAAG;QAC/B,gBAAgB;QAChB,IAAI;YACF,MAAM,QAAQ,MAAM,KAAK,UAAU;YACnC,MAAM,WAAW,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,mBAAmB,EAAE,mBAAmB,SAAS,EAAE;gBAC3F,QAAQ;gBACR,SAAS;oBAAE,iBAAiB,CAAC,OAAO,EAAE,OAAO;gBAAC;YAChD;YACA,IAAI,SAAS,EAAE,EAAE;gBACf,MAAM;gBACN,MAAM;YACR,OAAO,IAAI,SAAS,MAAM,KAAK,KAC7B,MAAM;iBACD,IAAI,SAAS,MAAM,KAAK,KAC7B,MAAM;iBAEN,MAAM;QAEV,EAAE,OAAO,KAAK;YACZ,MAAM;QACR;IACF;IAEA,2DAA2D;IAC3D,CAAA,GAAA,sBAAQ,EAAE;QACR;IACF,GAAG;QAAC,MAAM,UAAU;KAAC;IACrB,CAAA,GAAA,sBAAQ,EAAE;QACR;IACF,GAAG;QAAC;QAAM,MAAM,UAAU;KAAC;IAE3B,qBACE,iCAAC;QAAI,WAAU;;YACZ,uBACC,gCAAC,CAAA,GAAA,2BAAI;gBAAE,SAAQ;0BACZ;;YAIJ,wBACC,gCAAC,CAAA,GAAA,2BAAI;gBAAE,SAAQ;0BACZ;;YAIJ,YAAY,MAAM,GAAG,kBACpB,iCAAC;gBAAI,WAAU;;kCACb,gCAAC;wBAAI,WAAU;kCACb,cAAA,gCAAC,CAAA,GAAA,0BAAG,EAAE,OAAO;4BACX,MAAK;4BACL,aAAY;4BACZ,OAAO;4BACP,UAAU,CAAC,IAAM,UAAU,EAAE,MAAM,CAAC,KAAK;4BACzC,OAAO;gCAAE,UAAU;4BAAI;4BACvB,MAAK;;;kCAGT,gCAAC;wBAAI,OAAO;4BAAE,WAAW;4BAAK,WAAW;4BAAQ,QAAQ;4BAAqB,cAAc;wBAAE;kCAC9F,cAAA,iCAAC,CAAA,GAAA,2BAAI;4BAAE,OAAO;4BAAC,KAAK;4BAAC,WAAU;;8CAC/B,gCAAC;8CACD,cAAA,iCAAC;;0DACC,gCAAC;gDAAW,OAAM;gDAAY,SAAQ;gDAAQ,MAAM;gDAAM,UAAU;;0DACpE,gCAAC;gDAAW,OAAM;gDAAQ,SAAQ;gDAAQ,MAAM;gDAAM,UAAU;;0DAChE,gCAAC;gDAAW,OAAM;gDAAQ,SAAQ;gDAAU,MAAM;gDAAM,UAAU;;0DAClE,gCAAC;gDAAW,OAAM;gDAAU,SAAQ;gDAAY,MAAM;gDAAM,UAAU;;0DACtE,gCAAC;gDAAG,OAAO;0DAAmB;;;;;8CAGhC,gCAAC;8CACA,eAAe,GAAG,CAAC,CAAC,MAAM;wCACzB,MAAM,SAAS,cAAc,KAAK,GAAG,KAAK;wCAC1C,MAAM,aAAa,SAAS,QAAS,KAAK,KAAK,IAAI;wCACnD,OAAO,cAAc,KAAK,GAAG,iBAC3B,iCAAC;;8DACC,iCAAC;;sEACC,gCAAC,CAAA,GAAA,0BAAG,EAAE,OAAO;4DACX,MAAK;4DACL,OAAO;4DACP,UAAU,CAAC,IAAM,aAAa,EAAE,MAAM,CAAC,KAAK;4DAC5C,aAAY;;sEAEd,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;4DACT,MAAK;4DACL,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,EAAE;4DAC7B,OAAM;4DACN,SAAS;4DACT,UAAU,IAAM,gBAAgB,CAAC;4DACjC,WAAU;;;;8DAGd,gCAAC;8DAAI;;8DACL,gCAAC;8DAAI,KAAK,OAAO,IAAI;;8DACrB,gCAAC;8DAAI,sCAAgB,KAAK,SAAS;;8DACnC,iCAAC;;sEACC,gCAAC,CAAA,GAAA,4BAAK;4DAAE,SAAQ;4DAAU,MAAK;4DAAK,SAAS,IAAM,SAAS,KAAK,GAAG;sEAAG;;sEAGvE,gCAAC,CAAA,GAAA,4BAAK;4DAAE,SAAQ;4DAAoB,MAAK;4DAAK,SAAS;4DAAY,WAAU;sEAAO;;;;;2CAxB/E,uBA8BT,iCAAC;;8DACC,iCAAC;;wDAAI,KAAK,KAAK;wDAAE,KAAK,QAAQ,GAAG,cAAc;;;8DAC/C,gCAAC;8DAAI;;8DACL,gCAAC;8DAAI,KAAK,OAAO,IAAI;;8DACrB,gCAAC;8DAAI,sCAAgB,KAAK,SAAS;;8DACnC,iCAAC;;sEACC,gCAAC,CAAA,GAAA,4BAAK;4DAAE,SAAQ;4DAAoB,MAAK;4DAAK,SAAS,IAAM,aAAa;sEAAO;;wDAGhF,wBACC,gCAAC,CAAA,GAAA,4BAAK;4DAAE,SAAQ;4DAAoB,MAAK;4DAAK,SAAS,IAAM,UAAU;4DAAO,WAAU;sEAAO;;wDAIhG,wBACC,gCAAC,CAAA,GAAA,4BAAK;4DAAE,SAAQ;4DAAiB,MAAK;4DAAK,SAAS,IAAM,cAAc;4DAAO,WAAU;sEAAO;;;;;2CAf7F;oCAsBb;;;;;;+BAMF,gCAAC,CAAA,GAAA,2BAAI;gBAAE,SAAQ;gBAAU,WAAU;0BAAO;;0BAK5C,iCAAC,CAAA,GAAA,2BAAI;gBAAE,MAAM,CAAC,CAAC;gBAAc,QAAQ;gBAAc,QAAQ;;kCACzD,gCAAC,CAAA,GAAA,2BAAI,EAAE,MAAM;wBAAC,WAAW;kCACvB,cAAA,gCAAC,CAAA,GAAA,2BAAI,EAAE,KAAK;sCAAC;;;kCAEf,iCAAC,CAAA,GAAA,2BAAI,EAAE,IAAI;;4BAAC;4BAET,6BAAe;;oCAAE;kDAAC,gCAAC;kDAAQ,aAAa,KAAK;;;iCAAgB;4BAAkB;;;kCAGlF,iCAAC,CAAA,GAAA,2BAAI,EAAE,MAAM;;0CACX,gCAAC,CAAA,GAAA,4BAAK;gCAAE,SAAQ;gCAAY,SAAS;gCAAc,SAAS;0CAAC;;0CAG7D,gCAAC,CAAA,GAAA,4BAAK;gCAAE,SAAQ;gCAAS,SAAS;0CAAe;;;;;;;;AAO3D;AAEA,MAAM,0CAAoB,CAAA;IACxB,MAAM,CAAC,UAAU,YAAY,GAAG,CAAA,GAAA,qBAAO,EAAE;IACzC,MAAM,CAAC,UAAU,YAAY,GAAG,CAAA,GAAA,qBAAO,EAAE;IACzC,MAAM,CAAC,iBAAiB,mBAAmB,GAAG,CAAA,GAAA,qBAAO,EAAE,EAAE;IACzD,MAAM,CAAC,UAAU,YAAY,GAAG,CAAA,GAAA,qBAAO,EAAE;IACzC,MAAM,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,qBAAO,EAAE;IACjD,MAAM,CAAC,eAAe,iBAAiB,GAAG,CAAA,GAAA,qBAAO,EAAE,EAAE;IACrD,MAAM,CAAC,cAAc,gBAAgB,GAAG,CAAA,GAAA,qBAAO,EAAE;IACjD,MAAM,CAAC,SAAS,WAAW,GAAG,CAAA,GAAA,qBAAO,EAAE,QAAQ,oBAAoB;IACnE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAA,GAAA,qBAAO,EAAE,CAAC;IAClC,MAAM,OAAO,MAAM,IAAI;IACvB,IAAI,MAAM,CAAA,GAAA,sCAAiB,EAAE,MAAM,CAAC,OAAS,QAAQ;IAErD,qCAAqC;IACrC,MAAM,uBAAuB,CAAC;QAC5B,YAAY,MAAM,MAAM,CAAC,KAAK;IAChC;IAEA,gDAAgD;IAChD,MAAM,aAAa,CAAC;QAClB,MAAM,cAAc;QACpB,MAAM,WAAW,MAAM,YAAY,CAAC,OAAO,CAAC;QAC5C,YAAY;IACd;IAEA,iDAAiD;IACjD,MAAM,iBAAiB,CAAC;QACtB,MAAM,cAAc;IACtB;IAEA,8CAA8C;IAC9C,MAAM,eAAe;QACnB,MAAM,YAAY,SAAS,KAAK,CAAC,MAAM,MAAM,CAAC,UAAU,kEAAkE;QAE1H,IAAI,UAAU,MAAM,GAAG,oCAAc;YACnC,gBAAgB,CAAC,uCAAuC,EAAE,mCAAa,UAAU,CAAC;YAClF;QACF;QAEA,gBAAgB,KAAK,2CAA2C;QAChE,WAAW,OAAO,6CAA6C;QAE/D,IAAI;YACF,MAAM,WAAW,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC,EAAE;gBAC/D,QAAQ;gBACR,SAAS;oBACP,gBAAgB;gBAClB;gBACA,MAAM,KAAK,SAAS,CAAC;YACvB;YAEA,MAAM,SAAS,MAAM,SAAS,IAAI;YAElC,IAAI,OAAO,IAAI,EAAE;gBACf,YAAY,OAAO,IAAI;gBACvB,iBAAiB,OAAO,GAAG;gBAC3B,mBAAmB,OAAO,OAAO;YACnC,OACE,gCAAgC;YAChC,MAAM;QAEV,EAAE,OAAO,OAAO;YACd,MAAM,mDAAkD;QAC1D,SAAU;YACR,WAAW,QAAQ,oDAAoD;QACzE;IACF;IAEA,2CAA2C;IAC3C,MAAM,iBAAiB;QACrB,MAAM,cAAc;YAClB,OAAO;YACP,MAAM;YACN,MAAM,MAAM,IAAI;YAChB,SAAS,cAAc,MAAM;YAC7B,UAAU;QACZ;QACA,MAAM,cAAc,IAAI,gBAAgB,aAAa,QAAQ;QAE7D,MAAM,QAAQ,MAAM,KAAK,UAAU;QACnC,IAAI;YACF,MAAM,WAAW,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE;gBACrE,QAAQ;gBACR,SAAS;oBACP,gBAAgB;oBAChB,iBAAiB,CAAC,OAAO,EAAE,OAAO;gBACpC;YACF;YACA,IAAI,CAAC,SAAS,EAAE,EACd,MAAM,IAAI,MAAM;YAElB,MAAM,SAAS,MAAM,SAAS,IAAI;YAClC,QAAQ,GAAG,CAAC;YACZ,YAAY;YACZ,YAAY;YACZ,iBAAiB,EAAE;YACnB,mBAAmB,EAAE;YACrB,YAAY;YACZ,gBAAgB;YAChB,IAAI,MAAM,WAAW,EAAE,MAAM,WAAW;QAE1C,EAAE,OAAO,OAAO;YACd,QAAQ,KAAK,CAAC,mCAAmC;QACnD;IACF;IAEA,qBACE,iCAAC;QAAI,WAAU;;0BACb,iCAAC,CAAA,GAAA,0BAAG;;kCAEF,iCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;wBAAC,WAAU;;0CACpB,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;0CAAC;;0CACZ,gCAAC,CAAA,GAAA,0BAAG,EAAE,OAAO;gCACX,IAAG;gCACH,MAAM;gCACN,OAAO;gCACP,UAAU;gCACV,aAAa,CAAC,4CAA4C,EAAE,mCAAa,KAAK,CAAC;gCAC/E,QAAQ;gCACR,YAAY;;;;oBAKf,8BACC,gCAAC,CAAA,GAAA,2BAAI;wBAAE,SAAQ;kCACZ;;kCAKL,gCAAC,CAAA,GAAA,4BAAK;wBAAE,SAAQ;wBAAU,SAAS;kCAAc;;;;YAMlD,yBACC,iCAAC;gBAAI,WAAU;;kCACb,gCAAC;kCAAG;;kCACJ,gCAAC,CAAA,GAAA,6BAAM;wBAAE,WAAU;wBAAS,MAAK;kCAC/B,cAAA,gCAAC;4BAAK,WAAU;sCAAU;;;;;YAO/B,CAAC,WAAW,0BACX,iCAAC;gBAAI,WAAU;;kCACb,iCAAC;;0CACC,iCAAC;gCAAK,WAAU;;kDACd,gCAAC;kDAAQ,cAAc,MAAM;;oCAAU;;;4BAExC,gBAAgB,MAAM,GAAG,mBACxB,iCAAC;gCAAI,WAAU;;kDACb,gCAAC;kDAAQ,gBAAgB,MAAM;;oCAAU;;;;;oBAI9C,gBAAgB,MAAM,GAAG,mBACxB,iCAAC;wBAAQ,WAAU;;0CACjB,gCAAC;gCAAQ,OAAO;oCAAC,QAAQ;gCAAS;0CAAG;;0CACrC,gCAAC;gCAAI,WAAU;gCAAkB,OAAO;oCAAC,WAAW;oCAAK,UAAU;gCAAM;0CACtE,gBAAgB,IAAI,CAAC;;;;;;YAQ/B,CAAC,WAAW,cAAc,MAAM,GAAG,mBAClC,iCAAC;gBAAI,WAAU;;kCACb,iCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;wBAAC,WAAU;;0CACpB,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;0CAAC;;0CACZ,gCAAC,CAAA,GAAA,0BAAG,EAAE,OAAO;gCACX,MAAK;gCACL,OAAO;gCACP,UAAU,CAAC,IAAM,YAAY,EAAE,MAAM,CAAC,KAAK;gCAC3C,aAAY;;0CAEd,gCAAC,CAAA,GAAA,0BAAG,EAAE,KAAK;gCACT,MAAK;gCACL,IAAG;gCACH,OAAM;gCACN,UAAU,CAAC,IAAM,gBAAgB,CAAC;;;;oBAGrC,qBACC,gCAAC,CAAA,GAAA,4BAAK;wBAAE,SAAQ;wBAAU,SAAS;kCAAgB;uCAGjD,gCAAC,CAAA,GAAA,4BAAK;wBAAE,SAAQ;wBAAY,QAAQ;kCAAC;;;;;;AAKnD;AAEA,MAAM,+CAAyB,CAAA;IAC7B,MAAM,CAAC,YAAY,cAAc,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC7C,MAAM,kBAAkB,IAAM,cAAc,CAAA,IAAK,IAAI;IACrD,MAAM,iBAAiB,MAAM,aAAa,IAAI,MAAM,aAAa,CAAC,cAAc;IAChF,MAAM,OAAO,CAAA,GAAA,oBAAM,EAAE;QACnB,MAAM,MAAM,CAAA,GAAA,yCAAa,EAAE;QAC3B,OAAO,MAAM,CAAA,GAAA,2BAAM,EAAE,OAAO;IAC9B,GAAG;QAAC;KAAe;IACnB,IAAI,CAAC,MACH,qBACE,gCAAC,CAAA,GAAA,2BAAI;QAAE,SAAQ;kBAAO;;IAK1B,qBACE,gCAAC,CAAA,GAAA,+BAAQ;QAAE,KAAK;kBACd,cAAA,iCAAC,CAAA,GAAA,yBAAE;;8BACD,gCAAC,CAAA,GAAA,yBAAE;8BAAE,cAAA,gCAAC;wBAAkB,KAAK,MAAM,aAAa,CAAC,WAAW;wBAAE,MAAM,MAAM,aAAa,CAAC,EAAE;wBAAE,MAAM;wBAAM,aAAa;;;8BACrH,gCAAC,CAAA,GAAA,yBAAE;8BAAE,cAAA,gCAAC;wBAAyB,KAAK,MAAM,aAAa,CAAC,WAAW;wBAAE,MAAM,MAAM,aAAa,CAAC,EAAE;wBAAE,MAAM;wBAAM,WAAW,MAAM,yBAAyB;wBAAE,YAAY;;;;;;AAI/K;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA,6BACA;;;;;;;;;;AElkBF,MAAM,8CAAwB;AAE9B,SAAS,wCAAkB,KAAK;IAC9B,MAAM,QAAQ;WAAK,MAAM,MAAM,IAAI,EAAE;KAAE;IACvC,KAAK,MAAM,KAAK,MAAM,SAAS,IAAI,EAAE,CAAE,MAAM,IAAI,IAAI,wCAAkB;IACvE,OAAO;AACT;AAEA,SAAS,gDAA0B,KAAK;IACtC,MAAM,QAAQ;WAAK,MAAM,cAAc,IAAI,EAAE;KAAE;IAC/C,KAAK,MAAM,KAAK,MAAM,SAAS,IAAI,EAAE,CAAE,MAAM,IAAI,IAAI,gDAA0B;IAC/E,OAAO;AACT;AAEA,SAAS,kCAAY,KAAK,EAAE,CAAC,EAAE,OAAO;IACpC,MAAM,iBAAiB,AAAC,CAAA,MAAM,MAAM,IAAI,EAAE,AAAD,EAAG,MAAM,CAAC,CAAA;QACjD,IAAI,CAAC,GAAG,OAAO;QACf,MAAM,IAAI,QAAQ,MAAM,CAAC,KAAK;QAC9B,OAAO,KAAK,WAAW,GAAG,QAAQ,CAAC,MAAO,KAAK,EAAE,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;IAChF;IACA,MAAM,oBAAoB,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;IACjF,MAAM,YAAY,AAAC,CAAA,MAAM,SAAS,IAAI,EAAE,AAAD,EACpC,GAAG,CAAC,CAAA,IAAK,kCAAY,GAAG,oBAAoB,KAAK,GAAG,UACpD,MAAM,CAAC,CAAA,IAAK;IACf,IAAI,CAAC,GAAG,OAAO;QAAE,GAAG,KAAK;wBAAE;mBAAgB;IAAU;IACrD,IAAI,mBACF,OAAO;QACL,GAAG,KAAK;QACR,gBAAgB,MAAM,MAAM,IAAI,EAAE;QAClC,WAAW,AAAC,CAAA,MAAM,SAAS,IAAI,EAAE,AAAD,EAAG,GAAG,CAAC,CAAA,IAAK,kCAAY,GAAG,IAAI;IACjE;IAEF,IAAI,eAAe,MAAM,KAAK,KAAK,UAAU,MAAM,KAAK,GAAG,OAAO;IAClE,OAAO;QAAE,GAAG,KAAK;wBAAE;mBAAgB;IAAU;AAC/C;AAEA,MAAM,iCAAW,CAAC,QAAE,IAAI,WAAE,OAAO,eAAE,WAAW,YAAE,QAAQ,EAAE;IACxD,MAAM,IAAI,QAAQ,MAAM,CAAC,KAAK;IAC9B,IAAI,CAAC,GAAG,OAAO;IACf,MAAM,SAAS,EAAE,YAAY;IAC7B,MAAM,UAAU,SACZ,OAAO,KAAK,CAAC,CAAA,IAAK,YAAY,GAAG,CAAC,MAClC,YAAY,GAAG,CAAC;IACpB,qBACE,gCAAC;kBACC,cAAA,iCAAC;YAAM,OAAO,OAAQ,CAAA,EAAE,WAAW,GAAG,OAAO,EAAE,WAAW,GAAG,EAAC;;8BAC5D,gCAAC;oBACC,MAAK;oBACL,SAAS;oBACT,UAAU,IAAM,SAAS;;8BAE3B,gCAAC;oBAAK,WAAU;8BAAwB,EAAE,KAAK;;gBAC9C,EAAE,WAAW,kBAAI,gCAAC;oBAAK,WAAU;8BAAuB;;;;;AAIjE;AAEA,MAAM,kCAAY,CAAC,SAAE,KAAK,SAAE,KAAK,WAAE,OAAO,eAAE,WAAW,YAAE,QAAQ,aAAE,SAAS,WAAE,OAAO,WAAE,OAAO,aAAE,SAAS,EAAE;IACzG,MAAM,gBAAgB,gDAA0B;IAChD,MAAM,QAAQ,cAAc,MAAM;IAClC,MAAM,sBAAsB,CAAC;QAC3B,MAAM,IAAI,QAAQ,MAAM,CAAC,KAAK;QAC9B,MAAM,SAAS,KAAK,EAAE,YAAY;QAClC,IAAI,QAAQ,OAAO,OAAO,KAAK,CAAC,CAAA,IAAK,YAAY,GAAG,CAAC;QACrD,OAAO,YAAY,GAAG,CAAC;IACzB;IACA,MAAM,gBAAgB,cAAc,MAAM,CAAC,CAAC,GAAG,OAAS,IAAK,CAAA,oBAAoB,QAAQ,IAAI,CAAA,GAAI;IACjG,MAAM,cAAc,QAAQ,KAAK,kBAAkB;IACnD,MAAM,eAAe,kBAAkB;IACvC,MAAM,SAAS,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI;IACjD,MAAM,UAAU,AAAC,CAAA,MAAM,cAAc,IAAI,EAAE,AAAD,EAAG,KAAK,CAAC,GAAG;IACtD,MAAM,YAAY,AAAC,CAAA,MAAM,cAAc,IAAI,EAAE,AAAD,EAAG,MAAM,GAAG,QAAQ,MAAM;IAEtE,MAAM,eAAe,CAAC;QACpB,MAAM,MAAM,EAAE;QACd,KAAK,MAAM,KAAK,MAAO;YACrB,MAAM,IAAI,QAAQ,MAAM,CAAC,EAAE;YAC3B,IAAI,KAAK,EAAE,YAAY,EAAE,IAAI,IAAI,IAAI,EAAE,YAAY;iBAC9C,IAAI,IAAI,CAAC;QAChB;QACA,OAAO;IACT;IAEA,MAAM,aAAa,CAAC,GAAG;QACrB,EAAE,eAAe;QACjB,IAAI,cAAc,MAAM,KAAK,GAAG;QAChC,UAAU,aAAa,gBAAgB;IACzC;IAEA,qBACE,iCAAC;QAAI,WAAU;QAAiB,OAAO;YAAE,YAAY,QAAQ,IAAI,YAAY;QAAE;;0BAC7E,iCAAC;gBAAI,WAAU;gBAAwB,SAAS,IAAM,QAAQ,MAAM,EAAE,EAAE,CAAC;;kCACvE,gCAAC;wBAAK,WAAU;kCACb,uBAAS,gCAAC,CAAA,GAAA,iCAAY,uBAAM,gCAAC,CAAA,GAAA,kCAAa;;kCAE7C,gCAAC;kCAAG,MAAM,KAAK;;kCACf,iCAAC;wBAAK,WAAU;;0CACd,gCAAC;gCACC,MAAK;gCACL,WAAU;gCACV,UAAU,eAAe,UAAU;gCACnC,SAAS,CAAA,IAAK,WAAW,GAAG;gCAC5B,OAAM;0CACP;;0CACD,gCAAC;gCACC,MAAK;gCACL,WAAU;gCACV,UAAU;gCACV,SAAS,CAAA,IAAK,WAAW,GAAG;gCAC5B,OAAM;0CACP;;;;kCAEH,iCAAC;wBAAK,WAAU;;4BAAwB;4BAAc;4BAAE;;;;;YAEzD,wBACC;;oBACI,CAAA,MAAM,SAAS,IAAI,EAAE,AAAD,EAAG,GAAG,CAAC,CAAA,oBAC3B,gCAAC;4BAEC,OAAO;4BACP,OAAO,QAAQ;4BACf,SAAS;4BACT,aAAa;4BACb,UAAU;4BACV,WAAW;4BACX,SAAS;4BACT,SAAS;4BACT,WAAW;2BATN,IAAI,EAAE;oBAYd,QAAQ,MAAM,GAAG,mBAChB,iCAAC;wBAAG,WAAU;;4BACX,QAAQ,GAAG,CAAC,CAAA,qBACX,gCAAC;oCAEC,MAAM;oCACN,SAAS;oCACT,aAAa;oCACb,UAAU;mCAJL;4BAOR,YAAY,mBACX,gCAAC;gCAAG,WAAU;0CACZ,cAAA,iCAAC;;wCAAG;wCAAG;wCAAU;;;;;;;;;;AASnC;AAEA,MAAM,qCAAe,CAAA;IACnB,MAAM,EAAE,cAAc,OAAO,0BAAE,sBAAsB,yBAAE,qBAAqB,2BAAE,uBAAuB,SAAE,QAAQ,IAAI,GAAG;IACtH,MAAM,CAAC,SAAS,WAAW,GAAG,CAAA,GAAA,qBAAO,EAAE,CAAC;IAExC,MAAM,cAAc,CAAA,GAAA,oBAAM,EAAE,IAAM,IAAI,IAAI,yBAAyB;QAAC;KAAuB;IAE3F,MAAM,eAAe,CAAC;QACpB,MAAM,IAAI,WAAW,QAAQ,MAAM,IAAI,QAAQ,MAAM,CAAC,KAAK;QAC3D,MAAM,SAAS,KAAK,EAAE,YAAY;QAClC,IAAI,QAAQ;YACV,MAAM,cAAc,OAAO,KAAK,CAAC,CAAA,IAAK,YAAY,GAAG,CAAC;YACtD,wBAAwB,QAAQ,CAAC;QACnC,OACE,sBAAsB;IAE1B;IAEA,MAAM,IAAI,MAAM,IAAI,GAAG,WAAW;IAElC,MAAM,WAAW,CAAA,GAAA,oBAAM,EAAE;QACvB,IAAI,CAAC,WAAW,CAAC,QAAQ,MAAM,EAAE,OAAO,EAAE;QAC1C,OAAO,QAAQ,MAAM,CAClB,GAAG,CAAC,CAAA,IAAK,kCAAY,GAAG,GAAG,UAC3B,MAAM,CAAC,CAAA,IAAK,KAAM,CAAA,AAAC,EAAE,cAAc,IAAI,EAAE,cAAc,CAAC,MAAM,IAAM,EAAE,SAAS,IAAI,EAAE,SAAS,CAAC,MAAM;IAC1G,GAAG;QAAC;QAAS;KAAE;IAEf,IAAI,CAAC,WAAW,CAAC,QAAQ,MAAM,EAC7B,qBAAO,gCAAC;QAAI,WAAU;kBAAuB;;IAG/C,MAAM,UAAU,CAAC,IAAI,MAAQ,WAAW,CAAA,IAAM,CAAA;gBAAE,GAAG,CAAC;gBAAE,CAAC,GAAG,EAAE;YAAI,CAAA;IAChE,MAAM,YAAY,CAAC,CAAC;IAEpB,qBACE,gCAAC;QAAI,WAAU;kBACb,cAAA,iCAAC;YAAI,WAAU;;gBACZ,SAAS,GAAG,CAAC,CAAA,sBACZ,gCAAC;wBAEC,OAAO;wBACP,OAAO;wBACP,SAAS;wBACT,aAAa;wBACb,UAAU;wBACV,WAAW;wBACX,SAAS;wBACT,SAAS;wBACT,WAAW;uBATN,MAAM,EAAE;gBAYhB,SAAS,MAAM,KAAK,mBACnB,iCAAC;oBAAI,WAAU;;wBAAuB;wBAAkB;wBAAM;;;;;;AAKxE;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,sBACA,gCACA,yBACA,2BACA;;;;;;;;;;;AE5NF,MAAM,0CAAoB,CAAC;IACzB,IAAI,MAAM,MAAM,MAAM,QAAQ,MAAM,WAAW,OAAO;IACtD,MAAM,IAAI,CAAC;IACX,OAAO,OAAO,QAAQ,CAAC,KAAK,IAAI;AAClC;AAEA,MAAM,qCAAe,CAAC,WAAE,OAAO,WAAE,OAAO,WAAE,OAAO,EAAE;IACjD,MAAM,CAAC,YAAY,cAAc,GAAG,CAAA,GAAA,qBAAO,EACzC,WAAW,QAAQ,UAAU,IAAI,OAAO,OAAO,QAAQ,UAAU,IAAI;IAEvE,MAAM,CAAC,aAAa,eAAe,GAAG,CAAA,GAAA,qBAAO,EAC3C,WAAW,QAAQ,WAAW,IAAI,OAAO,OAAO,QAAQ,WAAW,IAAI;IAGzE,CAAA,GAAA,sBAAQ,EAAE;QACR,MAAM,QAAQ,CAAC;YAAQ,IAAI,EAAE,GAAG,KAAK,UAAU;QAAW;QAC1D,OAAO,gBAAgB,CAAC,WAAW;QACnC,OAAO,IAAM,OAAO,mBAAmB,CAAC,WAAW;IACrD,GAAG;QAAC;KAAQ;IAEZ,MAAM,QAAQ;QACZ,QAAQ;YACN,YAAY,wCAAkB;YAC9B,aAAa,wCAAkB;QACjC;QACA;IACF;IAEA,qBACE,gCAAC;QAAI,WAAU;QAA0B,SAAS;kBAChD,cAAA,iCAAC;YAAI,WAAU;YAAiB,SAAS,CAAA,IAAK,EAAE,eAAe;YAAI,MAAK;YAAS,cAAW;;8BAC1F,iCAAC;oBAAI,WAAU;;sCACb,gCAAC;sCAAE;;sCACH,gCAAC;4BAAO,MAAK;4BAAS,WAAU;4BAAuB,SAAS;4BAAS,cAAW;sCAAQ;;;;8BAE9F,iCAAC;oBAAI,WAAU;;sCACb,iCAAC;4BAAI,WAAU;;8CACb,iCAAC;;wCAAM;sDAEL,gCAAC;4CACC,MAAK;4CACL,MAAK;4CACL,KAAI;4CACJ,OAAO;4CACP,UAAU,CAAA,IAAK,cAAc,EAAE,MAAM,CAAC,KAAK;4CAC3C,aAAY;;;;8CAGhB,gCAAC;8CAAM;;;;sCAET,iCAAC;4BAAI,WAAU;;8CACb,iCAAC;;wCAAM;sDAEL,gCAAC;4CACC,MAAK;4CACL,MAAK;4CACL,KAAI;4CACJ,KAAI;4CACJ,OAAO;4CACP,UAAU,CAAA,IAAK,eAAe,EAAE,MAAM,CAAC,KAAK;4CAC5C,aAAY;;;;8CAGhB,gCAAC;8CAAM;;;;;;8BAGX,iCAAC;oBAAI,WAAU;;sCACb,gCAAC;4BAAO,MAAK;4BAAS,WAAU;4BAAsB,SAAS;sCAAS;;sCACxE,gCAAC;4BAAO,MAAK;4BAAS,WAAU;4BAAyB,SAAS;sCAAO;;;;;;;AAKnF;IAEA,2CAAe;;;ADtEf,MAAM,mCAAa,CAAA;IACjB,MAAM,EACJ,cAAc,OAAO,EACrB,wBAAwB,MAAM,EAC9B,gBAAgB,MAAM,EACtB,iBAAiB,OAAO,qBACxB,iBAAiB,qBACjB,iBAAiB,mBACjB,eAAe,mBACf,eAAe,cACf,UAAU,mBACV,eAAe,uBACf,mBAAmB,2BACnB,uBAAuB,yBACvB,qBAAqB,wBACrB,oBAAoB,2BACpB,uBAAuB,4BACvB,wBAAwB,EACzB,GAAG;IAEJ,MAAM,CAAC,aAAa,eAAe,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC/C,MAAM,OAAO,QAAQ,IAAI,IAAI,EAAE;IAE/B,MAAM,yBAAyB,CAAA,GAAA,oBAAM,EACnC,IAAM,OAAO,MAAM,CAAC,CAAA,IAAK,CAAA,GAAA,yCAAiB,CAAC,CAAC,EAAE,GAC9C;QAAC;KAAO;IAGV,CAAA,GAAA,sBAAQ,EAAE;QACR,IAAI,uBAAuB,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,GAAG;QAC9D,MAAM,WAAW,CAAA,GAAA,yCAAiB,EAAE,MAAM;QAC1C,KAAK,MAAM,CAAC,QAAQ,IAAI,IAAI,OAAO,OAAO,CAAC,UAAW;YACpD,IAAI,CAAC,IAAI,MAAM,EAAE;YACjB,IAAI,WAAW,YAAY,UAAU,0BAA0B;YAC/D,IAAI,WAAW,YAAY;gBACzB,IAAI,0BAA0B,yBAAyB;gBACvD;YACF;YACA,IAAI,yBAAyB,wBAAwB,QAAQ;QAC/D;IACF,GAAG;QAAC;QAAM;QAAwB;QAAyB;KAAyB;IAEpF,IAAI,OAAO,MAAM,KAAK,GACpB,qBACE,gCAAC;QAAI,WAAU;kBACb,cAAA,gCAAC;sBAAG;;;IAKV,MAAM,eAAe;QACnB,IAAI,QAAQ,MAAM,KAAK,WAAW,qBAAO,gCAAC;YAAM,WAAU;sBAA0B;;QACpF,IAAI,QAAQ,MAAM,KAAK,SAAS,qBAAO,iCAAC;YAAM,WAAU;;gBAAgC;gBAAQ,QAAQ,KAAK;;;QAC7G,IAAI,QAAQ,MAAM,KAAK,SAAS,qBAAO,gCAAC;YAAM,WAAU;sBAA0B;;QAClF,IAAI,QAAQ,MAAM,KAAK,QAAQ,qBAAO,gCAAC;YAAM,WAAU;sBAA0B;;QACjF,OAAO;IACT;IAEA,MAAM,cAAc;2BAClB;2BACA;QACA,UAAU;QACV,UAAU;oBACV;QACA,SAAS;IACX;IAEA,MAAM,YAAY,CAAC,MAAM;QACvB,MAAM,MAAM,OAAO,OAAO,CAAC;QAC3B,IAAI,QAAQ,IAAI;QAChB,MAAM,SAAS,MAAM;QACrB,IAAI,SAAS,KAAK,UAAU,OAAO,MAAM,EAAE;QAC3C,MAAM,OAAO;eAAI;SAAO;QACxB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;YAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI;SAAC;QACrD,wBAAwB;IAC1B;IAEA,qBACE,iCAAC;QAAI,WAAU;;0BACb,iCAAC;gBAAI,WAAU;;kCACb,iCAAC;wBAAK,WAAU;;0CAAyB,gCAAC;0CAAE;;4BAAW;;;kCACvD,iCAAC;wBAAK,WAAU;;4BACb,OAAO,MAAM;4BAAC;4BAAO,OAAO,MAAM,KAAK,IAAI,KAAK;4BAChD,OAAO,MAAM,GAAG,mBACf,gCAAC;gCACC,WAAU;gCACV,SAAS;0CACV;;;;kCAGL,iCAAC;wBAAK,WAAU;;0CACd,iCAAC;;kDACC,gCAAC;wCACC,MAAK;wCACL,MAAK;wCACL,OAAM;wCACN,SAAS,WAAW;wCACpB,UAAU,IAAM,oBAAoB;;oCACpC;;;0CAEJ,iCAAC;;kDACC,gCAAC;wCACC,MAAK;wCACL,MAAK;wCACL,OAAM;wCACN,SAAS,WAAW;wCACpB,UAAU,IAAM,oBAAoB;;oCACpC;;;;;kCAGN,iCAAC;wBACC,MAAK;wBACL,WAAU;wBACV,SAAS,IAAM,eAAe;wBAC9B,OAAM;;0CAEN,gCAAC,CAAA,GAAA,6BAAQ;4BAAG;;;oBAEb;;;YAEF,6BACC,gCAAC,CAAA,GAAA,wCAAW;gBACV,SAAS;gBACT,SAAS;gBACT,SAAS,IAAM,eAAe;;0BAGlC,gCAAC;gBAAI,WAAU;0BACZ,WAAW,sBACV,gCAAC;oBACC,MAAM;oBACN,QAAQ;oBACR,SAAS;oBACT,aAAa;oBACb,aAAa;mCAGf,gCAAC;oBAAI,WAAU;8BAAyB,CAAA,GAAA,yCAAK,EAAE,MAAM,QAAQ;;;;;AAKvE;AAEA,MAAM,sCAAgB;AAEtB,MAAM,iCAAW,CAAC,QAAE,IAAI,UAAE,MAAM,WAAE,OAAO,eAAE,WAAW,eAAE,WAAW,EAAE;IACnE,MAAM,UAAE,MAAM,cAAE,UAAU,QAAE,IAAI,EAAE,GAAG,CAAA,GAAA,yCAAa,EAAE,MAAM,QAAQ,SAAS;IAC3E,MAAM,mBAAmB,OAAO,MAAM;IACtC,MAAM,CAAC,WAAW,aAAa,GAAG,CAAA,GAAA,qBAAO,EAAE,CAAC;IAC5C,MAAM,SAAS,CAAA,GAAA,mBAAK,EAAE,CAAC;IAEvB,MAAM,cAAc,CAAC,MAAQ,CAAC;YAC5B,EAAE,cAAc;YAChB,EAAE,eAAe;YACjB,MAAM,KAAK,OAAO,OAAO,CAAC,IAAI;YAC9B,MAAM,aAAa,AAAC,MAAM,GAAG,qBAAqB,GAAG,KAAK,IAAK;YAC/D,MAAM,SAAS,EAAE,OAAO;YACxB,MAAM,SAAS,CAAC;gBACd,MAAM,QAAQ,GAAG,OAAO,GAAG;gBAC3B,MAAM,OAAO,KAAK,GAAG,CAAC,qCAAe,aAAa;gBAClD,aAAa,CAAA,OAAS,CAAA;wBAAE,GAAG,IAAI;wBAAE,CAAC,IAAI,EAAE;oBAAK,CAAA;YAC/C;YACA,MAAM,OAAO;gBACX,OAAO,mBAAmB,CAAC,eAAe;gBAC1C,OAAO,mBAAmB,CAAC,aAAa;gBACxC,OAAO,mBAAmB,CAAC,iBAAiB;gBAC5C,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;YACnC;YACA,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;YACjC,OAAO,gBAAgB,CAAC,eAAe;YACvC,OAAO,gBAAgB,CAAC,aAAa;YACrC,OAAO,gBAAgB,CAAC,iBAAiB;QAC3C;IAEA,qBACE,gCAAC;QAAI,WAAU;kBACb,cAAA,iCAAC;YAAM,WAAU;;8BACf,gCAAC;8BACC,cAAA,gCAAC;kCACE,OAAO,GAAG,CAAC,CAAC,GAAG;4BACd,MAAM,MAAM,UAAU,CAAC,EAAE;4BACzB,MAAM,WAAW,OAAO,OAAO,CAAC;4BAChC,MAAM,cAAc,aAAa;4BACjC,MAAM,IAAI,SAAS,CAAC,IAAI;4BACxB,MAAM,UAAU,IAAI;gCAAE,OAAO,GAAG,EAAE,EAAE,CAAC;gCAAE,UAAU,GAAG,EAAE,EAAE,CAAC;gCAAE,UAAU,GAAG,EAAE,EAAE,CAAC;4BAAC,IAAI;4BAClF,qBACE,iCAAC;gCAAa,OAAO;gCAAK,OAAO;gCAAS,KAAK,CAAA;oCAAQ,OAAO,OAAO,CAAC,IAAI,GAAG;gCAAI;;kDAC/E,iCAAC;wCAAI,WAAU;;0DACb,gCAAC;gDACC,MAAK;gDACL,WAAU;gDACV,UAAU,CAAC,eAAe,aAAa;gDACvC,SAAS,IAAM,YAAY,KAAK;gDAChC,OAAM;0DACP,cAAA,gCAAC,CAAA,GAAA,oCAAe;;0DACjB,gCAAC;gDAAK,WAAU;0DAA6B;;0DAC7C,gCAAC;gDACC,MAAK;gDACL,WAAU;gDACV,UAAU,CAAC,eAAe,aAAa,mBAAmB;gDAC1D,SAAS,IAAM,YAAY,KAAK;gDAChC,OAAM;0DACP,cAAA,gCAAC,CAAA,GAAA,qCAAgB;;;;kDAEpB,gCAAC;wCACC,WAAU;wCACV,eAAe,YAAY;wCAC3B,eAAe,IAAM,aAAa,CAAA;gDAAU,MAAM,IAAI;oDAAE,GAAG,IAAI;gDAAC;gDAAG,OAAO,CAAC,CAAC,IAAI;gDAAE,OAAO;4CAAG;wCAC5F,OAAM;;;+BAtBD;wBA0Bb;;;8BAGJ,iCAAC;;wBACE,KAAK,GAAG,CAAC,CAAC,KAAK,kBACd,gCAAC;0CACE,IAAI,GAAG,CAAC,CAAC,GAAG;oCACX,MAAM,MAAM,UAAU,CAAC,EAAE;oCACzB,MAAM,IAAI,SAAS,CAAC,IAAI;oCACxB,MAAM,UAAU,IAAI;wCAAE,OAAO,GAAG,EAAE,EAAE,CAAC;wCAAE,UAAU,GAAG,EAAE,EAAE,CAAC;wCAAE,UAAU,GAAG,EAAE,EAAE,CAAC;oCAAC,IAAI;oCAClF,qBACE,gCAAC;wCAAa,OAAO;wCAAG,OAAO;kDAAU;uCAAhC;gCAEb;+BARO;wBAWV,KAAK,MAAM,KAAK,mBACf,gCAAC;sCACC,cAAA,gCAAC;gCAAG,SAAS,OAAO,MAAM;gCAAE,WAAU;0CACpC,cAAA,gCAAC;8CAAG;;;;;;;;;AAQpB;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,sBACA,gCACA,wBACA,yBACA,2BACA,2BACA,yBACA,yBACA,oBACA,yBACA,uBACA,2BACA,yBACA,wBACA,2BACA,4BACA;;;;;;;AEtQF,MAAM,wCAAkB,CAAA;IACtB,MAAM,0BACJ,sBAAsB,kBACtB,cAAc,EACd,kBAAkB,EAAE,2BACpB,uBAAuB,4BACvB,wBAAwB,2BACxB,uBAAuB,EACxB,GAAG;IAEJ,MAAM,WAAW,GAAG,MAAM,KAAK,eAAe,GAAG,MAAM,KAAK;IAC5D,MAAM,MAAM,GAAG,KAAK,GAAG,IACnB,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,AAAC,GAAG,QAAQ,GAAG,GAAG,KAAK,GAAI,QACpD;IAEJ,MAAM,WAAW,CAAC,YAAY,uBAAuB,MAAM,GAAG;IAE9D,qBACE;;0BACE,iCAAC;gBAAI,WAAU;;kCACb,gCAAC;wBAAI,WAAU;kCACb,cAAA,iCAAC;;gCACE,uBAAuB,MAAM;gCAAC;gCAAO,uBAAuB,MAAM,KAAK,IAAI,KAAK;gCAAI;8CAC3E,gCAAC;8CAAG,eAAe,WAAW;;;;;kCAG5C,iCAAC,CAAA,GAAA,4BAAK;wBACJ,SAAQ;wBACR,MAAK;wBACL,UAAU,CAAC;wBACX,SAAS;;4BACV;4BACW,eAAe,WAAW;;;;;0BAIxC,iCAAC,CAAA,GAAA,2BAAI;gBAAE,MAAM,GAAG,MAAM,KAAK;gBAAQ,QAAQ;gBAAyB,QAAQ;gBAAC,UAAS;;kCACpF,gCAAC,CAAA,GAAA,2BAAI,EAAE,MAAM;wBAAC,aAAa,CAAC;kCAC1B,cAAA,iCAAC,CAAA,GAAA,2BAAI,EAAE,KAAK;;gCACT,GAAG,MAAM,KAAK,eAAe;gCAC7B,GAAG,MAAM,KAAK,iBAAiB;gCAC/B,GAAG,MAAM,KAAK,UAAU;gCACxB,GAAG,MAAM,KAAK,eAAe;gCAC7B,GAAG,MAAM,KAAK,WAAW;;;;kCAG9B,iCAAC,CAAA,GAAA,2BAAI,EAAE,IAAI;;4BACR,0BACC;;kDACE,gCAAC,CAAA,GAAA,iCAAU;wCACT,KAAK;wCACL,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,QAAQ,CAAC,cAAc,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,IAAI,GAAG;wCACzF,OAAO;wCACP,QAAQ;;kDAEV,gCAAC;wCAAI,OAAO;4CAAE,WAAW;4CAAU,UAAU;4CAAW,OAAO;wCAAO;kDAAG;;;;4BAK5E,GAAG,MAAM,KAAK,wBACb,iCAAC;;oCAAI;kDACG,gCAAC;kDAAG,GAAG,QAAQ,CAAC,cAAc;;oCAAO;;;4BAG9C,GAAG,MAAM,KAAK,6BACb,iCAAC;;oCAAI;kDACQ,gCAAC;kDAAG,GAAG,QAAQ,CAAC,cAAc;;oCAAO;oCAAI,GAAG,KAAK,CAAC,cAAc;oCAAG;;;4BAGjF,GAAG,MAAM,KAAK,yBACb,gCAAC;gCAAI,WAAU;0CAAe,GAAG,KAAK;;;;kCAG1C,gCAAC,CAAA,GAAA,2BAAI,EAAE,MAAM;kCACV,yBACC,gCAAC,CAAA,GAAA,4BAAK;4BAAE,SAAQ;4BAAoB,MAAK;4BAAK,SAAS;sCAA0B;2CAIjF,gCAAC,CAAA,GAAA,4BAAK;4BAAE,SAAQ;4BAAY,MAAK;4BAAK,SAAS;sCAAyB;;;;;;;AAQpF;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,gCACA,wBACA,0BACA,2BACA,4BACA,2BACA;;;;AJ9FF,MAAM,qCAAe;AACrB,MAAM,qCAAe;AAErB,MAAM,wCAAkB,CAAA;IACtB,MAAM,EACJ,cAAc,OAAO,EACrB,8BAA8B,SAAS,EACvC,wBAAwB,GAAG,EAC3B,iCAAiC,YAAY,8BAC7C,0BAA0B,EAC3B,GAAG;IACJ,MAAM,CAAC,YAAY,cAAc,GAAG,CAAA,GAAA,qBAAO,EAAE;IAC7C,MAAM,CAAC,SAAS,WAAW,GAAG,CAAA,GAAA,qBAAO,EAAE;IACvC,MAAM,CAAC,UAAU,YAAY,GAAG,CAAA,GAAA,qBAAO,EAAE;IACzC,MAAM,eAAe,CAAA,GAAA,mBAAK,EAAE;IAE5B,CAAA,GAAA,sBAAQ,EAAE;QACR,IAAI,cAAc;IACpB,GAAG;QAAC;QAAc;KAA2B;IAE7C,MAAM,gBAAgB,CAAA,GAAA,wBAAU,EAAE,CAAC;QACjC,MAAM,KAAK,aAAa,OAAO;QAC/B,IAAI,CAAC,IAAI;QACT,MAAM,OAAO,GAAG,qBAAqB;QACrC,MAAM,MAAM,AAAE,CAAA,EAAE,OAAO,GAAG,KAAK,IAAI,AAAD,IAAK,KAAK,KAAK,GAAI;QACrD,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM;QAC3B,WAAW,KAAK,GAAG,CAAC,oCAAc,KAAK,GAAG,CAAC,oCAAc;IAC3D,GAAG,EAAE;IAEL,CAAA,GAAA,sBAAQ,EAAE;QACR,IAAI,CAAC,UAAU;QACf,MAAM,OAAO,IAAM,YAAY;QAC/B,OAAO,gBAAgB,CAAC,eAAe;QACvC,OAAO,gBAAgB,CAAC,aAAa;QACrC,OAAO,gBAAgB,CAAC,iBAAiB;QACzC,MAAM,OAAO,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU;QAC3C,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;QACjC,OAAO;YACL,OAAO,mBAAmB,CAAC,eAAe;YAC1C,OAAO,mBAAmB,CAAC,aAAa;YACxC,OAAO,mBAAmB,CAAC,iBAAiB;YAC5C,SAAS,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;QACnC;IACF,GAAG;QAAC;QAAU;KAAc;IAE5B,IAAI,CAAC,WAAW,CAAC,QAAQ,MAAM,EAAE;QAC/B,MAAM,MAAM,YAAY,kBAAa,AAAC,OAAO,IAAI,KAAK,GAAI,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,GAAG,GAAG;QAC1F,qBACE,gCAAC;YAAI,WAAU;sBACb,cAAA,iCAAC;gBAAG,OAAO;oBAAC,SAAS;gBAAM;;oBAAG;oBAAyB;oBAAI;;;;IAGjE;IAEA,MAAM,YAAY;QAChB,qBAAqB,GAAG,QAAQ,MAAM,EAAE,MAAM,QAAQ,CAAC,CAAC;IAC1D;IAEA,qBACE,iCAAC;QAAI,WAAU;QAAgB,KAAK;QAAc,OAAO;;0BACvD,iCAAC;gBAAI,WAAU;;kCACb,iCAAC;wBAAI,WAAU;;0CACb,gCAAC;0CAAE;;0CACH,iCAAC;gCAAM,OAAO;oCAAC,OAAO;oCAAQ,YAAY;gCAAQ;;oCAC/C,OAAO,IAAI,CAAC,QAAQ,MAAM,EAAE,MAAM;oCAAC;;;0CAEtC,gCAAC;gCACC,MAAK;gCACL,WAAU;gCACV,aAAY;gCACZ,OAAO;gCACP,UAAU,CAAA,IAAK,cAAc,EAAE,MAAM,CAAC,KAAK;;;;kCAG/C,gCAAC;wBAAI,WAAU;kCACb,cAAA,gCAAC,CAAA,GAAA,wCAAQ;4BAAE,OAAO;;;;;0BAItB,gCAAC;gBACC,WAAW,qBAAsB,CAAA,WAAW,cAAc,EAAC;gBAC3D,eAAe,CAAA;oBAAO,EAAE,cAAc;oBAAI,YAAY;gBAAO;gBAC7D,eAAe,IAAM,WAAW;gBAChC,MAAK;gBACL,oBAAiB;gBACjB,OAAM;;0BAGR,gCAAC;gBAAI,WAAU;0BACb,cAAA,iCAAC;oBAAI,WAAU;;sCACb,gCAAC;4BAAI,WAAU;sCACb,cAAA,gCAAC,CAAA,GAAA,wCAAM;;sCAET,gCAAC,CAAA,GAAA,wCAAW;;;;;;AAKtB;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,sBACA,sCACA,gCACA,yCACA,8BACA;;;;;;;;;;AK1GF,MAAM,iCAAW,IAAI,CAAA,GAAA,sCAAiB;AAEtC,MAAM,6BAAO,CAAA;IACX,MAAM,iBAAiB,MAAM,aAAa,IAAI,MAAM,aAAa,CAAC,cAAc;IAChF,MAAM,OAAO,CAAA,GAAA,oBAAM,EAAE;QACnB,MAAM,MAAM,CAAA,GAAA,yCAAa,EAAE;QAC3B,OAAO,MAAM,CAAA,GAAA,2BAAM,EAAE,OAAO;IAC9B,GAAG;QAAC;KAAe;IACnB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAA,GAAA,qBAAO,EAAE,CAAC;IAClC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAA,GAAA,qBAAO,EAAE;IACjC,IAAI,CAAC,MAAM,OAAO;IAClB,CAAA,GAAA,sCAAiB,EAAE,MAAM,CAAC,OAAS,QAAQ;IAE3C,SAAS;QACP,CAAA,GAAA,mCAAc,EAAE,MAAM,gCACnB,IAAI,CAAC,CAAC;YACL,QAAQ,OAAO,IAAI;QACrB,GAAG,KAAK,CAAC,CAAC;YACV,QAAQ,GAAG,CAAC;QACd;IACF;IACA,SAAS;QACP,CAAA,GAAA,2BAAM,EAAE,MACL,IAAI,CAAC;YACJ,QAAQ;QACV,GAAG,KAAK,CAAC,CAAC;YACV,QAAQ,GAAG,CAAC;QACd;IACF;IACA,qBACE,gCAAC;QAAI,WAAW,MAAM,aAAa,CAAC,EAAE,KAAK,YAAY,+BAA8B;kBACnF,cAAA,iCAAC;YAAI,WAAU;;8BACb,iCAAC;oBAAI,WAAU;oBAAyB,SAAS,IAAM,QAAQ,CAAC;;sCAC9D,gCAAC;sCAAE;;sCACH,gCAAC;4BAAK,WAAU;sCACd,cAAA,gCAAC;gCAAK,WAAU;0CACb,qBAAO,gCAAC,CAAA,GAAA,iCAAY,uBAAM,gCAAC,CAAA,GAAA,kCAAa;;;;;gBAI9C,sBAAQ,gCAAC;oBAAI,WAAU;8BACtB,cAAA,gCAAC;kCACE,qBACG,gCAAC,CAAA,GAAA,4BAAK;4BAAE,MAAK;4BAAK,SAAQ;4BAAU,SAAS;sCAAe,KAAK,WAAW;2CAC5E,gCAAC,CAAA,GAAA,4BAAK;4BAAE,MAAK;4BAAK,SAAQ;4BAAU,SAAS;sCAAa;;;;;;;AAO1E;IAEA,2CAAe,CAAA,GAAA,gCAAM,EACnB,uBACA;;;;;A3B5CF,MAAM,2CAAqB,CAAC,SAAE,KAAK,eAAE,cAAc,aAAM,KAAK,YAAE,QAAQ,EAAE;IACxE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAA,GAAA,qBAAO,EAAE;IACjC,qBACE,iCAAC;QAAI,WAAU;;0BACb,iCAAC;gBAAI,WAAU;gBAAyB,SAAS,IAAM,QAAQ,CAAC;;kCAC9D,gCAAC;kCAAG;;kCACJ,iCAAC;wBAAK,WAAU;;4BACb;0CACD,gCAAC;gCAAK,WAAU;0CACb,qBAAO,gCAAC,CAAA,GAAA,iCAAY,uBAAM,gCAAC,CAAA,GAAA,kCAAa;;;;;;YAI9C,sBAAQ,gCAAC;gBAAI,WAAU;0BAAwB;;;;AAGtD;AAEA,MAAM,kCAAY;IAChB,MAAM,CAAA,GAAA,wCAAO;IACb,MAAM,CAAA,GAAA,wCAAO;IACb,UAAU,CAAA,GAAA,wCAAM;IAChB,SAAS,CAAA,GAAA,wCAAU;IACnB,YAAY,CAAA,GAAA,wCAAS;IACrB,WAAW,CAAA,GAAA,wCAAY;IACvB,QAAQ,CAAA,GAAA,wCAAW;AACrB;AAEA,MAAM,kCAAY,CAAA;IAChB,IAAI,UAAU,MAAM,oBAAoB;IACxC,+CAA+C;IAC/C,mCAAmC;IACnC,IAAI;IACJ,IAAI,MAAM,oBAAoB,KAAK,SAAS;QAC1C,IAAI,sBAAQ,gCAAC;sBAAK;;QAClB,IAAI,MAAM,aAAa,EAAE;YACvB,IAAI,QAAQ,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ;YACjD,IAAI,UAAU,MAAM,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG;YAC9E,sBAAQ,iCAAC;;kCAAK,gCAAC;kCAAG;;oBAAU;kCAAU,gCAAC;kCAAG;;oBAAY;;;QACxD;QACA,MAAM,wBACJ,iCAAC,CAAA,GAAA,6BAAM;;8BACL,gCAAC,CAAA,GAAA,6BAAM,EAAE,MAAM;oBAAC,IAAG;8BAAK;;8BACxB,iCAAC,CAAA,GAAA,6BAAM,EAAE,IAAI;;wBAAC;wBAAW,MAAM,iBAAiB;wBAAC;;;;;QAIrD,wBAAU,iCAAC;;gBACR;8BACD,gCAAC,CAAA,GAAA,oCAAa;oBAAE,WAAU;oBAAO,SAAS;8BACxC,cAAA,gCAAC;wBAAK,OAAO;4BAAC,OAAM;4BAAS,QAAO;wBAAS;wBAAG,SAAS,MAAM,oBAAoB;kCAAE,cAAA,gCAAC,CAAA,GAAA,8BAAS;;;8BAEjG,gCAAC,CAAA,GAAA,wCAAY;;;IAEjB;IACA,qBAAO,gCAAC;QAAI,OAAO;YAAC,SAAQ;YAAO,OAAM;YAAY,UAAS;QAAO;kBAAI;;AAC3E;AAEA,MAAM,4CAAS,CAAA,GAAA,gCAAM,EACnB,uBACA,8BACA,2BACA,wBACA,yBACA;AAGF,MAAM,oCAAc,CAAC,GAAG,cAAc,YAAY,MAAM;IACtD,IAAI,CAAC,GAAG,IAAI,OAAO,KAAK;IACxB,EAAE,YAAY,GAAG;IACjB,IAAI,EAAE,eAAe,EAAE,EAAE,eAAe;IAExC,IAAI,cAAc;QAChB,IAAI,KAAK,MAAM,EACb,QAAQ,YAAY,CAAC;aAGrB,QAAQ,aAAa;;IAGzB,QAAQ,GAAG,CAAC,MAAM;AACpB;AACA,SAAS,gCAAU,MAAM;IACvB,CAAA,GAAA,yCAAM,EAAE,KAAK,CAAC;QACZ,UAAU;QACV,QAAQ;IACV;AACF;AACA,MAAM,+BAAS,CAAC,QAAC,IAAI,gBAAC,YAAY,cAAC,UAAU,WAAC,OAAO,EAAC;IACpD,IAAI,UAAU;IACd,IAAI,KAAK,SAAS,EAChB,UAAU,GAAG,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE;IAE1C,IAAI,KAAK,MAAM,EACb,UAAU,GAAG,QAAQ,mBAAmB,CAAC;IAE3C,IAAI,cAAc,KAAK,MAAM,EAC3B,UAAU,GAAG,QAAQ,sBAAsB,CAAC;IAE9C,IAAI,UAAU;IACd,IAAI,OAAO;IACX,IAAI,WAAW,EAAE;IAEjB,IAAI,KAAK,QAAQ,EAAE;QACjB,IAAI,MAAI;QACR,IAAI,YAAY,EAAE;QAClB,IAAI,KAAK,cAAc,CAAC,cACtB,UAAU,IAAI,eAAC,iCAAC;YAAe,SAAS;gBAAK,gCAAU,CAAC,UAAU,EAAE,KAAK,SAAS,EAAE;gBAAG,QAAQ,eAAe,CAAC;YAAK;;gBAAG;8BAAW,gCAAC;8BAAG,KAAK,SAAS,KAAK,QAAQ,OAAO;;;WAAhJ;QAE1B,IAAI,KAAK,OAAO,GAAG,GAAG;YACpB,UAAU,IAAI,eAAC,gCAAC;gBAAe,SAAS;oBAAK,gCAAU,CAAC,aAAa,CAAC;oBAAG,QAAQ,UAAU,CAAC;gBAAK;0BAAG;eAA5E;YACxB,UAAU,IAAI,eAAC,iCAAC;gBAAe,SAAS;oBAAK,gCAAU,CAAC,WAAW,CAAC;oBAAG,QAAQ,WAAW,CAAC,MAAK;gBAAO;;oBAAG;oBAAK,KAAK,QAAQ,IAAI;;eAAxG;YACxB,UAAU,IAAI,eAAC,iCAAC;gBAAe,SAAS;oBAAK,gCAAU,CAAC,WAAW,CAAC;oBAAG,QAAQ,WAAW,CAAC,MAAK;gBAAO;;oBAAG;oBAAK,KAAK,QAAQ,IAAI;;eAAxG;QAC1B;QACA,UAAU,IAAI,eAAC,gCAAC;YAAe,SAAS;gBAAK,gCAAU,CAAC,aAAa,CAAC;gBAAG,QAAQ,MAAM,CAAC;YAAK;sBAAG;WAAxE;QACxB,qBAAO,gCAAC;YAAI,WAAU;sBAAsB,cAAA,gCAAC;0BAAI;;;IACnD;IACA,IAAI;IACJ,IAAI,KAAK,OAAO,EAAE;QAChB,MAAM,wBACJ,iCAAC,CAAA,GAAA,6BAAM;;8BACL,gCAAC,CAAA,GAAA,6BAAM,EAAE,MAAM;oBAAC,IAAG;8BAAK;;8BACxB,gCAAC,CAAA,GAAA,6BAAM,EAAE,IAAI;8BAAE,KAAK,OAAO;;;;QAG/B,wBACE,gCAAC,CAAA,GAAA,oCAAa;YAAE,WAAU;YAAO,SAAS;sBAAS,cAAA,gCAAC;gBAAK,OAAO;oBAAC,OAAM;oBAAS,OAAM;oBAAO,QAAO;gBAAS;0BAAG,cAAA,gCAAC,CAAA,GAAA,kCAAY;;;IAEjI;IACA,IAAI,KAAK,SAAS,EAAE;QAClB,WAAW,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAM,oBAAQ,gCAAC;gBAAiB,cAAc;gBAAc,MAAM;gBAAO,YAAY;gBAAY,SAAS;eAA/E;QACzD,wBACE,iCAAC;;8BACC,gCAAC;oBAAK,WAAU;oBACV,SAAS,IAAI,QAAQ,UAAU,CAAC;8BAAQ,KAAK,SAAS;;gBAC3D;;;IAGP,OAEE,wBAAU,iCAAC;QAAK,WAAU;QACV,SAAS,IAAI,QAAQ,UAAU,CAAC;;YAAQ,KAAK,QAAQ;YAAC;YAAS,KAAK,IAAI;;;IAE1F,qBACE,iCAAC;QAAuB,WAAW;QAAS,SAAS,CAAC,IAAI,kCAAY,GAAE,cAAc,YAAW,MAAK;;YACnG;YAAS;YAAM;;OADR,KAAK,OAAO;AAI1B;AAEA,MAAM,mCAAa,CAAA;IACjB,MAAM,UAAU;QACd,QAAQ,MAAM,qBAAqB;QACnC,YAAY,MAAM,qBAAqB;QACvC,iBAAiB,MAAM,8BAA8B;QACrD,cAAc,MAAM,yBAAyB;QAC7C,aAAa,MAAM,0BAA0B;QAC7C,eAAe,MAAM,4BAA4B;QACjD,YAAY,MAAM,yBAAyB;IAC7C;IACA,MAAM,iBAAiB,MAAM,aAAa,CAAC,EAAE,KAAK,YAAY,iCAAgC;IAC9F,IAAI,MAAM,cAAc,CAAC,QAAQ,GAAG,GAClC,qBAAO,gCAAC;QAAI,WAAW;kBACrB,cAAA,gCAAC;YAAmB,OAAM;YACxB,qBAAO,gCAAC;gBAAK,OAAO;oBAAC,QAAO;oBAAW,aAAY;gBAAQ;gBAAG,SAAS,CAAC;oBAAK,EAAE,eAAe;oBAAI,MAAM,qBAAqB;gBAAE;0BAAG,cAAA,gCAAC,CAAA,GAAA,2BAAM;;sBACzI,cAAA,gCAAC;gBAAO,MAAM,MAAM,cAAc;gBACrB,cAAc,MAAM,cAAc,CAAC,YAAY;gBAC/C,YAAY,MAAM,cAAc,CAAC,UAAU;gBAC3C,SAAS;;;;SAK1B,qBAAO,gCAAC;QAAI,WAAW;kBACrB,cAAA,gCAAC;YAAmB,OAAM;sBACxB,cAAA,gCAAC;gBAAI,WAAU;0BAAoC;;;;AAI3D;AAEA,MAAM,4CAAU,CAAA,GAAA,gCAAM,EACpB,wBACA,uBACA,yBACA,yBACA,kCACA,6BACA,8BACA,gCACA,6BACA,yBACA;AAGF,MAAM,mCAAa,CAAA;IACjB,IAAI,cAAc,MAAM,YAAY,CAAC,OAAO;IAC5C,OAAO,MAAM,cAAc,CAAC,QAAQ,GAAG,kBACrC,gCAAC;kBACE,YAAY,GAAG,CAAC,CAAC,GAAE;YAClB,IAAI,IAAI,OAAO,MAAM,CAAC,CAAC,GAAG;YAC1B,MAAM,SAAS,CAAA,GAAA,mBAAK,EAAE;YACtB,CAAA,GAAA,sBAAQ,EAAE;gBACR,IAAI,EAAE,YAAY,EAAE;oBAClB,MAAM,eAAa;oBACnB,MAAM,iBAAiB,OAAO,OAAO,CAAC,SAAS,GAAG;oBAClD,OAAO,QAAQ,CAAC;wBACd,KAAK;wBACL,UAAU;oBACZ;oBACA,MAAM,oBAAoB;gBAC5B;YACF,GAAG;gBAAC,EAAE,YAAY;aAAC;YACnB,qBACE,iCAAC;gBAAc,KAAK;;oBACjB,EAAE,IAAI,KAAK,sBAAQ,gCAAC;wBAAI,OAAO;4BAAC,gBAAe;wBAAQ;wBAAG,WAAU;kCAAuB,EAAE,IAAI;;oBACjG,EAAE,IAAI,KAAK,sBAAQ,CAAA,GAAA,sCAAI,EAAE,aAAa,CAAC,+BAAS,CAAC,EAAE,EAAE,CAAC,EAAE;;eAFjD;QAKd;SAEA;AACN;AAEA,MAAM,4CAAU,CAAA,GAAA,gCAAM,EACpB,wBACA,sBACA,wBACA;AAGF,MAAM,iCAAW,CAAA,sBACf,gCAAC;QAAI,WAAW;kBACd,cAAA,gCAAC;YAAmB,OAAM;sBACvB,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA,OAAQ,KAAK,IAAI,KAAK,YAAY,GAAG,CAAC,CAAC,MAAK,oBAC7E,iCAAC;oBAAI,OAAO;wBAAC,UAAS;oBAAQ;;sCAC5B,gCAAC,CAAA,GAAA,4CAAK;4BAAE,UAAU,IAAI,MAAM,mBAAmB,CAAC,KAAK,EAAE;4BAAG,SAAS,KAAK,IAAI,KAAK;4BACzE,QAAQ;4BACR,OAAO;4BACP,gBAAgB;4BAChB,aAAa;4BACb,eAAe;;sCAEvB,gCAAC;4BAAK,WAAW,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;4BAAE,SAAS,CAAC;gCAC3D,MAAM,qBAAqB,CAAC,KAAK,EAAE;4BACrC;sCAAI,KAAK,IAAI;;;mBAVuB;;;AAiB9C,MAAM,4CAAQ,CAAA,GAAA,gCAAM,EAClB,sBACA,uBACA,yBACA;","sources":["src/components/results/Study.js","src/index.js","src/bundles/index.js","src/bundles/api.js","src/bundles/filters.js","src/bundles/views.js","src/bundles/docs.js","src/bundles/genomes.js","src/bundles/swaggerFields.js","src/fieldCatalog.overlay.json","src/vepStudyInfo.js","src/bundles/exporter.js","src/components/exporter/downloadRunner.js","src/components/exporter/formatters.js","src/components/exporter/expressionResolver.js","src/components/exporter/ancestorsResolver.js","src/bundles/ontologies.js","src/components/resultList.js","src/components/resultSummary.js","src/components/suggestions.js","src/components/geneSearchUI.js","src/components/results/GeneList.js","src/components/results/details/Expression.js","src/components/results/details/Homology.js","src/components/results/details/generic.js","src/components/utils.js","src/components/results/details/Location.js","src/components/results/details/location/browser.js","src/components/results/details/location/dallianceBrowser.js","src/components/results/details/Pathways.js","src/components/results/details/VEP.js","src/components/results/details/Xrefs.js","src/components/results/details/Publications.js","src/components/results/details/Sequences.js","src/components/results/TaxDist.js","src/components/results/selection.js","src/components/results/HelpDemo.js","src/components/results/GeneAttribs.js","src/components/results/StatsByGroup.js","src/components/TaxonomyModal.js","src/components/results/Expression.js","src/components/results/UserGeneLists.js","src/components/exporter/ExporterView.js","src/components/exporter/FieldTree.js","src/components/exporter/Preview.js","src/components/exporter/CutoffsModal.js","src/components/exporter/ExportFooter.js","src/components/Auth.js"],"sourcesContent":["import React, { useState, useMemo } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\n\nconst metaRenderer = params => {\n if (params.value.ontology) {\n return <a href={`http://purl.obolibrary.org/obo/${params.value.id.replace(\":\",\"_\")}`} target='_blank'>{params.value.label}</a>\n }\n return params.value.label\n}\nconst sampleRenderer = params => {\n const sampleMeta = params.value;\n return (\n <label>\n <input\n type=\"checkbox\"\n checked={params.desiredSamples.hasOwnProperty(sampleMeta._id)}\n onChange={() => params.doToggleExpressionSample(sampleMeta._id)}\n />\n &nbsp;{sampleMeta.experiment}-{sampleMeta.group}\n </label>\n );\n // return JSON.stringify(sampleMeta,null,2);\n}\nconst connectedSampleRenderer = connect(\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n 'doToggleExpressionSample',\n sampleRenderer\n);\nconst Study = props => {\n let samples = props.expressionSamples[props.id];\n let sampleMetadata = [];\n let metadataFields = [{ field: \"sampleId\", cellRenderer: connectedSampleRenderer }];\n let isFactor={};\n samples.forEach((sample, idx) => {\n if (idx === 0) {\n let factors = {\n headerName: 'Experimental Variables',\n children: []\n }\n sample.factor.forEach(factor => {\n factors.children.push({field: factor.type, cellRenderer: metaRenderer})\n isFactor[factor.type] = true;\n });\n metadataFields.push(factors);\n let characteristics = {\n headerName: 'Sample Characteristics',\n children: []\n }\n sample.characteristic.forEach(ch => {\n if (!isFactor[ch.type]) {\n characteristics.children.push({field: ch.type, cellRenderer: metaRenderer})\n }\n });\n metadataFields.push(characteristics)\n }\n let s_info = {sampleId: sample}\n sample.factor.forEach(factor => {\n s_info[factor.type] = {label: factor.label};\n if (factor.ontology) {\n s_info[factor.type]['ontology'] = factor.ontology\n s_info[factor.type]['id'] = factor.id;\n }\n })\n sample.characteristic.forEach(ch => {\n s_info[ch.type] = {label: ch.label};\n if (ch.ontology) {\n s_info[ch.type]['ontology'] = ch.ontology\n s_info[ch.type]['id'] = ch.id;\n }\n })\n sampleMetadata.push(s_info)\n })\n const [rowData, setRowData] = useState(sampleMetadata);\n const [colDefs, setColDefs] = useState(metadataFields);\n const defaultColDef = useMemo(() => {\n return {\n filter: true\n }\n }, []);\n return (\n <div>\n <div className=\"ag-theme-quartz\" style={{height: `${44 * (samples.length + 2)}px`}}>\n <AgGridReact rowData={rowData} columnDefs={colDefs} defaultColDef={defaultColDef}/>\n </div>\n <a href={`https://www.ebi.ac.uk/gxa/experiments/${props.id}`}>EBI Atlas Experiment: {props.id}</a>\n </div>\n );\n};\nexport default connect(\n 'selectExpressionSamples',\n Study);\n","import bundles from './bundles';\nimport resultList from './components/resultList';\nimport resultSummary from './components/resultSummary';\nimport suggestions from './components/suggestions';\nimport {Status, Filters, Results, Views, Auth} from './components/geneSearchUI';\n\nexport { bundles, resultList, resultSummary, suggestions, Status, Filters, Results, Views, Auth };\n","import apiBundles from './api'\nimport filterBundle from './filters'\nimport viewsBundle from './views'\nimport docsBundle from './docs'\nimport genomesBundle from './genomes'\nimport fieldCatalogBundle from './swaggerFields'\nimport exporterBundle from './exporter'\nimport ontologiesBundle from './ontologies'\n\nexport default [...apiBundles, docsBundle, filterBundle, viewsBundle, genomesBundle, fieldCatalogBundle, exporterBundle, ontologiesBundle];\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler'\nimport _ from 'lodash'\nimport binsClient from \"gramene-bins-client\";\nimport treesClient from \"gramene-trees-client\";\nimport {build} from \"gramene-taxonomy-with-genomes\";\n\nconst facets = [\n \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\",\n // \"{!facet.limit='100' facet.mincount='1' key='genetree'}gene_tree\",\n // \"{!facet.limit='100' facet.mincount='1' key='pathways'}pathways__ancestors\",\n // \"{!facet.limit='100' facet.mincount='1' key='domains'}domain_roots\",\n \"{!facet.limit='-1' facet.mincount='1' key='fixed_1000__bin'}fixed_1000__bin\",\n \"{!facet.limit='100' facet.mincount='0' key='AED' type='range' start=0 end=1.0 gap=0.01}MAKER__AED__attr_f\"\n];\nconst genomesOfInterest = '(taxon_id:2769) OR (taxon_id:3055) OR (taxon_id:3218) OR (taxon_id:3702) OR (taxon_id:3847) OR (taxon_id:4555) OR (taxon_id:4558) OR (taxon_id:4577) OR (taxon_id:13333) OR (taxon_id:15368) OR (taxon_id:29760) OR (taxon_id:39947) OR (taxon_id:55577) OR (taxon_id:88036) OR (taxon_id:214687)';\nconst sites = ['main','oryza','maize','sorghum','grapevine'];\nconst grameneSuggestions = createAsyncResourceBundle( {\n name: 'grameneSuggestions',\n actionBaseType: 'GRAMENE_SUGGESTIONS',\n persist: false,\n getPromise: ({store}) => {\n const t = store.selectSuggestionsQuery().replaceAll(':',' ').trim();\n const g = store.selectGrameneGenomes();\n const q = `/suggest?q={!boost b=relevance}name:${t}^5 ids:${t}^5 ids:${t}*^3 synonym:${t}^3 synonym:${t}*^2 text:${t}*^1`;\n // const promises = sites.map(site => fetch(`https://data.gramene.org/${site}${q}`));\n // return Promise.all(promises)\n return fetch(store.selectGrameneAPI() + q)\n .then(res => {\n return res.json()\n })\n .then(suggestions => {\n if (Object.keys(g.active).length > 0) {\n suggestions.grouped.category.groups.forEach(group => {\n group.doclist.docs.forEach(sugg => {\n sugg.num_genes = 0;\n sugg.taxon_id.forEach((id,idx) => {\n if (g.active[id] && !g.active[id].hidden) {\n sugg.num_genes += sugg.taxon_freq[idx]\n }\n })\n })\n })\n }\n return suggestions\n })\n }\n});\n\ngrameneSuggestions.reactGrameneSuggestions = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectSuggestionsQuery',\n (shouldUpdate, queryString) => {\n if (shouldUpdate && queryString) {\n return { actionCreator: 'doFetchGrameneSuggestions' }\n }\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsStatus = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectGrameneSuggestionsIsLoading',\n 'selectGrameneSuggestionsRaw',\n 'selectSuggestionsQuery',\n (shouldUpdate, isLoading, suggestionsRaw, queryString) => {\n if (!queryString) return '';\n if (shouldUpdate) return 'update needed';\n if (isLoading) return 'loading';\n if (suggestionsRaw.data) return suggestionsRaw.data.grouped.category.matches + ' terms';\n console.error(suggestionsRaw)\n return 'error';\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsReady = createSelector(\n 'selectGrameneSuggestionsStatus',\n (status) => {\n const regex = RegExp('terms$');\n return regex.test(status);\n }\n);\n\ngrameneSuggestions.doFocusFirstGrameneSuggestion = arg => ({dispatch, getState}) => {\n console.log('inside doFocusFirstGrameneSuggestion');\n};\n\nfunction compressLongTaxonName(node) {\n const fullName = node.name;\n const removedExtraineousWords = fullName.replace(/( Group$| subsp\\.| ssp\\.| var\\.| strain)/, '');\n let finalVersion;\n if (removedExtraineousWords.length > 20) {\n let words = removedExtraineousWords.split(' ');\n if (words.length === 2) {\n // abrreviate first word.\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+/, '$1.')\n }\n if (words.length > 2) {\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+\\s([a-z])[a-z]+/, '$1$2.')\n }\n }\n else {\n finalVersion = removedExtraineousWords;\n }\n node.short_name = finalVersion;\n}\n\nconst grameneTaxonomy = createAsyncResourceBundle({\n name: 'grameneTaxonomy',\n actionBaseType: 'GRAMENE_TAXONOMY',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/taxonomy?subset=gramene&rows=-1`)\n .then(res => res.json())\n .then(taxNodes => {\n let taxonomy = _.keyBy(taxNodes, '_id');\n taxNodes.forEach(t => {\n t._id = +t._id; // ensure taxonomy id is a number\n compressLongTaxonName(t);\n if (t.hasOwnProperty(\"is_a\")) {\n t.is_a.forEach(p_id => {\n const p = taxonomy[p_id];\n if (!p.hasOwnProperty('children')) p.children = [];\n p.children.push(t._id)\n })\n }\n });\n return taxonomy\n })\n }\n});\ngrameneTaxonomy.reactGrameneTaxonomy = createSelector(\n 'selectGrameneTaxonomyShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneTaxonomy' }\n }\n }\n);\nconst grameneMaps = createAsyncResourceBundle({\n name: 'grameneMaps',\n actionBaseType: 'GRAMENE_MAPS',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/maps?rows=-1`)\n .then(res => res.json())\n .then(maps => {\n maps.forEach(m => {\n m.regionLength = {};\n m.regions.names.forEach((rname,idx) => {\n m.regionLength[rname] = m.regions.lengths[idx]\n })\n })\n return _.keyBy(maps, 'taxon_id');\n })\n }\n});\ngrameneMaps.reactGrameneMaps = createSelector(\n 'selectGrameneMapsShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneMaps' }\n }\n }\n);\n\nconst expressionStudies = createAsyncResourceBundle( {\n name: 'expressionStudies',\n actionBaseType: 'EXPRESSION_STUDIES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => _.groupBy(res, 'taxon_id'))\n }\n});\nexpressionStudies.reactExpressionStudies = createSelector(\n 'selectExpressionStudiesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchExpressionStudies' }\n }\n }\n);\n\nconst expressionSamples = createAsyncResourceBundle( {\n name: 'expressionSamples',\n actionBaseType: 'EXPRESSION_SAMPLES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n .then(res => res.json())\n .then(samples => _.groupBy(samples, 'experiment'))\n .then(studies => {\n Object.keys(studies).forEach(study => {\n studies[study].forEach(sample => {\n sample.order = +sample.group.replace('g','')\n });\n studies[study].sort((a,b) => a.order - b.order);\n })\n return studies\n })\n }\n});\nexpressionSamples.reactExpressionSamples = createSelector(\n 'selectExpressionSamplesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchExpressionSamples' }\n }\n }\n);\n\nconst curatedGenes = createAsyncResourceBundle( {\n name: 'curatedGenes',\n actionBaseType: 'CURATED_GENES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`https://devdata.gramene.org/curation/curations?rows=0&minFlagged=0&since=12-12-2029`)\n .then(res => res.json())\n .then(curation => _.keyBy(curation.genes, 'gene_id'))\n }\n});\ncuratedGenes.reactCuratedGenes = createSelector(\n 'selectCuratedGenesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchCuratedGenes' }\n }\n }\n);\n\nconst grameneGermplasm = createAsyncResourceBundle( {\n name: 'grameneGermplasm',\n actionBaseType: 'GRAMENE_GERMPLASM',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/germplasm?rows=-1`)\n .then(res => res.json())\n .then(res => {\n res.forEach(g => {\n if (!g.subpop) {\n g.subpop = \"?\"\n }\n });\n return _.groupBy(res, 'ens_id')\n })\n }\n});\ngrameneGermplasm.reactGrameneGermplasm = createSelector(\n 'selectGrameneGermplasmShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneGermplasm' }\n }\n }\n);\n//\n// const grameneExpressionAssays = createAsyncResourceBundle( {\n// name: 'grameneExpressionAssays',\n// actionBaseType: 'GRAMENE_EXPRESSION_ASSAYS',\n// persist: true,\n// getPromise: ({store}) => {\n// return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n// .then(res => res.json())\n// .then(res => {\n// let expr={};\n// res.forEach(assay => {\n// if (!expr.hasOwnProperty(assay.taxon_id)) {\n// expr[assay.taxon_id] = {};\n// }\n// if (!expr[assay.taxon_id].hasOwnProperty(assay.experiment)) {\n// expr[assay.taxon_id][assay.experiment] = [];\n// }\n// assay.order = +assay.group.replace('g','');\n// expr[assay.taxon_id][assay.experiment].push(assay);\n// });\n// // sort each experiment\n// for (const tid in expr) {\n// for (const exp in expr[tid]) {\n// expr[tid][exp].sort((a,b) => a.order - b.order);\n// }\n// }\n// return expr;\n// })\n// }\n// });\n// grameneExpressionAssays.reactGrameneExpressionAssays = createSelector(\n// 'selectGrameneExpressionAssaysShouldUpdate',\n// (shouldUpdate) => {\n// if (shouldUpdate) {\n// return { actionCreator: 'doFetchGrameneExpressionAssays' }\n// }\n// }\n// );\n\nconst MAKERAttribs = [\n 'MAKER__AED__attr_f',\n 'MAKER__QI1__attr_i',\n 'MAKER__QI2__attr_f',\n 'MAKER__QI3__attr_f',\n 'MAKER__QI4__attr_f',\n 'MAKER__QI5__attr_f',\n 'MAKER__QI6__attr_f',\n 'MAKER__QI7__attr_i',\n 'MAKER__QI8__attr_i',\n 'MAKER__QI9__attr_i'\n];\nconst geneAttribs = {\n \"MAKER transcript metrics\" : [\n { name: \"AED\", description: \"Annotation Edit Distance\", dtype: \"f\", fieldName: \"MAKER__AED__attr_f\" },\n { name: \"QI1\", description: \"Length of the 5' UTR\", dtype: \"i\", fieldName: \"MAKER__QI1__attr_i\" },\n { name: \"QI2\", description: \"Fraction of splice sites confirmed by an EST alignment\", dtype: \"f\", fieldName: \"MAKER__QI2__attr_f\" },\n { name: \"QI3\", description: \"Fraction of exons that overlap an EST alignment\", dtype: \"f\", fieldName: \"MAKER__QI3__attr_f\" },\n { name: \"QI4\", description: \"Fraction of exons that overlap EST or Protein alignments\", dtype: \"f\", fieldName: \"MAKER__QI4__attr_f\" },\n // { name: \"QI5\", description: \"Fraction of splice sites confirmed by a SNAP prediction\", dtype: \"f\", fieldName: \"MAKER__QI5__attr_f\" },\n // { name: \"QI6\", description: \"Fraction of exons that overlap a SNAP prediction\", dtype: \"f\", fieldName: \"MAKER__QI6__attr_f\" },\n { name: \"QI7\", description: \"Number of exons in the mRNA\", dtype: \"i\", fieldName: \"MAKER__QI7__attr_i\" },\n { name: \"QI8\", description: \"Length of the 3' UTR\", dtype: \"i\", fieldName: \"MAKER__QI8__attr_i\" },\n { name: \"QI9\", description: \"Length of the protein sequence produced by the mRNA\", dtype: \"i\", fieldName: \"MAKER__QI9__attr_i\" }\n ]\n}\nconst statsFields = geneAttribs['MAKER transcript metrics'].map(\n // (f) => `stats.field={!min=true max=true count=true mean=true stddev=true percentiles='20,40,60,80,90,95,99'}${f}`\n (f) => `stats.field={!min=true max=true count=true mean=true stddev=true percentiles='10,20,30,40,50,60,70,80,90,99.99'}${f.fieldName}`\n);\n\nconst grameneGeneAttribs = createAsyncResourceBundle( {\n name: 'grameneGeneAttribs',\n actionBaseType: 'GRAMENE_GENE_ATTRIBS',\n persist: false,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/geneAttributes`).then(res => geneAttribs)\n }\n});\ngrameneGeneAttribs.reactGrameneGeneAttribs = createSelector(\n 'selectGrameneGeneAttribsShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViews',\n (shouldUpdate, status, views) => {\n if (shouldUpdate && (status === 'finished' || status === 'ready')) {\n const byId = _.keyBy(views.options,'id');\n if (byId.attribs.show === \"on\") {\n return { actionCreator: 'doFetchGrameneGeneAttribs' }\n }\n }\n }\n);\n\nconst grameneSearch = createAsyncResourceBundle({\n name: 'grameneSearch',\n actionBaseType: 'GRAMENE_SEARCH',\n persist: false,\n getPromise: ({store}) => {\n const offset = store.selectGrameneSearchOffset();\n const rows = store.selectGrameneSearchRows();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps();\n const taxa = Object.keys(g.active).filter(tid => !m[tid].hidden);\n let fq='';\n if (taxa.length) {\n console.log('search add a fq for ',taxa);\n fq = `&fq=taxon_id:(${taxa.join(' OR ')})`;\n }\n // return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}&stats=true&${statsFields.join('&')}`)\n return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}`)\n .then(res => res.json())\n .then(res => {\n res.response.docs.forEach(d => {\n d.can_show = {};\n d.capabilities.forEach(c => {\n d.can_show[c]=true;\n })\n });\n return res;\n })\n }\n});\ngrameneSearch.reactGrameneSearch = createSelector(\n 'selectGrameneSearchShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneGenomes',\n (shouldUpdate, status, genomes) => {\n if (shouldUpdate && status === 'search' && genomes) {\n return { actionCreator: 'doFetchGrameneSearch' }\n }\n }\n);\n\nfunction formatFacetCountsForViz(a) {\n let res = {\n count: a.length/2,\n displayName: \"fixed_1000__bin\",\n data: {},\n sorted: []\n };\n let counts = [];\n for(let i=0;i<a.length;i+=2) {\n const fc = {\n id: +a[i],\n count: +a[i+1]\n };\n res.data[a[i]] = fc;\n counts.push(fc);\n }\n res.sorted = counts.sort((a,b) => a.id - b.id);\n return res;\n}\n\n// bundle to prepare data for the TaxDist component\nconst grameneTaxDist = {\n name: 'grameneTaxDist',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n return state;\n }\n },\n selectGrameneTaxDist: createSelector(\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n (grameneSearch,grameneTaxonomy,grameneMaps) => {\n if (grameneSearch && grameneTaxonomy && grameneMaps) {\n _.forIn(grameneMaps, (map, tid) => {\n grameneTaxonomy[tid].name = map.display_name;\n });\n const binnedResults = formatFacetCountsForViz(grameneSearch.facet_counts.facet_fields.fixed_1000__bin);\n let speciesTree = treesClient.taxonomy.tree(Object.values(grameneTaxonomy));\n let binMapper = binsClient.bins(grameneMaps);\n let taxDist = build(binMapper, speciesTree);\n taxDist.setBinType('fixed',1000);\n taxDist.setResults(binnedResults);\n return taxDist;\n }\n return null;\n }\n )\n};\n\n// this query will give the sorghum orthologs of AT1G01260\n// want to provide these on non-sorghum genes if available\n// http://data.gramene.org/search?q=homology__all_orthologs:AT1G01260&fq=taxon_id:4558&fl=id\nconst grameneOrthologs = {\n name: 'grameneOrthologs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_ORTHOLOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_ORTHOLOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestOrthologs: geneId => ({dispatch, store}) => {\n const orthologs = store.selectGrameneOrthologs();\n if (!orthologs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_ORTHOLOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const taxonId = store.selectTargetTaxonId();\n fetch(`${API}/search?q=homology__all_orthologs:${geneId}&fq=taxon_id:${taxonId}&fl=id`)\n .then(res => res.json())\n .then(res => {\n let newOrthologs = {};\n newOrthologs[geneId] = res.response.docs.map(d => d.id);\n dispatch({type: 'GRAMENE_ORTHOLOGS_RECEIVED', payload: newOrthologs})\n })\n }\n },\n selectGrameneOrthologs: state => state.grameneOrthologs\n};\n\nconst grameneParalogs = {\n name: 'grameneParalogs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_PARALOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_PARALOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestParalogs: (geneId,supertree,taxon_id) => ({dispatch, store}) => {\n const paralogs = store.selectGrameneParalogs();\n if (!paralogs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_PARALOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const q= supertree ? `supertree_attr_s:${supertree}` : `homology__within_species_paralog:${geneId}`;\n fetch(`${API}/search?q=${q}&rows=1000&fq=taxon_id:${taxon_id}`)\n .then(res => res.json())\n .then(res => {\n let newParalogs = {};\n newParalogs[geneId] = res.response.numFound > 0 ? res.response.docs.map(d => d.id) : [geneId];\n dispatch({type: 'GRAMENE_PARALOGS_RECEIVED', payload: newParalogs})\n })\n }\n },\n selectGrameneParalogs: state => state.grameneParalogs\n};\n\n// function selectFacetIDs(store, field) {\n// const path = `grameneGenes.data.facet_counts.facet_fields.${field}`;\n// if (_.has(store,path)) {\n// const flat_facets = _.get(store,path);\n// let idList = [];\n// if (isNaN(+flat_facets[0])) {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(flat_facets[i])\n// }\n// }\n// else {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(+flat_facets[i])\n// }\n// if (idList.length === 1) idList.push(0);\n// }\n// return idList;\n// }\n// }\n//\n// grameneGenes.selectDomainFacets = store => selectFacetIDs(store, 'domains');\n// grameneGenes.selectPathwayFacets = store => selectFacetIDs(store, 'pathways');\n// grameneGenes.selectTaxonomyFacets = store => selectFacetIDs(store, 'taxon_id');\n//\n// const grameneDomains = createAsyncResourceBundle({\n// name: 'grameneDomains',\n// actionBaseType: 'GRAMENE_DOMAINS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/domains?rows=-1&idList=${store.selectDomainFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {domains: docs, numFound: docs.length}})\n// });\n//\n// const gramenePathways = createAsyncResourceBundle({\n// name: 'gramenePathways',\n// actionBaseType: 'GRAMENE_PATHWAYS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/pathways?rows=-1&idList=${store.selectPathwayFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {pathways: docs, numFound: docs.length}})\n// });\n//\n// const grameneTaxonomy = createAsyncResourceBundle({\n// name: 'grameneTaxonomy',\n// actionBaseType: 'GRAMENE_TAXONOMY',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/taxonomy?rows=-1&idList=${store.selectTaxonomyFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {taxonomy: docs, numFound: docs.length}})\n// });\n\n\nexport default [grameneSuggestions, grameneSearch, grameneGeneAttribs, grameneMaps, grameneTaxonomy, grameneTaxDist, grameneOrthologs, grameneParalogs, curatedGenes, grameneGermplasm, expressionSamples, expressionStudies];\n","import {createSelector} from \"redux-bundler\";\nimport _ from 'lodash';\nimport ReactGA from 'react-ga4'\nconst MAX_IDLIST_LENGTH = 20;\n\nfunction findNodeWithLeftIdx(node, idx) {\n if (node.leftIdx === idx) {\n return node;\n }\n let result=null;\n if (node.leftIdx < idx && node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n if (child.rightIdx > idx) {\n child.parentIdx = node.leftIdx;\n const res = findNodeWithLeftIdx(child, idx);\n if (res) result = res;\n }\n })\n }\n return result;\n}\n\nfunction markSubtree(node, source, invert) {\n node.marked = (node.leftIdx >= source.leftIdx && node.rightIdx <= source.rightIdx);\n if (invert) node.marked = !node.marked;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n markSubtree(child, source, invert);\n })\n }\n}\n\nfunction reindexTree(node, idx) {\n node.leftIdx = idx;\n idx++;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n idx = reindexTree(child, idx);\n });\n }\n node.rightIdx = idx;\n idx++;\n return idx;\n}\n\nconst grameneFilters = {\n name: 'grameneFilters',\n getReducer: () => {\n const initialState = {\n status: 'init', // others include 'search', 'waiting' and 'ready'\n operation: 'AND',\n negate: false,\n marked: false,\n leftIdx: 0,\n rightIdx: 1,\n children: [],\n showMarked: false,\n showMenu: false,\n moveCopyMode: '',\n searchOffset: 0,\n rows: 20\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_FILTERS_CLEARED': {\n newState = Object.assign({}, initialState, {\n status: 'search',\n children: []\n });\n return newState;\n }\n case 'GRAMENE_FILTER_ADDED': {\n const idx = state.rightIdx;\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: idx + 2,\n searchOffset: 0\n });\n let child = _.pick(payload, ['fq_field', 'fq_value', 'name', 'category']);\n child.leftIdx = idx;\n child.rightIdx = idx + 1;\n child.negate = false;\n child.showMenu = false;\n newState.children.push(child);\n markSubtree(newState, child, false);\n return newState;\n }\n case 'GRAMENE_FILTER_TREE_ADDED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: payload.rightIdx + 1,\n searchOffset: 0\n });\n newState.children.push(payload);\n markSubtree(newState, payload, false);\n return newState;\n }\n case 'GRAMENE_FILTER_SET_ADDED': {\n // create a filter with the payload.operation and children payload.filters\n let filter = {\n leftIdx: state.rightIdx,\n rightIdx: state.rightIdx + (payload.filters.length) * 2 + 1,\n operation: payload.operation,\n negate: false,\n showMenu: false,\n children: payload.filters\n };\n if (payload.warning) {\n filter.warning = payload.warning\n }\n let nextIdx = filter.leftIdx+1;\n payload.filters.forEach(f => {\n f.leftIdx = nextIdx++;\n f.rightIdx = nextIdx++;\n f.negate = false;\n f.showMenu = false;\n });\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0,\n rightIdx: filter.rightIdx + 1\n });\n newState.children.push(filter);\n markSubtree(newState, filter, false);\n return newState;\n }\n case 'GRAMENE_FILTER_NEGATED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n node.negate = !node.negate;\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_DELETED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n let parent = findNodeWithLeftIdx(newState, node.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== node.leftIdx);\n reindexTree(newState, 0);\n markSubtree(newState, parent, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_OPERATION_CHANGED': {\n if (payload.hasOwnProperty('operation')) {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n node.operation = node.operation === 'AND' ? 'OR' : 'AND';\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_MOVED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n let parent = findNodeWithLeftIdx(newState, source.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== source.leftIdx);\n target.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n target.children.push(source);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_COPIED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n let sourceCopy = Object.assign({}, source);\n target.children.push(sourceCopy);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_TARGETS_MARKED':\n newState = Object.assign({}, state, {\n showMarked: true,\n moveCopyMode: payload.mode,\n moveCopySource: payload.source\n });\n markSubtree(newState, payload.source, true);\n return newState;\n case 'GRAMENE_FILTER_TARGETS_UNMARKED':\n newState = Object.assign({}, state, {\n showMarked: false\n });\n return newState;\n case 'GRAMENE_FILTERS_REPLACED':\n payload.status = 'search';\n payload.searchOffset = 0;\n return payload;\n case 'GRAMENE_FILTERS_STATUS_CHANGED':\n if (!(state.status === 'ready' && payload === 'waiting')) {\n return Object.assign({}, state, {status: payload})\n }\n break;\n case 'GRAMENE_FILTERS_SET_SHOW_MARKED':\n return Object.assign({}, state, {showMarked: payload});\n case 'GRAMENE_FILTER_MENU_TOGGLED':\n payload.showMenu = !payload.showMenu;\n return Object.assign({}, state);\n case 'GRAMENE_SEARCH_PAGE_REQUESTED':\n return Object.assign({}, state, {status: 'search', searchOffset: payload * state.rows});\n case 'GRAMENE_SEARCH_FETCH_STARTED':\n return Object.assign({}, state, {status: 'loading'});\n case 'GRAMENE_SEARCH_FETCH_FINISHED':\n return Object.assign({}, state, {status: 'finished'});\n case 'GRAMENE_GENOMES_UPDATED':\n if (state.status === 'ready') {\n return Object.assign({}, state, {status: 'search'});\n }\n case 'URL_UPDATED':\n if (state.status === 'ready') {\n return Object.assign({}, initialState, {children:[]})\n }\n break;\n case 'APP_IDLE':\n if (state.showMarked) {\n return Object.assign({}, state, {showMarked: false})\n }\n }\n return state;\n }\n },\n doNegateGrameneFilter: filter => ({dispatch, getState}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_NEGATED', payload: filter}\n ]\n })\n },\n doDeleteGrameneFilter: filter => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_TAXONOMY_CLEARED'},\n {type: 'GRAMENE_FILTER_DELETED', payload: filter}\n ]\n })\n },\n doChangeGrameneFilterOperation: filter => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_OPERATION_CHANGED', payload: filter}\n ]\n })\n },\n doMoveOrCopyGrameneFilter: (target) => ({dispatch, getState}) => {\n const state = getState();\n if (state.grameneFilters.moveCopyMode) {\n const source = state.grameneFilters.moveCopySource;\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: `GRAMENE_FILTER_${state.grameneFilters.moveCopyMode.toUpperCase()}D`, payload: {source, target}}\n ]\n })\n }\n },\n doCopyGrameneFilter: (source, target) => ({dispatch, getState}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_COPIED', payload: {source, target}}\n ]\n })\n },\n doMarkGrameneFilterTargets: (source, mode) => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_TARGETS_MARKED', payload: {source:source, mode:mode}})\n },\n doUnmarkGrameneFilterTargets: () => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_TARGETS_UNMARKED'})\n },\n doAcceptGrameneSuggestion: suggestion => ({dispatch, getState}) => {\n if (!suggestion.name) {\n suggestion.name = suggestion.display_name;\n }\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: suggestion}\n ]\n })\n },\n doAddGrameneRangeQuery: terms => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_SET_ADDED', payload: {operation: 'AND', filters: terms}}\n ]\n })\n },\n doToggleGrameneFilterMenu: node => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_MENU_TOGGLED', payload: node})\n },\n doRequestResultsPage: page => ({dispatch}) => {\n dispatch(\n {type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_SEARCH_PAGE_REQUESTED', payload: page}\n ]\n })\n },\n doReplaceGrameneFilters: filters => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_REPLACED', payload: filters}\n ]\n })\n },\n doClearGrameneFilters: () => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_CLEARED'}\n ]\n })\n },\n selectGrameneFilters: state => state.grameneFilters,\n selectGrameneFiltersStatus: state => state.grameneFilters.status,\n selectGrameneFiltersQueryString: state => {\n const hasSpaces = new RegExp(/^[^\\[\\(].*\\s/);\n const isQuery = new RegExp(/\\([a-zA-Z0-9_]+:[a-zA-Z0-9_]+\\s/);\n const isRegionQuery = new RegExp(/^\\(map:/);\n const idWithColon = new RegExp(/^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+$/);\n function getQuery(node) {\n const negate = node.negate ? 'NOT ' : '';\n if (node.hasOwnProperty('children')) {\n // do some recursion\n return `${negate}(${node.children.map(c => getQuery(c)).sort().join(` ${node.operation} `)})`\n }\n else {\n // this node is a suggestion\n if (node.fq_field === 'location' && isRegionQuery.test(node.fq_value))\n return `${negate}${node.fq_value}`\n if (isQuery.test(node.fq_value))\n return `${negate}${node.fq_value.replace(/:/g,'\\\\:')}`;\n if (hasSpaces.test(node.fq_value))\n return `${negate}${node.fq_field}:\"${node.fq_value}\"`;\n else if (idWithColon.test(node.fq_value))\n return `${negate}${node.fq_field}:${node.fq_value.replace(/:/g,'\\\\:')}`;\n else\n return `${negate}${node.fq_field}:${node.fq_value}`\n }\n }\n if (state.grameneFilters.rightIdx === 1) {\n return '*:*';\n }\n return `*:* AND (${getQuery(state.grameneFilters)})`;\n },\n selectGrameneSearchOffset: state => state.grameneFilters.searchOffset,\n selectGrameneSearchRows: state => state.grameneFilters.rows\n};\n\nconst handleIdList = (queryObject) => {\n let actions = [{type: 'GRAMENE_SEARCH_CLEARED'}];\n let ids = _.uniq(queryObject.idList.split(','));\n let warning = null;\n if (ids.length > MAX_IDLIST_LENGTH) {\n ids = _.slice(ids, 0, MAX_IDLIST_LENGTH);\n warning = `The idList query parameter is limited to ${MAX_IDLIST_LENGTH} genes`\n }\n let filters = ids.map((id,idx) => {\n return {\n category: 'Gene',\n name: id,\n fq_field: 'id',\n fq_value: id\n }\n });\n if (filters.length === 1) {\n actions.push({type: 'GRAMENE_FILTER_ADDED', payload: filters[0]})\n }\n else {\n let action = {type: 'GRAMENE_FILTER_SET_ADDED', payload: {operation: 'OR', filters:filters}};\n if (warning) {\n action.payload.warning = warning\n }\n actions.push(action)\n }\n return { type: 'BATCH_ACTIONS', actions: actions };\n};\n\ngrameneFilters.reactGrameneFilters = createSelector(\n 'selectQueryObject',\n 'selectGrameneFilters',\n 'selectActiveGenomes',\n 'selectUrlObject',\n (queryObject, filters, genomes, myUrl) => {\n if (filters.status === 'init') {\n if (queryObject.filters) {\n const newFilters = JSON.parse(queryObject.filters);\n let actions = [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_REPLACED', payload: newFilters}\n ];\n if (queryObject.genomes) {\n let active={};\n queryObject.genomes.split(',').forEach(t => {\n active[t]=true\n });\n actions.push({type: 'GRAMENE_GENOMES_UPDATED', payload: active});\n }\n return { type: 'BATCH_ACTIONS', actions: actions };\n }\n if (queryObject.hasOwnProperty('sugg')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: JSON.parse(queryObject.sugg)}\n ]\n };\n }\n if (queryObject.hasOwnProperty('suggestion')) {\n const url = new URL(myUrl.href);\n url.search = '';\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'SUGGESTIONS_QUERY_CHANGED', payload: {query: queryObject.suggestion}}\n ]\n };\n }\n if (queryObject.hasOwnProperty('idList')) {\n return handleIdList(queryObject);\n }\n if (queryObject.hasOwnProperty('fq_field') && queryObject.hasOwnProperty('fq_value')\n && queryObject.hasOwnProperty('category') && queryObject.hasOwnProperty('name')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: queryObject}\n ]\n };\n }\n const url = new URL(myUrl.href);\n if (url.pathname === '/genes') {\n return {type: 'GRAMENE_FILTERS_CLEARED'}\n }\n }\n if (filters.status === 'finished') {\n const url = new URL(myUrl.href);\n url.search = `filters=${JSON.stringify(Object.assign({}, filters, {status: 'init'}))}&genomes=${genomes.join(',')}`;\n ReactGA.event({\n category: \"Gene Search\",\n action: \"filter finished\",\n label: url.search\n });\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_FILTERS_STATUS_CHANGED', payload: 'ready'}\n ]\n }\n }\n }\n);\n\nexport default grameneFilters;\n","import { createSelector } from 'redux-bundler';\n\nconst grameneViews = {\n name: 'grameneViews',\n getReducer: () => {\n const initialState = {\n options: [\n {\n id: 'help',\n name: 'Help / Demo',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'userLists',\n name: 'User Gene Lists',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'taxonomy',\n name: 'Taxonomic distribution',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'list',\n name: 'Gene list',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'expression',\n name: 'Gene expression',\n show: 'off',\n shouldScroll: false,\n desiredSamples: {}\n },\n {\n id: 'attribs',\n name: 'Gene attributes',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'export',\n name: 'Data exporter',\n show: 'off',\n shouldScroll: false\n }\n // {\n // id: 'domains',\n // name: 'Domains',\n // show: 'disabled'\n // },\n // {\n // id: 'go',\n // name: 'GO terms',\n // show: 'disabled'\n // }\n ],\n touched: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_VIEW_TOGGLED':\n newState = Object.assign({},state);\n newState.touched = { ...(state.touched || {}), [payload]: true };\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'off' : 'on'\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_CLICKED':\n newState = Object.assign({}, state);\n newState.touched = { ...(state.touched || {}), [payload]: true };\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'on' : 'on';\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_SCROLLED':\n newState = Object.assign({}, state);\n newState.options.forEach(v => v.shouldScroll = false)\n return newState;\n default:\n return state;\n }\n }\n },\n doToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_TOGGLED', payload: idx})\n },\n dontToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_CLICKED', payload: idx})\n },\n doCancelShouldScroll: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_SCROLLED', payload: null})\n },\n selectRawGrameneViews: state => state.grameneViews,\n selectGrameneViews: createSelector(\n 'selectRawGrameneViews',\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneFilters',\n (raw, config, search, filters) => {\n const overrides = (config && config.views) || null;\n const touched = raw.touched || {};\n const numFound = (search && search.response && search.response.numFound) || 0;\n const hasFilters = !!(filters && filters.rightIdx > 1);\n const resultDependentIds = new Set(['taxonomy', 'list']);\n const autoDisable = (numFound === 0) || !hasFilters;\n const hasFirebase = !!(config && config.firebaseConfig);\n\n let options = raw.options;\n if (!hasFirebase) {\n options = options.filter(v => v.id !== 'userLists');\n }\n if (overrides) {\n options = options.filter(v => overrides[v.id] !== 'hidden');\n }\n options = options.map(v => {\n if (resultDependentIds.has(v.id) && autoDisable) {\n return { ...v, show: 'off' };\n }\n if (!overrides) return v;\n const o = overrides[v.id];\n if (!o) return v;\n if (o === 'disabled') return { ...v, show: 'disabled' };\n if (touched[v.id]) return v;\n return { ...v, show: o };\n });\n return { ...raw, options };\n }\n )\n};\n\nexport default grameneViews;\n","const grameneDocs = {\n name: 'grameneDocs',\n getReducer: () => {\n const initialState = {\n genes: {},\n trees: {},\n domains: {},\n pathways: {},\n expression: {},\n sequences: {},\n rnaSequences: {},\n pepSequences: {},\n studies: {},\n desiredSamples: {},\n consequences: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_CONSEQUENCES_REQUESTED':\n if (!state.consequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.consequences[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_CONSEQUENCES_RECEIVED':\n newState = Object.assign({}, state);\n newState.consequences = Object.assign({}, state.consequences, payload);\n return newState;\n case 'GRAMENE_GENE_REQUESTED':\n if (!state.genes.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.genes[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_GENE_RECEIVED':\n newState = Object.assign({}, state);\n newState.genes = Object.assign({}, state.genes, payload);\n return newState;\n case 'GRAMENE_TREE_REQUESTED':\n if (!state.trees.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.trees[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_TREE_RECEIVED':\n newState = Object.assign({}, state);\n newState.trees = Object.assign({}, state.trees, payload);\n return newState;\n case 'GRAMENE_PATHWAYS_RECEIVED':\n newState = Object.assign({}, state);\n newState.pathways = Object.assign({}, state.pathways, payload);\n return newState;\n case 'ATLAS_STUDIES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies = Object.assign({}, state.studies, payload);\n return newState;\n case 'ATLAS_SAMPLES_REQUESTED':\n if (!state.studies.byID[payload].hasOwnProperty('samples')) {\n newState = Object.assign({},state);\n newState.studies.byID[payload].samples = [];\n return newState;\n }\n break;\n case 'ATLAS_SAMPLES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies.byID[payload.id].samples = payload.samples;\n return newState;\n case 'GENE_SEQUENCE_REQUESTED':\n if (!state.sequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.sequences[payload] = {};\n return newState;\n }\n break;\n case 'RNA_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.rnaSequences[payload] = {};\n return newState;\n }\n break;\n case 'PEP_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.pepSequences[payload] = {};\n return newState;\n }\n break;\n case 'GENE_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.sequences = Object.assign({}, state.sequences);\n newState.sequences[payload.id] = payload.geneSeq;\n return newState;\n case 'RNA_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.rnaSequences = Object.assign({}, state.rnaSequences);\n newState.rnaSequences[payload.id] = payload.RnaSeq;\n return newState;\n case 'PEP_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.pepSequences = Object.assign({}, state.pepSequences);\n newState.pepSequences[payload.id] = payload.PepSeq;\n return newState;\n case 'PARALOG_EXPRESSION_REQUESTED':\n if (!state.expression.hasOwnProperty(payload)) {\n newState = Object.assign({},state);\n newState.expression[payload] = [];\n return newState;\n }\n break;\n case 'PARALOG_EXPRESSION_RECEIVED':\n newState = Object.assign({}, state);\n newState.expression = Object.assign({}, state.expression);\n newState.expression[payload.id] = payload.paralogs;\n return newState;\n case 'EXPRESSION_SAMPLE_TOGGLED':\n newState = Object.assign({}, state);\n newState.desiredSamples = Object.assign({}, state.desiredSamples);\n if (newState.desiredSamples.hasOwnProperty(payload)) {\n delete newState.desiredSamples[payload]\n }\n else {\n newState.desiredSamples[payload] = {status: 'need'}\n }\n return newState;\n }\n return state;\n }\n },\n doToggleExpressionSample: id => ({dispatch}) => {\n dispatch({type: 'EXPRESSION_SAMPLE_TOGGLED', payload: id});\n },\n doRequestVEP: id => ({dispatch, store}) => {\n const consequences = store.selectGrameneConsequences();\n if (!consequences.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_CONSEQUENCES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=id:${id}&fl=id,VEP__*`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.response.docs.forEach(g => {\n genes[g.id] = g;\n });\n dispatch({type: 'GRAMENE_CONSEQUENCES_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneGene: id => ({dispatch, store}) => {\n const genes = store.selectGrameneGenes();\n if (!genes.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_GENE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genes?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.forEach(g => {\n genes[g._id] = g;\n });\n dispatch({type: 'GRAMENE_GENE_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneTree: id => ({dispatch, store}) => {\n const trees = store.selectGrameneTrees();\n const maps = store.selectGrameneMaps();\n if (!trees.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_TREE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genetrees?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let trees = {};\n res.forEach(t => {\n function update_taxon_name(node) {\n if (maps.hasOwnProperty(node.taxon_id)) {\n node.taxon_name = maps[node.taxon_id].display_name\n }\n else if (node.taxon_id === 1100004558) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45580023 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45770001 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Zea mays\"\n }\n if (node.taxon_id === 297600009 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Vitis vinifera\"\n }\n if (node.hasOwnProperty('children')) {\n node.children.forEach(c => update_taxon_name(c))\n }\n }\n update_taxon_name(t);\n trees[t._id] = t;\n });\n dispatch({type: 'GRAMENE_TREE_RECEIVED', payload: trees})\n })\n }\n },\n doRequestGramenePathways: ids => ({dispatch, store}) => {\n const pathways = store.selectGramenePathways();\n let newIds = ids.filter(id => !pathways.hasOwnProperty(id));\n if (newIds) {\n dispatch({type: 'GRAMENE_PATHWAYS_REQUESTED', payload: newIds});\n if (newIds.length === 1) newIds.push(0);\n fetch(`${store.selectGrameneAPI()}/pathways?idList=${newIds.join(',')}`)\n .then(res => res.json())\n .then(res => {\n let pathways = {};\n res.forEach(p => {\n pathways[p._id] = p;\n });\n dispatch({type: 'GRAMENE_PATHWAYS_RECEIVED', payload: pathways})\n })\n }\n },\n doRequestExpressionStudies: id => ({dispatch, store}) => {\n fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => {\n let studies = {byID:{},byTaxon:{}};\n res.forEach(s => {\n studies.byID[s._id] = s;\n if (! studies.byTaxon.hasOwnProperty(s.taxon_id)) {\n studies.byTaxon[s.taxon_id] = []\n }\n studies.byTaxon[s.taxon_id].push(s._id)\n })\n dispatch({type: 'ATLAS_STUDIES_RECEIVED', payload: studies})\n })\n },\n doRequestStudyMetadata: id => ({dispatch, store}) => {\n const studies = store.selectAtlasStudies();\n if (!studies.byID[id].hasOwnProperty('samples')) {\n dispatch({type: 'ATLAS_SAMPLES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/assays?experiment=${id}&rows=-1`)\n .then(res => res.json())\n .then(samples => {\n dispatch({type: 'ATLAS_SAMPLES_RECEIVED', payload: {id, samples}})\n })\n }\n },\n doRequestGeneSequence: gene => ({dispatch, store}) => {\n const maps = store.selectGrameneMaps();\n const seqs = store.selectGeneSequences();\n const id = gene._id;\n const MAX_FLANK = 2000;\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'GENE_SEQUENCE_REQUESTED', payload: id});\n const start = gene.location.start > MAX_FLANK ? gene.location.start - MAX_FLANK : 1;\n const dnaLength = maps[gene.taxon_id].regionLength[gene.location.region];\n const end = gene.location.end + MAX_FLANK > dnaLength ? dnaLength : gene.location.end + MAX_FLANK;\n fetch(`${store.selectEnsemblAPI()}/sequence/region/${gene.system_name}/${gene.location.region}:${start}..${end}:${gene.location.strand}?content-type=application/json`)\n .then(res => res.json())\n .then(geneSeq => {\n const x = geneSeq.id.split(':');\n geneSeq.genome = x[1];\n geneSeq.start = +x[3];\n geneSeq.end = +x[4];\n dispatch({type: 'GENE_SEQUENCE_RECEIVED', payload: {id, geneSeq}});\n })\n }\n },\n doRequestRnaSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectRnaSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'RNA_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=cdna&content-type=application/json`)\n .then(res => res.json())\n .then(RnaSeq => {\n dispatch({type: 'RNA_SEQUENCE_RECEIVED', payload: {id, RnaSeq}});\n })\n }\n },\n doRequestPepSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectPepSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'PEP_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=protein&content-type=application/json`)\n .then(res => res.json())\n .then(PepSeq => {\n dispatch({type: 'PEP_SEQUENCE_RECEIVED', payload: {id, PepSeq}});\n })\n }\n },\n doRequestParalogExpression: id => ({dispatch, store}) => {\n const expr = store.selectParalogExpression();\n if (!expr.hasOwnProperty(id)) {\n dispatch({type: 'PARALOG_EXPRESSION_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=homology__within_species_paralog:${id}&fl=id,atlas_id,name,*__expr&rows=100`)\n .then(res => res.json())\n .then(res => {\n const assay_re = /(.+)_g(\\d+)/;\n const paralogs = res.response.docs.map(d => {\n let p = {\n id: d.id,\n name: d.name,\n experiments: {},\n min:1000,\n max:0\n };\n if (d.atlas_id) {\n p.atlas_id = d.atlas_id;\n delete d.atlas_id;\n }\n delete d.id;\n delete d.name;\n Object.entries(d).forEach(assay => {\n const parsed = assay[0].match(assay_re);\n const expr = parsed[1].replace('_','-').replace('-tpms','');\n if (! p.experiments.hasOwnProperty(expr)) {\n p.experiments[expr] = [];\n }\n const g = parsed[2] - 1;\n const e = d[assay[0]];\n if (e < p.min) p.min = e;\n if (e > p.max) p.max = e;\n p.experiments[expr][g] = e;\n });\n return p;\n }).map(p => {\n for (const expr in p.experiments) {\n p.experiments[expr] = p.experiments[expr].filter(e => e >= 0);\n }\n return p;\n });\n dispatch({type: 'PARALOG_EXPRESSION_RECEIVED', payload: {id, paralogs}});\n })\n }\n },\n selectGrameneGenes: state => state.grameneDocs.genes,\n selectGrameneConsequences: state => state.grameneDocs.consequences,\n selectGrameneTrees: state => state.grameneDocs.trees,\n selectGramenePathways: state => state.grameneDocs.pathways,\n selectParalogExpression: state => state.grameneDocs.expression,\n selectGeneSequences: state => state.grameneDocs.sequences,\n selectRnaSequences: state => state.grameneDocs.rnaSequences,\n selectPepSequences: state => state.grameneDocs.pepSequences,\n selectAtlasStudies: state => state.grameneDocs.studies,\n selectDesiredSamples: state => state.grameneDocs.desiredSamples\n};\n\nexport default grameneDocs;\n","import {createSelector} from \"redux-bundler\";\nconst grameneGenomes = {\n name: 'grameneGenomes',\n getReducer: () => {\n const initialState = {\n show: false,\n active: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_GENOMES_TOGGLED':\n newState = Object.assign({},state);\n newState.show = !newState.show;\n return newState;\n case 'GRAMENE_GENOMES_UPDATED':\n newState = Object.assign({}, state);\n newState.active = payload;\n return newState;\n case 'GRAMENE_MAPS_FETCH_FINISHED':\n newState = Object.assign({}, state);\n Object.keys(payload).forEach(key => {newState.active[key] = true;});\n return newState;\n default:\n return state;\n }\n }\n },\n doShowGrameneGenomes: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_GENOMES_TOGGLED'})\n },\n doInitializeGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes}]})\n },\n doUpdateGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes},\n {type: 'GRAMENE_GENOMES_TOGGLED'},\n {type: 'GRAMENE_SEARCH_CLEARED'}]})\n },\n doEnsureGrameneGenome: genome => ({dispatch, getState}) => {\n const state = getState();\n if (Object.keys(state.grameneGenomes.active).length > 0 && !state.grameneGenomes.active.hasOwnProperty(genome)) {\n let active = Object.assign({}, state.grameneGenomes.active);\n active[genome]=true;\n dispatch({type: 'GRAMENE_GENOMES_UPDATED', payload: active})\n }\n },\n selectGrameneGenomes: state => state.grameneGenomes,\n selectActiveGenomes: state => {\n return Object.keys(state.grameneGenomes.active)\n },\n selectActiveGenomeCount: createSelector(\n 'selectGrameneMaps',\n 'selectGrameneGenomes',\n (maps,genomes) => {\n if (maps && genomes) {\n return Object.keys(genomes.active).length || Object.keys(maps).length;\n }\n return 0;\n }\n )\n};\n\nexport default grameneGenomes;\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler';\nimport overlay from '../fieldCatalog.overlay.json';\nimport { study_info as VEP_STUDY_INFO } from '../vepStudyInfo';\n\n// Fields matched by these globs are multi-valued in Solr.\nconst MULTIVALUED_PATTERNS = [\n /__expr$/,\n /__ancestors$/,\n /__xrefs$/,\n /^VEP__/,\n /^homology__/\n];\n\nfunction parseCsvHeader(text) {\n if (!text) return [];\n const line = text.split(/\\r?\\n/, 1)[0] || '';\n return line\n .split(',')\n .map(s => s.trim().replace(/^\"|\"$/g, ''))\n .filter(Boolean);\n}\n\nfunction synthesizedValue(name) {\n return MULTIVALUED_PATTERNS.some(re => re.test(name)) ? [0] : 0;\n}\n\nfunction applyTemplate(tpl, match) {\n if (!tpl) return null;\n return tpl.replace(/\\$(\\d+)/g, (_, n) => match[+n] || '');\n}\n\nfunction vepDetailLabel(matchGroups) {\n const [, , system, sid] = matchGroups || [];\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n if (info) return info.label;\n return `${system}/${sid}`;\n}\n\nfunction vepDetailTsvHeader(matchGroups) {\n const [conseq, zyg, system, sid] = matchGroups || [];\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n const type = (info && info.type) || '?';\n const study = (info && info.label) || `${system}/${sid}`;\n return `${type}·${conseq}·${zyg}·${study}`;\n}\n\nfunction vepMergedLabel(matchGroups) {\n const [kind] = matchGroups || [];\n if (kind === 'NAT') return 'Merged natural population accessions';\n if (kind === 'EMS') return 'Merged EMS mutant accessions';\n return `Merged ${kind} accessions`;\n}\n\nfunction vepMergedTsvHeader(matchGroups) {\n const [kind] = matchGroups || [];\n return `merged·${kind}`;\n}\n\nfunction classifyKey(name, patterns) {\n for (const p of patterns) {\n const re = new RegExp(p.match);\n const m = name.match(re);\n if (m) {\n return {\n patternId: p.id,\n group: p.group,\n label: applyTemplate(p.labelTemplate, m) || name,\n multiValued: !!p.multiValued,\n expression: !!p.expression,\n isHidden: !!p.is_hidden,\n matchGroups: m.slice(1)\n };\n }\n }\n return null;\n}\n\nfunction inferType(value) {\n if (value === null || value === undefined) return 'unknown';\n if (Array.isArray(value)) {\n return 'array<' + (value.length ? inferType(value[0]) : 'unknown') + '>';\n }\n return typeof value;\n}\n\nfunction buildCatalog(sampleDocs) {\n const hidden = new Set(overlay.hidden || []);\n const overlayFields = overlay.fields || {};\n const patterns = overlay.patterns || [];\n const groupsMeta = overlay.groups || {};\n\n // Union keys from overlay.fields (hardcoded catalog entries) and sample docs.\n const keys = new Set(Object.keys(overlayFields));\n const sampleValues = {};\n for (const doc of (sampleDocs || [])) {\n for (const [k, v] of Object.entries(doc)) {\n keys.add(k);\n if (!(k in sampleValues)) sampleValues[k] = v;\n }\n }\n\n const fields = {};\n for (const name of keys) {\n if (hidden.has(name)) continue;\n\n const overlayEntry = overlayFields[name];\n const classified = overlayEntry ? null : classifyKey(name, patterns);\n if (classified && classified.isHidden) continue;\n const sampleVal = sampleValues[name];\n const sampleType = sampleVal !== undefined ? inferType(sampleVal) : null;\n\n const group = (overlayEntry && overlayEntry.group)\n || (classified && classified.group)\n || 'other';\n\n let label = (overlayEntry && overlayEntry.label)\n || (classified && classified.label)\n || name;\n let tsvHeader = null;\n if (classified && classified.patternId === 'vep_detail') {\n label = vepDetailLabel(classified.matchGroups);\n tsvHeader = vepDetailTsvHeader(classified.matchGroups);\n } else if (classified && classified.patternId === 'vep_merged') {\n label = vepMergedLabel(classified.matchGroups);\n tsvHeader = vepMergedTsvHeader(classified.matchGroups);\n }\n\n const multiValued = (overlayEntry && overlayEntry.multiValued)\n || (classified && classified.multiValued)\n || (sampleType && sampleType.startsWith('array<'))\n || false;\n\n fields[name] = {\n name,\n label,\n tsvHeader,\n group,\n order: overlayEntry && overlayEntry.order != null ? overlayEntry.order : null,\n description: (overlayEntry && overlayEntry.description) || '',\n type: sampleType || 'unknown',\n multiValued,\n patternId: classified ? classified.patternId : null,\n matchGroups: classified ? classified.matchGroups : null,\n expression: !!(classified && classified.expression),\n source: overlayEntry ? 'overlay' : 'sample'\n };\n }\n\n // Build groups (explicit overlay.order first, then natural sort by label)\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n const compareFields = (a, b) => {\n const ao = a.order, bo = b.order;\n if (ao != null && bo != null && ao !== bo) return ao - bo;\n if (ao != null && bo == null) return -1;\n if (ao == null && bo != null) return 1;\n return collator.compare(a.label, b.label);\n };\n const groupIds = new Set(Object.values(fields).map(f => f.group));\n const groups = Array.from(groupIds).map(id => ({\n id,\n label: (groupsMeta[id] && groupsMeta[id].label) || id,\n order: (groupsMeta[id] && groupsMeta[id].order) != null ? groupsMeta[id].order : 50,\n fields: Object.values(fields)\n .filter(f => f.group === id)\n .sort(compareFields)\n .map(f => f.name)\n })).sort((a, b) => a.order - b.order);\n\n return {\n fetchedAt: Date.now(),\n groups,\n fields\n };\n}\n\nconst grameneFieldCatalog = createAsyncResourceBundle({\n name: 'grameneFieldCatalog',\n actionBaseType: 'GRAMENE_FIELD_CATALOG',\n persist: true,\n staleAfter: 5 * 60 * 1000,\n getPromise: ({ store }) => {\n const api = store.selectGrameneAPI();\n const url = `${api}/search?q=*:*&rows=0&wt=csv&fl=*`;\n return fetch(url)\n .then(r => r.text())\n .then(text => parseCsvHeader(text))\n .catch(() => null);\n }\n});\n\nfunction assayFactorLabel(assay) {\n if (!assay) return '';\n const factors = Array.isArray(assay.factor) ? assay.factor : [];\n const labels = factors.map(f => f && f.label).filter(Boolean);\n if (labels.length) return labels.join('; ');\n const chars = Array.isArray(assay.characteristic) ? assay.characteristic : [];\n const organ = chars.find(c => c && c.type === 'organism part');\n return (organ && organ.label) || '';\n}\n\nfunction parseTaxonFacet(grameneSearch, grameneMaps) {\n const arr = grameneSearch\n && grameneSearch.facet_counts\n && grameneSearch.facet_counts.facet_fields\n && grameneSearch.facet_counts.facet_fields.taxon_id;\n if (!Array.isArray(arr) || !arr.length) return null;\n // Search taxon_ids are strain-specific (e.g. 3702001); experiments use\n // species-level NCBI taxon_ids (e.g. 3702). Map via grameneMaps.anchor_taxon_id.\n // If maps aren't loaded yet, skip filtering rather than drop everything.\n if (!grameneMaps || !Object.keys(grameneMaps).length) return null;\n const speciesTaxa = new Set();\n for (let i = 0; i < arr.length; i += 2) {\n const tid = arr[i];\n if (arr[i + 1] <= 0) continue;\n const map = grameneMaps[tid];\n const anchor = map && map.anchor_taxon_id;\n speciesTaxa.add(Number(anchor || tid));\n }\n return speciesTaxa.size ? speciesTaxa : null;\n}\n\nfunction buildExperimentTaxonIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const [taxon, arr] of Object.entries(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) if (e && e._id) index[e._id] = Number(taxon);\n }\n return index;\n}\n\nfunction buildExperimentTitleIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const arr of Object.values(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) {\n if (e && e._id) index[e._id] = e.description || e.title || '';\n }\n }\n return index;\n}\n\nfunction buildSpeciesNameIndex(grameneMaps) {\n const idx = {};\n if (!grameneMaps) return idx;\n for (const m of Object.values(grameneMaps)) {\n if (m && m.anchor_taxon_id && !idx[m.anchor_taxon_id]) {\n idx[m.anchor_taxon_id] = m.display_name || String(m.anchor_taxon_id);\n }\n }\n return idx;\n}\n\nfunction fieldExperimentId(name) {\n let m = name.match(/^(\\w+?)_g\\d+__expr$/);\n if (m) return m[1].replace(/_/g, '-');\n m = name.match(/^(\\w+?)_g\\d+_g\\d+_(pval|logfc|l2fc)_attr_[a-z]$/);\n if (m) return m[1].replace(/_/g, '-');\n return null;\n}\n\nconst STAT_RANK = { l2fc: 0, logfc: 1, pval: 2 };\n\nfunction collapseDiffExprInSubgroups(subgroups, fieldsOut, collator) {\n for (const taxGroup of subgroups) {\n for (const expGroup of (taxGroup.subgroups || [])) {\n const contrastMap = new Map();\n const others = [];\n for (const name of (expGroup.fields || [])) {\n const f = fieldsOut[name];\n if (!f || f.patternId !== 'diffexpr') { others.push(name); continue; }\n const mg = f.matchGroups || [];\n const key = `${mg[1]}|${mg[2]}`;\n let arr = contrastMap.get(key);\n if (!arr) { arr = []; contrastMap.set(key, arr); }\n arr.push(name);\n }\n const newFields = [...others];\n for (const names of contrastMap.values()) {\n if (names.length === 1) { newFields.push(names[0]); continue; }\n names.sort((a, b) => {\n const ra = STAT_RANK[(fieldsOut[a].matchGroups || [])[3]] ?? 99;\n const rb = STAT_RANK[(fieldsOut[b].matchGroups || [])[3]] ?? 99;\n if (ra !== rb) return ra - rb;\n return collator.compare(a, b);\n });\n const rep = names[0];\n const repEntry = fieldsOut[rep];\n const label = (repEntry.label || rep).replace(/\\s+\\((?:pval|logfc|l2fc)\\)/, '');\n fieldsOut[rep] = { ...repEntry, label, linkedFields: names.slice() };\n newFields.push(rep);\n }\n expGroup.fields = newFields;\n }\n }\n}\n\nfunction buildExpressionSubgroups(fieldNames, fieldsOut, experimentTaxa, experimentTitles, speciesNames, collator) {\n const byTaxon = new Map();\n const orphans = [];\n const studiesLoaded = Object.keys(experimentTaxa).length > 0;\n for (const name of fieldNames) {\n const expId = fieldExperimentId(name);\n if (!expId) { orphans.push(name); continue; }\n const taxon = experimentTaxa[expId];\n if (!taxon) {\n if (studiesLoaded) continue;\n orphans.push(name);\n continue;\n }\n let taxonEntry = byTaxon.get(taxon);\n if (!taxonEntry) {\n taxonEntry = new Map();\n byTaxon.set(taxon, taxonEntry);\n }\n let expEntry = taxonEntry.get(expId);\n if (!expEntry) {\n expEntry = [];\n taxonEntry.set(expId, expEntry);\n }\n expEntry.push(name);\n }\n\n const taxonGroups = [];\n for (const [taxon, expMap] of byTaxon) {\n const experiments = [];\n for (const [expId, names] of expMap) {\n names.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n const title = experimentTitles && experimentTitles[expId];\n experiments.push({\n id: 'exp-' + expId,\n label: title ? `${expId} — ${title}` : expId,\n fields: names\n });\n }\n experiments.sort((a, b) => collator.compare(a.label, b.label));\n taxonGroups.push({\n id: 'tax-' + taxon,\n label: speciesNames[taxon] || `taxon ${taxon}`,\n taxon,\n subgroups: experiments\n });\n }\n taxonGroups.sort((a, b) => collator.compare(a.label, b.label));\n\n return { subgroups: taxonGroups, orphans };\n}\n\nfunction buildVepSubgroups(fieldNames, fieldsOut, collator) {\n const buckets = {\n NAT: { merged: [], byConseq: new Map() },\n EMS: { merged: [], byConseq: new Map() }\n };\n const orphans = [];\n\n for (const name of fieldNames) {\n const f = fieldsOut[name];\n if (!f) { orphans.push(name); continue; }\n if (f.patternId === 'vep_merged') {\n const kind = (f.matchGroups && f.matchGroups[0]) || '';\n if (buckets[kind]) buckets[kind].merged.push(name);\n else orphans.push(name);\n } else if (f.patternId === 'vep_detail') {\n const mg = f.matchGroups || [];\n const [conseq, zyg, system, sid] = mg;\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n const kind = info && info.type;\n if (!buckets[kind]) { orphans.push(name); continue; }\n let zmap = buckets[kind].byConseq.get(conseq);\n if (!zmap) {\n zmap = new Map();\n buckets[kind].byConseq.set(conseq, zmap);\n }\n let arr = zmap.get(zyg);\n if (!arr) {\n arr = [];\n zmap.set(zyg, arr);\n }\n arr.push(name);\n } else {\n orphans.push(name);\n }\n }\n\n const kindLabels = { NAT: 'Natural populations', EMS: 'Mutant populations' };\n const subgroups = [];\n for (const kind of ['NAT', 'EMS']) {\n const bucket = buckets[kind];\n if (!bucket.merged.length && bucket.byConseq.size === 0) continue;\n\n const conseqGroups = [];\n for (const [conseq, zmap] of bucket.byConseq) {\n const zygGroups = [];\n for (const [zyg, names] of zmap) {\n names.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n zygGroups.push({\n id: `lof-${kind}-${conseq}-${zyg}`,\n label: zyg === 'het' ? 'heterozygous' : 'homozygous',\n fields: names\n });\n }\n zygGroups.sort((a, b) => collator.compare(a.label, b.label));\n conseqGroups.push({\n id: `lof-${kind}-${conseq}`,\n label: conseq.replace(/_/g, ' '),\n subgroups: zygGroups\n });\n }\n conseqGroups.sort((a, b) => collator.compare(a.label, b.label));\n\n bucket.merged.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n\n subgroups.push({\n id: `lof-${kind}`,\n label: kindLabels[kind],\n fields: bucket.merged,\n subgroups: conseqGroups\n });\n }\n\n return { subgroups, orphans };\n}\n\nfunction enrichLabels(catalog, expressionStudies, expressionSamples, grameneSearch, grameneMaps) {\n if (!catalog || !catalog.fields) return catalog;\n if (!expressionSamples) return catalog;\n\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n const taxaInResults = parseTaxonFacet(grameneSearch, grameneMaps);\n const experimentTaxa = buildExperimentTaxonIndex(expressionStudies);\n const experimentTitles = buildExperimentTitleIndex(expressionStudies);\n const dropped = new Set();\n const fieldsOut = {};\n\n for (const [name, f] of Object.entries(catalog.fields)) {\n if (f.patternId !== 'expr' && f.patternId !== 'diffexpr') {\n fieldsOut[name] = f;\n continue;\n }\n const mg = f.matchGroups || [];\n const experimentSolr = mg[0];\n if (!experimentSolr) { fieldsOut[name] = f; continue; }\n const experimentId = experimentSolr.replace(/_/g, '-');\n\n if (taxaInResults) {\n const expTaxon = experimentTaxa[experimentId];\n if (expTaxon && !taxaInResults.has(expTaxon)) {\n dropped.add(name);\n continue;\n }\n }\n\n const assays = expressionSamples[experimentId] || [];\n let newLabel = f.label;\n if (f.patternId === 'expr') {\n const g = 'g' + mg[1];\n const assay = assays.find(a => a && a.group === g);\n const desc = assayFactorLabel(assay);\n newLabel = desc ? `${experimentId} ${g}: ${desc}` : `${experimentId} ${g}`;\n } else {\n const gA = 'g' + mg[1];\n const gB = 'g' + mg[2];\n const metric = mg[3];\n const aA = assays.find(a => a && a.group === gA);\n const aB = assays.find(a => a && a.group === gB);\n const dA = assayFactorLabel(aA);\n const dB = assayFactorLabel(aB);\n const pair = dA && dB ? `: ${dA} vs ${dB}` : '';\n newLabel = `${experimentId} ${gA} vs ${gB} (${metric})${pair}`;\n }\n\n fieldsOut[name] = newLabel !== f.label ? { ...f, label: newLabel } : f;\n }\n\n // Synthesize any expr fields missing from catalog.fields using the complete\n // assays collection. The doc-sample only surfaces expr keys that happened to\n // appear in the sampled genes; assays is authoritative per-experiment.\n const synthesized = [];\n for (const [experimentId, assays] of Object.entries(expressionSamples)) {\n if (taxaInResults) {\n const expTaxon = experimentTaxa[experimentId];\n if (expTaxon && !taxaInResults.has(expTaxon)) continue;\n }\n const solrPrefix = experimentId.replace(/-/g, '_');\n for (const assay of assays) {\n if (!assay || !assay.group) continue;\n const name = `${solrPrefix}_${assay.group}__expr`;\n if (fieldsOut[name]) continue;\n const desc = assayFactorLabel(assay);\n fieldsOut[name] = {\n name,\n label: desc ? `${experimentId} ${assay.group}: ${desc}` : `${experimentId} ${assay.group}`,\n group: 'expression',\n description: '',\n type: 'array<float>',\n multiValued: true,\n patternId: 'expr',\n matchGroups: [solrPrefix, assay.group.replace(/^g/, '')],\n expression: true,\n source: 'assays'\n };\n synthesized.push(name);\n }\n }\n\n const speciesNames = buildSpeciesNameIndex(grameneMaps);\n\n const groups = catalog.groups.map(g => {\n let list = dropped.size ? g.fields.filter(n => !dropped.has(n)) : g.fields;\n if (g.id === 'expression' && synthesized.length) {\n const existing = new Set(list);\n list = [...list, ...synthesized.filter(n => !existing.has(n))];\n }\n if (g.id === 'lof') {\n const { subgroups, orphans } = buildVepSubgroups(list, fieldsOut, collator);\n orphans.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n return { ...g, fields: orphans, subgroups };\n }\n if (g.id !== 'expression' && g.id !== 'differential') {\n return list === g.fields ? g : { ...g, fields: list };\n }\n const { subgroups, orphans } = buildExpressionSubgroups(\n list, fieldsOut, experimentTaxa, experimentTitles, speciesNames, collator\n );\n if (g.id === 'differential') {\n collapseDiffExprInSubgroups(subgroups, fieldsOut, collator);\n }\n orphans.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n return { ...g, fields: orphans, subgroups };\n });\n\n return { ...catalog, fields: fieldsOut, groups };\n}\n\nfunction filterCatalogByPresentFields(catalog, present) {\n if (!catalog || !catalog.fields || !present) return catalog;\n const filteredFields = {};\n for (const [name, f] of Object.entries(catalog.fields)) {\n if (present.has(name)) filteredFields[name] = f;\n }\n const hasContent = (g) =>\n (g.fields && g.fields.length > 0) ||\n (g.subgroups && g.subgroups.some(hasContent));\n const filterGroup = (g) => {\n const fields = (g.fields || []).filter(n => present.has(n));\n const subgroups = (g.subgroups || [])\n .map(filterGroup)\n .filter(hasContent);\n return { ...g, fields, subgroups };\n };\n const groups = (catalog.groups || []).map(filterGroup).filter(hasContent);\n return { ...catalog, fields: filteredFields, groups };\n}\n\ngrameneFieldCatalog.selectFieldCatalog = createSelector(\n 'selectGrameneFieldCatalog',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneSearch',\n 'selectGrameneMaps',\n (fieldNames, studies, samples, search, maps) => {\n if (!fieldNames || !fieldNames.length) return null;\n const present = new Set(fieldNames);\n // Build a synthetic doc from the discovered field names; values carry the\n // right JS type so inferType picks the correct multiValued/type (arrays\n // for multi-valued fields, scalars otherwise). Derive pval/logfc\n // companions from every l2fc field.\n const doc = {};\n for (const name of present) {\n doc[name] = synthesizedValue(name);\n if (/_l2fc_attr_f$/.test(name)) {\n doc[name.replace('_l2fc_', '_pval_')] = 0;\n doc[name.replace('_l2fc_', '_logfc_')] = 0;\n }\n }\n const catalog = buildCatalog([doc]);\n const enriched = enrichLabels(catalog, studies, samples, search, maps);\n return filterCatalogByPresentFields(enriched, present);\n }\n);\n\ngrameneFieldCatalog.selectFieldCatalogGroups = createSelector(\n 'selectFieldCatalog',\n (catalog) => (catalog && catalog.groups) || []\n);\n\ngrameneFieldCatalog.selectFieldCatalogByName = createSelector(\n 'selectFieldCatalog',\n (catalog) => (catalog && catalog.fields) || {}\n);\n\nexport default grameneFieldCatalog;\n","{\n \"groups\": {\n \"core\": { \"label\": \"Core identifiers\", \"order\": 0 },\n \"location\": { \"label\": \"Genomic location\", \"order\": 1 },\n \"structure\": { \"label\": \"Gene structure\", \"order\": 2 },\n \"homology\": { \"label\": \"Homology\", \"order\": 3 },\n \"expression\": { \"label\": \"Gene expression\", \"order\": 4 },\n \"differential\": { \"label\": \"Differential expression\",\"order\": 5 },\n \"hierarchical\": { \"label\": \"Hierarchical annotations\",\"order\": 6 },\n \"pathways\": { \"label\": \"Pathways\", \"order\": 7 },\n \"GO\": { \"label\": \"Gene Ontology\", \"order\": 7 },\n \"PO\": { \"label\": \"Plant Ontology\", \"order\": 8 },\n \"lof\": { \"label\": \"Loss of function alleles\",\"order\": 9 },\n \"MAKER\": { \"label\": \"MAKER transcript metrics\",\"order\": 10 },\n \"xrefs\": { \"label\": \"External references\", \"order\": 11 },\n \"other\": { \"label\": \"Other\", \"order\": 99 }\n },\n\n \"patterns\": [\n {\n \"id\": \"homology\",\n \"match\": \"^homology__(.+)$\",\n \"group\": \"homology\",\n \"multiValued\": true,\n \"labelTemplate\": \"Homology: $1\"\n },\n {\n \"id\": \"pathways\",\n \"match\": \"^pathways__(.+)$\",\n \"group\": \"pathways\",\n \"multiValued\": true,\n \"labelTemplate\": \"Pathway: $1\"\n },\n {\n \"id\": \"maker\",\n \"match\": \"^MAKER__(.+)__attr_([a-z])$\",\n \"group\": \"MAKER\",\n \"labelTemplate\": \"MAKER: $1\"\n },\n {\n \"id\": \"xrefs\",\n \"match\": \"^(.+)__xrefs$\",\n \"group\": \"xrefs\",\n \"multiValued\": true,\n \"labelTemplate\": \"$1 (xrefs)\"\n },\n {\n \"id\": \"expr\",\n \"match\": \"^(E[-_][A-Za-z0-9_-]+?)_g(\\\\d+)__expr$\",\n \"group\": \"expression\",\n \"expression\": true,\n \"labelTemplate\": \"$1 · g$2\"\n },\n {\n \"id\": \"diffexpr\",\n \"match\": \"^(E[-_][A-Za-z0-9_-]+?)_g(\\\\d+)_g(\\\\d+)_(pval|logfc|l2fc)_attr_([a-z])$\",\n \"group\": \"differential\",\n \"diffExpression\": true,\n \"labelTemplate\": \"$1 · g$2 vs g$3 · $4\"\n },\n {\n \"id\": \"bins\",\n \"match\": \"^(fixed|uniform)_([0-9a-zA-Z]+)__bin$\",\n \"group\": \"bins\",\n \"is_hidden\": true,\n \"labelTemplate\": \"$1 bin ($2)\"\n },\n {\n \"id\": \"neighbors\",\n \"match\": \".*neighbors_[0-9]+$\",\n \"group\": \"neighbors\",\n \"is_hidden\": true,\n \"labelTemplate\": \"neighbors\"\n },\n {\n \"id\": \"vep_merged\",\n \"match\": \"^VEP__merged__(NAT|EMS)__attr_ss$\",\n \"group\": \"lof\",\n \"multiValued\": true,\n \"labelTemplate\": \"Merged $1 accessions\"\n },\n {\n \"id\": \"vep_detail\",\n \"match\": \"^VEP__(.+?)__(homo|het)__(.+?)__(\\\\d+)__attr_ss$\",\n \"group\": \"lof\",\n \"multiValued\": true,\n \"labelTemplate\": \"$1 ($2) $3/$4\"\n },\n {\n \"id\": \"generic_attr\",\n \"match\": \"^(.+)__attr_([a-z])$\",\n \"group\": \"other\",\n \"labelTemplate\": \"$1\"\n }\n ],\n\n \"fields\": {\n \"id\": { \"group\": \"core\", \"label\": \"Gene ID\", \"order\": 1 },\n \"name\": { \"group\": \"core\", \"label\": \"Name\", \"order\": 2 },\n \"description\": { \"group\": \"core\", \"label\": \"Description\", \"order\": 4 },\n \"summary\": { \"group\": \"core\", \"label\": \"Summary\", \"order\": 5 },\n \"synonyms\": { \"group\": \"core\", \"label\": \"Synonyms\", \"multiValued\": true, \"order\": 3 },\n \"biotype\": { \"group\": \"core\", \"label\": \"Biotype\", \"order\": 6 },\n \"taxon_id\": { \"group\": \"core\", \"label\": \"Taxon ID\", \"order\": 8 },\n \"system_name\": { \"group\": \"core\", \"label\": \"System name\", \"order\": 7 },\n \"db_type\": { \"group\": \"core\", \"label\": \"DB type\", \"order\": 9 },\n\n \"closest_rep_id\": { \"group\": \"homology\", \"label\": \"Closest representative ID\", \"order\": 1 },\n \"closest_rep_name\": { \"group\": \"homology\", \"label\": \"Closest representative name\", \"order\": 2 },\n \"closest_rep_identity\": { \"group\": \"homology\", \"label\": \"Closest representative identity\", \"order\": 3 },\n \"closest_rep_taxon_id\": { \"group\": \"homology\", \"label\": \"Closest representative taxon\", \"order\": 4 },\n \"closest_rep_description\": { \"group\": \"homology\", \"label\": \"Closest representative description\", \"order\": 5 },\n \"model_rep_id\": { \"group\": \"homology\", \"label\": \"Model representative ID\", \"order\": 6 },\n \"model_rep_name\": { \"group\": \"homology\", \"label\": \"Model representative name\", \"order\": 7 },\n \"model_rep_identity\": { \"group\": \"homology\", \"label\": \"Model representative identity\", \"order\": 8 },\n \"model_rep_taxon_id\": { \"group\": \"homology\", \"label\": \"Model representative taxon\", \"order\": 9 },\n \"model_rep_description\": { \"group\": \"homology\", \"label\": \"Model representative description\", \"order\": 10 },\n\n \"gene_tree\": { \"group\": \"homology\", \"label\": \"Gene tree ID\", \"order\": 11 },\n \"pan_tree\": { \"group\": \"homology\", \"label\": \"Pan-gene tree ID\", \"order\": 14 },\n\n \"capabilities\": { \"group\": \"other\", \"label\": \"Capabilities\", \"multiValued\": true },\n\n \"map\": { \"group\": \"location\", \"label\": \"Map\", \"order\": 1 },\n \"region\": { \"group\": \"location\", \"label\": \"Region\", \"order\": 2 },\n \"start\": { \"group\": \"location\", \"label\": \"Start\", \"order\": 3 },\n \"end\": { \"group\": \"location\", \"label\": \"End\", \"order\": 4 },\n \"strand\": { \"group\": \"location\", \"label\": \"Strand\", \"order\": 5 },\n\n \"GO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"GO terms\", \"multiValued\": true, \"order\": 1 },\n \"PO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"PO terms\", \"multiValued\": true, \"order\": 2 },\n \"TO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"TO terms\", \"multiValued\": true, \"order\": 3 },\n \"QTL_TO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"QTL traits (TO)\", \"multiValued\": true, \"order\": 7 },\n \"domains__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Domains\", \"multiValued\": true, \"order\": 4 },\n \"taxonomy__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Taxonomy\", \"multiValued\": true, \"order\": 6 },\n \"supertree_attr_s\": { \"group\": \"homology\", \"label\": \"Supertree\", \"order\": 13 },\n \"gene_tree_root_taxon_id\": { \"group\": \"homology\", \"label\": \"Gene tree root taxon\", \"order\": 12 },\n \"protein__length\": { \"group\": \"structure\", \"label\": \"Protein length\" },\n \"transcript__count\": { \"group\": \"structure\", \"label\": \"Transcript count\" },\n \"transcript__exons\": { \"group\": \"structure\", \"label\": \"Exon count\" },\n \"transcript__length\": { \"group\": \"structure\", \"label\": \"Transcript length\" },\n \"expressed_in_gxa_attr_ss\": { \"group\": \"expression\", \"label\": \"Expressed in GXA\", \"multiValued\": true },\n\n \"MAKER__AED__attr_f\": { \"group\": \"MAKER\", \"label\": \"AED\", \"description\": \"Annotation Edit Distance\" },\n \"MAKER__QI1__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI1: Length of the 5' UTR\" },\n \"MAKER__QI2__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI2: Fraction of splice sites confirmed by EST\" },\n \"MAKER__QI3__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI3: Fraction of exons overlapping an EST\" },\n \"MAKER__QI4__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI4: Fraction of exons overlapping EST or protein\" },\n \"MAKER__QI5__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI5: Fraction of splice sites confirmed by SNAP\" },\n \"MAKER__QI6__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI6: Fraction of exons overlapping a SNAP\" },\n \"MAKER__QI7__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI7: Number of exons in the mRNA\" },\n \"MAKER__QI8__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI8: Length of the 3' UTR\" },\n \"MAKER__QI9__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI9: Length of the protein sequence\" },\n\n \"homology__all_orthologs\": { \"group\": \"homology\", \"label\": \"All orthologs\", \"multiValued\": true, \"order\": 15 },\n \"homology__ortholog_one2one\": { \"group\": \"homology\", \"label\": \"1:1 orthologs\", \"multiValued\": true, \"order\": 16 },\n \"homology__ortholog_one2many\": { \"group\": \"homology\", \"label\": \"1:many orthologs\", \"multiValued\": true, \"order\": 17 },\n \"homology__ortholog_many2many\": { \"group\": \"homology\", \"label\": \"Many:many orthologs\", \"multiValued\": true, \"order\": 18 },\n \"homology__syntenic_ortholog_one2one\":{ \"group\": \"homology\", \"label\": \"Syntenic 1:1 orthologs\", \"multiValued\": true, \"order\": 19 },\n \"homology__within_species_paralog\": { \"group\": \"homology\", \"label\": \"Within-species paralogs\", \"multiValued\": true, \"order\": 20 },\n\n \"pathways__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Pathways\", \"multiValued\": true, \"order\": 5 },\n\n \"canonical_transcript__attr_s\": { \"group\": \"structure\", \"label\": \"Canonical transcript ID\" }\n },\n\n \"hidden\": [\n \"_version_\", \"_terms\", \"score\",\n \"gene_idx\", \"gene_idx_multi\", \"species_idx\",\n \"compara_idx\", \"compara_idx_multi\",\n \"_id\", \"annotations\", \"bins\", \"gene_structure\",\n \"homology\", \"location\", \"xrefs\",\n \"domain_roots\", \"familyRoot__ancestors\", \"taxonomy__ancestors\", \"capabilities\",\n \"saved_search\"\n ]}\n","export const study_info = {\n 'sorghum_bicolor': {\n '1': { label: 'Purdue EMS', type: 'EMS' },\n '2': { label: 'USDA Lubbock EMS', type: 'EMS' },\n '3': { label: 'Lozano', type: 'NAT' },\n '4': { label: 'USDA Lubbock EMS', type: 'EMS' },\n '5': { label: 'Boatwright SAP', type: 'NAT' },\n '7': { label: 'Kumar BAP', type: 'NAT' },\n '8': { label: 'Lasky landraces', type: 'NAT' },\n '9': { label: 'Sorghum Genomics Toolbox', type: 'NAT' }\n },\n 'zea_maysb73': {\n '15': { label: 'MaizeGDB 2024', type: 'NAT' }\n },\n 'oryza_sativa': {\n '7': { label: 'Rice 3K', type: 'NAT' },\n '20': { label: '19K-RGP', type: 'NAT' },\n '29': { label: 'Rice USDA mini core', type: 'NAT' },\n '38': { label: 'RAPDB 2024', type: 'NAT' }\n },\n 'oryza_aus': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativa117425': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativair64rs2': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativamh63': { '20': { label: '19K-RGP', type: 'NAT' } }\n};\n","import { createSelector } from 'redux-bundler';\nimport { runExporterDownload } from '../components/exporter/downloadRunner';\n\nconst DEFAULT_FIELDS = ['id', 'name', 'system_name', 'biotype'];\nconst PREVIEW_ROWS = 20;\nconst PREVIEW_DEBOUNCE_MS = 250;\n\nfunction computePreviewSignature(store) {\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n return `${q}|${taxa.sort().join(',')}`;\n}\n\nlet debounceTimer = null;\nlet pendingRequestId = 0;\nlet pendingDownloadId = 0;\nlet currentDownloadController = null;\n\nconst markStale = (preview) => ({ ...preview, status: 'stale' });\n\nconst exporter = {\n name: 'exporter',\n\n getReducer: () => {\n const initialState = {\n selectedFields: DEFAULT_FIELDS,\n format: 'tsv',\n cutoffs: { exprMinTPM: 0.5, diffMaxPval: 0.05 },\n preview: { status: 'stale', data: null, error: null, requestId: 0, signature: null },\n download: { status: 'idle', progress: 0, total: 0, error: null, requestId: 0 }\n };\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'EXPORTER_FIELD_TOGGLED': {\n const idx = state.selectedFields.indexOf(payload);\n const selectedFields = idx === -1\n ? [...state.selectedFields, payload]\n : state.selectedFields.filter(f => f !== payload);\n return { ...state, selectedFields };\n }\n case 'EXPORTER_FIELDS_REORDERED':\n return { ...state, selectedFields: payload };\n case 'EXPORTER_FIELDS_BULK_SET': {\n const { names, selected } = payload;\n if (!Array.isArray(names) || names.length === 0) return state;\n if (selected) {\n const existing = new Set(state.selectedFields);\n const additions = names.filter(n => !existing.has(n));\n if (additions.length === 0) return state;\n return { ...state, selectedFields: [...state.selectedFields, ...additions] };\n }\n const remove = new Set(names);\n const next = state.selectedFields.filter(n => !remove.has(n));\n if (next.length === state.selectedFields.length) return state;\n return { ...state, selectedFields: next };\n }\n case 'EXPORTER_FORMAT_SET':\n return { ...state, format: payload };\n case 'EXPORTER_CUTOFFS_SET':\n return { ...state, cutoffs: { ...state.cutoffs, ...(payload || {}) } };\n case 'EXPORTER_FIELDS_CLEARED':\n return { ...state, selectedFields: [] };\n case 'EXPORTER_PREVIEW_INVALIDATED':\n return { ...state, preview: markStale(state.preview) };\n\n case 'EXPORTER_PREVIEW_STARTED':\n return {\n ...state,\n preview: { ...state.preview, status: 'loading', requestId: payload.requestId, error: null, signature: payload.signature }\n };\n case 'EXPORTER_PREVIEW_SUCCEEDED':\n if (payload.requestId !== state.preview.requestId) return state;\n return {\n ...state,\n preview: { status: 'ready', data: payload.data, error: null, requestId: payload.requestId, signature: state.preview.signature }\n };\n case 'EXPORTER_PREVIEW_FAILED':\n if (payload.requestId !== state.preview.requestId) return state;\n return {\n ...state,\n preview: { ...state.preview, status: 'error', error: payload.error }\n };\n\n case 'EXPORTER_DOWNLOAD_REQUESTED':\n return {\n ...state,\n download: { status: 'preparing', progress: 0, total: 0, error: null, requestId: payload.requestId }\n };\n case 'EXPORTER_DOWNLOAD_STARTED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'downloading', total: payload.total }\n };\n case 'EXPORTER_DOWNLOAD_PROGRESS':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, progress: payload.progress }\n };\n case 'EXPORTER_DOWNLOAD_COMPLETED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'done', progress: payload.written || state.download.progress }\n };\n case 'EXPORTER_DOWNLOAD_CANCELLED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'cancelled' }\n };\n case 'EXPORTER_DOWNLOAD_FAILED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'error', error: payload.error }\n };\n case 'EXPORTER_DOWNLOAD_RESET':\n return {\n ...state,\n download: { status: 'idle', progress: 0, total: 0, error: null, requestId: state.download.requestId }\n };\n default:\n return state;\n }\n };\n },\n\n doToggleExporterField: fieldName => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELD_TOGGLED', payload: fieldName }),\n\n doReorderExporterFields: fieldList => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_REORDERED', payload: fieldList }),\n\n doBulkSetExporterFields: (names, selected) => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_BULK_SET', payload: { names, selected } }),\n\n doSetExporterFormat: fmt => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FORMAT_SET', payload: fmt }),\n\n doSetExporterCutoffs: cutoffs => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_CUTOFFS_SET', payload: cutoffs }),\n\n doClearExporterFields: () => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_CLEARED' }),\n\n doFetchExporterPreview: () => ({ dispatch, store }) => {\n clearTimeout(debounceTimer);\n const requestId = ++pendingRequestId;\n const signature = computePreviewSignature(store);\n dispatch({ type: 'EXPORTER_PREVIEW_STARTED', payload: { requestId, signature } });\n debounceTimer = setTimeout(() => {\n if (requestId !== pendingRequestId) return;\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const url = `${api}/search?q=${q}&fl=*&rows=${PREVIEW_ROWS}${fq}`;\n\n fetch(url)\n .then(r => r.json())\n .then(json => {\n const docs = (json && json.response && json.response.docs) || [];\n dispatch({ type: 'EXPORTER_PREVIEW_SUCCEEDED', payload: { requestId, data: docs } });\n })\n .catch(err => {\n dispatch({ type: 'EXPORTER_PREVIEW_FAILED', payload: { requestId, error: String(err) } });\n });\n }, PREVIEW_DEBOUNCE_MS);\n },\n\n reactExporterPreview: createSelector(\n 'selectExporter',\n 'selectGrameneFiltersStatus',\n 'selectGrameneFiltersQueryString',\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n (exp, filtersStatus, q, g, m) => {\n if (!exp || !exp.preview) return;\n if (filtersStatus === 'init') return;\n if (exp.preview.status === 'loading') return;\n const maps = m || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => maps[tid] && !maps[tid].hidden);\n const sig = `${q}|${taxa.sort().join(',')}`;\n if (exp.preview.signature === sig && exp.preview.status !== 'stale') return;\n return { actionCreator: 'doFetchExporterPreview' };\n }\n ),\n\n doStartExporterDownload: () => ({ dispatch, store }) => {\n if (currentDownloadController) {\n currentDownloadController.abort();\n }\n const requestId = ++pendingDownloadId;\n const controller = new AbortController();\n currentDownloadController = controller;\n dispatch({ type: 'EXPORTER_DOWNLOAD_REQUESTED', payload: { requestId } });\n\n const isSuperseded = () => requestId !== pendingDownloadId;\n\n runExporterDownload({\n dispatch,\n store,\n requestId,\n signal: controller.signal,\n isSuperseded\n }).catch(err => {\n if (err && err.name === 'AbortError') {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n } else {\n dispatch({ type: 'EXPORTER_DOWNLOAD_FAILED', payload: { requestId, error: String(err) } });\n }\n });\n },\n\n doCancelExporterDownload: () => ({ dispatch }) => {\n if (currentDownloadController) {\n currentDownloadController.abort();\n currentDownloadController = null;\n }\n pendingDownloadId++;\n },\n\n doResetExporterDownload: () => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_DOWNLOAD_RESET' }),\n\n selectExporter: state => state.exporter,\n selectExporterSelectedFields: state => state.exporter.selectedFields,\n selectExporterFormat: state => state.exporter.format,\n selectExporterCutoffs: state => state.exporter.cutoffs,\n selectExporterPreview: state => state.exporter.preview,\n selectExporterDownload: state => state.exporter.download\n};\n\nexport default exporter;\n","import { buildTableData, toJSONRows } from './formatters';\nimport { ANCESTOR_FIELD_MAP, collectAncestorIds } from './ancestorsResolver';\n\nconst PAGE_SIZE = 1000;\n\nfunction buildSearchURL(api, q, fl, rows, start, fq) {\n const params = [\n `q=${q}`,\n `rows=${rows}`,\n `start=${start}`,\n 'facet=false'\n ];\n if (fl) params.push(`fl=${encodeURIComponent(fl)}`);\n return `${api}/search?${params.join('&')}${fq}`;\n}\n\nfunction triggerBrowserSave(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(() => URL.revokeObjectURL(url), 2000);\n}\n\nexport async function runExporterDownload({ dispatch, store, requestId, signal, isSuperseded }) {\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const fields = store.selectExporterSelectedFields();\n const fl = fields.join(',');\n const format = store.selectExporterFormat();\n const catalog = store.selectFieldCatalog();\n const expressionStudies = store.selectExpressionStudies();\n const expressionSamples = store.selectExpressionSamples();\n const ancestorFields = fields.filter(n => ANCESTOR_FIELD_MAP[n]);\n\n const cutoffs = store.selectExporterCutoffs && store.selectExporterCutoffs();\n const buildResolverCtx = () => ({\n expressionStudies,\n expressionSamples,\n taxonomy: store.selectGrameneTaxonomy(),\n pathways: store.selectGramenePathways(),\n ontologies: store.selectOntologies(),\n cutoffs\n });\n\n const ensureAncestorRecords = async (docs) => {\n if (ancestorFields.length === 0 || docs.length === 0) return;\n const idsByOnt = collectAncestorIds(docs, ancestorFields);\n const waits = [];\n for (const [ontKey, ids] of Object.entries(idsByOnt)) {\n if (!ids.length) continue;\n if (ontKey === 'taxonomy') continue;\n if (ontKey === 'pathways') {\n const pathwaysCache = store.selectGramenePathways() || {};\n const missing = ids.filter(id => !pathwaysCache.hasOwnProperty(id));\n if (missing.length) store.doRequestGramenePathways(missing);\n continue;\n }\n const p = store.doEnsureOntologyRecords(ontKey, ids);\n if (p && typeof p.then === 'function') waits.push(p);\n }\n if (waits.length) await Promise.all(waits);\n };\n\n const fetchJSON = (url) => fetch(url, { signal }).then(r => {\n if (!r.ok) throw new Error(`HTTP ${r.status}`);\n return r.json();\n });\n\n const countUrl = buildSearchURL(api, q, 'id', 0, 0, fq);\n const countResp = await fetchJSON(countUrl);\n const total = (countResp && countResp.response && countResp.response.numFound) || 0;\n\n dispatch({ type: 'EXPORTER_DOWNLOAD_STARTED', payload: { requestId, total } });\n\n if (total === 0) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_COMPLETED', payload: { requestId, written: 0 } });\n return;\n }\n\n const tsvPieces = [];\n const jsonRows = [];\n let progress = 0;\n\n if (format === 'tsv') {\n const { header } = buildTableData([], fields, catalog, buildResolverCtx());\n tsvPieces.push(header.join('\\t') + '\\n');\n }\n\n let start = 0;\n while (start < total) {\n if (isSuperseded()) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n return;\n }\n const url = buildSearchURL(api, q, fl, PAGE_SIZE, start, fq);\n const resp = await fetchJSON(url);\n const docs = (resp && resp.response && resp.response.docs) || [];\n if (docs.length === 0) break;\n\n await ensureAncestorRecords(docs);\n const resolverCtx = buildResolverCtx();\n\n if (format === 'tsv') {\n const { rows } = buildTableData(docs, fields, catalog, resolverCtx);\n for (const row of rows) tsvPieces.push(row.join('\\t') + '\\n');\n } else {\n const rows = toJSONRows(docs, fields, resolverCtx);\n for (const r of rows) jsonRows.push(r);\n }\n\n start += docs.length;\n progress = start;\n dispatch({ type: 'EXPORTER_DOWNLOAD_PROGRESS', payload: { requestId, progress } });\n }\n\n if (isSuperseded()) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n return;\n }\n\n const stamp = new Date().toISOString().slice(0, 19).replace(/[:T]/g, '-');\n let blob;\n let filename;\n if (format === 'tsv') {\n blob = new Blob(tsvPieces, { type: 'text/tab-separated-values' });\n filename = `gramene-export-${stamp}.tsv`;\n } else {\n blob = new Blob([JSON.stringify(jsonRows, null, 2)], { type: 'application/json' });\n filename = `gramene-export-${stamp}.json`;\n }\n\n triggerBrowserSave(blob, filename);\n dispatch({ type: 'EXPORTER_DOWNLOAD_COMPLETED', payload: { requestId, written: progress } });\n}\n","import {\n partitionFields,\n resolveExpressionForDoc,\n resolveDiffExpressionForDoc,\n EXPRESSION_EXTRA_COLUMNS,\n DIFFEXPRESSION_EXTRA_COLUMNS\n} from './expressionResolver';\nimport {\n ANCESTOR_FIELD_MAP,\n isAncestorField,\n formatAncestorsCellTSV,\n formatAncestorsJSON,\n resolveAncestorsForDoc,\n ANCESTOR_EXTRA_COLUMNS\n} from './ancestorsResolver';\n\nfunction scrubTSV(s) {\n return String(s).replace(/[\\t\\r\\n]/g, ' ');\n}\n\nfunction formatCellTSV(value) {\n if (value === null || value === undefined) return '';\n if (Array.isArray(value)) return value.map(formatCellTSV).join('|');\n if (typeof value === 'object') return JSON.stringify(value);\n return scrubTSV(value);\n}\n\nfunction formatDocFieldTSV(doc, name, resolverCtx) {\n if (isAncestorField(name)) {\n const ontKey = ANCESTOR_FIELD_MAP[name];\n const ids = Array.isArray(doc[name]) ? doc[name] : [];\n return scrubTSV(formatAncestorsCellTSV(ontKey, ids, doc.taxon_id, resolverCtx));\n }\n return formatCellTSV(doc[name]);\n}\n\nexport function buildTSVHeader(fieldNames, catalog) {\n return fieldNames.map(n => {\n const f = catalog && catalog.fields && catalog.fields[n];\n if (!f) return n;\n return f.tsvHeader || f.label;\n });\n}\n\nexport function buildTSVRow(doc, fieldNames, resolverCtx) {\n return fieldNames.map(n => formatDocFieldTSV(doc, n, resolverCtx));\n}\n\nconst EMPTY_EXPR_ROW = EXPRESSION_EXTRA_COLUMNS.map(() => '');\nconst EMPTY_DIFF_ROW = DIFFEXPRESSION_EXTRA_COLUMNS.map(() => '');\nconst EMPTY_ANC_ROW = ANCESTOR_EXTRA_COLUMNS.map(() => '');\n\nfunction exprRowToCells(er) {\n return [\n scrubTSV(er.experiment),\n scrubTSV(er.experiment_name),\n scrubTSV(er.assay),\n scrubTSV(er.sample),\n scrubTSV(er.value)\n ];\n}\n\nfunction diffRowToCells(dr) {\n return [\n scrubTSV(dr.diff_experiment),\n scrubTSV(dr.diff_experiment_name),\n scrubTSV(dr.group1_factors),\n scrubTSV(dr.group2_factors),\n scrubTSV(dr.l2fc),\n scrubTSV(dr.pval)\n ];\n}\n\nfunction ancRowToCells(ar) {\n return [\n scrubTSV(ar.hierarchy),\n scrubTSV(ar.term_id),\n scrubTSV(ar.term_name),\n scrubTSV(ar.term_type)\n ];\n}\n\nfunction splitPlainAndAncestor(nonExpressionFields) {\n const ancestorFields = [];\n const plainFields = [];\n for (const n of nonExpressionFields) {\n if (isAncestorField(n)) ancestorFields.push(n);\n else plainFields.push(n);\n }\n return { ancestorFields, plainFields };\n}\n\nfunction buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx) {\n const expressionStudies = resolverCtx && resolverCtx.expressionStudies;\n const expressionSamples = resolverCtx && resolverCtx.expressionSamples;\n const cutoffs = resolverCtx && resolverCtx.cutoffs;\n const hasExpr = expressionFields.length > 0;\n const hasDiff = diffExpressionFields.length > 0;\n const hasAnc = ancestorFields.length > 0;\n const rows = [];\n for (const doc of (docs || [])) {\n const baseCells = buildTSVRow(doc, plainFields, resolverCtx);\n const ancRows = hasAnc\n ? resolveAncestorsForDoc(doc, ancestorFields, resolverCtx)\n : [];\n const exprRows = hasExpr\n ? resolveExpressionForDoc(doc, expressionFields, expressionStudies, expressionSamples, cutoffs)\n : [];\n const diffRows = hasDiff\n ? resolveDiffExpressionForDoc(doc, diffExpressionFields, expressionStudies, expressionSamples, cutoffs)\n : [];\n const ancCells = ancRows.length ? ancRows.map(ancRowToCells) : (hasAnc ? [EMPTY_ANC_ROW] : [null]);\n const exprCells = exprRows.length ? exprRows.map(exprRowToCells) : (hasExpr ? [EMPTY_EXPR_ROW] : [null]);\n const diffCells = diffRows.length ? diffRows.map(diffRowToCells) : (hasDiff ? [EMPTY_DIFF_ROW] : [null]);\n for (const a of ancCells) {\n for (const e of exprCells) {\n for (const d of diffCells) {\n const out = [...baseCells];\n if (a) out.push(...a);\n if (e) out.push(...e);\n if (d) out.push(...d);\n rows.push(out);\n }\n }\n }\n }\n return rows;\n}\n\nexport function toTSV(docs, fieldNames, catalog, resolverCtx) {\n const { expressionFields, diffExpressionFields, nonExpressionFields } = partitionFields(fieldNames, catalog);\n const { ancestorFields, plainFields } = splitPlainAndAncestor(nonExpressionFields);\n\n if (expressionFields.length === 0 && diffExpressionFields.length === 0 && ancestorFields.length === 0) {\n const header = buildTSVHeader(fieldNames, catalog).join('\\t');\n const rows = (docs || []).map(d => buildTSVRow(d, fieldNames, resolverCtx).join('\\t'));\n return [header, ...rows].join('\\n');\n }\n\n const header = [\n ...buildTSVHeader(plainFields, catalog),\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ].join('\\t');\n\n const rows = buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx);\n return [header, ...rows.map(r => r.join('\\t'))].join('\\n');\n}\n\nexport function buildTableData(docs, fieldNames, catalog, resolverCtx) {\n const { expressionFields, diffExpressionFields, nonExpressionFields } = partitionFields(fieldNames, catalog);\n const { ancestorFields, plainFields } = splitPlainAndAncestor(nonExpressionFields);\n\n if (expressionFields.length === 0 && diffExpressionFields.length === 0 && ancestorFields.length === 0) {\n return {\n header: buildTSVHeader(fieldNames, catalog),\n headerKeys: fieldNames.slice(),\n rows: (docs || []).map(d => buildTSVRow(d, fieldNames, resolverCtx))\n };\n }\n\n const header = [\n ...buildTSVHeader(plainFields, catalog),\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ];\n const headerKeys = [\n ...plainFields,\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ];\n const rows = buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx);\n return { header, headerKeys, rows };\n}\n\nexport function toJSONRows(docs, fieldNames, resolverCtx) {\n return (docs || []).map(d => {\n const row = {};\n for (const n of fieldNames) {\n if (isAncestorField(n)) {\n const ontKey = ANCESTOR_FIELD_MAP[n];\n const ids = Array.isArray(d[n]) ? d[n] : [];\n row[n] = formatAncestorsJSON(ontKey, ids, d.taxon_id, resolverCtx);\n } else {\n row[n] = d[n] !== undefined ? d[n] : null;\n }\n }\n return row;\n });\n}\n\nexport function toJSON(docs, fieldNames, resolverCtx) {\n return JSON.stringify(toJSONRows(docs, fieldNames, resolverCtx), null, 2);\n}\n","const EXPR_FIELD_RE = /^(E[-_][A-Za-z0-9_-]+?)_g(\\d+)__expr$/;\nconst DIFFEXPR_FIELD_RE = /^(E[-_][A-Za-z0-9_-]+?)_g(\\d+)_g(\\d+)_(pval|logfc|l2fc)_attr_([a-z])$/;\n\nexport const EXPRESSION_EXTRA_COLUMNS = [\n 'experiment',\n 'experiment_name',\n 'assay',\n 'sample',\n 'value'\n];\n\nexport const DIFFEXPRESSION_EXTRA_COLUMNS = [\n 'diff_experiment',\n 'diff_experiment_name',\n 'group1_factors',\n 'group2_factors',\n 'l2fc',\n 'pval'\n];\n\nexport function parseExprFieldName(name) {\n const m = name.match(EXPR_FIELD_RE);\n if (!m) return null;\n return {\n experimentId: m[1].replace(/_/g, '-'),\n group: 'g' + m[2],\n solrField: name\n };\n}\n\nexport function parseDiffExprFieldName(name) {\n const m = name.match(DIFFEXPR_FIELD_RE);\n if (!m) return null;\n return {\n experimentId: m[1].replace(/_/g, '-'),\n group1: 'g' + m[2],\n group2: 'g' + m[3],\n stat: m[4],\n solrField: name\n };\n}\n\nexport function isExpressionField(name, catalog) {\n const entry = catalog && catalog.fields && catalog.fields[name];\n if (entry && entry.expression) return true;\n return parseExprFieldName(name) !== null;\n}\n\nexport function isDiffExpressionField(name, catalog) {\n const entry = catalog && catalog.fields && catalog.fields[name];\n if (entry && entry.diffExpression) return true;\n return parseDiffExprFieldName(name) !== null;\n}\n\nexport function partitionFields(fieldNames, catalog) {\n const expressionFields = [];\n const diffExpressionFields = [];\n const nonExpressionFields = [];\n for (const n of fieldNames) {\n if (isDiffExpressionField(n, catalog)) diffExpressionFields.push(n);\n else if (isExpressionField(n, catalog)) expressionFields.push(n);\n else nonExpressionFields.push(n);\n }\n return { expressionFields, diffExpressionFields, nonExpressionFields };\n}\n\nfunction joinLabels(arr) {\n if (!Array.isArray(arr)) return '';\n return arr.map(f => f && f.label).filter(Boolean).join('; ');\n}\n\nexport function buildExperimentIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const arr of Object.values(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) if (e && e._id) index[e._id] = e;\n }\n return index;\n}\n\nfunction findAssay(expressionSamples, experimentId, group) {\n if (!expressionSamples) return null;\n const arr = expressionSamples[experimentId];\n if (!arr) return null;\n return arr.find(a => a.group === group) || null;\n}\n\nexport function resolveExpressionForDoc(doc, expressionFields, expressionStudies, expressionSamples, cutoffs) {\n const rows = [];\n const experimentIndex = buildExperimentIndex(expressionStudies);\n const minTPM = cutoffs && cutoffs.exprMinTPM;\n const minTPMActive = minTPM !== null && minTPM !== undefined && minTPM !== '' && Number.isFinite(+minTPM);\n for (const fieldName of expressionFields) {\n const parsed = parseExprFieldName(fieldName);\n if (!parsed) continue;\n const val = doc[fieldName];\n if (val === undefined || val === null) continue;\n if (minTPMActive && (!Number.isFinite(+val) || +val < +minTPM)) continue;\n const exp = experimentIndex[parsed.experimentId];\n const assay = findAssay(expressionSamples, parsed.experimentId, parsed.group);\n rows.push({\n field: fieldName,\n experiment: parsed.experimentId,\n experiment_name: exp ? (exp.description || exp.title || exp.name || '') : '',\n assay: parsed.group,\n sample: assay ? joinLabels(assay.factor) || joinLabels(assay.characteristic) : '',\n value: val\n });\n }\n return rows;\n}\n\nexport function resolveDiffExpressionForDoc(doc, diffExpressionFields, expressionStudies, expressionSamples, cutoffs) {\n const experimentIndex = buildExperimentIndex(expressionStudies);\n const byContrast = new Map();\n for (const fieldName of diffExpressionFields) {\n const parsed = parseDiffExprFieldName(fieldName);\n if (!parsed) continue;\n const val = doc[fieldName];\n if (val === undefined || val === null) continue;\n const key = `${parsed.experimentId}|${parsed.group1}|${parsed.group2}`;\n let entry = byContrast.get(key);\n if (!entry) {\n entry = {\n experimentId: parsed.experimentId,\n group1: parsed.group1,\n group2: parsed.group2,\n pval: '',\n l2fc: ''\n };\n byContrast.set(key, entry);\n }\n if (parsed.stat === 'pval') entry.pval = val;\n else entry.l2fc = val; // l2fc or logfc\n }\n const maxPval = cutoffs && cutoffs.diffMaxPval;\n const maxPvalActive = maxPval !== null && maxPval !== undefined && maxPval !== '' && Number.isFinite(+maxPval);\n const rows = [];\n for (const entry of byContrast.values()) {\n if (maxPvalActive) {\n const pv = +entry.pval;\n if (!Number.isFinite(pv) || pv > +maxPval) continue;\n }\n const exp = experimentIndex[entry.experimentId];\n const assay1 = findAssay(expressionSamples, entry.experimentId, entry.group1);\n const assay2 = findAssay(expressionSamples, entry.experimentId, entry.group2);\n rows.push({\n diff_experiment: entry.experimentId,\n diff_experiment_name: exp ? (exp.description || exp.title || exp.name || '') : '',\n group1_factors: assay1 ? joinLabels(assay1.factor) || joinLabels(assay1.characteristic) : entry.group1,\n group2_factors: assay2 ? joinLabels(assay2.factor) || joinLabels(assay2.characteristic) : entry.group2,\n l2fc: entry.l2fc,\n pval: entry.pval\n });\n }\n return rows;\n}\n","// Maps gene-doc field name -> ontology key used for resolution.\nexport const ANCESTOR_FIELD_MAP = {\n GO__ancestors: 'GO',\n PO__ancestors: 'PO',\n TO__ancestors: 'TO',\n QTL_TO__ancestors: 'TO',\n domains__ancestors: 'domains',\n pathways__ancestors: 'pathways',\n taxonomy__ancestors: 'taxonomy'\n};\n\n// Display label used in the \"hierarchy\" column.\nexport const ANCESTOR_HIERARCHY_LABEL = {\n GO__ancestors: 'Gene Ontology',\n PO__ancestors: 'Plant Ontology',\n TO__ancestors: 'Trait Ontology',\n QTL_TO__ancestors: 'Trait Ontology',\n domains__ancestors: 'InterPro',\n pathways__ancestors: 'Plant Reactome',\n taxonomy__ancestors: 'Taxonomy'\n};\n\nexport const ANCESTOR_EXTRA_COLUMNS = [\n 'hierarchy',\n 'term_id',\n 'term_name',\n 'term_type'\n];\n\nexport function isAncestorField(name) {\n return Object.prototype.hasOwnProperty.call(ANCESTOR_FIELD_MAP, name);\n}\n\nexport function partitionAncestorFields(fieldNames) {\n const ancestor = [];\n const plain = [];\n for (const n of fieldNames) {\n if (isAncestorField(n)) ancestor.push(n);\n else plain.push(n);\n }\n return { ancestor, plain };\n}\n\n// Gather the ids referenced across docs for each ontology/field.\nexport function collectAncestorIds(docs, fieldNames) {\n const byOnt = {};\n for (const name of fieldNames) {\n const ont = ANCESTOR_FIELD_MAP[name];\n if (!ont) continue;\n if (!byOnt[ont]) byOnt[ont] = new Set();\n for (const d of (docs || [])) {\n const v = d && d[name];\n if (!Array.isArray(v)) continue;\n for (const id of v) if (id != null) byOnt[ont].add(+id);\n }\n }\n const out = {};\n for (const k of Object.keys(byOnt)) out[k] = Array.from(byOnt[k]);\n return out;\n}\n\nfunction getOntologyRecord(ontKey, id, ctx) {\n if (!ctx) return null;\n const idNum = +id;\n if (ontKey === 'taxonomy') {\n const t = ctx.taxonomy;\n return (t && t[idNum]) || null;\n }\n if (ontKey === 'pathways') {\n const p = ctx.pathways;\n return (p && p[idNum]) || null;\n }\n const bucket = ctx.ontologies && ctx.ontologies[ontKey];\n return (bucket && bucket[idNum]) || null;\n}\n\n// Returns list of ancestor ids *excluding* self.\nfunction ancestorsOfRecord(ontKey, record, docTaxonId, ctx) {\n if (!record) return null;\n if (ontKey === 'taxonomy') {\n const visited = new Set();\n const stack = Array.isArray(record.is_a) ? record.is_a.slice() : [];\n const taxonomy = (ctx && ctx.taxonomy) || {};\n while (stack.length) {\n const pid = +stack.pop();\n if (visited.has(pid)) continue;\n visited.add(pid);\n const parent = taxonomy[pid];\n if (parent && Array.isArray(parent.is_a)) {\n for (const g of parent.is_a) if (!visited.has(+g)) stack.push(g);\n }\n }\n return Array.from(visited);\n }\n if (ontKey === 'pathways') {\n const taxonKey = docTaxonId != null ? `ancestors_${docTaxonId}` : null;\n let arr = taxonKey && record[taxonKey];\n if (!Array.isArray(arr)) {\n const collected = new Set();\n for (const k of Object.keys(record)) {\n if (k.startsWith('ancestors_') && Array.isArray(record[k])) {\n for (const a of record[k]) collected.add(+a);\n }\n }\n arr = Array.from(collected);\n }\n return arr.filter(x => +x !== +record._id);\n }\n // GO / PO / TO / domains — `ancestors` already includes self\n if (Array.isArray(record.ancestors)) {\n return record.ancestors.filter(x => +x !== +record._id);\n }\n return [];\n}\n\nexport function mostSpecific(ontKey, ids, docTaxonId, ctx) {\n if (!Array.isArray(ids) || ids.length === 0) return [];\n const ancestorSet = new Set();\n let anyResolved = false;\n for (const id of ids) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n if (!rec || rec.missing) continue;\n anyResolved = true;\n const anc = ancestorsOfRecord(ontKey, rec, docTaxonId, ctx);\n if (!anc) continue;\n for (const a of anc) ancestorSet.add(+a);\n }\n if (!anyResolved) return ids.slice();\n return ids.filter(id => !ancestorSet.has(+id));\n}\n\nfunction displayIdAndName(ontKey, id, ctx) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n if (!rec || rec.missing) return { id: String(id), name: '' };\n const displayId = rec.id != null ? String(rec.id) : String(rec._id != null ? rec._id : id);\n let name = rec.name || '';\n if (ontKey === 'taxonomy' && !name) name = rec.display_name || '';\n return { id: displayId, name: String(name) };\n}\n\nexport function formatAncestorsCellTSV(ontKey, ids, docTaxonId, ctx) {\n const specific = mostSpecific(ontKey, ids, docTaxonId, ctx);\n return specific.map(id => {\n const { id: disp, name } = displayIdAndName(ontKey, id, ctx);\n return name ? `${disp} ${name}` : disp;\n }).join(';');\n}\n\nexport function formatAncestorsJSON(ontKey, ids, docTaxonId, ctx) {\n const specific = mostSpecific(ontKey, ids, docTaxonId, ctx);\n return specific.map(id => displayIdAndName(ontKey, id, ctx));\n}\n\nfunction termTypeForRecord(ontKey, rec) {\n if (!rec) return '';\n if (ontKey === 'GO') return rec.namespace || rec.type || '';\n if (ontKey === 'taxonomy') return rec.rank || '';\n return rec.type || rec.namespace || '';\n}\n\n// Expand a doc's selected ancestor fields into rows of\n// { hierarchy, term_id, term_name, term_type }, one per most-specific term.\nexport function resolveAncestorsForDoc(doc, ancestorFields, ctx) {\n const rows = [];\n for (const fieldName of ancestorFields) {\n const ontKey = ANCESTOR_FIELD_MAP[fieldName];\n if (!ontKey) continue;\n const ids = Array.isArray(doc[fieldName]) ? doc[fieldName] : [];\n if (!ids.length) continue;\n const specific = mostSpecific(ontKey, ids, doc.taxon_id, ctx);\n const hierarchy = ANCESTOR_HIERARCHY_LABEL[fieldName] || fieldName;\n for (const id of specific) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n const { id: disp, name } = displayIdAndName(ontKey, id, ctx);\n rows.push({\n hierarchy,\n term_id: disp,\n term_name: name,\n term_type: termTypeForRecord(ontKey, rec)\n });\n }\n }\n return rows;\n}\n","const ONT_KEYS = ['GO', 'PO', 'TO', 'domains'];\nconst BATCH_SIZE = 200;\n\nconst inflight = {};\n\nconst ontologies = {\n name: 'ontologies',\n getReducer: () => {\n const initialState = { GO: {}, PO: {}, TO: {}, domains: {} };\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'ONTOLOGY_RECORDS_REQUESTED': {\n const { key, ids } = payload;\n const bucket = { ...state[key] };\n for (const id of ids) {\n if (!bucket.hasOwnProperty(id)) bucket[id] = null;\n }\n return { ...state, [key]: bucket };\n }\n case 'ONTOLOGY_RECORDS_RECEIVED': {\n const { key, records } = payload;\n return { ...state, [key]: { ...state[key], ...records } };\n }\n default:\n return state;\n }\n };\n },\n\n doEnsureOntologyRecords: (key, ids) => ({ dispatch, store }) => {\n if (!ONT_KEYS.includes(key)) return Promise.resolve();\n if (!Array.isArray(ids) || ids.length === 0) return Promise.resolve();\n const existing = store.selectOntologies()[key] || {};\n const missing = [];\n for (const id of ids) {\n if (id == null) continue;\n const idNum = +id;\n if (!existing.hasOwnProperty(idNum) && !(inflight[key] && inflight[key].has(idNum))) {\n missing.push(idNum);\n }\n }\n if (missing.length === 0) return Promise.resolve();\n\n if (!inflight[key]) inflight[key] = new Set();\n for (const id of missing) inflight[key].add(id);\n dispatch({ type: 'ONTOLOGY_RECORDS_REQUESTED', payload: { key, ids: missing } });\n\n const api = store.selectGrameneAPI();\n const batches = [];\n for (let i = 0; i < missing.length; i += BATCH_SIZE) {\n batches.push(missing.slice(i, i + BATCH_SIZE));\n }\n\n const fetchBatch = (batch) => {\n const idList = batch.length === 1 ? `${batch[0]},0` : batch.join(',');\n return fetch(`${api}/${key}?idList=${idList}&rows=${batch.length + 1}`)\n .then(r => r.json())\n .then(docs => {\n const records = {};\n for (const d of (docs || [])) {\n if (d && d._id != null) records[d._id] = d;\n }\n for (const id of batch) {\n if (!records.hasOwnProperty(id)) records[id] = { _id: id, missing: true };\n }\n dispatch({ type: 'ONTOLOGY_RECORDS_RECEIVED', payload: { key, records } });\n })\n .catch(() => {\n const records = {};\n for (const id of batch) records[id] = { _id: id, missing: true };\n dispatch({ type: 'ONTOLOGY_RECORDS_RECEIVED', payload: { key, records } });\n })\n .finally(() => {\n for (const id of batch) inflight[key].delete(id);\n });\n };\n\n return Promise.all(batches.map(fetchBatch));\n },\n\n selectOntologies: state => state.ontologies\n};\n\nexport default ontologies;\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\n\nconst Gene = ({gene}) => {\n return <div className=\"row\">{gene.id}</div>\n};\n\nconst Genes = (results, rows, doChangeQuantity) => {\n if (results && results.numFound > 0) {\n const moreButton = (results.numFound > rows)\n ? <button onClick={e => doChangeQuantity('Genes',20)}>more</button>\n : '';\n const fewerButton = (rows > 20)\n ? <button onClick={e => doChangeQuantity('Genes',-20)}>fewer</button>\n : '';\n const docsToShow = results.response.docs.slice(0,rows);\n return (\n <div id=\"Genes\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Genes</h4>\n </div>\n {docsToShow.map((doc,idx) => <Gene key={idx} gene={doc}/>)}\n {fewerButton}{moreButton}\n </div>\n );\n }\n};\n\nconst Pathway = ({pathway}) => {\n return <div className=\"row\">{pathway.name}</div>\n};\nconst Pathways = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Pathways\" className=\"container mb40 anchor\">\n <div className=\"fancy-title\">\n <h4>Pathways</h4>\n </div>\n {results.pathways.map((doc,idx) => (<Pathway key={idx} pathway={doc}/>))}\n </div>\n );\n }\n};\n\nconst Domain = ({domain}) => {\n return <div className=\"row\">{domain.id}</div>\n};\nconst Domains = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Domains\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Domains</h4>\n </div>\n {results.domains.map((doc,idx) => (<Domain key={idx} domain={doc}/>))}\n </div>\n );\n }\n};\n\nconst Taxon = ({taxon}) => {\n return <div className=\"row\">{taxon.id}</div>\n};\nconst Species = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Species\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Species</h4>\n </div>\n {results.taxonomy.map((doc,idx) => (<Taxon key={idx} taxon={doc}/>))}\n </div>\n );\n }\n};\n\nconst ResultList = ({grameneGenes, grameneDomains, gramenePathways, grameneTaxonomy, searchUI, searchUpdated, doChangeQuantity}) => {\n if (searchUI.Gramene) {\n return (\n <div id=\"gramene\" className=\"row\">\n <div className=\"fancy-title pt50\">\n <h3>Gramene search results</h3>\n </div>\n {searchUI.Genes && Genes(grameneGenes, searchUI.rows.Genes, doChangeQuantity)}\n {searchUI.Domains && Domains(grameneDomains)}\n {searchUI.Pathways && Pathways(gramenePathways)}\n {searchUI.Species && Species(grameneTaxonomy)}\n </div>\n )\n }\n else {\n return null;\n }\n};\n\nexport default connect(\n 'selectGrameneGenes',\n 'selectGrameneDomains',\n 'selectGramenePathways',\n 'selectGrameneTaxonomy',\n 'selectSearchUI',\n 'selectSearchUpdated',\n 'doChangeQuantity',\n ResultList\n);\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\n\nconst getStatus = (cat, results, isChecked, toggle) => {\n const tally = results ? results.numFound : <img src=\"/static/images/dna_spinner.svg\"/>;\n return (\n <li className='category-leaf'>\n <input type=\"checkbox\" checked={isChecked} onChange={e => toggle(cat)}/>\n <a data-scroll href={`#${cat}`} className=\"nav-link active\">{cat}<span style={{float:\"right\"}}>{tally}</span></a>\n </li>\n )\n};\n\nconst ResultSummary = ({grameneGenes, gramenePathways, grameneDomains, grameneTaxonomy, searchUI, searchUpdated, doToggleCategory}) => {\n const status = grameneGenes ?\n grameneGenes.numFound:\n<img src=\"/static/images/dna_spinner.svg\"/>;\n if (searchUI.Gramene) return (\n <li className=\"active category-expanded\">\n <a onClick={e => doToggleCategory('Gramene')}>\n Gramene Search<span style={{float:\"right\"}}>{status}</span>\n </a>\n <ul className=\"list-unstyled\">\n {getStatus('Genes', grameneGenes, searchUI.Genes, doToggleCategory)}\n {getStatus('Domains', grameneDomains, searchUI.Domains, doToggleCategory)}\n {getStatus('Pathways', gramenePathways, searchUI.Pathways, doToggleCategory)}\n {getStatus('Species', grameneTaxonomy, searchUI.Species, doToggleCategory)}\n</ul>\n </li>\n);\nelse return (\n <li className=\"active category-collapsed\">\n <a onClick={e => doToggleCategory('Gramene')}>\n Gramene Search<span\n style={{float:\"right\"}}>{status}</span>\n </a>\n </li>\n);\n};\n\nexport default connect(\n 'selectGrameneGenes',\n 'selectGramenePathways',\n 'selectGrameneDomains',\n 'selectGrameneTaxonomy',\n 'selectSearchUI',\n 'selectSearchUpdated',\n 'doToggleCategory',\n ResultSummary\n);\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\nimport ReactGA from 'react-ga4'\nimport { Button, Badge, Alert } from 'react-bootstrap'\nimport './styles.css'\n\nfunction showMatches(text, x) {\n let re = new RegExp(`(${x})`, 'ig');\n let match = text.split(re);\n return <span>\n {match.map((str, idx) => {\n if (idx % 2 === 1) {\n return <span key={idx} style={{fontWeight:'bolder'}}>{str}</span>\n }\n return <span key={idx}>{str}</span>\n })}\n </span>\n}\n\nfunction logAction(sugg) {\n ReactGA.event({\n category: 'Search',\n action: 'SetFilter',\n label: sugg.name\n })\n}\nfunction getLowestCommonAncestorName(tids, taxonomy) {\n let lca;\n tids.forEach(tid => {\n if (!lca) {\n lca = [...taxonomy[tid].ancestors];\n } else {\n let ancestors = new Set(taxonomy[tid].ancestors);\n while (!ancestors.has(lca[0])) {\n lca.shift();\n }\n }\n });\n return taxonomy[lca[0]].short_name;\n}\n\nconst TryPan = (props) => {\n const query = props.query;\n const pan = props.pan;\n return <div className=\"suggestion-panlink\">\n <a target=\"_blank\" href={pan.url + \"?suggestion=\" + query}>\n <img src={pan.svg} title={`Search at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst TryAnotherSite = props => {\n const query = props.query;\n const config = props.config;\n let sites = Object.keys(config.panSite);\n return <div>\n <Alert variant={'info'}>Don't see what you're looking for? Search for <b>{query}</b> on one of our sister sites</Alert>\n {sites.map((p, idx) => <TryPan key={idx} query={query} pan={config.panSite[p]}/>)}\n </div>\n}\n\nconst Suggestions = props => {\n let suggestions = props.grameneSuggestions;\n if (suggestions && suggestions.grouped) {\n if (suggestions.grouped.category.matches === 0) {\n let sugg1 = {\n fq_field: 'text',\n fq_value: props.suggestionsQuery,\n name: `Genes containing \"${props.suggestionsQuery}\"`,\n category: 'Gene',\n };\n let sugg2 = {\n fq_field: 'text',\n fq_value: `${props.suggestionsQuery}*`,\n name: `Genes matching \"${props.suggestionsQuery}*\"`,\n category: 'Gene',\n };\n return (\n <div style={{margin: '10px', maxWidth: '820px'}}>\n <Alert variant={'info'}><em>No suggestions found.</em> You may still attempt a full text search, though it is unlikely to find any genes for you.</Alert>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg1); props.doAcceptSuggestion(sugg1); props.doAcceptGrameneSuggestion(sugg1)}}>\n {`All genes that contain the word \"${props.suggestionsQuery}\"`}\n </Button>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg2); props.doAcceptSuggestion(sugg2); props.doAcceptGrameneSuggestion(sugg2)}}>\n {`All genes that contain a word that starts with \"${props.suggestionsQuery}\"`}\n </Button>\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n else {\n return (\n <div style={{margin: '10px'}}>\n {suggestions.grouped.category.groups.map((g,idx) => {\n return <div key={idx} id='gramene-suggestion'>\n <h4 className=\"mt10\">{g.groupValue}</h4>\n {g.doclist.docs.map((sugg,jdx) =>\n <Button id={`${idx}-${jdx}`}\n key={jdx}\n disabled={sugg.num_genes === 0}\n size='sm'\n variant=\"outline-secondary\"\n onClick={() => {logAction(sugg); props.doAcceptSuggestion(sugg); props.doAcceptGrameneSuggestion(sugg)}}>\n {showMatches(sugg.display_name,props.suggestionsQuery)}{' '}\n <Badge bg=\"secondary\">{sugg.num_genes}</Badge>\n <i>&nbsp;{getLowestCommonAncestorName(sugg.taxon_id, props.grameneTaxonomy)}</i>\n </Button>\n )}\n </div>\n })}\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n }\n else {\n return <div></div>\n }\n}\n\nexport default connect(\n 'selectGrameneSuggestions',\n 'selectSuggestionsQuery',\n 'selectGrameneTaxonomy',\n 'selectConfiguration',\n 'doAcceptSuggestion',\n 'doAcceptGrameneSuggestion',\n Suggestions\n);\n","import React, { useState, useRef, useEffect } from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { Navbar, Nav, NavDropdown, Container, OverlayTrigger, Popover} from 'react-bootstrap'\nimport Switch from 'react-switch'\nimport { IoAlertCircle } from 'react-icons/io5'\nimport { BsGearFill,BsTrash,BsChevronDown,BsChevronRight } from 'react-icons/bs'\nimport GeneList from './results/GeneList'\nimport TaxDist from './results/TaxDist'\nimport HelpDemo from './results/HelpDemo'\nimport GeneAttribs from './results/GeneAttribs'\nimport TaxonomyModal from './TaxonomyModal'\nimport Expression from './results/Expression'\nimport UserGeneLists from './results/UserGeneLists'\nimport ExporterView from './exporter/ExporterView'\nimport Auth from './Auth'\nimport ReactGA from 'react-ga4'\nimport './styles.css';\n\nconst CollapsibleSection = ({ title, defaultOpen = true, extra, children }) => {\n const [open, setOpen] = useState(defaultOpen);\n return (\n <div className=\"sidebar-section\">\n <div className=\"sidebar-section-header\" onClick={() => setOpen(!open)}>\n <b>{title}</b>\n <span className=\"sidebar-section-actions\">\n {extra}\n <span className=\"sidebar-section-toggle\">\n {open ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n </span>\n </div>\n {open && <div className=\"sidebar-section-body\">{children}</div>}\n </div>\n );\n};\n\nconst inventory = {\n help: HelpDemo,\n list: GeneList,\n taxonomy: TaxDist,\n attribs: GeneAttribs,\n expression: Expression,\n userLists: UserGeneLists,\n export: ExporterView\n};\n\nconst StatusCmp = props => {\n let content = props.grameneFiltersStatus;\n // if (props.grameneFiltersStatus === 'init') {\n // props.doClearGrameneFilters();\n // }\n if (props.grameneFiltersStatus === 'ready') {\n let tally = <span>Ready</span>;\n if (props.grameneSearch) {\n let genes = props.grameneSearch.response.numFound;\n let genomes = props.grameneSearch.facet_counts.facet_fields.taxon_id.length / 2;\n tally = <span><b>{genes}</b> genes in <b>{genomes}</b> genomes</span>;\n }\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Genomes Filter</Popover.Header>\n <Popover.Body>Searching {props.activeGenomeCount} genomes</Popover.Body>\n </Popover>\n );\n\n content = <span>\n {tally}\n <OverlayTrigger placement=\"auto\" overlay={popover}>\n <span style={{float:'right', cursor:'pointer'}} onClick={props.doShowGrameneGenomes}><BsGearFill/></span>\n </OverlayTrigger>\n <TaxonomyModal/>\n </span>;\n }\n return <div style={{padding:'5px', color:'cornsilk', fontSize:'small'}}>{content}</div>\n};\n\nconst Status = connect(\n 'selectGrameneSearch',\n 'selectGrameneFiltersStatus',\n 'selectActiveGenomeCount',\n 'doShowGrameneGenomes',\n 'doClearGrameneFilters',\n StatusCmp\n);\n\nconst handleClick = (e, moveCopyMode, showMarked, node, actions) => {\n if (!e) e = window.event;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n\n if (showMarked && moveCopyMode) {\n if (node.marked) {\n actions.selectTarget(node);\n }\n else {\n actions.unmarkTargets()\n }\n }\n console.log(node, showMarked);\n};\nfunction logAction(action) {\n ReactGA.event({\n category: 'Search',\n action: action\n })\n}\nconst Filter = ({node,moveCopyMode,showMarked,actions}) => {\n let classes = 'gramene-filter gramene-filter';\n if (node.operation) {\n classes = `${classes}-${node.operation}`\n }\n if (node.negate) {\n classes = `${classes} gramene-filter-NOT`\n }\n if (showMarked && node.marked) {\n classes = `${classes} gramene-filter-marked`\n }\n let content = '';\n let menu = '';\n let children = [];\n\n if (node.showMenu) {\n let key=1;\n let menuItems = [];\n if (node.hasOwnProperty('operation')) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Change to ${node.operation}`); actions.changeOperation(node)}}>convert to <i>{node.operation === 'AND' ? 'OR' : 'AND'}</i></li>);\n }\n if (node.leftIdx > 0) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Delete filter`); actions.deleteNode(node)}}>delete</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Move filter`); actions.markTargets(node,'move')}}>move{node.isSource && ' select destination'}</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Copy filter`); actions.markTargets(node,'copy')}}>copy{node.isSource && ' select destination'}</li>)\n }\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Negate filter`); actions.negate(node)}}>negate</li>);\n menu = <div className='gramene-filter-menu'><ul>{menuItems}</ul></div>;\n }\n let warning;\n if (node.warning) {\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Warning</Popover.Header>\n <Popover.Body>{node.warning}</Popover.Body>\n </Popover>\n );\n warning = (\n <OverlayTrigger placement=\"auto\" overlay={popover}><span style={{float:'right', color:'red', cursor:'pointer'}}><IoAlertCircle/></span></OverlayTrigger>\n )\n }\n if (node.operation) {\n children = node.children.map((child,idx) => <Filter key={idx} moveCopyMode={moveCopyMode} node={child} showMarked={showMarked} actions={actions}/>);\n content = (\n <div>\n <span className='gramene-filter-operation'\n onClick={()=>actions.toggleMenu(node)}>{node.operation}</span>\n {warning}\n </div>\n );\n }\n else {\n content = <span className='gramene-filter-text'\n onClick={()=>actions.toggleMenu(node)}>{node.category} |&nbsp;{node.name}</span>;\n }\n return (\n <div key={node.leftIdx} className={classes} onClick={(e)=>handleClick(e,moveCopyMode, showMarked,node,actions)}>\n {content}{menu}{children}\n </div>\n )\n};\n\nconst FiltersCmp = props => {\n const actions = {\n negate: props.doNegateGrameneFilter,\n deleteNode: props.doDeleteGrameneFilter,\n changeOperation: props.doChangeGrameneFilterOperation,\n selectTarget: props.doMoveOrCopyGrameneFilter,\n markTargets: props.doMarkGrameneFilterTargets,\n unmarkTargets: props.doUnmarkGrameneFilterTargets,\n toggleMenu: props.doToggleGrameneFilterMenu\n };\n const containerClass = props.configuration.id === 'sorghum' ? 'sorghumbase-filter-container': 'gramene-filter-container';\n if (props.grameneFilters.rightIdx > 1) {\n return <div className={containerClass}>\n <CollapsibleSection title=\"Filters\"\n extra={<span style={{cursor:'pointer', marginRight:'0.5rem'}} onClick={(e)=>{e.stopPropagation(); props.doClearGrameneFilters()}}><BsTrash/></span>}>\n <Filter node={props.grameneFilters}\n moveCopyMode={props.grameneFilters.moveCopyMode}\n showMarked={props.grameneFilters.showMarked}\n actions={actions}/>\n </CollapsibleSection>\n </div>\n }\n else {\n return <div className={containerClass}>\n <CollapsibleSection title=\"Filters\">\n <div className='gramene-filter gramene-filter-AND'>No filters defined</div>\n </CollapsibleSection>\n </div>\n }\n};\n\nconst Filters = connect(\n 'selectGrameneFilters',\n 'selectConfiguration',\n 'doNegateGrameneFilter',\n 'doDeleteGrameneFilter',\n 'doChangeGrameneFilterOperation',\n 'doMoveOrCopyGrameneFilter',\n 'doMarkGrameneFilterTargets',\n 'doUnmarkGrameneFilterTargets',\n 'doToggleGrameneFilterMenu',\n 'doClearGrameneFilters',\n FiltersCmp\n);\n\nconst ResultsCmp = props => {\n let activeViews = props.grameneViews.options;\n return props.grameneFilters.rightIdx > 0 ? (\n <div>\n {activeViews.map((v,idx) => {\n let p = Object.assign({}, props);\n const divRef = useRef(null);\n useEffect(() => {\n if (v.shouldScroll) {\n const navBarHeight=0;\n const scrollPosition = divRef.current.offsetTop - navBarHeight;\n window.scrollTo({\n top: scrollPosition,\n behavior: 'smooth'\n })\n props.doCancelShouldScroll();\n }\n }, [v.shouldScroll]);\n return (\n <div key={idx} ref={divRef}>\n {v.show === 'on' && <div style={{borderTopWidth:'medium'}} className='gramene-view-header'>{v.name}</div>}\n {v.show === 'on' && React.createElement(inventory[v.id], p)}\n </div>\n )\n })}\n </div>\n ) : null;\n};\n\nconst Results = connect(\n 'selectGrameneFilters',\n 'selectGrameneViews',\n 'doCancelShouldScroll',\n ResultsCmp\n);\n\nconst ViewsCmp = props => (\n <div className={'gramene-view-container'}>\n <CollapsibleSection title=\"Views\">\n {props.grameneViews.options.filter(view => view.show !== 'disabled').map((view,idx) => (\n <div style={{textWrap:'nowrap'}} key={idx}>\n <Switch onChange={()=>props.doToggleGrameneView(view.id)} checked={view.show === 'on'}\n height={18}\n width={30}\n handleDiameter={16}\n checkedIcon={false}\n uncheckedIcon={false}\n />\n <span className={`gramene-view-span-${view.show}`} onClick={(e) => {\n props.dontToggleGrameneView(view.id)\n }}>{view.name}</span>\n </div>\n ))}\n </CollapsibleSection>\n </div>\n);\n\nconst Views = connect(\n 'selectGrameneViews',\n 'doToggleGrameneView',\n 'dontToggleGrameneView',\n ViewsCmp\n);\n\nexport {Status, Filters, Results, Views, Auth};\n","import React from 'react'\nimport ReactGA from 'react-ga4'\nimport { connect } from 'redux-bundler-react'\nimport './genes.css'\nimport Expression from './details/Expression'\nimport Homology from './details/Homology'\nimport Location from './details/Location'\nimport Pathways from \"./details/Pathways\"\nimport VEP from \"./details/VEP\"\nimport Xrefs from \"./details/Xrefs\"\nimport Publications from \"./details/Publications\"\nimport Sequences from \"./details/Sequences\"\nimport {suggestionToFilters} from \"../utils\";\nimport {GrFormPrevious, GrFormNextLink, GrFormNext, GrHpe} from 'react-icons/gr'\nimport { Badge, OverlayTrigger, Tooltip } from 'react-bootstrap'\n\nlet external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n\nlet inventory = {\n sequences: Sequences,\n location: Location,\n expression: Expression,\n homology: Homology,\n pathways: Pathways,\n VEP: VEP,\n xrefs: Xrefs,\n pubs: Publications\n};\n\nfunction renderTairSummary(searchResult) {\n const summary = searchResult.summary;\n if(summary && summary !== \"NULL\" && searchResult.system_name === \"arabidopsis_thaliana\") {\n return (\n <div className=\"gene-summary-tair\">\n {trimSummary(summary)}\n </div>\n )\n }\n}\n\nfunction trimSummary(summary) {\n if(summary.length > 160) {\n const start = summary.substr(0, 150);\n const rest = summary.substr(150);\n return <p>{start}<span className=\"ellipsis\">…</span><span className=\"rest\">{rest}</span></p>\n }\n else {\n return <p>{summary}</p>\n }\n}\nconst PanLink = (props) => {\n const gene = props.gene;\n const pan = props.pan;\n return <div className=\"gene-panlink\">\n <a target=\"_blank\" href={pan.url + \"?idList=\" + gene.id}>\n <img src={pan.svg} title={`View this gene at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst CurationComponent1 = ({ curation }) => {\n return (\n <div className=\"gene-curation\">\n <span>Curated gene structure</span>\n {curation.okay > 0 && <span className=\"status\">✔️ {curation.okay}</span>}\n {curation.flagged > -10 && <span className=\"status\">⚠️ {curation.flagged}</span>}\n </div>\n );\n};\nconst CurationComponent = ({ curation, gene }) => {\n const total = curation.okay + curation.flagged;\n const okayRatio = (curation.okay / total);\n const flaggedRatio = (curation.flagged / total);\n const tooltip = (\n <Tooltip id=\"tooltip\">\n <strong>Gene structure</strong><br/>\n Okay: {curation.okay} &nbsp;\n Flagged: {curation.flagged}\n </Tooltip>\n );\n return (\n <OverlayTrigger placement=\"left\" overlay={tooltip}>\n <a className=\"gene-curation\" target=\"_blank\" href={`https://devdata.gramene.org/curation/curations?idList=${gene.id}`}>\n <span className=\"okay\" style={{opacity: okayRatio}}>☑</span>\n <span className=\"flagged\" style={{opacity: flaggedRatio}}>⚠</span>\n </a>\n </OverlayTrigger>\n )\n};\n\nconst ClosestOrthologCmp = (props) => {\n let id, taxon_id, name, desc, species, className, identity;\n const gene = props.gene;\n\n if (gene.closest_rep_id) {\n name = gene.closest_rep_name || gene.closest_rep_id;\n desc = gene.closest_rep_description;\n species = gene.closest_rep_species_name;\n id = gene.closest_rep_id;\n taxon_id = gene.closest_rep_taxon_id;\n className = \"closest-ortholog\";\n identity = gene.closest_rep_identity || 0;\n }\n else if (gene.model_rep_id) {\n name = gene.model_rep_name || gene.model_rep_id;\n desc = gene.model_rep_description;\n species = gene.model_rep_species_name;\n id = gene.model_rep_id;\n taxon_id = gene.model_rep_taxon_id;\n className = \"model-ortholog\";\n identity = gene.model_rep_identity || 0;\n }\n var isZm = new RegExp(/^Zm00001e/);\n if (isZm.test(desc)) {\n desc='';\n }\n\n return (\n <div className={className} onClick={() => {\n props.doEnsureGrameneGenome(taxon_id);\n props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene',\n fq_field: 'id',\n fq_value: id,\n name: name\n }))\n }}>\n <div className=\"gene-species\">{species}</div>\n {identity > 0 && <div className=\"rep-identity\">{Math.round(identity*100)}</div>}\n <h3 className=\"gene-id\">{name}</h3>\n <p>{desc}</p>\n </div>\n );\n};\n\nconst ClosestOrtholog = connect(\n 'doReplaceGrameneFilters','doEnsureGrameneGenome',\n ClosestOrthologCmp\n);\n\nfunction renderClosestOrtholog(gene) {\n\n if (shouldShowClosestOrtholog(gene)) {\n\n // we used to not add the closest ortholog to the DOM if the homology detail was visible.\n // however, that could cause the height of the result to change. Instead we set visibility:hidden\n // so that the renderer takes into account the height of the ortholog even if not shown.\n return (\n <ClosestOrtholog gene={gene}/>\n );\n }\n}\n\n// show closest ortholog prominently if we have data to show:-\n// a. either there's a closest ortholog (determined by traversing the gene tree until an id or description looks\n// curated) b. or there's a model ortholog (traverse tree to find an ortholog in arabidopsis)\nfunction shouldShowClosestOrtholog(searchResult) {\n return (\n searchResult.closest_rep_id || (\n searchResult.model_rep_id &&\n searchResult.model_rep_id !== searchResult.id\n )\n );\n}\n\nconst allDetails = [\n {\n id: 'VEP',\n label: 'Germplasm',\n popup: 'Germplasm with protein truncating variants (PTVs)',\n available: false\n },\n {\n id: 'sequences',\n label: 'Sequences',\n popup: 'Gene/cDNA/protein fasta',\n available: true\n },\n {\n id: 'location',\n label: 'Location',\n popup: 'Genome Browser',\n available: false\n },\n {\n id: 'expression',\n label: 'Expression',\n popup: 'Gene Expression Atlas',\n available: false\n },\n {\n id: 'homology',\n label: 'Homology',\n popup: 'Gene Family Tree',\n available: false\n },\n {\n id: 'pathways',\n label: 'Pathways',\n popup: 'Plant Reactome Pathways',\n available: false\n },\n {\n id: 'pubs',\n label: 'Papers',\n popup: 'Curated Publications',\n available: false\n },\n {\n id: 'xrefs',\n label: 'Xrefs',\n popup: 'Database Cross-references',\n available: false\n }\n];\n\n\nclass Gene extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n details: allDetails.map(o => ({...o})).filter(d => props.config.details[d.id]),\n expandedDetail: props.expandedDetail\n };\n let hasData = {};\n props.searchResult.capabilities.forEach(c => {\n hasData[c] = true;\n if (c === 'PanOryza') {\n hasData.xrefs = true;\n }\n });\n this.state.details.forEach(d => d.available |= hasData.hasOwnProperty(d.id));\n }\n getDetailStatus(d) {\n if (this.state.expandedDetail === d.id) return 'expanded';\n if (d.available) return 'closed'\n return d.id === \"pubs\" ? 'empty' : 'disabled';\n }\n setExpanded(d) {\n if (d.available || d.id === \"pubs\") {\n if (this.state.expandedDetail === d.id) {\n this.setState({expandedDetail: null})\n }\n else {\n const geneId = this.props.searchResult.id;\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(geneId))) {\n this.props.requestGene(geneId)\n }\n ReactGA.event({\n category: 'Search',\n action: 'Details',\n label: d.label\n });\n this.setState({expandedDetail: d.id})\n }\n }\n }\n ensureGene(id) {\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(id))) {\n this.props.requestGene(id);\n return false;\n }\n return this.props.geneDocs[id].hasOwnProperty('taxon_id')\n }\n renderMetadata() {\n let gene = this.props.searchResult;\n if (gene.model_rep_taxon_id) {\n gene.model_rep_species_name = this.props.taxLut[gene.model_rep_taxon_id].short_name;\n }\n if (gene.closest_rep_taxon_id) {\n gene.closest_rep_species_name = this.props.taxLut[gene.closest_rep_taxon_id].short_name;\n }\n return renderTairSummary(gene) || renderClosestOrtholog(gene);\n }\n render() {\n const panSite = this.props.config.panSite;\n const searchResult = this.props.searchResult;\n const taxName = this.props.taxName;\n const curation = this.props.curation;\n // let orthologs='';\n // if (this.props.orthologs && this.props.orthologs.hasOwnProperty(searchResult.id)) {\n // orthologs = this.props.orthologs[searchResult.id].join(', ');\n // }\n const numWordsInDescription = searchResult.description.split(' ').length;\n return (\n <div className=\"result-gene\">\n <div className=\"result-gene-summary\">\n <div className=\"result-gene-title-body\">\n {panSite.hasOwnProperty(searchResult.system_name) && <PanLink pan={panSite[searchResult.system_name]} gene={searchResult}/>}\n {curation && <CurationComponent curation={curation} gene={searchResult}/> }\n <div className=\"gene-title\">\n <div className=\"gene-species\">{taxName}</div>\n <h3 className=\"gene-name\">{searchResult.name}\n {searchResult.id !== searchResult.name && <small className=\"gene-id\">&nbsp;{searchResult.id}</small>}\n </h3>\n </div>\n {searchResult.synonyms && <small className=\"gene-synonyms\">{searchResult.synonyms.join(', ')}</small>}\n {searchResult.description !== \"unknown\" && (numWordsInDescription > 1 || searchResult.can_show.pubs) && <p className=\"gene-description\">{searchResult.description}</p>}\n </div>\n {this.renderMetadata()}\n </div>\n <div className=\"gene-detail-tabs\">\n {this.state.details.map((d,idx) => (\n <OverlayTrigger\n key={idx}\n placement={'bottom'}\n overlay={\n <Tooltip id={`tooltip`}>{d.popup}</Tooltip>\n }\n >\n <div key={idx}\n className={`col-md-1 text-center gene-detail-tab-${this.getDetailStatus(d)}`}\n onClick={()=>this.setExpanded(d)}\n >{d.label}</div>\n </OverlayTrigger>\n ))}\n </div>\n {this.state.expandedDetail && this.ensureGene(searchResult.id) && <div className=\"visible-detail\">{React.createElement(inventory[this.state.expandedDetail], this.props)}</div>}\n </div>\n )\n }\n}\n\nconst GeneList = props => {\n if (props.grameneSearch && props.grameneSearch.response && props.grameneTaxonomy) {\n let prev,page,next;\n const numFound = props.grameneSearch.response.numFound;\n if (numFound > props.grameneSearchRows) {\n const pageNum = props.grameneSearchOffset/props.grameneSearchRows;\n page = <span style={{padding:'10px'}}>page <b>{pageNum + 1}</b> of <b>{Math.ceil(numFound/props.grameneSearchRows)}</b></span>;\n prev = <GrHpe/>;\n if (pageNum > 0) {\n prev = <Badge onClick={()=>props.doRequestResultsPage(pageNum - 1)}><GrFormPrevious/></Badge>\n }\n next = <GrHpe/>;\n if (numFound > props.grameneSearchOffset + props.grameneSearchRows) {\n next = <Badge onClick={()=>props.doRequestResultsPage(pageNum + 1)}><GrFormNext/></Badge>\n }\n }\n return <div>\n <div>{prev}{page}{next}</div>\n {props.grameneSearch.response.docs.map((g,idx) => (\n <Gene key={idx}\n searchResult={g}\n config={props.configuration}\n taxName={props.grameneTaxonomy[g.taxon_id].name}\n geneDocs={props.grameneGenes}\n requestGene={props.doRequestGrameneGene}\n requestOrthologs={props.doRequestOrthologs}\n orthologs={props.grameneOrthologs}\n taxLut={props.grameneTaxonomy}\n curation={props.curatedGenes ? props.curatedGenes[g.id] : null}\n expandedDetail={props.grameneSearch.response.numFound === 1 && g.can_show.homology ? 'homology' : null}\n />\n ))}\n {prev}{page}{next}\n </div>\n }\n return null;\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneGenes',\n 'selectGrameneOrthologs',\n 'selectGrameneSearchOffset',\n 'selectGrameneSearchRows',\n 'selectCuratedGenes',\n 'doRequestGrameneGene',\n 'doRequestOrthologs',\n 'doRequestResultsPage',\n GeneList);\n","import React, { useRef, useEffect, useState } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Row, Col} from 'react-bootstrap';\nimport BAR, {haveBAR} from \"gramene-efp-browser\";\n\nfunction DynamicIframe(props) {\n // Create a ref for the iframe element\n const iframeRef = useRef(null);\n const [iframeHeight, setIframeHeight] = useState(500); // Default height\n\n useEffect(() => {\n const handleMessage = (event) => {\n if (event.data.type === 'heightChange') {\n setIframeHeight(event.data.height + 44);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => window.removeEventListener(\"message\", handleMessage);\n }, []);\n\n return (\n <iframe\n ref={iframeRef}\n src={props.url}\n title=\"Dynamic Iframe\"\n style={{ width: '100%', height: `${iframeHeight}px`, border: 'none' }}\n />\n );\n}\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [atlasExperiment, setAtlasExperiment] = useState(null);\n const [atlasExperimentList, setAtlasExperimentList] = useState([]);\n const [atlasFacets, setAtlasFacets] = useState(null);\n const [isLocal, setIsLocal] = useState(false);\n const [activeTab, setActiveTab] = useState('gene');\n\n const handleLocalAPIChange = (event) => {\n setIsLocal(event.target.checked);\n };\n useEffect(() => {\n const tid = Math.floor(gene.taxon_id / 1000);\n if (props.expressionStudies[tid]) {\n let facets={Differential: {}, Baseline: {}};\n let eList = props.expressionStudies[tid].sort((a,b) => {\n const a_name = `${a.type}:${a.description || a._id}`;\n const b_name = `${b.type}:${b.description || b._id}`;\n return a_name < b_name ? -1 : 1;\n });\n if (props.searchResult.hasOwnProperty('expressed_in_gxa_attr_ss')) {\n const in_gxa = new Set(props.searchResult.expressed_in_gxa_attr_ss);\n eList = eList.filter(e => in_gxa.has(e._id))\n }\n eList.forEach(e => {e.factors.forEach(factor => facets[e.type][factor] = 1);});\n setAtlasExperimentList(eList);\n setAtlasFacets(facets);\n let refExp = eList.filter(e => e.isRef);\n if (refExp.length === 1) {\n setAtlasExperiment(refExp[0]._id);\n } else {\n // no reference experiment - choose first\n setAtlasExperiment(eList[0]._id);\n }\n }\n }, [props.expressionStudies]);\n\n let paralogs_url;\n let gene_url = `https://dev.gramene.org/static/atlasWidget.html?genes=${gene.atlas_id || gene._id}&localAPI=${isLocal}`;\n let paralogs = [];\n if (props.grameneParalogs && props.grameneParalogs[gene._id]) {\n paralogs = props.grameneParalogs[gene._id];\n } else if (gene.homology) {\n props.doRequestParalogs(gene._id, gene.homology.supertree, gene.taxon_id);\n }\n // if (gene.homology && gene.homology.homologous_genes && gene.homology.homologous_genes.within_species_paralog) {\n // paralogs = gene.homology.homologous_genes.within_species_paralog;\n // }\n if (paralogs.length > 0 && atlasExperiment) {\n paralogs_url= `https://dev.gramene.org/static/atlasWidget.html?genes=${paralogs.join(' ')}&experiment=${atlasExperiment}&localAPI=${isLocal}`;\n }\n return <Tabs activeKey={activeTab} onSelect={(k) => setActiveTab(k)}>\n {paralogs_url &&\n <Tab tabClassName=\"gxa\" eventKey=\"paralogs\" title={`Paralogs`} key=\"gxaparalogs\">\n <Form.Select aria-label='experiment selector'\n placeholder='Select experiment'\n onChange={(e) => setAtlasExperiment(e.target.value)}>\n { atlasExperimentList.map((e,idx) =>\n <option key={idx} value={e._id}>{e.type}: {e.description || e._id}</option>\n )}\n </Form.Select>\n {activeTab === \"paralogs\" && <DynamicIframe url={paralogs_url}/> }\n </Tab>\n }\n <Tab tabClassName=\"gxa\" eventKey=\"gene\" title=\"All Studies\" key=\"gxa\">\n {/*<Form.Check*/}\n {/* type=\"switch\"*/}\n {/* id=\"localAPI\"*/}\n {/* label=\"Local API\"*/}\n {/* checked={isLocal}*/}\n {/* onChange={handleLocalAPIChange}*/}\n {/*/>*/}\n {activeTab === \"gene\" && <DynamicIframe url={gene_url}/> }\n </Tab>\n {haveBAR(gene) &&\n <Tab tabClassName=\"eFP\" eventKey=\"eFP\" title=\"eFP Browser\" key=\"bar\"><BAR gene={gene}/></Tab>\n }\n </Tabs>\n};\n\nexport default connect(\n 'selectGrameneParalogs',\n 'selectExpressionStudies',\n 'doRequestParalogs',\n //'doRequestParalogExpression',\n Detail\n);\n\n","import React from 'react'\nimport _ from 'lodash';\nimport {connect} from \"redux-bundler-react\";\nimport TreeVis from \"gramene-genetree-vis\";\nimport treesClient from \"gramene-trees-client\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport {suggestionToFilters} from \"../../utils\";\nimport {Spinner, Alert} from \"react-bootstrap\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Homology extends React.Component {\n constructor(props) {\n super(props);\n if (!props.geneDocs.hasOwnProperty(props.searchResult.id)) {\n props.requestGene(props.searchResult.id)\n }\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n }\n renderTreeVis() {\n return (\n <div className=\"gene-genetree\">\n <TreeVis genetree={this.tree}\n initialGeneOfInterest={this.gene}\n genomesOfInterest={this.props.grameneGenomes.active}\n taxonomy={this.taxonomy}\n allowGeneSelection={true}\n pivotTree={true}\n enableCuration={false}\n enablePhyloview={true}\n numberOfNeighbors={10}\n ensemblUrl={this.props.configuration.ensemblURL}/>\n </div>\n )\n }\n filterAllHomologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'gene_tree',\n fq_value: this.tree._id,\n name: `Homologs of ${this.gene.name}`\n }))\n }\n filterOrthologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__all_orthologs',\n fq_value: this.gene._id,\n name: `Orthologs of ${this.gene.name}`\n }))\n }\n filterParalogs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__within_species_paralog',\n fq_value: this.gene._id,\n name: `Paralogs of ${this.gene.name}`\n }))\n }\n searchSupertree() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'supertree_attr_s',\n fq_value: this.gene.homology.supertree,\n name: this.gene.homology.supertree\n }))\n }\n orthologList() {\n return this.orthoParaList('ortholog');\n }\n\n paralogList() {\n return this.orthoParaList('within_species_paralog');\n }\n\n orthoParaList(type) {\n var homology, thisGeneId;\n homology = _.get(this.gene, 'homology.homologous_genes');\n thisGeneId = this.gene._id;\n\n if (homology) {\n var homologs = _(homology)\n .pickBy(function filterCategories(thing, name) {\n return name.indexOf(type) === 0;\n })\n .values()\n .flatten()\n .uniq()\n .value();\n\n if (!_.isEmpty(homologs)) {\n if (!homologs.includes(thisGeneId)) {\n console.log(\"add to homologs list\",thisGeneId);\n homologs.push(thisGeneId);\n }\n return homologs; // only return something if we have something. We're testing for truthiness later.\n }\n }\n }\n explorations() {\n let x = [{\n name: 'Homologs',\n category: 'Gene Tree',\n count: this.tree.geneCount,\n handleClick: this.filterAllHomologs.bind(this)\n }];\n if (this.orthologs) {\n x.push({\n name: 'Orthologs',\n category: 'Gene Tree',\n count: this.orthologs.length,\n handleClick: this.filterOrthologs.bind(this)\n });\n }\n if (this.paralogs) {\n x.push({\n name: 'Paralogs',\n category: 'Gene Tree',\n count: this.paralogs.length,\n handleClick: this.filterParalogs.bind(this)\n });\n }\n if (this.gene.homology.supertree) {\n x.push({\n name: `Supertree`,\n category: `Gene Tree`,\n count: this.gene.homology.supertree,\n handleClick: this.searchSupertree.bind(this)\n })\n }\n return x;\n }\n links() {\n let links = [\n {\n name: 'Ensembl Gene Tree view',\n url: `${this.props.configuration.ensemblURL}/${this.gene.system_name}/Gene/Compara_Tree?g=${this.gene._id}`\n }\n ];\n if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n links.push({\n name: 'Curate',\n url: this.props.curation.url + this.gene._id\n })\n }\n return links;\n }\n render() {\n const id = this.props.searchResult.id;\n if (!this.props.geneDocs.hasOwnProperty(id)) {\n return <Spinner/>\n }\n this.gene = this.props.geneDocs[id];\n const treeId = this.gene.homology.gene_tree.id;\n if (! this.props.grameneTrees.hasOwnProperty(treeId)) {\n this.props.doRequestGrameneTree(treeId);\n }\n else {\n const tree = this.props.grameneTrees[treeId];\n if (tree.hasOwnProperty('taxon_id')) {\n this.tree = treesClient.genetree.tree([this.props.grameneTrees[treeId]]);\n this.orthologs = this.orthologList();\n this.paralogs = this.paralogList();\n }\n }\n let flagged=0;\n // if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n // flagged = this.props.curatedGenes && this.props.curatedGenes[id] ? this.props.curatedGenes[id].flagged : 0;\n // }\n return (\n <Detail>\n <Title key=\"title\">Compara Gene Tree</Title>\n <Description key=\"description\">\n This phylogram shows the relationships between this gene and others similar to it, as determined by Ensembl Compara.\n {flagged > 1 && <Alert variant={'warning'}>This gene was flagged for potential gene structural annotation issues by {flagged} curators</Alert>}\n </Description>\n {this.tree && <Content key=\"content\">{this.renderTreeVis()}</Content>}\n {this.tree && <Explore key=\"explore\" explorations={this.explorations()}/>}\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n )\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGrameneTrees',\n 'selectGrameneGenomes',\n 'selectConfiguration',\n 'selectCuration',\n 'selectCuratedGenes',\n 'doRequestGrameneTree',\n 'doAcceptGrameneSuggestion',\n 'doReplaceGrameneFilters',\n Homology\n);\n\n","import React from 'react';\nimport keyBy from 'lodash/keyBy';\nimport _ from \"lodash\";\nimport ReactGA from \"react-ga4\";\nimport { BiLinkExternal } from \"react-icons/bi\";\nimport { Button, Badge } from \"react-bootstrap\";\n\nexport const Detail = props => {\n let subComponents = keyBy(props.children, 'key');\n return (\n <div className=\"detail\">\n <div className=\"intro\">\n {subComponents.title}\n {subComponents.description}\n </div>\n <div className=\"content-wrapper\">\n {subComponents.content}\n </div>\n <div className=\"actions\">\n <div className=\"action-wrapper\" xs={12} sm={5}>\n {subComponents.explore}\n </div>\n <div className=\"action-wrapper\" xs={12} sm={7}>\n {subComponents.links}\n </div>\n </div>\n </div>\n )\n};\n\nexport const Title = props => <h4>{props.children}</h4>;\nexport const Description = props => <p className=\"description\">{props.children}</p>;\nexport const Content = props => <div className=\"content\">{props.children}</div>;\n\nconst QueryTerm = props => {\n let category, name, badge;\n name = props.name;\n if (props.category) {\n category = props.category + ' | ';\n }\n if (_.isNumber(props.count)) {\n badge = <Badge style={{marginLeft: \"0.5rem\"}} bg='secondary'>{props.count}</Badge>\n }\n return (\n <Button variant='outline-dark' onClick={props.handleClick}>\n {category}{name}{badge}\n </Button>\n )\n};\n\nfunction renderExplorations(explorations) {\n return explorations.map(\n (exploration, idx) =>\n <QueryTerm key={idx} {...exploration} />\n );\n}\nexport const Explore = props => (\n <div className=\"explore\">\n <h5>Search Filters</h5>\n <div>\n {renderExplorations(props.explorations)}\n </div>\n </div>\n);\n\nfunction renderLinks(links) {\n let external = <small title=\"This link opens a page from an external site\"> <BiLinkExternal/></small>;\n return links.map((link, idx) =>\n <li key={idx}>\n <a href={link.url} target=\"_blank\" className=\"external-link\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: link.name\n })\n }}>{link.name}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={link.name}*/}\n {/* to={link.url}*/}\n {/* target=\"_blank\"*/}\n {/* className=\"external-link\"*/}\n {/*>*/}\n {/* {link.name}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n}\n\nexport const Links = props => (\n <div className=\"links\">\n <h5>Links to other resources</h5>\n <ul>\n {renderLinks(props.links)}\n </ul>\n </div>\n);\n","import { initializeApp, getApps, getApp } from \"firebase/app\";\n\nexport const getFirebaseApp = (config) => {\n if (!config) return null;\n const name = config.projectId || '[DEFAULT]';\n if (getApps().some(a => a.name === name)) return getApp(name);\n return initializeApp(config, name);\n};\n\nexport const suggestionToFilters = (suggestion) => {\n return {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 3,\n children: [\n {\n fq_field: suggestion.fq_field,\n fq_value: suggestion.fq_value,\n name: suggestion.name,\n category: suggestion.category,\n leftIdx: 1,\n rightIdx: 2,\n negate: false,\n marked: false\n }\n ]\n }\n}\n","import React from 'react'\nimport getProp from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport {Button} from \"react-bootstrap\";\nimport Browser from \"./location/browser\";\nimport {connect} from \"redux-bundler-react\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Location extends React.Component {\n constructor(props) {\n super(props);\n this.gene = this.props.geneDocs[this.props.searchResult.id];\n this.initRegion();\n this.state = {\n visibleRange: this.initVisibleRange()\n };\n }\n\n initVisibleRange() {\n var location, span, padding, result;\n location = this.gene.location;\n if(!location) {\n throw new Error(`Could not find the location of the gene in props.`);\n }\n\n span = location.end - location.start + 1;\n padding = Math.floor(.1 * span);\n\n result = {\n chr: location.region,\n start: location.start - padding,\n end: location.end + padding\n };\n\n result.displayName = `${result.chr}:${result.start}-${result.end}`;\n\n return result;\n }\n\n initRegion() {\n var region, isChromosome, regionType, regionName;\n region = this.gene.location.region;\n if (region) {\n isChromosome = /^\\d+$/.test(region);\n if (isChromosome) {\n regionType = 'chromosome';\n regionName = 'Chromosome ' + region;\n }\n else {\n regionType = 'scaffold';\n regionName = region;\n }\n this.region = {\n isChromsome: isChromosome,\n name: regionName,\n type: regionType\n };\n }\n }\n\n\n handleViewChange(chr, start, end) {\n var visibleRange = {\n chr: chr,\n start: start,\n end: end,\n displayName: `${chr}:${start}-${end}`\n };\n\n if(!isEqual(visibleRange, this.state.visibleRange)) {\n this.setState({\n visibleRange: visibleRange\n });\n }\n }\n\n updateQuery(restrictToVisibleRange) {\n var location, geneName, visibleRange, filter, filterDisplayName, fq;\n location = this.gene.location;\n geneName = this.gene.name;\n // category: 'Gene Tree',\n // fq_field: 'gene_tree',\n // fq_value: this.tree._id,\n // name: `Homologs of ${this.gene.name}`\n\n let terms = [\n {\n category: \"Map\",\n name: location.map,\n fq_field: 'map',\n fq_value: location.map\n },\n {\n category: \"Region\",\n name: location.region,\n fq_field: 'region',\n fq_value: location.region\n }\n ];\n fq = `map:${location.map} AND region:${location.region}`;\n\n if (restrictToVisibleRange) {\n visibleRange = this.state.visibleRange;\n\n terms.push({\n category: \"Interval\",\n name: `${visibleRange.start}-${visibleRange.end}`,\n fq_field: 'start',\n fq_value: `[${visibleRange.start} TO ${visibleRange.end}]`\n });\n fq += ` AND (start:[${visibleRange.start} TO ${visibleRange.end}]`\n + ` OR end:[${visibleRange.start} TO ${visibleRange.end}])`;\n\n filterDisplayName = visibleRange.displayName;\n } else {\n filterDisplayName = \"Shares \" + this.region.type + \" with \" + geneName;\n }\n\n console.log(\"User asked to filter by location\");\n filter = {\n category: 'Location',\n id: fq,\n fq: fq,\n display_name: filterDisplayName\n };\n\n // QueryActions.removeAllFilters();\n // QueryActions.setFilter(filter);\n this.props.doAddGrameneRangeQuery(terms);\n if (this.props.closeModal) this.props.closeModal();\n }\n\n explorations() {\n var visible, result;\n visible = this.state.visibleRange;\n result = [\n {\n name: `All on ${this.region.name}`,\n handleClick: ()=>this.updateQuery(false)\n }\n ];\n if (visible) {\n result.push({\n name: `All within ${getProp(visible, 'displayName')}`,\n handleClick: ()=>this.updateQuery(true)\n });\n }\n return result;\n }\n\n links() {\n function jgiify(id) {\n return id.replace('SORBI_3','Sobic.').replace(/\\.v[0-9]\\.[0-9]$/,'');\n }\n var gene = this.gene;\n let links = [\n {name: 'Ensembl Browser', url: `${this.props.config.ensemblURL}/${gene.system_name}/Gene/Summary?g=${gene._id}`}\n ];\n if (gene.annotations.taxonomy.ancestors.includes(4557))\n links.push({name: 'Phytozome', url: `https://phytozome-next.jgi.doe.gov/report/gene/Sbicolor_v5_1/${jgiify(gene._id)}`})\n if (gene.taxon_id === 3702)\n links.push(\n {name: 'tair', url: `https://www.arabidopsis.org/servlets/TairObject?name=${gene._id}&type=locus`},\n {name: 'ThaleMine', url: `https://bar.utoronto.ca/thalemine/keywordSearchResults.do?searchTerm=${gene._id}&searchSubmit=search`}\n );\n if (gene.taxon_id === 39947)\n links.push({name: 'RAP-DB', url: `https://rapdb.dna.affrc.go.jp/locus/?name=${gene._id}`});\n const isMaize = new RegExp(/^Zm[0-9]+/);\n if (isMaize.test(gene._id))\n links.push({name: 'MaizeGDB', url: `http://www.maizegdb.org/gene_center/gene/${gene._id}`});\n return links;\n }\n\n render() {\n return (\n <Detail>\n {/*<Title key=\"title\">Genome location: {this.renderGenePosition()}</Title>*/}\n <Description key=\"description\">Currently viewing: {this.renderLocation()}&nbsp;{this.renderResetButton()}</Description>\n <Content key=\"content\">\n {this.renderBrowser()}\n </Content>\n <Explore key=\"explore\" explorations={this.explorations()}/>\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n );\n }\n\n\n renderBrowser() {\n return (\n <Browser gene={this.gene} {...this.props} {...this.state} onViewChange={ this.handleViewChange.bind(this) }/>\n );\n }\n\n renderGenePosition() {\n var location = this.gene.location;\n return (\n <span className=\"location\">\n <span className=\"region\">{this.region.name}</span>:<span className=\"start\">{location.start}</span>-<span\n className=\"end\">{location.end}</span>\n </span>\n );\n }\n\n renderLocation() {\n var location = this.state.visibleRange;\n return (\n <span className=\"location\">\n <span className=\"region\">{location.chr}</span>:<span className=\"start\">{location.start}</span>-<span\n className=\"end\">{location.end}</span>\n </span>\n );\n }\n\n resetVisibleRange() {\n const {chr, start, end} = this.initVisibleRange();\n this.handleViewChange(chr, start, end);\n }\n\n renderResetButton() {\n // let active=isEqual(this.props.visibleRange, this.state.visibleRange);\n return (\n <Button\n size=\"sm\"\n variant=\"outline-dark\"\n onClick={() => this.resetVisibleRange()}>\n Reset\n </Button>\n )\n }\n}\n\nexport default connect('doAddGrameneRangeQuery',Location);\n\n","import React from \"react\";\nimport DallianceBrowser from \"./dallianceBrowser.js\";\n\nexport default class Browser extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n <div className=\"location-browser\">\n <DallianceBrowser {...this.props} expanded={!!this.props.closeModal} />\n </div>\n )\n }\n\n}\n\n// Browser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// visibleRange: React.PropTypes.object.isRequired,\n// onViewChange: React.PropTypes.func.isRequired\n// };","import React from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\n// var ensemblREST = require('../../../../../package.json').gramene.ensemblREST;\n//const ensemblREST = 'http://data.gramene.org/ensembl63';\n// const ensemblREST = 'https://data.sorghumbase.org/ensembl2';\n// const ensemblREST = 'https://data.gramene.org/vitis-ensembl1';\n// const ensemblREST = 'https://data.gramene.org/pansite-ensembl';\n\n// calculate this once.\nconst PREFIX = '/static/gramene-dalliance/';\n\nexport default class DallianceBrowser extends React.Component {\n\n constructor(props) {\n super(props);\n this.initialVisibleRange = props.visibleRange;\n }\n\n shouldComponentUpdate(newProps) {\n // should we reset the view to initial state?\n if(isEqual(newProps.visibleRange, this.initialVisibleRange)) {\n this.browser.setLocation(newProps.visibleRange.chr, newProps.visibleRange.start, newProps.visibleRange.end);\n }\n\n return false;\n }\n\n biodallianceElementId() {\n return this.props.gene._id + 'Browser';\n }\n\n browser() {\n var g, view, start, end, browser;\n g = this.props.gene;\n view = this.props.visibleRange;\n start = view.start;\n end = view.end;\n\n this.browser = browser = new Browser(\n {\n pageName: this.biodallianceElementId(),\n chr: g.location.region,\n viewStart: start,\n viewEnd: end,\n cookieKey: g._id + 'BrowserCookie',\n prefix: PREFIX,\n\n coordSystem: {\n speciesName: g.system_name,\n taxon: g.taxon_id,\n auth: 'Gramene',\n version: '3',\n ucscName: 'IRGSP-1.0'\n },\n\n sources: [\n {\n name: 'DNA',\n ensemblURI: this.props.config.ensemblRest,\n species: g.system_name,\n tier_type: 'sequence'\n },\n {\n name: 'Genes',\n uri: this.props.config.ensemblRest,\n tier_type: 'ensembl',\n species: g.system_name,\n type: ['gene', 'transcript', 'exon', 'cds']\n }\n ],\n\n // hubs: ['/Track_Hubs/DRP000315/hub.txt'],\n disablePoweredBy: true,\n setDocumentTitle: false,\n noDefaultLabels: true,//!this.props.expanded,\n noPersist: true,\n noPersistView: true,\n maxWorkers: 2,\n noTitle: true,\n noLocationField: false,\n noLeapButtons: true,//!this.props.expanded,\n noZoomSlider: false, //!this.props.expanded,\n noTrackAdder: true,//!this.props.expanded,\n noTrackEditor: true,//!this.props.expanded,\n noExport: true,//!this.props.expanded,\n noOptions: true,//!this.props.expanded,\n noHelp: true,\n maxViewWidth: 1000000\n }\n );\n\n browser.addViewListener(this.props.onViewChange);\n }\n\n cancel() {\n if (typeof this.timeoutID == \"number\") {\n window.clearTimeout(this.timeoutID);\n delete this.timeoutID;\n }\n }\n\n componentDidMount() {\n // this.browser();\n this.cancel();\n var self = this;\n this.timeoutID = window.setTimeout(function () {self.browser();}, 0);\n }\n\n componentWillUnmount() {\n this.cancel();\n }\n\n render() {\n return (\n <div id={this.biodallianceElementId()}/>\n );\n }\n}\n\n// DallianceBrowser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// visibleRange: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// onViewChange: React.PropTypes.func.isRequired\n// };\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport FlatToNested from 'flat-to-nested';\nimport {Explore, Links} from \"./generic\";\nimport treesClient from \"gramene-trees-client\";\n// import {TreeMenu} from \"react-tree-menu\";\nimport TreeMenu from \"react-simple-tree-menu\";\nimport '../../../../node_modules/react-simple-tree-menu/dist/main.css';\n\nimport {Spinner} from \"react-bootstrap\";\nimport _ from 'lodash'\nimport \"./tree-view.css\"\n\nvar reactomeURL = \"https://plantreactome.gramene.org\";\n\nclass Pathways extends React.Component {\n constructor(props) {\n super(props);\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n this.gene = props.geneDocs[props.searchResult.id];\n this.holderId = 'displayHolder' + this.gene._id;\n this.state = { treeVisible: true, height: 500 };\n }\n\n getTreeWidth() {\n return this.state.treeVisible ? 250 : 0;\n }\n\n getDiagramWidth() {\n // Account for toggle button (24px) and 1px border\n const toggleWidth = 25;\n const treeWidth = this.getTreeWidth();\n return this.divWrapper.clientWidth - treeWidth - toggleWidth - 1;\n }\n\n initDiagram() {\n this.diagram = Reactome.Diagram.create({\n proxyPrefix: reactomeURL,\n placeHolder: this.holderId,\n width: this.getDiagramWidth(),\n height: this.state.height\n });\n }\n\n startResize(e) {\n e.preventDefault();\n const startY = e.clientY;\n const startHeight = this.state.height;\n\n const onMouseMove = (moveEvent) => {\n const newHeight = Math.max(200, startHeight + (moveEvent.clientY - startY));\n this.setState({ height: newHeight });\n };\n\n const onMouseUp = () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n // Recreate diagram at new height\n if (this.currentPathwayId && this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n this.loadDiagram(this.currentPathwayId);\n }\n };\n\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n }\n\n toggleTree() {\n // Use the synchronously-tracked ID, not the async onDiagramLoaded one\n const savedDiagram = this.currentPathwayId;\n if (this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n }\n this.setState({ treeVisible: !this.state.treeVisible }, () => {\n // Use requestAnimationFrame to ensure DOM has updated before\n // reinitializing the diagram with the new available width\n requestAnimationFrame(() => {\n if (savedDiagram) {\n this.loadDiagram(savedDiagram);\n }\n });\n });\n }\n\n stableId(dbId) {\n let prefix = this.taxonomy.indices.id[this.gene.taxon_id].model.reactomePrefix || 'OSA';\n return `R-${prefix}-${dbId}`;\n }\n\n loadDiagram(pathwayId, reactionId) {\n this.currentPathwayId = pathwayId;\n if (!this.diagram) this.initDiagram();\n this.diagram.loadDiagram(pathwayId);\n\n this.diagram.onDiagramLoaded(function (loaded) {\n this.loadedDiagram = loaded;\n if (reactionId) {\n this.diagram.selectItem(reactionId);\n }\n // var xref = _.find(this.props.gene.xrefs,{db : 'Gramene_Plant_Reactome'}).ids[0];\n this.diagram.flagItems(this.gene._id);\n }.bind(this));\n }\n\n componentDidMount() {\n if (Reactome && Reactome.Diagram) {\n // this.initDiagram();\n }\n else {\n window.addEventListener('launchDiagram', function (e) {\n // this.initDiagram()\n }.bind(this));\n }\n this._handleResize = _.debounce(() => {\n if (this.currentPathwayId && this.divWrapper) {\n const savedDiagram = this.currentPathwayId;\n if (this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n }\n this.loadDiagram(savedDiagram);\n }\n }, 300);\n window.addEventListener('resize', this._handleResize);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.state.hierarchy && ! this.state.selectedNode) {\n let node = this.state.hierarchy[0];\n let path = [0];\n let parent = node;\n while (node.nodes) {\n path.push(0);\n parent = node;\n node = node.nodes[0];\n }\n console.log(parent,node,path);\n this.loadNodes(path);\n }\n if (!this.state.hierarchy && this.pathwayIds) {\n const haveDocs = this.pathwayIds.filter(id => this.props.gramenePathways.hasOwnProperty(id));\n if (haveDocs.length === this.pathwayIds.length) {\n const docs = this.pathwayIds.map(id => this.props.gramenePathways[id]);\n this.getHierarchy(this.makeTaxonSpecific(docs,this.gene.taxon_id));\n }\n }\n }\n\n componentWillMount() {\n var pathways, reactionId, ancestorIds;\n pathways = this.gene.annotations.pathways;\n if(!pathways) {\n throw new Error(\"No pathway annotation present for \" + this.gene._id);\n }\n\n this.pathwayIds = _.clone(pathways.ancestors);\n pathways.entries.forEach(function(reaction) {\n let [r,speciesCode,id] = reaction.id.split('-');\n\n this.pathwayIds.push(+id);\n }.bind(this));\n\n this.props.doRequestGramenePathways(this.pathwayIds);\n\n // DocActions.needDocs('pathways', this.pathwayIds, (docs) => { return this.makeTaxonSpecific(docs,this.props.gene.taxon_id)}, this.getHierarchy);\n }\n\n makeTaxonSpecific(docs,taxon_id) {\n let lineageField = 'lineage_'+taxon_id;\n if (! docs[0].hasOwnProperty(lineageField)) {\n let tid = Math.floor(taxon_id / 1000);\n lineageField = 'lineage_'+tid;\n }\n let tsDocs = docs.map(function(doc) {\n let tsDoc = _.pick(doc,['_id','name','type']);\n tsDoc.lineage = doc[lineageField];\n return tsDoc;\n });\n console.log(tsDocs);\n return tsDocs;\n }\n\n componentWillUnmount() {\n // DocActions.noLongerNeedDocs('pathways', this.pathwayIds);\n if (this.diagram) this.diagram.detach();\n if (this._handleResize) {\n window.removeEventListener('resize', this._handleResize);\n this._handleResize.cancel();\n }\n }\n\n getHierarchy(docs) {\n let pathways = _.keyBy(docs,'_id');\n let nodes = [];\n this.pathwayIds.forEach(function (pwyId) {\n if (pathways[pwyId]) {\n let pwy = pathways[pwyId];\n pwy.lineage.forEach(function(line) {\n let parentOffset = line.length - 2;\n nodes.push({\n id: pwyId,\n key: pwyId,\n label: pwy.name,\n type: pwy.type,\n checkbox: false,\n selected: false,\n parent: parentOffset >=0 ? line[parentOffset] : undefined\n });\n });\n }\n });\n\n let nested = new FlatToNested({\n children: 'nodes'\n }).convert(nodes);\n\n this.setState({hierarchy: [nested], selectedNode: undefined});\n }\n possiblyLoadNodes(node) {\n if (!node.selected) {\n let selectedNode = this.state.selectedNode;\n selectedNode.selected = false;\n node.selected = true;\n selectedNode = node;\n if (node.type === \"Pathway\") {\n let pathway = this.stableId(node.id);\n this.loadDiagram(pathway);\n }\n else {\n let reaction = this.stableId(node.id);\n let pathway = this.stableId(node.parent.split(\"/\").pop());\n if (this.loadedDiagram === pathway) {\n this.diagram.selectItem(reaction);\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n this.loadDiagram(pathway,reaction);\n }\n }\n this.setState({selectedNode})\n }\n }\n loadNodes(nodes) {\n let hierarchy = this.state.hierarchy;\n let selectedNode = this.state.selectedNode;\n let offset = nodes.shift();\n let nodeRef = hierarchy[offset];\n let lineage = [nodeRef];\n while (nodeRef.nodes) {\n nodeRef = nodeRef.nodes[0];\n lineage.unshift(nodeRef);\n }\n if (lineage[0].id !== 2894885) {\n let pathway = this.stableId(lineage[0].id);\n let reaction = undefined;\n if (lineage[0].type === \"Reaction\") {\n reaction = pathway;\n pathway = this.stableId(lineage[1].id);\n }\n if (lineage[0].selected) {\n selectedNode = undefined;\n lineage[0].selected = false;\n if (this.loadedDiagram === pathway) {\n this.diagram.resetSelection();\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n this.loadDiagram(pathway);\n }\n }\n else {\n if (selectedNode) {\n selectedNode.selected = false;\n }\n selectedNode = lineage[0];\n lineage[0].selected = true;\n if (this.loadedDiagram === pathway) {\n if (reaction) {\n this.diagram.selectItem(reaction);\n }\n else {\n this.diagram.resetSelection();\n }\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n if (reaction) {\n this.loadDiagram(pathway, reaction);\n }\n else {\n this.loadDiagram(pathway);\n }\n }\n }\n this.setState({hierarchy: hierarchy, selectedNode: selectedNode});\n }\n }\n\n renderHierarchy() {\n if (this.state.hierarchy) {\n let path = [];\n let allPaths = [];\n let nodes = this.state.hierarchy;\n while (nodes) {\n path.push(nodes[0].key);\n allPaths.push(path.join('/'));\n if (nodes[0].hasOwnProperty('nodes')) {\n nodes = nodes[0].nodes;\n }\n else {\n nodes = undefined;\n }\n }\n // console.log(path);\n return <TreeMenu\n data={this.state.hierarchy}\n hasSearch={false}\n onClickItem={(item) => this.possiblyLoadNodes(item)}\n onClickItemx={(item) => console.log('onClickItem', item)}\n initialActiveKey={path.join('/')}\n initialOpenNodes={allPaths}\n />;\n // return (\n // <TreeMenu\n // data={this.state.hierarchy}\n // expandIconClass=\"fa fa-chevron-right\"\n // collapseIconClass=\"fa fa-chevron-down\"\n // stateful={true}\n // collapsible={true}\n // onTreeNodeClick={this.loadNodes.bind(this)}\n // />\n // );\n }\n return <Spinner/>\n }\n\n updateQuery() {\n console.log(\"User asked to filter by \"+ this.state.selectedNode.type);\n\n this.props.doAcceptGrameneSuggestion({\n category: 'Plant Reactome',\n fq_field: 'pathways__ancestors',\n fq_value: this.state.selectedNode.id,\n name: this.state.selectedNode.label\n })\n }\n\n render() {\n let reactomeLink,searchFilter;\n\n if (this.state.selectedNode) {\n let xrefLUT = _.keyBy(this.gene.xrefs,'db');\n let links = [\n {name: 'Plant Reactome '+this.state.selectedNode.type, url: `${reactomeURL}/content/detail/${this.stableId(this.state.selectedNode.id)}`}\n ];\n if (xrefLUT.hasOwnProperty('notGramene_Plant_Reactome')) {\n links.push({name: 'Plant Reactome Gene', url: `${reactomeURL}/content/detail/${xrefLUT.notGramene_Plant_Reactome.ids[0]}`});\n }\n reactomeLink = <Links key=\"links\" links={links}/>;\n let filters = [\n {\n name: `All genes in this ${this.state.selectedNode.type}`,\n handleClick: ()=>this.updateQuery()\n }\n ];\n searchFilter = <Explore key=\"explore\" explorations={filters}/>;\n }\n const treeWidth = this.getTreeWidth();\n return (\n <div ref={(div) => {this.divWrapper = div;}} className=\"pathways-container\">\n <div className=\"pathways-layout\" style={{height: this.state.height}}>\n <button\n className=\"pathways-tree-toggle\"\n onClick={() => this.toggleTree()}\n title={this.state.treeVisible ? 'Hide pathway hierarchy' : 'Show pathway hierarchy'}\n >\n {this.state.treeVisible ? '◀' : '▶'}\n </button>\n {this.state.treeVisible && (\n <div className=\"pathways-tree-panel\">\n {this.renderHierarchy()}\n </div>\n )}\n <div className=\"pathways-diagram-panel\" id={this.holderId}/>\n </div>\n <div\n className=\"pathways-resize-handle\"\n onMouseDown={(e) => this.startResize(e)}\n title=\"Drag to resize\"\n />\n {searchFilter}\n {reactomeLink}\n </div>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGramenePathways',\n 'doRequestGramenePathways',\n 'doAcceptGrameneSuggestion',\n Pathways\n);\n","import React, {useState, useEffect, useRef, useCallback} from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Button} from 'react-bootstrap';\nimport { AgGridReact } from \"ag-grid-react\";\nimport _ from 'lodash';\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\nimport '@fortawesome/fontawesome-free/css/all.min.css';\nimport \"./VEP.css\";\nimport { study_info } from '../../../vepStudyInfo';\n\nconst ggURL = {\n xIRRI: 'https://gringlobal.irri.org/gringlobal/accessiondetail?id=',\n IRRI: 'https://www.irri.org/genesys-rice#/a/',\n ARS: 'https://npgsweb.ars-grin.gov/gringlobal/accessiondetail.aspx?id=',\n ICRISAT: 'https://genebank.icrisat.org/IND/PassportSummary?ID=',\n sorbmutdb: 'https://www.depts.ttu.edu/igcast/sorbmutdb.php',\n maizeGDB: 'https://wgs.maizegdb.org/',\n NCBI: 'https://www.ncbi.nlm.nih.gov/biosample/?term='\n};\n\nconst rice_studies = {'1': {label: 'Rice 3K', type: 'NAT'}};\nconst AccessionLink = ({germplasm, gene_id}) => {\n const genebank = germplasm.stock_center;\n const url = ggURL[genebank];\n if (germplasm.germplasm_dbid) { // link to stock center\n const germ_id = germplasm.germplasm_dbid;\n if (germ_id && url && germ_id !== \"0\") {\n return <a target=\"_blank\" href={`${url}${germ_id}`}>\n {germplasm.pub_id} ({genebank})</a>;\n }\n }\n if (genebank === \"sorbmutdb\") {\n return (\n <form id={germplasm.pub_id} action={url} method=\"post\" target=\"_blank\">\n <input type=\"hidden\" name=\"search\" value={gene_id.replace('SORBI_3','Sobic.')} />\n <input type=\"hidden\" name=\"submit\" value=\"Search\" />\n <button type=\"submit\" className=\"button-like-link\">SorbMutDB</button>\n </form>\n );\n }\n if (germplasm.pop_id === '15' && germplasm.stock_center === 'NOT FOUND') {\n return <a target=\"_blank\" href={ggURL['maizeGDB']}>{germplasm.pub_id} (SNPVersity)</a>\n }\n return <span>{germplasm.pub_id}</span>\n}\nfunction compareGermplasm(a, b) {\n const aSub = a?.germplasm?.subpop ?? '';\n const bSub = b?.germplasm?.subpop ?? '';\n const subCmp = aSub.localeCompare(bSub, 'en', { sensitivity: 'accent' });\n if (subCmp !== 0) return subCmp;\n\n const aPub = a?.germplasm?.pub_id ?? '';\n const bPub = b?.germplasm?.pub_id ?? '';\n return aPub.localeCompare(bPub, 'en', { sensitivity: 'accent' });\n}\nfunction group_germplasm(gene, germplasmLUT, vep_obj) {\n let accessionTable = [];\n Object.entries(vep_obj).forEach(([key,accessions]) => {\n const parts = key.split(\"__\");\n if (parts[0] === \"VEP\") {\n if (parts[1] !== \"merged\") {\n accessions.filter(ens_id => germplasmLUT.hasOwnProperty(ens_id)).forEach(ens_id => {\n const germplasm = germplasmLUT[ens_id][0];\n const pop = study_info[parts[3]][parts[4]];\n const conseq = parts[1].replaceAll(\"_\",\" \");\n const status = parts[2] === \"het\" ? \"heterozygous\" : \"homozygous\";\n const accInfo = {\n key: [pop.label,conseq,status].join('%%%'),\n germplasm: germplasm,\n pop: pop\n };\n accessionTable.push(accInfo);\n });\n }\n }\n });\n // group accessionTable by key field\n const groups = _.groupBy(accessionTable, 'key');\n let grouped = [];\n let id=0;\n Object.keys(groups).sort().forEach((group) => {\n const [pop,conseq,status] = group.split('%%%');\n id++;\n const tally = groups[group].length;\n grouped.push({\n id: id,\n group: group,\n summary: true,\n pop: pop,\n conseq: conseq,\n status: status,\n tally: tally\n });\n groups[group].sort(compareGermplasm).forEach(acc => {\n id++;\n grouped.push({\n id: id,\n group: group,\n summary: false,\n pop:pop,\n conseq: conseq,\n status: status,\n accession: acc,\n tally: tally\n })\n })\n })\n return grouped;\n}\nconst THRESHOLD = 5;\nconst GridWithGroups = ({groups,gene_id,doGrin}) => {\n const [rowData, setRowData] = useState(groups);\n\n const initialExpanded = {};\n rowData.forEach((row) => {\n if (row.summary) {\n initialExpanded[row.group] = (row.tally < THRESHOLD);\n }\n });\n const [expandedGroups, setExpandedGroups] = useState(initialExpanded);\n\n\n // Toggle group visibility\n const toggleGroup = (group) => {\n setExpandedGroups((prevExpandedGroups) => ({\n ...prevExpandedGroups,\n [group]: !prevExpandedGroups[group], // Toggle the group's state\n }));\n };\n\n // Filter the data to show/hide rows based on the expanded group state\n const getVisibleRowData = () => {\n const visibleRows = [];\n rowData.forEach((row) => {\n if (row.summary) {\n if (row.tally > 1) {\n visibleRows.push(row);\n }\n } else if (expandedGroups[row.group]) {\n visibleRows.push(row); // Show non-summary rows if the group is expanded\n }\n });\n return visibleRows;\n };\n\n // Define columns with a custom renderer for the summary rows\n const columnDefs = [\n { field: 'pop', headerName: 'Study/Population', flex: 1, minWidth: 120,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'conseq', headerName: 'VEP consequence', flex: 1, minWidth: 130,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'status', headerName: 'Allele status', flex: 1, minWidth: 100,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'accession', headerName: doGrin ? 'Order Germplasm' : 'Accession', flex: 1, minWidth: 140,\n headerComponent: (props) => {\n return (\n <div style={{display: 'flex', alignItems: 'center'}}>\n {doGrin && <i className=\"fas fa-shopping-cart\">&nbsp;</i>}\n <span>{props.displayName}</span>\n </div>\n );\n }, // Use the custom header with the shopping cart icon\n cellRenderer: (params) => {\n if (params.value) {\n return <AccessionLink germplasm={params.value.germplasm} gene_id={gene_id} />;\n }\n if (params.data.summary) {\n return (\n <span\n onClick={() => toggleGroup(params.data.group)}\n >\n {params.data.tally} Accessions {expandedGroups[params.data.group] ? '▼' : '▶'}\n </span>\n );\n }\n return null;\n }\n },\n { field: 'synonym', headerName: 'Synonym', filter:false, sortable:false, flex: 1, minWidth: 110, cellRenderer: (params) => {\n if (params.data.accession) {\n return params.data.accession.germplasm.ens_id\n }\n return null;\n }},\n { field: 'subpop', headerName: 'Subpopulation', filter:false, sortable: false, flex: 1, minWidth: 110, cellRenderer: (params) => {\n if (params.data.accession && params.data.accession.germplasm.subpop && params.data.accession.germplasm.subpop !== \"?\") {\n return params.data.accession.germplasm.subpop\n }\n return null;\n }},\n { field: 'search', headerName: 'All LOF Genes', sortable:false, filter:false, flex: 1, minWidth: 100,\n cellRenderer: (params) => {\n if (params.data.accession) {\n const currentURL = new URL(window.location.href);\n const accession = params.data.accession;\n currentURL.search = '';\n currentURL.searchParams.set('category', 'Germplasm');\n currentURL.searchParams.set('fq_field', `VEP__merged__${accession.pop.type}__attr_ss`);\n currentURL.searchParams.set('fq_value', accession.germplasm.ens_id);\n currentURL.searchParams.set('name', accession.germplasm.ens_id);\n\n return <Button size='sm' href={currentURL.toString()}>Search</Button>\n\n }\n return null;\n }\n }\n ];\n\n const defaultColDef = {\n sortable: true,\n filter: \"agTextColumnFilter\",\n cellStyle: (params) => {\n if (params.data.summary) {\n return {cursor: 'pointer'};\n }\n return null;\n }\n };\n\n const nVisible = getVisibleRowData().length;\n const tableHeight = 50 + Math.min(nVisible, 10) * 42;\n return (\n <div style={{ overflowX: \"auto\", width: \"100%\", maxWidth: \"1200px\" }}>\n <div\n className=\"ag-theme-quartz\"\n style={{ height: tableHeight, minWidth: \"810px\", width: \"100%\" }}\n >\n <AgGridReact\n rowData={getVisibleRowData()}\n columnDefs={columnDefs}\n getRowNodeId={(data) => data.id}\n animateRows={true}\n defaultColDef={defaultColDef}\n />\n </div>\n </div>\n );\n};\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n if (props.grameneConsequences && props.grameneConsequences[gene._id] && props.grameneGermplasm) {\n const groups = group_germplasm(gene, props.grameneGermplasm, props.grameneConsequences[gene._id]);\n\n return <div>\n <h5>Predicted loss-of-function alleles were detected in these germplasm.</h5>\n <div >Explore other variants within this gene in the <a target=\"_blank\"\n href={`${props.configuration.ensemblURL}/${gene.system_name}/Gene/Variation_Gene/Image?db=core;g=${props.searchResult.id}`}>\n Variant image</a> page in the Ensembl genome browser.</div>\n <GridWithGroups groups={...groups} gene_id={gene._id} doGrin={!props.configuration.hasOwnProperty('noGRIN')}/>\n </div>\n } else {\n props.doRequestVEP(gene._id);\n return <pre>loading</pre>;\n }\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneConsequences',\n 'selectGrameneGermplasm',\n 'doRequestVEP',\n Detail\n);\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n <td className=\"xref-name-col\">{db}</td>\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n </tr>\n );\n }\n}\n\nfunction formatXrefsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n return gene.xrefs\n .filter(xr => dbxrefs.isKnown(xr.db) && xr.db !== \"PUBMED\")\n .sort()\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\n\nconst Xrefs = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Cross-references</Title>\n <Description key=\"description\">References to this gene in other databases:</Description>\n <Content key=\"content\">\n <table className=\"xrefs table\">\n <thead>\n <tr>\n <th className=\"xref-name-col\">Database</th>\n <th className=\"xref-value-col\">IDs and links</th>\n </tr>\n </thead>\n <tbody>\n {formatXrefsForGene(geneDocs[searchResult.id])}\n </tbody>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Xrefs;\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n {/*<td className=\"xref-name-col\">{db}</td>*/}\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n <td className=\"xref-name-col\">{this.props.source}</td>\n <td className=\"xref-value-col\">{this.props.text}</td>\n </tr>\n );\n }\n}\n\nfunction formatPubsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n let pubs = gene.xrefs.filter(xr => xr.db === \"PUBMED\");\n if (pubs.length === 0) {\n return <tr><td colSpan={3}>No publications found.</td></tr>\n }\n return pubs.sort((a,b) => {\n if (a.source) {\n if (b.source) {\n if (a.source < b.source) {\n return -1;\n }\n if (a.source > b.source) {\n return 1;\n }\n }\n else {\n return -1;\n }\n }\n else if (b.source) {\n return 1;\n }\n if (a.db < b.db) {\n return -1;\n }\n if (a.db > b.db) {\n return 1;\n }\n return 0;\n })\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\nconst formURL = 'https://docs.google.com/forms/d/e/1FAIpQLSey-xPyTysdd9c2phXT6kcbjEDeCppG4dLG7LjZCeLpx_KGog/viewform?usp=pp_url&entry.1266455249=';\nconst Publications = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Curated publications</Title>\n <Description key=\"description\">Functions described in the literature:</Description>\n <Content key=\"content\">\n <table className=\"xrefs xrefs-pubs table\">\n <thead>\n <tr>\n <th className=\"xref-10-col\">PubMed link</th>\n <th className=\"xref-10-col\">Curation source</th>\n <th className=\"xref-80-col\">Title/Description</th>\n </tr>\n </thead>\n <tbody>\n {formatPubsForGene(geneDocs[searchResult.id])}\n </tbody>\n <tfoot>\n <tr>\n <th colSpan={3}>Submit a gene function <a target=\"_blank\" href={formURL + searchResult.id}>here</a></th>\n </tr>\n </tfoot>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Publications;\n\n","import React, { useState, useEffect } from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Container, Row, Col, ToggleButton, ButtonGroup } from 'react-bootstrap';\nimport { AiOutlineCopy } from 'react-icons/ai';\nimport './sequences.css';\nimport keyBy from \"lodash/keyBy\";\n\nconst CodeBlock = props => {\n const plainFasta = `>${props.id}\\n${props.seq}`\n\n const [showNotification, setShowNotification] = useState(false);\n\n const copyCode = () => {\n // Use the Clipboard API to write text to the clipboard\n navigator.clipboard.writeText(plainFasta)\n .then(() => {\n setShowNotification(true);\n })\n .catch((err) => {\n console.error('Unable to copy to clipboard', err);\n });\n };\n\n useEffect(() => {\n if (showNotification) {\n const notificationTimeout = setTimeout(() => {\n setShowNotification(false);\n }, 2000); // Hide the notification after 2 seconds\n\n return () => clearTimeout(notificationTimeout);\n }\n }, [showNotification]);\n\n return (\n <div className=\"fasta-container\">\n <code className=\"fasta\"><span className=\"header\">&gt;{props.id}</span><br/>{\n props.blocks.map((block,idx) =>\n <span key={idx} className={block.kind}>{block.seq}</span>\n )\n }</code>\n <p className=\"fasta-key\">\n <b>Key:</b>&nbsp;5'UTR&nbsp;\n <span className=\"square-utr5\">&nbsp;&nbsp;</span>\n &nbsp;CDS&nbsp;\n <span className=\"square-cds\">&nbsp;&nbsp;</span>\n &nbsp;3'UTR&nbsp;\n <span className=\"square-utr3\">&nbsp;&nbsp;</span>\n </p>\n <button className=\"copy-button\" onClick={copyCode}><AiOutlineCopy /></button>\n {showNotification && <div className=\"notification\">Sequence copied</div>}\n </div>\n );\n};\n\nconst decoratePeptide = (seq, transcript) => {\n let junctions = [];\n if (transcript.exon_junctions) {\n transcript.exon_junctions.forEach((ej, idx) => {\n if (ej > transcript.cds.start && ej <= transcript.cds.end) {\n junctions.push(Math.floor((ej - transcript.cds.start) / 3));\n }\n });\n }\n if (junctions.length === 0) {\n return [{kind:'cds', seq:seq}];\n }\n let offset = 0;\n let blocks = [];\n junctions.forEach((j, idx) => {\n let kind = idx % 2 === 0 ? \"cds\" : \"cds-other\";\n blocks.push({kind: kind, seq: seq.substring(offset, j)});\n offset = j;\n });\n blocks.push({kind: junctions.length % 2 === 0 ? \"cds\" : \"cds-other\", seq: seq.substring(junctions.pop())});\n return blocks;\n}\nconst decorateSeq = (geneSeq, gene, up, down, tid, mode) => {\n // return a list of blocks with kind and seq properties\n let blocks = [];\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n const offset = gene.location.strand === 1\n ? gene.location.start - geneSeq.start\n : geneSeq.end - gene.location.end\n if (up > 0) {\n const TSS = gene.gene_structure.exons.find(exon => exon.id === transcript.exons[0]).start;\n blocks.push({\n kind:'upstream',\n seq: geneSeq.seq.substring(offset - up + TSS - 1, offset + TSS - 1).toLowerCase()\n })\n }\n // add exons and introns based on tid\n let pos_in_transcript = 0;\n let pos_in_gene = 0;\n let blockType = 'utr5';\n let extra = '';\n transcript.exons.forEach((eid, e_idx) => {\n const exon = gene.gene_structure.exons.find(exon => exon.id === eid);\n if (e_idx > 0 && mode === \"dna\") {\n blocks.push({\n kind: 'intron',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + exon.start - 1).toLowerCase()\n });\n pos_in_gene = exon.start-1;\n }\n if (mode === \"rna\") {\n extra = e_idx % 2 === 1 ? '-other' : '';\n }\n let exon_length = exon.end - exon.start + 1;\n if (transcript.cds && pos_in_transcript < transcript.cds.start && pos_in_transcript + exon_length >= transcript.cds.start) {\n // CDS starts in this exon\n const utr5_len = transcript.cds.start - pos_in_transcript - 1;\n if (utr5_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + utr5_len)\n });\n exon_length -= utr5_len;\n pos_in_gene += utr5_len;\n pos_in_transcript = transcript.cds.start - 1;\n }\n blockType = 'cds';\n }\n if (blockType === 'cds' && pos_in_transcript + exon_length >= transcript.cds.end) {\n // CDS ends in this exon\n const cds_len = transcript.cds.end - pos_in_transcript;\n if (cds_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + cds_len)\n });\n exon_length -= cds_len;\n pos_in_gene += cds_len;\n pos_in_transcript = transcript.cds.end;\n }\n blockType = 'utr3';\n }\n if (exon_length > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + exon_length)\n })\n }\n pos_in_gene = exon.end;\n pos_in_transcript += exon_length;\n })\n // check if there's more to the gene locus after end of transcript?\n // downstream is currently relative to end of transcript but upstream is relative to first TSS\n if (down > 0) {\n blocks.push({\n kind:'downstream',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + down).toLowerCase()\n })\n }\n return blocks;\n};\nconst buildId = (gene, geneSeq, up, down) => {\n let gs = gene.location.strand === 1 ? gene.location.start - up : gene.location.start - down;\n let ge = gene.location.strand === 1 ? gene.location.end + down : gene.location.end + up;\n let extras = [];\n if (gene.location.strand === -1) {\n extras.push('reverse')\n }\n if (up > 0) {\n extras.push(`upstream=${up}`)\n }\n if (down > 0) {\n extras.push(`downstream=${down}`)\n }\n return `${geneSeq.genome}|${gene._id}|${gene.location.region}:${gs}..${ge} ${extras.join('|')}`\n};\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [tab, setTab] = useState('dna');\n const [upstream, setUpstream] = useState(0);\n const [downstream, setDownstream] = useState(0);\n const [tid, setTid] = useState(gene.gene_structure.canonical_transcript);\n let geneSeq;\n let rnaSeq;\n let pepSeq;\n if (props.geneSequences && props.geneSequences[gene._id]) {\n geneSeq = props.geneSequences[gene._id];\n }\n else {\n props.doRequestGeneSequence(gene)\n return <pre>loading</pre>;\n }\n if (props.rnaSequences && props.rnaSequences[tid]) {\n rnaSeq = props.rnaSequences[tid]\n }\n else {\n props.doRequestRnaSequence(tid, gene)\n return <pre>loading</pre>;\n }\n const maxUp = gene.location.strand === 1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const maxDown = gene.location.strand === -1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n let tl_id;\n if (transcript.translation) {\n tl_id = transcript.translation.id;\n if (props.pepSequences && props.pepSequences[tl_id]) {\n pepSeq = props.pepSequences[tl_id];\n }\n else {\n props.doRequestPepSequence(tl_id, gene);\n return <pre>loading</pre>;\n }\n }\n return <Tabs activeKey={tab}\n onSelect={(k) => setTab(k)}\n >\n <Tab tabClassName=\"dna\" eventKey=\"dna\" title=\"Genomic sequence\">\n <Container style={{ maxWidth: '100ch', marginLeft: 0}}>\n <Row>\n <Col><b><i>Show flanking sequence</i></b></Col>\n </Row>\n <div className=\"flanking-guide\">\n <span className=\"flanking-label-left\">Upstream</span>\n <div className=\"horizontal-line\"/>\n <span className=\"flanking-center-label\">Transcript (unspliced)</span>\n <div className=\"horizontal-line\"/>\n <span className=\"flanking-label-right\">Downstream</span>\n\n <span className=\"flanking-value-left\">{upstream}</span>\n <Form.Range\n className=\"reverse-slide\"\n style={{width: '60px'}}\n value={upstream}\n onChange={(e) => setUpstream(e.target.value)}\n min={0}\n max={maxUp}\n step={10}\n />\n <span/>\n <Form.Range\n style={{width: '60px'}}\n value={downstream}\n onChange={(e) => setDownstream(e.target.value)}\n min={0}\n max={maxDown}\n step={10}\n />\n <span className=\"flanking-value-right\">{downstream}</span>\n </div>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Highlight transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={buildId(gene,geneSeq,+upstream,+downstream)} seq={geneSeq.seq.substring(maxUp - +upstream, maxUp + gene.location.end - gene.location.start + 1 + +downstream)} blocks={decorateSeq(geneSeq,gene,+upstream,+downstream,tid,\"dna\")}/>}\n </Tab>\n <Tab tabClassName=\"rna\" eventKey=\"rna\" title=\"Transcript sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tid} seq={rnaSeq.seq} blocks={decorateSeq(geneSeq,gene,0,0,tid,\"rna\")}/>}\n </Tab>\n {gene.biotype === \"protein_coding\" &&\n <Tab tabClassName=\"pep\" eventKey=\"pep\" title=\"Peptide sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tl_id} seq={pepSeq.seq} blocks={decoratePeptide(pepSeq.seq,transcript)}/>}\n </Tab>}\n </Tabs>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGeneSequences',\n 'selectRnaSequences',\n 'selectPepSequences',\n 'doRequestGeneSequence',\n 'doRequestRnaSequence',\n 'doRequestPepSequence',\n Detail\n);\n\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport Vis from \"gramene-search-vis\"\nimport Selection from './selection.js'\nimport '../../../node_modules/gramene-search-vis/styles/main.less';\n\nclass TaxDist extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapseEmpties: true,\n comparaOnly: true,\n showCompara: props.configuration.hasOwnProperty('partialCompara')\n };\n }\n handleSelection(selections) {\n this.setState({selections})\n }\n handleHighlight(highlight) {\n this.setState({highlight})\n }\n handleFilter() {\n this.setState({selections:null})\n }\n toggleEmpties() {\n this.setState({collapseEmpties: !this.state.collapseEmpties})\n }\n toggleCompara() {\n this.setState({comparaOnly: !this.state.comparaOnly})\n }\n render() {\n let selectedTaxa = {};\n if (this.props.grameneSearch) {\n if (this.state.collapseEmpties) {\n this.props.grameneSearch.facet_counts.facet_fields.taxon_id.filter((tid, idx) => idx % 2 === 0).forEach(tid => {\n selectedTaxa[tid] = true;\n })\n } else {\n if (Object.keys(this.props.grameneGenomes.active).length === 0 && this.props.grameneMaps) {\n Object.keys(this.props.grameneMaps).forEach(tid => selectedTaxa[tid] = true);\n } else {\n Object.keys(this.props.grameneGenomes.active).forEach(tid => selectedTaxa[tid]= true);\n }\n }\n if (this.state.showCompara && this.state.comparaOnly && this.props.grameneMaps) {\n Object.keys(selectedTaxa).forEach(tid => {\n if (!this.props.grameneMaps[tid].in_compara) {\n delete selectedTaxa[tid];\n }\n })\n }\n }\n return (\n <div className=\"results-vis big-vis\">\n {this.props.grameneTaxDist && <span>\n <button type=\"button\"\n className=\"btn btn-outline-primary btn-sm\"\n onClick={this.toggleEmpties.bind(this)}>\n {this.state.collapseEmpties ? 'Expand' : 'Collapse'} empty branches\n </button>\n {this.state.showCompara && <button type=\"button\"\n className=\"btn btn-outline-success btn-sm\"\n onClick={this.toggleCompara.bind(this)}>\n Show {this.state.comparaOnly ? 'all genomes' : 'only genomes in gene trees'}\n </button>\n }\n </span>}\n {this.props.grameneTaxDist && <Vis taxonomy={this.props.grameneTaxDist}\n selectedTaxa={selectedTaxa}\n onSelection={this.handleSelection.bind(this)}\n onHighlight={this.handleHighlight.bind(this)}\n />}\n {this.renderSelection()}\n </div>\n );\n }\n renderSelection() {\n if (this.state.selections && this.props.grameneTaxDist) {\n return <Selection taxonomy={this.props.grameneTaxDist}\n selectedTaxa={{}}\n selections={this.state.selections}\n onFilter={this.handleFilter.bind(this)}/>\n }\n }\n}\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneTaxDist',\n 'selectGrameneGenomes',\n 'selectGrameneSearch',\n 'selectGrameneMaps',\n TaxDist\n);\n","import React from 'react';\nimport numeral from 'numeral';\nimport _ from \"lodash\";\n\nimport {Table, Button, Badge} from 'react-bootstrap';\nimport {connect} from \"redux-bundler-react\";\n\nfunction selectionStats(selections, taxonomy) {\n const selectionData = getSelectionData(selections, taxonomy);\n const totalGeneResults = taxonomy.model.results.count;\n const fq = fqFromSelections(selections);\n\n return {\n selectedGenes: selectionData.resultsCount,\n totalGeneResults,\n fq,\n numSelectedBins: selectionData.binsCount,\n proportionGenesSelected: selectionData.resultsCount / totalGeneResults\n }\n}\n\nfunction getSelectionData(selection, taxonomy) {\n return _.reduce(selection, (countAcc, sel) => {\n const bins = taxonomy.getBins(sel.binFrom.idx, sel.binTo.idx);\n countAcc.binsCount += bins.length;\n countAcc.resultsCount += _.reduce(bins, (acc, bin) => acc + bin.results.count, 0);\n return countAcc;\n }, {resultsCount: 0, binsCount: 0});\n}\n\nconst selectionToSolrRange = (sel)=>`[${sel.binFrom.idx} TO ${sel.binTo.idx}]`;\n\nfunction fqFromSelections(selections) {\n const rangeStrings = selections.map(selectionToSolrRange);\n return `fixed_1000__bin:(${rangeStrings.join(' ')})`;\n}\n\nconst Selections = ({selections, taxonomy, doAcceptGrameneSuggestion, onFilter}) => {\n const stats = selectionStats(selections, taxonomy);\n\n const setFilter = () => {\n doAcceptGrameneSuggestion({\n category: 'Selections',\n fq_field: 'fixed_1000__bin',\n fq_value: `(${selections.map(selectionToSolrRange).join(' ')})`,\n name: `${selections.length} region${selections.length === 1 ? '':'s'}`\n });\n onFilter();\n };\n\n const formatProportion = (prop) => '(' + (_.isFinite(prop) ? numeral(prop).format('0.0%') : undefined) + ')';\n\n return (\n <div>\n <Table>\n <tbody>\n <tr>\n <th>Number of selected genes</th>\n <td>{stats.selectedGenes} {formatProportion(stats.proportionGenesSelected)}</td>\n <td><Button size='sm' onClick={setFilter}>selections&nbsp;|<Badge>{stats.selectedGenes}</Badge></Button>\n </td>\n </tr>\n </tbody>\n </Table>\n </div>\n )\n};\n\nexport default connect(\n 'doAcceptGrameneSuggestion',\n Selections\n);\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Alert, Container, Row, Card, CardGroup} from 'react-bootstrap'\nimport './genes.css'\n\nconst examples = [\n {\n subsite: {\n maize:1,\n sorghum:1,\n main:1,\n },\n text: \"What are the orthologs of Arabidopsis thaliana's PAD4 gene in Andropogoneae?\",\n filters: {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 5,\n children: [\n {\n fq_field: 'homology__all_orthologs',\n fq_value: 'AT3G52430',\n name: 'Orthologs of PAD4',\n category: 'Gene Tree',\n leftIdx:1,\n rightIdx:2,\n negate: false,\n marked: false\n },\n {\n fq_field: 'taxonomy__ancestors',\n fq_value: 147429,\n name: 'Andropogoneae',\n category: 'Taxonomy',\n leftIdx:3,\n rightIdx:4,\n negate: false,\n marked: false\n }\n ]\n }\n },\n {\n subsite: {\n grapevine:1\n },\n text: \"What are the orthologs of Arabidopsis thaliana's PAD4 gene in rosids?\",\n filters: {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 5,\n children: [\n {\n fq_field: 'homology__all_orthologs',\n fq_value: 'AT3G52430',\n name: 'Orthologs of PAD4',\n category: 'Gene Tree',\n leftIdx:1,\n rightIdx:2,\n negate: false,\n marked: false\n },\n {\n fq_field: 'taxonomy__ancestors',\n fq_value: 71275,\n name: 'rosids',\n category: 'Taxonomy',\n leftIdx:3,\n rightIdx:4,\n negate: false,\n marked: false\n }\n ]\n }\n }\n];\nconst HelpDemo = ({configuration,doReplaceGrameneFilters}) => (\n <Container fluid style={{padding: '40px'}}>\n <Row>\n <h3>Search Features</h3>\n </Row>\n <Row>\n <CardGroup style={{width:'80%'}}>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Suggestions</Card.Title>\n <Card.Text>Matching terms are provided as you type:</Card.Text>\n <div className='gene-search-pic-sugg'/>\n </Card.Body>\n </Card>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Visualization</Card.Title>\n <Card.Text>See the distribution of results across all genomes:</Card.Text>\n <div className='gene-search-pic-results'/>\n </Card.Body>\n </Card>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Gene tree view</Card.Title>\n <Card.Text>Explore evolutionary history of a gene family:</Card.Text>\n <div className='gene-search-pic-genetree'/>\n </Card.Body>\n </Card>\n </CardGroup>\n </Row>\n <Row>\n <h4>For Example</h4>\n </Row>\n <Row>\n <small>\n You can ask sophisticated questions about the genes:<br/>\n <ul>\n {examples.filter(e => !!e.subsite[configuration.id]).map((e,idx) => (\n <li key={idx}><a onClick={() => doReplaceGrameneFilters(e.filters)}>{e.text}</a></li>\n ))}\n </ul>\n </small>\n </Row>\n </Container>\n);\n\nexport default connect(\n 'selectConfiguration',\n 'doReplaceGrameneFilters',\n HelpDemo\n);\n\n","import { connect } from 'redux-bundler-react'\n\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport StatsByGroup from \"./StatsByGroup\";\n\n\nclass GeneAttribs extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n render() {\n if (this.props.grameneGeneAttribs && this.props.grameneSearch) {\n const groups = this.props.grameneGeneAttribs;\n const stats = this.props.grameneSearch.stats;\n return <StatsByGroup groups={groups} stats={stats} />;\n }\n return null;\n }\n}\n\nexport default connect(\n 'selectGrameneSearch',\n 'selectGrameneGeneAttribs',\n GeneAttribs\n);\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\n\n/**\n * StatsByGroup\n *\n * Props:\n * - groups: {\n * [groupName: string]: Array<{\n * name: string,\n * description: string,\n * dtype: \"i\" | \"f\",\n * fieldName: string\n * }>\n * }\n * - stats: {\n * stats_fields: {\n * [fieldName: string]: {\n * min?: number,\n * max?: number,\n * count?: number,\n * mean?: number,\n * stddev?: number,\n * percentiles?: (string | number)[] // [\"10.0\", v10, \"20.0\", v20, ...] (order preserved)\n * }\n * }\n * }\n *\n * Columns: attr, desc, mean, stddev, min, max, count, dist\n */\nexport default function StatsByGroup({ groups, stats }) {\n const fields = stats?.stats_fields || {};\n\n return (\n <div style={{ fontFamily: \"system-ui, -apple-system, Segoe UI, Roboto, sans-serif\", lineHeight: 1.35 }}>\n {Object.entries(groups).map(([groupName, attrs]) => (\n <GroupTable\n key={groupName}\n groupName={groupName}\n attributes={attrs}\n fields={fields}\n />\n ))}\n </div>\n );\n}\n\nfunction GroupTable({ groupName, attributes, fields }) {\n const hasAny = attributes?.some((a) => fields[a.fieldName]);\n\n const columns = useMemo(\n () => [\n { key: \"attr\", label: \"Attribute\", min: 120 },\n { key: \"desc\", label: \"Description\", min: 380, flex: true },\n { key: \"mean\", label: \"Mean\", min: 100 },\n { key: \"stddev\", label: \"Std Dev\", min: 110 },\n { key: \"min\", label: \"Min\", min: 90 },\n { key: \"max\", label: \"Max\", min: 90 },\n { key: \"count\", label: \"Count\", min: 90 },\n { key: \"dist\", label: \"Distribution\",min: 220 },\n ],\n []\n );\n\n const initial = useMemo(\n () => columns.map((c) => (c.flex ? Math.max(380, c.min) : c.min)),\n [columns]\n );\n\n const { colWidths, startResize, resizing } = useResizableColumns({\n initialWidths: initial,\n minWidths: columns.map((c) => c.min || 60),\n });\n\n const nfInt = useMemo(() => new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 0 }), []);\n const nfFloat = useMemo(\n () => new Intl.NumberFormat(\"en-US\", { minimumFractionDigits: 0, maximumFractionDigits: 3 }),\n []\n );\n\n return (\n <section style={{ marginBottom: 24 }}>\n <header style={{ display: \"flex\", alignItems: \"baseline\", gap: 12, marginBottom: 8 }}>\n <h2 style={{ margin: 0, fontSize: 18 }}>{groupName}</h2>\n {!hasAny && <span style={{ fontSize: 12, color: \"#666\" }}>No stats available for this group.</span>}\n </header>\n\n <div\n style={{\n overflowX: \"auto\",\n border: \"1px solid #eee\",\n borderRadius: 8,\n boxShadow: \"0 1px 2px rgba(0,0,0,0.04)\",\n }}\n >\n <table style={tableStyle}>\n <colgroup>\n {colWidths.map((w, i) => (\n <col key={i} style={{ width: w }} />\n ))}\n </colgroup>\n\n <thead>\n <tr>\n {columns.map((col, i) => (\n <ResizableTh\n key={col.key}\n label={col.label}\n index={i}\n onResizeStart={startResize}\n />\n ))}\n </tr>\n </thead>\n\n <tbody>\n {attributes.map((a) => {\n const s = fields[a.fieldName] || {};\n return (\n <tr key={a.fieldName}>\n <Td mono title={a.fieldName}>{a.name}</Td>\n <Td title={a.description}>{a.description}</Td>\n <Td align=\"right\">{fmtValue(s.mean, a.dtype, true, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.stddev, a.dtype, true, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.min, a.dtype, false, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.max, a.dtype, false, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtCount(s.count, nfInt)}</Td>\n <Td>\n <PercentileHeatmapNormalized\n percentilesArr={s.percentiles}\n min={s.min}\n max={s.max}\n />\n </Td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n <div style={{ marginTop: 6, fontSize: 12, color: \"#666\" }}>\n <em>Tip:</em> Drag the divider at the right edge of any header to resize.\n {resizing && <span style={{ marginLeft: 8, color: \"#999\" }}>(resizing…)</span>}\n </div>\n </section>\n );\n}\n\n/* ===================== Percentiles / Heatmap ===================== */\n\n/**\n * Convert alternating array into ordered pairs: [[\"10.0\", v10], [\"20.0\", v20], ...]\n * - Preserves the exact order provided by Solr\n */\nfunction percentilesArrayToPairs(arr) {\n if (!Array.isArray(arr)) return [];\n const out = [];\n for (let i = 0; i < arr.length - 1; i += 2) {\n out.push([String(arr[i]), arr[i + 1]]);\n }\n return out;\n}\n\nfunction normalizeBetween(value, min, max) {\n if (!isFinite(min) || !isFinite(max) || max <= min || !isFinite(value)) return null;\n return (value - min) / (max - min);\n}\n\n// White -> Blue (0 -> 1)\nfunction rgbWhiteToBlue(vNorm) {\n const t = clamp01(vNorm);\n const rg = Math.round(255 * (1 - t));\n return `rgb(${rg}, ${rg}, 255)`;\n}\nfunction clamp01(x) {\n if (typeof x !== \"number\" || !isFinite(x)) return 0;\n return Math.max(0, Math.min(1, x));\n}\nfunction fmtFloat(v) {\n if (v == null || !isFinite(v)) return \"n/a\";\n return v.toFixed(3);\n}\n\n/**\n * PercentileHeatmapNormalized\n * - Infers bins from percentilesArr (order preserved)\n * - Colors normalized by row min/max\n */\nfunction PercentileHeatmapNormalized({ percentilesArr, min, max }) {\n const pairs = useMemo(() => percentilesArrayToPairs(percentilesArr), [percentilesArr]);\n const n = pairs.length || 1; // avoid zero columns\n const validScale = isFinite(min) && isFinite(max) && max > min;\n\n return (\n <div style={{ ...heatRowDynamic, gridTemplateColumns: `repeat(${n}, 1fr)` }}>\n {pairs.map(([pStr, raw], idx) => {\n const rawNum = typeof raw === \"number\" && isFinite(raw) ? raw : null;\n const norm = rawNum == null ? null : (validScale ? normalizeBetween(rawNum, min, max) : null);\n const bg = norm == null ? \"#f2f2f2\" : rgbWhiteToBlue(norm);\n const label = `${pStr} → raw ${fmtFloat(rawNum)} (norm ${fmtFloat(norm)})`;\n return <HeatCell key={`${pStr}-${idx}`} background={bg} label={label} />;\n })}\n </div>\n );\n}\n\nfunction HeatCell({ background, label }) {\n const [hover, setHover] = useState(false);\n return (\n <div\n style={{ ...heatCell, background }}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n title={label}\n >\n {hover && <span style={popover}>{label}</span>}\n </div>\n );\n}\n\n/* ===================== Resizable columns ===================== */\n\nfunction useResizableColumns({ initialWidths, minWidths }) {\n const [colWidths, setColWidths] = useState(initialWidths);\n const [resizing, setResizing] = useState(false);\n const activeRef = useRef(null); // { index, startX, startW }\n\n useEffect(() => {\n if (initialWidths?.length) setColWidths(initialWidths);\n }, [initialWidths?.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const onMouseMove = (e) => {\n if (!activeRef.current) return;\n const { index, startX, startW } = activeRef.current;\n const dx = e.clientX - startX;\n const next = [...colWidths];\n const minW = minWidths?.[index] ?? 60;\n next[index] = Math.max(minW, startW + dx);\n setColWidths(next);\n };\n\n const endResize = () => {\n activeRef.current = null;\n setResizing(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", endResize);\n };\n\n const startResize = (index, ev) => {\n const startX = ev.clientX;\n const startW = colWidths[index];\n activeRef.current = { index, startX, startW };\n setResizing(true);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", endResize);\n };\n\n useEffect(() => {\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", endResize);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return { colWidths, setColWidths, startResize, resizing };\n}\n\nfunction ResizableTh({ label, index, onResizeStart }) {\n return (\n <th style={thStyle}>\n <div style={{ position: \"relative\", width: \"100%\" }}>\n <span>{label}</span>\n <span\n onMouseDown={(e) => onResizeStart(index, e)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n title=\"Drag to resize column\"\n style={resizerStyle}\n />\n </div>\n </th>\n );\n}\n\n/* ===================== Formatting helpers ===================== */\n\nfunction fmtCount(v, nfInt) {\n if (v === null || v === undefined) return \"—\";\n return nfInt.format(v);\n}\n\nfunction fmtValue(v, dtype = \"f\", isStat = false, nfInt, nfFloat) {\n if (v === null || v === undefined || Number.isNaN(v)) return \"—\";\n const isIntType = dtype === \"i\";\n return isIntType && !isStat ? nfInt.format(v) : nfFloat.format(v);\n}\n\n/* ===================== Cells & Styles ===================== */\n\nfunction Td({ children, align = \"left\", mono = false, title }) {\n return (\n <td\n title={title}\n style={{\n ...cellBase,\n textAlign: align,\n borderBottom: \"1px solid #eee\",\n padding: \"8px 10px\",\n fontFamily: mono ? \"ui-monospace, SFMono-Regular, Menlo, monospace\" : undefined,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n verticalAlign: \"top\",\n }}\n >\n {children}\n </td>\n );\n}\n\nconst tableStyle = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n tableLayout: \"fixed\",\n minWidth: 980,\n};\n\nconst cellBase = {\n fontSize: 13,\n lineHeight: 1.35,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n};\n\nconst thStyle = {\n ...cellBase,\n textAlign: \"left\",\n borderBottom: \"1px solid #ddd\",\n background: \"#fafafa\",\n fontWeight: 600,\n padding: \"10px 10px\",\n position: \"relative\",\n};\n\nconst resizerStyle = {\n position: \"absolute\",\n right: -5,\n top: 0,\n height: \"100%\",\n width: 10,\n cursor: \"col-resize\",\n boxShadow: \"inset -1px 0 0 rgba(0,0,0,0.08)\",\n};\n\nconst heatRowDynamic = {\n display: \"grid\",\n gap: 2,\n alignItems: \"center\",\n width: \"100%\",\n minWidth: 200,\n};\n\nconst heatCell = {\n height: 16,\n borderRadius: 3,\n position: \"relative\",\n boxShadow: \"inset 0 0 0 1px rgba(0,0,0,0.06)\",\n};\n\nconst popover = {\n position: \"absolute\",\n left: \"50%\",\n top: -26,\n transform: \"translateX(-50%)\",\n padding: \"2px 6px\",\n fontSize: 11,\n background: \"rgba(0,0,0,0.8)\",\n color: \"#fff\",\n borderRadius: 4,\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n};\n","import React from \"react\";\nimport { connect } from 'redux-bundler-react'\nimport { Modal, Button } from \"react-bootstrap\";\nimport { BsChevronDown, BsChevronRight } from \"react-icons/bs\";\n\n// name → subtle background colour. Checked against node.name at render time.\nconst CLADE_COLORS = {\n \"Chlorophyta\": \"#e8f5e9\",\n \"Bryophyta\": \"#f1f8e9\",\n \"Liliopsida\": \"#fff8e1\", // monocots\n \"eudicotyledons\": \"#fce4ec\",\n \"Poaceae\": \"#fff3e0\",\n \"Fabaceae\": \"#ede7f6\",\n \"Brassicaceae\": \"#e1f5fe\",\n \"Solanaceae\": \"#ffebee\",\n};\n\nfunction findRoots(tax) {\n return Object.values(tax).filter(n =>\n !n.is_a || n.is_a.length === 0 || !n.is_a.some(p => tax[p])\n );\n}\n\n// Post-order: attach .leafIds (taxon_ids of maps in subtree) and .isLeaf\nfunction annotate(node, tax, maps) {\n const leafIds = [];\n if (maps[node._id]) { node.isLeaf = true; leafIds.push(node._id); }\n (node.children || []).forEach(cid => {\n const child = tax[cid];\n if (!child) return;\n annotate(child, tax, maps);\n child.leafIds.forEach(id => leafIds.push(id));\n });\n node.leafIds = leafIds;\n}\n\n// Walk down the spine through single-child internals until a branch point,\n// leaf, or node that is itself a genome.\nfunction compressChain(node, tax, maps) {\n const chain = [node];\n let cur = node;\n while (true) {\n const kids = (cur.children || [])\n .map(cid => tax[cid])\n .filter(c => c && c.leafIds && c.leafIds.length > 0);\n if (kids.length !== 1) break;\n if (maps[cur._id]) break;\n cur = kids[0];\n chain.push(cur);\n }\n return { chain, terminal: cur };\n}\n\n// Render a breadcrumb chain. If the chain has more than 3 nodes, collapse the\n// middle into a hoverable ellipsis that reveals the hidden names on hover.\nconst CHAIN_DISPLAY_MAX = 3;\nfunction renderChain(chain) {\n const nameOf = n => n.short_name || n.name;\n if (chain.length <= CHAIN_DISPLAY_MAX) {\n return chain.map((n, i) => (\n <React.Fragment key={n._id}>\n {i > 0 && <span className=\"tax-sep\"> › </span>}\n {nameOf(n)}\n </React.Fragment>\n ));\n }\n const first = chain[0];\n const last = chain[chain.length - 1];\n const middle = chain.slice(1, -1);\n const fullTitle = chain.map(nameOf).join(' › ');\n return (\n <>\n {nameOf(first)}\n <span className=\"tax-sep\"> › </span>\n <span className=\"tax-ellipsis\" title={fullTitle}>\n <span className=\"tax-ellipsis-short\">…</span>\n <span className=\"tax-ellipsis-full\">\n {middle.map(n => (\n <React.Fragment key={n._id}>\n {nameOf(n)}\n <span className=\"tax-sep\"> › </span>\n </React.Fragment>\n ))}\n </span>\n </span>\n <span className=\"tax-sep\"> › </span>\n {nameOf(last)}\n </>\n );\n}\n\n// Drop a parent when its single child has the same name (e.g. species node\n// above a subspecies-less record that repeats the species name). The terminal\n// (last element) is always preserved; only redundant ancestors are removed.\nfunction dedupAdjacent(chain) {\n const out = [];\n for (const n of chain) {\n if (out.length && out[out.length - 1].name === n.name) {\n out[out.length - 1] = n; // keep the child, drop the parent\n } else {\n out.push(n);\n }\n }\n return out;\n}\n\n// Use the node's direct `rank` field when it carries a real value.\nfunction getRank(node) {\n const r = node && node.rank;\n return r && r !== 'no rank' ? r : null;\n}\n\n// Search nodes whose name or a synonym contains the query. Prefix matches rank higher.\nfunction searchTaxonomy(query, tax) {\n const q = query.trim().toLowerCase();\n if (!q) return [];\n const out = [];\n Object.values(tax).forEach(n => {\n const name = n.name || '';\n const nameLc = name.toLowerCase();\n if (nameLc.includes(q)) {\n out.push({ node: n, matched: name, via: 'name', prefix: nameLc.startsWith(q) });\n return;\n }\n const syns = n.synonym || [];\n for (const s of syns) {\n const sLc = s.toLowerCase();\n if (sLc.includes(q)) {\n out.push({ node: n, matched: s, via: 'synonym', prefix: sLc.startsWith(q) });\n return;\n }\n }\n });\n out.sort((a, b) =>\n (a.prefix === b.prefix ? 0 : a.prefix ? -1 : 1)\n || a.node.name.localeCompare(b.node.name)\n );\n return out.slice(0, 20);\n}\n\n// Compute the { selected, expanded } pair for a fresh modal opening:\n// selection is seeded from active genomes (or everything non-hidden),\n// and every ancestor of a selected genome is pre-expanded so the user sees\n// all of their current selections without manually drilling in.\nfunction computeOpenState(props) {\n const { grameneMaps, grameneTaxonomy, grameneGenomes } = props;\n const activeKeys = Object.keys(grameneGenomes.active || {});\n const seedAll = activeKeys.length === 0;\n const selected = new Set();\n Object.values(grameneMaps || {}).forEach(m => {\n if (m.hidden) return;\n if (seedAll || grameneGenomes.active[m.taxon_id]) selected.add(m.taxon_id);\n });\n const expanded = new Set();\n if (grameneTaxonomy) {\n selected.forEach(tid => {\n let cur = grameneTaxonomy[tid];\n const seen = new Set();\n while (cur && !seen.has(cur._id)) {\n seen.add(cur._id);\n expanded.add(cur._id);\n const pid = cur.is_a && cur.is_a[0];\n cur = pid ? grameneTaxonomy[pid] : null;\n }\n });\n }\n return { selected, expanded };\n}\n\nclass TaxonomyModal extends React.Component {\n constructor(props) {\n super(props);\n const { grameneMaps, grameneTaxonomy } = props;\n\n let roots = [];\n if (grameneTaxonomy) {\n roots = findRoots(grameneTaxonomy);\n roots.forEach(r => annotate(r, grameneTaxonomy, grameneMaps));\n }\n\n const { selected, expanded } = computeOpenState(props);\n this.state = {\n selected,\n expanded,\n roots,\n query: '',\n highlightId: null,\n activeIdx: 0,\n };\n this.rowRefs = {};\n this._matches = [];\n this._activeHitEl = null;\n }\n\n handleQueryChange(e) {\n this.setState({ query: e.target.value, activeIdx: 0 });\n }\n\n handleSearchKeyDown(e) {\n const n = this._matches.length;\n if (e.key === 'ArrowDown') {\n if (n === 0) return;\n e.preventDefault();\n this.setState({ activeIdx: Math.min(this.state.activeIdx + 1, n - 1) });\n } else if (e.key === 'ArrowUp') {\n if (n === 0) return;\n e.preventDefault();\n this.setState({ activeIdx: Math.max(this.state.activeIdx - 1, 0) });\n } else if (e.key === 'Enter') {\n if (n === 0) return;\n e.preventDefault();\n const hit = this._matches[this.state.activeIdx] || this._matches[0];\n if (hit) this.pickMatch(hit.node);\n } else if (e.key === 'Escape') {\n if (this.state.query) {\n e.preventDefault();\n this.setState({ query: '', activeIdx: 0 });\n }\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // On each hidden→shown transition, reseed selection from current active\n // genomes and expand every ancestor so selected taxa are visible.\n const wasShown = prevProps.grameneGenomes && prevProps.grameneGenomes.show;\n const isShown = this.props.grameneGenomes && this.props.grameneGenomes.show;\n if (!wasShown && isShown) {\n const { selected, expanded } = computeOpenState(this.props);\n this.setState({ selected, expanded, query: '', activeIdx: 0, highlightId: null });\n }\n // Keep the highlighted hit scrolled into view inside the dropdown.\n if (prevState.activeIdx !== this.state.activeIdx && this._activeHitEl) {\n this._activeHitEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n pickMatch(node) {\n // Expand every ancestor so the node is visible, then scroll + flash.\n const { grameneTaxonomy } = this.props;\n const expanded = new Set(this.state.expanded);\n let cur = node;\n const seen = new Set();\n while (cur && !seen.has(cur._id)) {\n seen.add(cur._id);\n expanded.add(cur._id);\n const pid = cur.is_a && cur.is_a[0];\n cur = pid ? grameneTaxonomy[pid] : null;\n }\n this.setState({ expanded, query: '', highlightId: node._id }, () => {\n const el = this.rowRefs[node._id];\n if (el && el.scrollIntoView) el.scrollIntoView({ block: 'center', behavior: 'smooth' });\n clearTimeout(this._hlTimer);\n this._hlTimer = setTimeout(() => this.setState({ highlightId: null }), 1800);\n });\n }\n\n toggleExpand(id) {\n const expanded = new Set(this.state.expanded);\n expanded.has(id) ? expanded.delete(id) : expanded.add(id);\n this.setState({ expanded });\n }\n\n toggleLeaf(taxonId) {\n const selected = new Set(this.state.selected);\n selected.has(taxonId) ? selected.delete(taxonId) : selected.add(taxonId);\n this.setState({ selected });\n }\n\n toggleSubtree(terminal) {\n const selected = new Set(this.state.selected);\n const allOn = terminal.leafIds.every(id => selected.has(id));\n terminal.leafIds.forEach(id => allOn ? selected.delete(id) : selected.add(id));\n this.setState({ selected });\n }\n\n selectAll() {\n const s = new Set();\n Object.values(this.props.grameneMaps).forEach(m => {\n if (!m.hidden) s.add(m.taxon_id);\n });\n this.setState({ selected: s });\n }\n\n selectNone() {\n this.setState({ selected: new Set() });\n }\n\n handleClose() {\n const active = {};\n this.state.selected.forEach(id => { active[id] = true; });\n if (Object.keys(active).length === 0) {\n Object.values(this.props.grameneMaps).forEach(m => {\n if (!m.hidden) active[m.taxon_id] = true;\n });\n }\n this.props.doUpdateGrameneGenomes(active);\n }\n\n renderNode(node, depth, inheritedColor) {\n const { grameneTaxonomy, grameneMaps } = this.props;\n const { selected, expanded } = this.state;\n\n const { chain: rawChain, terminal } = compressChain(node, grameneTaxonomy, grameneMaps);\n const chain = dedupAdjacent(rawChain);\n const leafIds = terminal.leafIds;\n if (leafIds.length === 0) return null;\n\n const selCount = leafIds.reduce((n, id) => n + (selected.has(id) ? 1 : 0), 0);\n const total = leafIds.length;\n const allOn = selCount === total;\n const someOn = selCount > 0 && !allOn;\n\n const visibleKids = (terminal.children || [])\n .map(cid => grameneTaxonomy[cid])\n .filter(c => c && c.leafIds.length > 0);\n const hasKids = visibleKids.length > 0;\n const terminalIsGenome = !!grameneMaps[terminal._id];\n\n const isOpen = expanded.has(terminal._id);\n\n // Deepest clade colour in the chain wins; falls back to inherited.\n const color = chain.reduce(\n (acc, n) => CLADE_COLORS[n.name] || acc,\n inheritedColor\n );\n\n const isHighlighted = rawChain.some(n => n._id === this.state.highlightId);\n\n return (\n <div\n key={terminal._id}\n className={\"tax-node\" + (isHighlighted ? \" tax-node-highlight\" : \"\")}\n style={{ background: color }}\n ref={el => {\n // Register every traversed node (including dedupped-away parents) so\n // search results targeting any ancestor still scroll to this row.\n rawChain.forEach(n => { this.rowRefs[n._id] = el; });\n }}\n >\n <div className=\"tax-row\" style={{ paddingLeft: depth * 7 }}>\n {hasKids ? (\n <span\n className=\"tax-chevron\"\n onClick={() => this.toggleExpand(terminal._id)}\n >\n {isOpen ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n ) : (\n <span className=\"tax-chevron-spacer\"/>\n )}\n\n <input\n type=\"checkbox\"\n checked={allOn}\n ref={el => { if (el) el.indeterminate = someOn; }}\n onChange={() => {\n if (hasKids) this.toggleSubtree(terminal);\n else if (terminalIsGenome) this.toggleLeaf(terminal._id);\n }}\n />\n {' '}\n <span className={hasKids ? \"tax-label tax-label-internal\" : \"tax-label\"}>\n {renderChain(chain)}\n </span>\n\n {(hasKids || terminalIsGenome) && (\n <span className=\"tax-count\"> ({selCount} / {total})</span>\n )}\n\n {hasKids && terminalIsGenome && (\n <label className=\"tax-self-leaf\">\n <input\n type=\"checkbox\"\n checked={selected.has(terminal._id)}\n onChange={() => this.toggleLeaf(terminal._id)}\n />\n <em>this genome</em>\n </label>\n )}\n </div>\n\n {hasKids && isOpen && (\n <div className=\"tax-children\">\n {visibleKids.map(c => this.renderNode(c, depth + 1, color))}\n </div>\n )}\n </div>\n );\n }\n\n render() {\n const { roots } = this.state;\n const { grameneTaxonomy, grameneMaps } = this.props;\n\n // Hide the root spine: start rendering at the first real branch point.\n const topLevel = [];\n roots.forEach(r => {\n const { terminal } = compressChain(r, grameneTaxonomy || {}, grameneMaps || {});\n (terminal.children || []).forEach(cid => {\n const child = grameneTaxonomy && grameneTaxonomy[cid];\n if (child && child.leafIds && child.leafIds.length > 0) {\n topLevel.push(child);\n }\n });\n });\n\n return (\n <Modal\n show={this.props.grameneGenomes.show}\n onHide={this.handleClose.bind(this)}\n size='lg'\n >\n <Modal.Header closeButton>\n <Modal.Title>Select Genomes of Interest</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Button variant=\"outline-secondary\" onClick={this.selectAll.bind(this)}>All</Button>{' '}\n <Button variant=\"outline-secondary\" onClick={this.selectNone.bind(this)}>None</Button>\n\n {(() => {\n this._matches = this.state.query\n ? searchTaxonomy(this.state.query, grameneTaxonomy || {})\n : [];\n const matches = this._matches;\n const activeIdx = Math.min(this.state.activeIdx, Math.max(0, matches.length - 1));\n return (\n <div className=\"tax-search\">\n <input\n type=\"text\"\n className=\"tax-search-input\"\n placeholder=\"Find taxon by name or synonym…\"\n value={this.state.query}\n onChange={this.handleQueryChange.bind(this)}\n onKeyDown={this.handleSearchKeyDown.bind(this)}\n />\n {this.state.query && (\n <div className=\"tax-search-results\">\n {matches.length === 0 ? (\n <div className=\"tax-search-empty\">No matches</div>\n ) : matches.map(({ node, matched, via }, i) => {\n const rank = getRank(node);\n const count = (node.leafIds && node.leafIds.length) || 0;\n const isLeaf = !!(grameneMaps && grameneMaps[node._id]);\n const isActive = i === activeIdx;\n return (\n <div\n key={node._id}\n ref={el => { if (isActive) this._activeHitEl = el; }}\n className={\"tax-search-hit\" + (isActive ? \" tax-search-hit-active\" : \"\")}\n onMouseDown={e => e.preventDefault()}\n onMouseEnter={() => this.setState({ activeIdx: i })}\n onClick={() => this.pickMatch(node)}\n >\n <span className=\"tax-search-name\">{node.name}</span>\n {via === 'synonym' && (\n <span className=\"tax-search-syn\"> {matched} <em>syn.</em></span>\n )}\n {rank && <span className=\"tax-search-rank\"> {rank}</span>}\n {!isLeaf && (\n <span className=\"tax-search-count\"> · {count} genome{count === 1 ? '' : 's'}</span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n })()}\n\n <div className=\"tax-tree\">\n {topLevel.map(n => this.renderNode(n, 0, null))}\n </div>\n <Button onClick={this.handleClose.bind(this)}>Submit</Button>\n </Modal.Body>\n </Modal>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n 'selectGrameneTaxonomy',\n 'doUpdateGrameneGenomes',\n TaxonomyModal\n)\n","import React, { useState, Suspense } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { Accordion, Button } from 'react-bootstrap';\nimport \"./expression.css\";\nimport Study from './Study';\nconst LazyStudy = React.lazy(() => import('./Study'));\n\nconst StudyList = props => {\n return <Accordion alwaysOpen defaultActiveKey={props.studies.length === 1 ? \"study_0\" : undefined}>\n {props.studies.map((study, idx) => {\n return (\n <Accordion.Item key={idx} eventKey={'study_'+idx}>\n <Accordion.Header>{study.description}</Accordion.Header>\n <Accordion.Body>\n {/*<Suspense fallback={<div>Loading...</div>}>*/}\n {/* <LazyStudy id={study._id}/>*/}\n {/*</Suspense>*/}\n <Study id={study._id}/>\n </Accordion.Body>\n </Accordion.Item>\n )\n })}\n </Accordion>\n};\n\nconst Expression = props => {\n let searchTaxa = {};\n if (props.grameneSearch) {\n const taxon_id_facet = props.grameneSearch.facet_counts.facet_fields.taxon_id;\n taxon_id_facet.filter((tid, idx) => idx % 2 === 0).forEach(tid => {\n if (tid > 1000000) {\n const tid2 = Math.floor(tid / 1000);\n if (props.expressionStudies[tid2]) {\n searchTaxa[tid2] = tid;\n }\n }\n else {\n searchTaxa[tid] = tid;\n }\n });\n }\n const availableTaxa = Object.keys(props.expressionStudies)\n .filter(tid => searchTaxa[tid])\n .sort((a,b) => props.grameneMaps[searchTaxa[a]].left_index - props.grameneMaps[searchTaxa[b]].left_index);\n return availableTaxa && props.grameneTaxonomy &&\n <div>\n <div>This is where you can launch a component for the selected samples. props.desiredSamples lists them.\n This component can request the data from the API\n organize samples by factor metadata? One big table with all the studies?\n <Button\n onClick={console.log(Object.keys(props.desiredSamples))}\n >Show Samples ({Object.keys(props.desiredSamples).length} selected)</Button>\n </div>\n <Accordion alwaysOpen defaultActiveKey={availableTaxa.length === 1 ? \"tax_0\" : undefined}>\n {availableTaxa.map((tid, idx) => {\n const baselineStudies = props.expressionStudies[tid].filter(study => study.type === 'Baseline');\n const n = baselineStudies.length;\n return <Accordion.Item key={idx} eventKey={'tax_'+idx}>\n <Accordion.Header>{props.grameneTaxonomy[tid].name} - {n} {n === 1 ? 'study' : 'studies'}</Accordion.Header>\n <Accordion.Body><StudyList studies={baselineStudies}/></Accordion.Body>\n </Accordion.Item>\n })}\n </Accordion>\n </div>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n Expression\n);\n","import {connect} from \"redux-bundler-react\";\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {Table, Form, Button, Alert, Spinner, Container, Row, Col, Modal} from 'react-bootstrap';\nimport { getFirebaseApp } from \"../utils\";\nimport {getAuth, onAuthStateChanged} from \"firebase/auth\";\n\nconst MAX_GENE_IDS = 1000; // Define the maximum number of gene IDs allowed\n\nconst formatCreatedAt = (value) => {\n if (!value) return '';\n const d = new Date(value);\n if (isNaN(d.getTime())) return '';\n return d.toLocaleDateString();\n};\n\nconst applySortFilter = (lists, search, sort) => {\n const s = search.trim().toLowerCase();\n let result = s\n ? lists.filter(l => (l.label || '').toLowerCase().includes(s))\n : lists.slice();\n const { key, dir } = sort;\n const mult = dir === 'asc' ? 1 : -1;\n result.sort((a, b) => {\n let av = a[key], bv = b[key];\n if (key === 'createdAt') {\n av = av ? new Date(av).getTime() : 0;\n bv = bv ? new Date(bv).getTime() : 0;\n } else if (key === 'n_genes') {\n av = av || 0;\n bv = bv || 0;\n } else {\n av = (av || '').toString().toLowerCase();\n bv = (bv || '').toString().toLowerCase();\n }\n if (av < bv) return -1 * mult;\n if (av > bv) return 1 * mult;\n return 0;\n });\n return result;\n};\n\nconst SortHeader = ({ label, sortKey, sort, onToggle }) => {\n const active = sort.key === sortKey;\n const indicator = active ? (sort.dir === 'asc' ? ' ▲' : ' ▼') : '';\n return (\n <th\n style={{ cursor: 'pointer', userSelect: 'none', position: 'sticky', top: 0, background: '#fff', zIndex: 1 }}\n onClick={() => onToggle(sortKey)}\n >\n {label}{indicator}\n </th>\n );\n};\n\nconst stickyHeaderStyle = { position: 'sticky', top: 0, background: '#fff', zIndex: 1 };\n\nconst GeneListDisplayComponent = props => {\n const [publicGeneLists, setPublicGeneLists] = useState([]);\n const [privateGeneLists, setPrivateGeneLists] = useState([]);\n const [error, setError] = useState(null);\n const [notice, setNotice] = useState(null);\n const [user, setUser] = useState({});\n const [editingId, setEditingId] = useState(null);\n const [editLabel, setEditLabel] = useState('');\n const [editIsPublic, setEditIsPublic] = useState(false);\n const [deleteTarget, setDeleteTarget] = useState(null);\n const [search, setSearch] = useState('');\n const [sort, setSort] = useState({ key: 'createdAt', dir: 'desc' });\n const auth = props.auth;\n if (auth) onAuthStateChanged(auth, (user) => setUser(user));\n\n const toggleSort = (key) => setSort(s =>\n s.key === key ? { key, dir: s.dir === 'asc' ? 'desc' : 'asc' } : { key, dir: 'asc' }\n );\n\n const currentUid = user && user.uid;\n const mergedLists = useMemo(() => {\n const byId = new Map();\n [...publicGeneLists, ...privateGeneLists].forEach(l => byId.set(l._id, l));\n return Array.from(byId.values());\n }, [publicGeneLists, privateGeneLists]);\n\n const displayedLists = useMemo(\n () => applySortFilter(mergedLists, search, sort),\n [mergedLists, search, sort]\n );\n\n const fetchPrivateGeneLists = async () => {\n if (!auth) {\n setPrivateGeneLists([]);\n setError(null);\n setNotice(null);\n return;\n }\n if (!user || typeof user.getIdToken !== 'function') {\n setPrivateGeneLists([]);\n setError(null);\n setNotice('Log in to create and manage your personal gene lists.');\n return;\n }\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=false`, {\n method: 'GET',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n const result = await response.json();\n\n if (response.ok) {\n setError(null);\n setNotice(null);\n setPrivateGeneLists(result);\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch private gene lists. Please try again later.');\n }\n };\n // Fetch saved gene lists from a backend or local storage\n const fetchPublicGeneLists = async () => {\n try {\n // Replace this with actual fetch from your backend or storage\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=true`);\n const result = await response.json();\n\n if (response.ok) {\n setPublicGeneLists(result); // array of saved gene lists\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch gene lists. Please try again later.');\n }\n };\n\n // Example functions for viewing and deleting lists\n const viewGeneList = (list) => {\n props.addFilter({\n category: 'Gene List',\n fq_field: 'saved_search',\n fq_value: list.hash,\n name: list.label\n })\n };\n\n const startEdit = (list) => {\n setEditingId(list._id);\n setEditLabel(list.label || '');\n setEditIsPublic(!!list.isPublic);\n };\n\n const cancelEdit = () => {\n setEditingId(null);\n setEditLabel('');\n setEditIsPublic(false);\n };\n\n const saveEdit = async (listId) => {\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?listId=${encodeURIComponent(listId)}`, {\n method: 'PATCH',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n },\n body: JSON.stringify({ label: editLabel, isPublic: editIsPublic })\n });\n if (response.ok) {\n cancelEdit();\n setError(null);\n await fetchPrivateGeneLists();\n await fetchPublicGeneLists();\n } else if (response.status === 401) {\n setError('You must be signed in to edit a gene list.');\n } else if (response.status === 404) {\n setError('Gene list not found or you do not own it.');\n } else if (response.status === 400) {\n setError('Nothing to update — please enter a label.');\n } else {\n setError('Failed to update gene list.');\n }\n } catch (err) {\n setError('Failed to update gene list.');\n }\n };\n\n const requestDelete = (list) => setDeleteTarget(list);\n const cancelDelete = () => setDeleteTarget(null);\n\n const confirmDelete = async () => {\n if (!deleteTarget) return;\n const listId = deleteTarget._id;\n setDeleteTarget(null);\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?listId=${encodeURIComponent(listId)}`, {\n method: 'DELETE',\n headers: { \"Authorization\": `Bearer ${token}` }\n });\n if (response.ok) {\n await fetchPrivateGeneLists();\n await fetchPublicGeneLists();\n } else if (response.status === 401) {\n alert('You must be signed in to delete a gene list.');\n } else if (response.status === 404) {\n alert('Gene list not found or you do not own it.');\n } else {\n alert('Failed to delete gene list.');\n }\n } catch (err) {\n alert('Failed to delete gene list.');\n }\n };\n\n // Fetch data when the component is mounted or after a save\n useEffect(() => {\n fetchPublicGeneLists();\n }, [props.refreshKey]);\n useEffect(() => {\n fetchPrivateGeneLists();\n }, [user, props.refreshKey]);\n\n return (\n <div className=\"gene-list-display-component\">\n {error && (\n <Alert variant=\"danger\">\n {error}\n </Alert>\n )}\n\n {notice && (\n <Alert variant=\"info\">\n {notice}\n </Alert>\n )}\n\n {mergedLists.length > 0 ? (\n <div className=\"mt-4\">\n <div className=\"d-flex justify-content-end mb-2\">\n <Form.Control\n type=\"search\"\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{ maxWidth: 220 }}\n size=\"sm\"\n />\n </div>\n <div style={{ maxHeight: 500, overflowY: 'auto', border: '1px solid #dee2e6', borderRadius: 4 }}>\n <Table striped hover className=\"mb-0\">\n <thead>\n <tr>\n <SortHeader label=\"List Name\" sortKey=\"label\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Owner\" sortKey=\"owner\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Genes\" sortKey=\"n_genes\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Created\" sortKey=\"createdAt\" sort={sort} onToggle={toggleSort} />\n <th style={stickyHeaderStyle}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {displayedLists.map((list, index) => {\n const isMine = currentUid && list.uid === currentUid;\n const ownerLabel = isMine ? 'You' : (list.owner || 'Unknown');\n return editingId === list._id ? (\n <tr key={index}>\n <td>\n <Form.Control\n type=\"text\"\n value={editLabel}\n onChange={(e) => setEditLabel(e.target.value)}\n placeholder=\"List name\"\n />\n <Form.Check\n type=\"switch\"\n id={`edit-public-${list._id}`}\n label=\"Public\"\n checked={editIsPublic}\n onChange={() => setEditIsPublic(!editIsPublic)}\n className=\"mt-2\"\n />\n </td>\n <td>{ownerLabel}</td>\n <td>{list.n_genes || 0}</td>\n <td>{formatCreatedAt(list.createdAt)}</td>\n <td>\n <Button variant=\"primary\" size=\"sm\" onClick={() => saveEdit(list._id)}>\n Save\n </Button>\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={cancelEdit} className=\"ml-2\">\n Cancel\n </Button>\n </td>\n </tr>\n ) : (\n <tr key={index}>\n <td>{list.label}{list.isPublic ? ' (public)' : ''}</td>\n <td>{ownerLabel}</td>\n <td>{list.n_genes || 0}</td>\n <td>{formatCreatedAt(list.createdAt)}</td>\n <td>\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={() => viewGeneList(list)}>\n View\n </Button>\n {isMine && (\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={() => startEdit(list)} className=\"ml-2\">\n Edit\n </Button>\n )}\n {isMine && (\n <Button variant=\"outline-danger\" size=\"sm\" onClick={() => requestDelete(list)} className=\"ml-2\">\n Delete\n </Button>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </Table>\n </div>\n </div>\n ) : (\n <Alert variant=\"warning\" className=\"mt-4\">\n No saved gene lists found.\n </Alert>\n )}\n\n <Modal show={!!deleteTarget} onHide={cancelDelete} centered>\n <Modal.Header closeButton>\n <Modal.Title>Delete gene list?</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n Are you sure you want to delete\n {deleteTarget ? <> <strong>{deleteTarget.label}</strong></> : ' this gene list'}?\n This action cannot be undone.\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={cancelDelete} autoFocus>\n Cancel\n </Button>\n <Button variant=\"danger\" onClick={confirmDelete}>\n Delete\n </Button>\n </Modal.Footer>\n </Modal>\n </div>\n );\n};\n\nconst GeneListComponent = props => {\n const [geneList, setGeneList] = useState('');\n const [listHash, setListHash] = useState(null);\n const [validationError, setValidationError] = useState([]);\n const [listName, setListName] = useState('');\n const [listIsPublic, setListIsPublic] = useState(false);\n const [validatedList, setValidatedList] = useState([]);\n const [errorMessage, setErrorMessage] = useState('');\n const [loading, setLoading] = useState(false); // New loading state\n const [user, setUser] = useState({});\n const auth = props.auth;\n if (auth) onAuthStateChanged(auth, (user) => setUser(user));\n\n // Function to handle gene list input\n const handleGeneListChange = (event) => {\n setGeneList(event.target.value);\n };\n\n // Function to handle drag and drop of gene list\n const handleDrop = (event) => {\n event.preventDefault();\n const geneData = event.dataTransfer.getData('text');\n setGeneList(geneData);\n };\n\n // Function to handle drag over (needed for drop)\n const handleDragOver = (event) => {\n event.preventDefault();\n };\n\n // Function to submit gene list for validation\n const handleSubmit = async () => {\n const geneArray = geneList.split('\\n').filter(Boolean); // Convert the gene list into an array and filter out empty values\n\n if (geneArray.length > MAX_GENE_IDS) {\n setErrorMessage(`You have exceeded the maximum limit of ${MAX_GENE_IDS} gene IDs.`);\n return;\n }\n\n setErrorMessage(''); // Reset error message if validation passes\n setLoading(true); // Set loading state to true to show progress\n\n try {\n const response = await fetch(`${props.api}/gene_lists/validate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(geneArray),\n });\n\n const result = await response.json();\n\n if (result.hash) {\n setListHash(result.hash);\n setValidatedList(result.ids);\n setValidationError(result.missing);\n } else {\n // Handle errors from validation\n alert('Error during validation.');\n }\n } catch (error) {\n alert('There was an error with the validation service.',error);\n } finally {\n setLoading(false); // Set loading to false when the request is complete\n }\n };\n\n // Function to save the validated gene list\n const handleSaveList = async () => {\n const queryParams = {\n label: listName,\n hash: listHash,\n site: props.site,\n n_genes: validatedList.length,\n isPublic: listIsPublic\n };\n const queryString = new URLSearchParams(queryParams).toString();\n\n const token = await user.getIdToken();\n try {\n const response = await fetch(`${props.api}/gene_lists?${queryString}`, {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n if (!response.ok) {\n throw new Error('Failed to save list');\n }\n const result = await response.json();\n console.log(result);\n setGeneList('');\n setListHash(null);\n setValidatedList([]);\n setValidationError([]);\n setListName('');\n setListIsPublic(false);\n if (props.onListSaved) props.onListSaved();\n\n } catch (error) {\n console.error(\"There was an problem with fetch\", error)\n }\n };\n\n return (\n <div className=\"gene-list-component\">\n <Form>\n {/* Input for Gene List */}\n <Form.Group controlId=\"geneList\">\n <Form.Label>Paste or drop your gene list here:</Form.Label>\n <Form.Control\n as=\"textarea\"\n rows={10}\n value={geneList}\n onChange={handleGeneListChange}\n placeholder={`Paste or drop your gene list here (Maximum: ${MAX_GENE_IDS} IDs)`}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n />\n </Form.Group>\n\n {/* Display error if gene list exceeds limit */}\n {errorMessage && (\n <Alert variant=\"danger\">\n {errorMessage}\n </Alert>\n )}\n\n {/* Button to submit for validation */}\n <Button variant=\"primary\" onClick={handleSubmit}>\n Validate Gene List\n </Button>\n </Form>\n\n {/* Display validation in progress */}\n {loading && (\n <div className=\"validation-summary mt-4\">\n <h3>Validation in Progress...</h3>\n <Spinner animation=\"border\" role=\"status\">\n <span className=\"sr-only\">Validating...</span>\n </Spinner>\n </div>\n )}\n\n\n {/* Display validation summary */}\n {!loading && listHash && (\n <div className=\"validation-summary mt-3 p-3 border rounded bg-light\">\n <div>\n <span className=\"text-success\">\n <strong>{validatedList.length}</strong> valid\n </span>\n {validationError.length > 0 && (\n <div className=\"text-danger mt-1\">\n <strong>{validationError.length}</strong> not found\n </div>\n )}\n </div>\n {validationError.length > 0 && (\n <details className=\"mt-2\">\n <summary style={{cursor: 'pointer'}}>Show unrecognized IDs</summary>\n <pre className=\"small mt-2 mb-0\" style={{maxHeight: 150, overflow: 'auto'}}>\n {validationError.join('\\n')}\n </pre>\n </details>\n )}\n </div>\n )}\n\n {/* Input for saving validated gene list */}\n {!loading && validatedList.length > 0 && (\n <div className=\"save-list mt-4\">\n <Form.Group controlId=\"listName\">\n <Form.Label>Save Validated Gene List</Form.Label>\n <Form.Control\n type=\"text\"\n value={listName}\n onChange={(e) => setListName(e.target.value)}\n placeholder=\"Enter list name\"\n />\n <Form.Check\n type='switch'\n id='listIsPublic'\n label='Public'\n onChange={(e) => setListIsPublic(!listIsPublic)}\n />\n </Form.Group>\n {user ?\n <Button variant=\"primary\" onClick={handleSaveList}>\n Save Gene List\n </Button>\n : <Button variant=\"secondary\" disabled>Login Required</Button> }\n </div>\n )}\n </div>\n );\n};\n\nconst UserGeneListsComponent = props => {\n const [refreshKey, setRefreshKey] = useState(0);\n const handleListSaved = () => setRefreshKey(k => k + 1);\n const firebaseConfig = props.configuration && props.configuration.firebaseConfig;\n const auth = useMemo(() => {\n const app = getFirebaseApp(firebaseConfig);\n return app ? getAuth(app) : null;\n }, [firebaseConfig]);\n if (!auth) {\n return (\n <Alert variant=\"info\">\n User gene lists are not available on this site.\n </Alert>\n );\n }\n return (\n <Container fluid>\n <Row>\n <Col><GeneListComponent api={props.configuration.grameneData} site={props.configuration.id} auth={auth} onListSaved={handleListSaved}/></Col>\n <Col><GeneListDisplayComponent api={props.configuration.grameneData} site={props.configuration.id} auth={auth} addFilter={props.doAcceptGrameneSuggestion} refreshKey={refreshKey}/></Col>\n </Row>\n </Container>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n 'doAcceptGrameneSuggestion',\n UserGeneListsComponent\n);\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport FieldTree from './FieldTree';\nimport Preview from './Preview';\nimport ExportFooter from './ExportFooter';\nimport './styles.css';\n\nconst MIN_LEFT_PCT = 15;\nconst MAX_LEFT_PCT = 85;\n\nconst ExporterViewCmp = props => {\n const {\n fieldCatalog: catalog,\n grameneFieldCatalogIsLoading: isLoading,\n grameneFieldCatalogRaw: raw,\n grameneFieldCatalogShouldUpdate: shouldUpdate,\n doFetchGrameneFieldCatalog\n } = props;\n const [fieldQuery, setFieldQuery] = useState('');\n const [leftPct, setLeftPct] = useState(50);\n const [dragging, setDragging] = useState(false);\n const containerRef = useRef(null);\n\n useEffect(() => {\n if (shouldUpdate) doFetchGrameneFieldCatalog();\n }, [shouldUpdate, doFetchGrameneFieldCatalog]);\n\n const onPointerMove = useCallback((e) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const pct = ((e.clientX - rect.left) / rect.width) * 100;\n if (!Number.isFinite(pct)) return;\n setLeftPct(Math.max(MIN_LEFT_PCT, Math.min(MAX_LEFT_PCT, pct)));\n }, []);\n\n useEffect(() => {\n if (!dragging) return;\n const onUp = () => setDragging(false);\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n const prev = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n return () => {\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n document.body.style.userSelect = prev;\n };\n }, [dragging, onPointerMove]);\n\n if (!catalog || !catalog.groups) {\n const msg = isLoading ? 'Loading…' : (raw && raw.error) ? `error: ${String(raw.error)}` : 'init';\n return (\n <div className=\"exporter-view\">\n <em style={{padding: '1rem'}}>Loading field catalog… ({msg})</em>\n </div>\n );\n }\n\n const gridStyle = {\n gridTemplateColumns: `${leftPct}% 8px ${100 - leftPct}%`\n };\n\n return (\n <div className=\"exporter-view\" ref={containerRef} style={gridStyle}>\n <div className=\"exporter-pane\">\n <div className=\"exporter-pane-header exporter-pane-header-row\">\n <b>Available fields</b>\n <small style={{color: '#888', marginLeft: '0.5rem'}}>\n {Object.keys(catalog.fields).length} total\n </small>\n <input\n type=\"search\"\n className=\"form-control exporter-field-search exporter-field-search-inline\"\n placeholder=\"Search fields…\"\n value={fieldQuery}\n onChange={e => setFieldQuery(e.target.value)}\n />\n </div>\n <div className=\"exporter-pane-body\">\n <FieldTree query={fieldQuery}/>\n </div>\n </div>\n\n <div\n className={'exporter-divider' + (dragging ? ' dragging' : '')}\n onPointerDown={e => { e.preventDefault(); setDragging(true); }}\n onDoubleClick={() => setLeftPct(50)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n title=\"Drag to resize · double-click to reset\"\n />\n\n <div className=\"exporter-pane exporter-right-pane\">\n <div className=\"exporter-right-split\">\n <div className=\"exporter-preview-section\">\n <Preview/>\n </div>\n <ExportFooter/>\n </div>\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectGrameneFieldCatalogIsLoading',\n 'selectGrameneFieldCatalogRaw',\n 'selectGrameneFieldCatalogShouldUpdate',\n 'doFetchGrameneFieldCatalog',\n ExporterViewCmp\n);\n","import React, { useState, useMemo } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { BsChevronDown, BsChevronRight } from 'react-icons/bs';\n\nconst MAX_VISIBLE_PER_GROUP = 200;\n\nfunction collectFieldNames(group) {\n const names = [...(group.fields || [])];\n for (const s of group.subgroups || []) names.push(...collectFieldNames(s));\n return names;\n}\n\nfunction collectMatchingFieldNames(group) {\n const names = [...(group.matchingFields || [])];\n for (const s of group.subgroups || []) names.push(...collectMatchingFieldNames(s));\n return names;\n}\n\nfunction filterGroup(group, q, catalog) {\n const matchingFields = (group.fields || []).filter(name => {\n if (!q) return true;\n const f = catalog.fields[name];\n return name.toLowerCase().includes(q) || (f && f.label.toLowerCase().includes(q));\n });\n const groupLabelMatches = q && group.label && group.label.toLowerCase().includes(q);\n const subgroups = (group.subgroups || [])\n .map(s => filterGroup(s, groupLabelMatches ? '' : q, catalog))\n .filter(s => s);\n if (!q) return { ...group, matchingFields, subgroups };\n if (groupLabelMatches) {\n return {\n ...group,\n matchingFields: group.fields || [],\n subgroups: (group.subgroups || []).map(s => filterGroup(s, '', catalog))\n };\n }\n if (matchingFields.length === 0 && subgroups.length === 0) return null;\n return { ...group, matchingFields, subgroups };\n}\n\nconst FieldRow = ({ name, catalog, selectedSet, onToggle }) => {\n const f = catalog.fields[name];\n if (!f) return null;\n const linked = f.linkedFields;\n const checked = linked\n ? linked.every(n => selectedSet.has(n))\n : selectedSet.has(name);\n return (\n <li>\n <label title={name + (f.description ? '\\n' + f.description : '')}>\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => onToggle(name)}\n />\n <span className=\"exporter-field-label\">{f.label}</span>\n {f.multiValued && <span className=\"exporter-field-badge\">[]</span>}\n </label>\n </li>\n );\n};\n\nconst GroupNode = ({ group, depth, catalog, selectedSet, onToggle, onBulkSet, openMap, setOpen, forceOpen }) => {\n const matchingNames = collectMatchingFieldNames(group);\n const total = matchingNames.length;\n const isAllLinkedSelected = (name) => {\n const f = catalog.fields[name];\n const linked = f && f.linkedFields;\n if (linked) return linked.every(n => selectedSet.has(n));\n return selectedSet.has(name);\n };\n const selectedCount = matchingNames.reduce((n, name) => n + (isAllLinkedSelected(name) ? 1 : 0), 0);\n const allSelected = total > 0 && selectedCount === total;\n const noneSelected = selectedCount === 0;\n const isOpen = forceOpen || openMap[group.id] || false;\n const visible = (group.matchingFields || []).slice(0, MAX_VISIBLE_PER_GROUP);\n const truncated = (group.matchingFields || []).length - visible.length;\n\n const expandLinked = (names) => {\n const out = [];\n for (const n of names) {\n const f = catalog.fields[n];\n if (f && f.linkedFields) out.push(...f.linkedFields);\n else out.push(n);\n }\n return out;\n };\n\n const handleBulk = (e, selected) => {\n e.stopPropagation();\n if (matchingNames.length === 0) return;\n onBulkSet(expandLinked(matchingNames), selected);\n };\n\n return (\n <div className=\"exporter-group\" style={{ marginLeft: depth > 0 ? '0.75rem' : 0 }}>\n <div className=\"exporter-group-header\" onClick={() => setOpen(group.id, !isOpen)}>\n <span className=\"exporter-group-chevron\">\n {isOpen ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n <b>{group.label}</b>\n <span className=\"exporter-group-actions\">\n <button\n type=\"button\"\n className=\"exporter-group-action\"\n disabled={allSelected || total === 0}\n onClick={e => handleBulk(e, true)}\n title=\"Select all fields in this group\"\n >All</button>\n <button\n type=\"button\"\n className=\"exporter-group-action\"\n disabled={noneSelected}\n onClick={e => handleBulk(e, false)}\n title=\"Deselect all fields in this group\"\n >None</button>\n </span>\n <span className=\"exporter-group-count\">{selectedCount}/{total}</span>\n </div>\n {isOpen && (\n <>\n {(group.subgroups || []).map(sub => (\n <GroupNode\n key={sub.id}\n group={sub}\n depth={depth + 1}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={onToggle}\n onBulkSet={onBulkSet}\n openMap={openMap}\n setOpen={setOpen}\n forceOpen={forceOpen}\n />\n ))}\n {visible.length > 0 && (\n <ul className=\"exporter-group-fields\">\n {visible.map(name => (\n <FieldRow\n key={name}\n name={name}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={onToggle}\n />\n ))}\n {truncated > 0 && (\n <li className=\"exporter-group-truncated\">\n <em>… {truncated} more. Refine search to see.</em>\n </li>\n )}\n </ul>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst FieldTreeCmp = props => {\n const { fieldCatalog: catalog, exporterSelectedFields, doToggleExporterField, doBulkSetExporterFields, query = '' } = props;\n const [openMap, setOpenMap] = useState({});\n\n const selectedSet = useMemo(() => new Set(exporterSelectedFields), [exporterSelectedFields]);\n\n const handleToggle = (name) => {\n const f = catalog && catalog.fields && catalog.fields[name];\n const linked = f && f.linkedFields;\n if (linked) {\n const allSelected = linked.every(n => selectedSet.has(n));\n doBulkSetExporterFields(linked, !allSelected);\n } else {\n doToggleExporterField(name);\n }\n };\n\n const q = query.trim().toLowerCase();\n\n const filtered = useMemo(() => {\n if (!catalog || !catalog.groups) return [];\n return catalog.groups\n .map(g => filterGroup(g, q, catalog))\n .filter(g => g && ((g.matchingFields && g.matchingFields.length) || (g.subgroups && g.subgroups.length)));\n }, [catalog, q]);\n\n if (!catalog || !catalog.groups) {\n return <div className=\"exporter-panel-empty\">Loading field catalog…</div>;\n }\n\n const setOpen = (id, val) => setOpenMap(s => ({ ...s, [id]: val }));\n const forceOpen = !!q;\n\n return (\n <div className=\"exporter-field-tree\">\n <div className=\"exporter-field-tree-body\">\n {filtered.map(group => (\n <GroupNode\n key={group.id}\n group={group}\n depth={0}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={handleToggle}\n onBulkSet={doBulkSetExporterFields}\n openMap={openMap}\n setOpen={setOpen}\n forceOpen={forceOpen}\n />\n ))}\n {filtered.length === 0 && (\n <div className=\"exporter-panel-empty\">No fields match \"{query}\".</div>\n )}\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExporterSelectedFields',\n 'doToggleExporterField',\n 'doBulkSetExporterFields',\n FieldTreeCmp\n);\n","import React, { useEffect, useMemo, useState, useRef } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { BsArrowLeftShort, BsArrowRightShort, BsSliders } from 'react-icons/bs';\nimport { buildTableData, toJSON } from './formatters';\nimport { ANCESTOR_FIELD_MAP, collectAncestorIds } from './ancestorsResolver';\nimport CutoffsModal from './CutoffsModal';\n\nconst PreviewCmp = props => {\n const {\n fieldCatalog: catalog,\n exporterSelectedFields: fields,\n exporterFormat: format,\n exporterPreview: preview,\n expressionStudies,\n expressionSamples,\n grameneTaxonomy,\n gramenePathways,\n ontologies,\n exporterCutoffs,\n doSetExporterFormat,\n doReorderExporterFields,\n doClearExporterFields,\n doSetExporterCutoffs,\n doEnsureOntologyRecords,\n doRequestGramenePathways\n } = props;\n\n const [showCutoffs, setShowCutoffs] = useState(false);\n const docs = preview.data || [];\n\n const ancestorFieldsSelected = useMemo(\n () => fields.filter(n => ANCESTOR_FIELD_MAP[n]),\n [fields]\n );\n\n useEffect(() => {\n if (ancestorFieldsSelected.length === 0 || docs.length === 0) return;\n const idsByOnt = collectAncestorIds(docs, ancestorFieldsSelected);\n for (const [ontKey, ids] of Object.entries(idsByOnt)) {\n if (!ids.length) continue;\n if (ontKey === 'taxonomy') continue; // already cached globally\n if (ontKey === 'pathways') {\n if (doRequestGramenePathways) doRequestGramenePathways(ids);\n continue;\n }\n if (doEnsureOntologyRecords) doEnsureOntologyRecords(ontKey, ids);\n }\n }, [docs, ancestorFieldsSelected, doEnsureOntologyRecords, doRequestGramenePathways]);\n\n if (fields.length === 0) {\n return (\n <div className=\"exporter-preview-empty\">\n <em>Select at least one field to preview.</em>\n </div>\n );\n }\n\n const renderStatus = () => {\n if (preview.status === 'loading') return <small className=\"exporter-preview-status\">Loading…</small>;\n if (preview.status === 'error') return <small className=\"exporter-preview-status error\">Error: {preview.error}</small>;\n if (preview.status === 'stale') return <small className=\"exporter-preview-status\">Refreshing…</small>;\n if (preview.status === 'idle') return <small className=\"exporter-preview-status\">Idle</small>;\n return null;\n };\n\n const resolverCtx = {\n expressionStudies,\n expressionSamples,\n taxonomy: grameneTaxonomy,\n pathways: gramenePathways,\n ontologies,\n cutoffs: exporterCutoffs\n };\n\n const moveField = (name, delta) => {\n const idx = fields.indexOf(name);\n if (idx === -1) return;\n const target = idx + delta;\n if (target < 0 || target >= fields.length) return;\n const next = [...fields];\n [next[idx], next[target]] = [next[target], next[idx]];\n doReorderExporterFields(next);\n };\n\n return (\n <div className=\"exporter-preview\">\n <div className=\"exporter-preview-toolbar\">\n <span className=\"exporter-preview-title\"><b>Preview</b> (first 20 genes)</span>\n <span className=\"exporter-preview-fields-count\">\n {fields.length} field{fields.length === 1 ? '' : 's'}\n {fields.length > 0 && (\n <button\n className=\"btn btn-sm btn-link exporter-clear-btn\"\n onClick={doClearExporterFields}\n >clear</button>\n )}\n </span>\n <span className=\"exporter-preview-format\">\n <label>\n <input\n type=\"radio\"\n name=\"exporter-format\"\n value=\"tsv\"\n checked={format === 'tsv'}\n onChange={() => doSetExporterFormat('tsv')}\n /> TSV\n </label>\n <label>\n <input\n type=\"radio\"\n name=\"exporter-format\"\n value=\"json\"\n checked={format === 'json'}\n onChange={() => doSetExporterFormat('json')}\n /> JSON\n </label>\n </span>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-light exporter-cutoffs-btn\"\n onClick={() => setShowCutoffs(true)}\n title=\"Expression cutoffs\"\n >\n <BsSliders/> Cutoffs\n </button>\n {renderStatus()}\n </div>\n {showCutoffs && (\n <CutoffsModal\n cutoffs={exporterCutoffs}\n onApply={doSetExporterCutoffs}\n onClose={() => setShowCutoffs(false)}\n />\n )}\n <div className=\"exporter-preview-body\">\n {format === 'tsv' ? (\n <TSVTable\n docs={docs}\n fields={fields}\n catalog={catalog}\n resolverCtx={resolverCtx}\n onMoveField={moveField}\n />\n ) : (\n <pre className=\"exporter-preview-json\">{toJSON(docs, fields, resolverCtx)}</pre>\n )}\n </div>\n </div>\n );\n};\n\nconst MIN_COL_WIDTH = 40;\n\nconst TSVTable = ({ docs, fields, catalog, resolverCtx, onMoveField }) => {\n const { header, headerKeys, rows } = buildTableData(docs, fields, catalog, resolverCtx);\n const reorderableCount = fields.length;\n const [colWidths, setColWidths] = useState({});\n const thRefs = useRef({});\n\n const startResize = (key) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n const th = thRefs.current[key];\n const startWidth = (th && th.getBoundingClientRect().width) || 100;\n const startX = e.clientX;\n const onMove = (ev) => {\n const delta = ev.clientX - startX;\n const next = Math.max(MIN_COL_WIDTH, startWidth + delta);\n setColWidths(prev => ({ ...prev, [key]: next }));\n };\n const onUp = () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n document.body.style.userSelect = '';\n };\n document.body.style.userSelect = 'none';\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n };\n\n return (\n <div className=\"exporter-preview-tsv-scroll\">\n <table className=\"exporter-preview-tsv\">\n <thead>\n <tr>\n {header.map((h, i) => {\n const key = headerKeys[i];\n const fieldIdx = fields.indexOf(key);\n const reorderable = fieldIdx !== -1;\n const w = colWidths[key];\n const thStyle = w ? { width: `${w}px`, maxWidth: `${w}px`, minWidth: `${w}px` } : undefined;\n return (\n <th key={key} title={key} style={thStyle} ref={el => { thRefs.current[key] = el; }}>\n <div className=\"exporter-preview-th-inner\">\n <button\n type=\"button\"\n className=\"exporter-preview-reorder-btn\"\n disabled={!reorderable || fieldIdx === 0}\n onClick={() => onMoveField(key, -1)}\n title=\"Move left\"\n ><BsArrowLeftShort/></button>\n <span className=\"exporter-preview-th-label\">{h}</span>\n <button\n type=\"button\"\n className=\"exporter-preview-reorder-btn\"\n disabled={!reorderable || fieldIdx === reorderableCount - 1}\n onClick={() => onMoveField(key, 1)}\n title=\"Move right\"\n ><BsArrowRightShort/></button>\n </div>\n <span\n className=\"exporter-preview-col-resizer\"\n onPointerDown={startResize(key)}\n onDoubleClick={() => setColWidths(prev => { const n = { ...prev }; delete n[key]; return n; })}\n title=\"Drag to resize · double-click to reset\"\n />\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, r) => (\n <tr key={r}>\n {row.map((c, i) => {\n const key = headerKeys[i];\n const w = colWidths[key];\n const tdStyle = w ? { width: `${w}px`, maxWidth: `${w}px`, minWidth: `${w}px` } : undefined;\n return (\n <td key={key} title={c} style={tdStyle}>{c}</td>\n );\n })}\n </tr>\n ))}\n {rows.length === 0 && (\n <tr>\n <td colSpan={header.length} className=\"exporter-preview-empty-row\">\n <em>No rows.</em>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExporterSelectedFields',\n 'selectExporterFormat',\n 'selectExporterPreview',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneTaxonomy',\n 'selectGramenePathways',\n 'selectOntologies',\n 'selectExporterCutoffs',\n 'doSetExporterFormat',\n 'doReorderExporterFields',\n 'doClearExporterFields',\n 'doSetExporterCutoffs',\n 'doEnsureOntologyRecords',\n 'doRequestGramenePathways',\n PreviewCmp\n);\n","import React, { useState, useEffect } from 'react';\n\nconst parseNumberOrNull = (v) => {\n if (v === '' || v === null || v === undefined) return null;\n const n = +v;\n return Number.isFinite(n) ? n : null;\n};\n\nconst CutoffsModal = ({ cutoffs, onApply, onClose }) => {\n const [exprMinTPM, setExprMinTPM] = useState(\n cutoffs && cutoffs.exprMinTPM != null ? String(cutoffs.exprMinTPM) : ''\n );\n const [diffMaxPval, setDiffMaxPval] = useState(\n cutoffs && cutoffs.diffMaxPval != null ? String(cutoffs.diffMaxPval) : ''\n );\n\n useEffect(() => {\n const onKey = (e) => { if (e.key === 'Escape') onClose(); };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [onClose]);\n\n const apply = () => {\n onApply({\n exprMinTPM: parseNumberOrNull(exprMinTPM),\n diffMaxPval: parseNumberOrNull(diffMaxPval)\n });\n onClose();\n };\n\n return (\n <div className=\"exporter-modal-backdrop\" onClick={onClose}>\n <div className=\"exporter-modal\" onClick={e => e.stopPropagation()} role=\"dialog\" aria-modal=\"true\">\n <div className=\"exporter-modal-header\">\n <b>Expression cutoffs</b>\n <button type=\"button\" className=\"exporter-modal-close\" onClick={onClose} aria-label=\"Close\">×</button>\n </div>\n <div className=\"exporter-modal-body\">\n <div className=\"exporter-modal-field\">\n <label>\n Minimum TPM (gene expression)\n <input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n value={exprMinTPM}\n onChange={e => setExprMinTPM(e.target.value)}\n placeholder=\"no minimum\"\n />\n </label>\n <small>Exclude expression rows with TPM below this value. Blank disables the cutoff.</small>\n </div>\n <div className=\"exporter-modal-field\">\n <label>\n Maximum p-value (differential expression)\n <input\n type=\"number\"\n step=\"0.001\"\n min=\"0\"\n max=\"1\"\n value={diffMaxPval}\n onChange={e => setDiffMaxPval(e.target.value)}\n placeholder=\"no maximum\"\n />\n </label>\n <small>Exclude diff-expression contrasts with p-value above this. Blank disables the cutoff.</small>\n </div>\n </div>\n <div className=\"exporter-modal-footer\">\n <button type=\"button\" className=\"btn btn-sm btn-link\" onClick={onClose}>Cancel</button>\n <button type=\"button\" className=\"btn btn-sm btn-primary\" onClick={apply}>Apply</button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default CutoffsModal;\n","import React from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Modal, Button, ProgressBar } from 'react-bootstrap';\n\nconst ExportFooterCmp = props => {\n const {\n exporterSelectedFields,\n exporterFormat,\n exporterDownload: dl,\n doStartExporterDownload,\n doCancelExporterDownload,\n doResetExporterDownload\n } = props;\n\n const inFlight = dl.status === 'preparing' || dl.status === 'downloading';\n const pct = dl.total > 0\n ? Math.min(100, Math.round((dl.progress / dl.total) * 100))\n : 0;\n\n const canStart = !inFlight && exporterSelectedFields.length > 0;\n\n return (\n <>\n <div className=\"exporter-footer\">\n <div className=\"exporter-footer-summary\">\n <small>\n {exporterSelectedFields.length} field{exporterSelectedFields.length === 1 ? '' : 's'} selected\n · format: <b>{exporterFormat.toUpperCase()}</b>\n </small>\n </div>\n <Button\n variant=\"primary\"\n size=\"sm\"\n disabled={!canStart}\n onClick={doStartExporterDownload}\n >\n Download {exporterFormat.toUpperCase()}\n </Button>\n </div>\n\n <Modal show={dl.status !== 'idle'} onHide={doResetExporterDownload} centered backdrop=\"static\">\n <Modal.Header closeButton={!inFlight}>\n <Modal.Title>\n {dl.status === 'preparing' && 'Preparing export…'}\n {dl.status === 'downloading' && 'Exporting…'}\n {dl.status === 'done' && 'Export complete'}\n {dl.status === 'cancelled' && 'Export cancelled'}\n {dl.status === 'error' && 'Export failed'}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {inFlight && (\n <>\n <ProgressBar\n now={pct}\n label={dl.total > 0 ? `${dl.progress.toLocaleString()} / ${dl.total.toLocaleString()}` : 'Counting…'}\n striped\n animated\n />\n <div style={{ marginTop: '0.5rem', fontSize: '0.85rem', color: '#666' }}>\n Fetching genes in pages of 1000. This may take a while for large result sets.\n </div>\n </>\n )}\n {dl.status === 'done' && (\n <div>\n Wrote <b>{dl.progress.toLocaleString()}</b> genes to disk.\n </div>\n )}\n {dl.status === 'cancelled' && (\n <div>\n Stopped at <b>{dl.progress.toLocaleString()}</b> / {dl.total.toLocaleString()} genes. No file was saved.\n </div>\n )}\n {dl.status === 'error' && (\n <div className=\"text-danger\">{dl.error}</div>\n )}\n </Modal.Body>\n <Modal.Footer>\n {inFlight ? (\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={doCancelExporterDownload}>\n Cancel\n </Button>\n ) : (\n <Button variant=\"secondary\" size=\"sm\" onClick={doResetExporterDownload}>\n Close\n </Button>\n )}\n </Modal.Footer>\n </Modal>\n </>\n );\n};\n\nexport default connect(\n 'selectExporterSelectedFields',\n 'selectExporterFormat',\n 'selectExporterDownload',\n 'doStartExporterDownload',\n 'doCancelExporterDownload',\n 'doResetExporterDownload',\n ExportFooterCmp\n);\n","import React, { useMemo, useState } from 'react'\nimport { Button, Modal } from 'react-bootstrap'\nimport { connect } from \"redux-bundler-react\";\nimport { getFirebaseApp } from \"./utils\";\nimport { getAuth, onAuthStateChanged, signOut, GoogleAuthProvider, signInWithPopup } from \"firebase/auth\";\nimport { BsChevronDown, BsChevronRight } from 'react-icons/bs';\n\nconst provider = new GoogleAuthProvider();\n\nconst Auth = props => {\n const firebaseConfig = props.configuration && props.configuration.firebaseConfig;\n const auth = useMemo(() => {\n const app = getFirebaseApp(firebaseConfig);\n return app ? getAuth(app) : null;\n }, [firebaseConfig]);\n const [user, setUser] = useState({});\n const [open, setOpen] = useState(true);\n if (!auth) return null;\n onAuthStateChanged(auth, (user) => setUser(user));\n\n function handleLogin() {\n signInWithPopup(auth, provider)\n .then((result) => {\n setUser(result.user)\n }).catch((err) => {\n console.log(err)\n });\n }\n function handleLogout() {\n signOut(auth)\n .then(() => {\n setUser(null);\n }).catch((err) => {\n console.log(err)\n });\n }\n return (\n <div className={props.configuration.id === 'sorghum' ? 'sorghumbase-auth-container': 'gramene-auth-container'}>\n <div className=\"sidebar-section\">\n <div className=\"sidebar-section-header\" onClick={() => setOpen(!open)}>\n <b>Account</b>\n <span className=\"sidebar-section-actions\">\n <span className=\"sidebar-section-toggle\">\n {open ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n </span>\n </div>\n {open && <div className=\"sidebar-section-body\">\n <div>\n {user\n ? <Button size=\"sm\" variant=\"success\" onClick={handleLogout}>{user.displayName}</Button>\n : <Button size=\"sm\" variant=\"success\" onClick={handleLogin}>Login</Button>\n }\n </div>\n </div>}\n </div>\n </div>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n Auth\n)\n"],"names":[],"version":3,"file":"index.js.map"}
1
+ {"mappings":"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","sources":["src/components/results/Study.js","src/index.js","src/bundles/index.js","src/bundles/api.js","src/bundles/filters.js","src/bundles/views.js","src/bundles/docs.js","src/bundles/genomes.js","src/bundles/swaggerFields.js","src/fieldCatalog.overlay.json","src/vepStudyInfo.js","src/bundles/exporter.js","src/components/exporter/downloadRunner.js","src/components/exporter/formatters.js","src/components/exporter/expressionResolver.js","src/components/exporter/ancestorsResolver.js","src/bundles/ontologies.js","src/bundles/exprViz.js","src/components/resultList.js","src/components/resultSummary.js","src/components/suggestions.js","src/components/geneSearchUI.js","src/components/results/GeneList.js","src/components/results/details/Expression.js","src/components/results/details/Homology.js","src/components/results/details/generic.js","src/components/utils.js","src/components/results/details/Location.js","src/components/results/details/location/browser.js","src/components/results/details/location/dallianceBrowser.js","src/components/results/details/Pathways.js","src/components/results/details/VEP.js","src/components/results/details/Xrefs.js","src/components/results/details/Publications.js","src/components/results/details/Sequences.js","src/components/results/TaxDist.js","src/components/results/selection.js","src/components/results/HelpDemo.js","src/components/results/GeneAttribs.js","src/components/results/StatsByGroup.js","src/components/TaxonomyModal.js","src/components/results/Expression.js","src/components/results/UserGeneLists.js","src/components/exporter/ExporterView.js","src/components/exporter/FieldTree.js","src/components/exporter/Preview.js","src/components/exporter/CutoffsModal.js","src/components/exporter/ExportFooter.js","src/components/exprViz/ExprVizView.js","src/components/exprViz/FieldsModal.js","src/components/exprViz/ExprTable.js","src/components/exprViz/ParallelCoordsPlot.js","src/components/Auth.js"],"sourcesContent":["import React, { useState, useMemo } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { AgGridReact } from \"ag-grid-react\";\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\n\nconst metaRenderer = params => {\n if (params.value.ontology) {\n return <a href={`http://purl.obolibrary.org/obo/${params.value.id.replace(\":\",\"_\")}`} target='_blank'>{params.value.label}</a>\n }\n return params.value.label\n}\nconst sampleRenderer = params => {\n const sampleMeta = params.value;\n return (\n <label>\n <input\n type=\"checkbox\"\n checked={params.desiredSamples.hasOwnProperty(sampleMeta._id)}\n onChange={() => params.doToggleExpressionSample(sampleMeta._id)}\n />\n &nbsp;{sampleMeta.experiment}-{sampleMeta.group}\n </label>\n );\n // return JSON.stringify(sampleMeta,null,2);\n}\nconst connectedSampleRenderer = connect(\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n 'doToggleExpressionSample',\n sampleRenderer\n);\nconst Study = props => {\n let samples = props.expressionSamples[props.id];\n let sampleMetadata = [];\n let metadataFields = [{ field: \"sampleId\", cellRenderer: connectedSampleRenderer }];\n let isFactor={};\n samples.forEach((sample, idx) => {\n if (idx === 0) {\n let factors = {\n headerName: 'Experimental Variables',\n children: []\n }\n sample.factor.forEach(factor => {\n factors.children.push({field: factor.type, cellRenderer: metaRenderer})\n isFactor[factor.type] = true;\n });\n metadataFields.push(factors);\n let characteristics = {\n headerName: 'Sample Characteristics',\n children: []\n }\n sample.characteristic.forEach(ch => {\n if (!isFactor[ch.type]) {\n characteristics.children.push({field: ch.type, cellRenderer: metaRenderer})\n }\n });\n metadataFields.push(characteristics)\n }\n let s_info = {sampleId: sample}\n sample.factor.forEach(factor => {\n s_info[factor.type] = {label: factor.label};\n if (factor.ontology) {\n s_info[factor.type]['ontology'] = factor.ontology\n s_info[factor.type]['id'] = factor.id;\n }\n })\n sample.characteristic.forEach(ch => {\n s_info[ch.type] = {label: ch.label};\n if (ch.ontology) {\n s_info[ch.type]['ontology'] = ch.ontology\n s_info[ch.type]['id'] = ch.id;\n }\n })\n sampleMetadata.push(s_info)\n })\n const [rowData, setRowData] = useState(sampleMetadata);\n const [colDefs, setColDefs] = useState(metadataFields);\n const defaultColDef = useMemo(() => {\n return {\n filter: true\n }\n }, []);\n return (\n <div>\n <div className=\"ag-theme-quartz\" style={{height: `${44 * (samples.length + 2)}px`}}>\n <AgGridReact rowData={rowData} columnDefs={colDefs} defaultColDef={defaultColDef}/>\n </div>\n <a href={`https://www.ebi.ac.uk/gxa/experiments/${props.id}`}>EBI Atlas Experiment: {props.id}</a>\n </div>\n );\n};\nexport default connect(\n 'selectExpressionSamples',\n Study);\n","import bundles from './bundles';\nimport resultList from './components/resultList';\nimport resultSummary from './components/resultSummary';\nimport suggestions from './components/suggestions';\nimport {Status, Filters, Results, Views, Auth} from './components/geneSearchUI';\n\nexport { bundles, resultList, resultSummary, suggestions, Status, Filters, Results, Views, Auth };\n","import apiBundles from './api'\nimport filterBundle from './filters'\nimport viewsBundle from './views'\nimport docsBundle from './docs'\nimport genomesBundle from './genomes'\nimport fieldCatalogBundle from './swaggerFields'\nimport exporterBundle from './exporter'\nimport ontologiesBundle from './ontologies'\nimport exprVizBundle from './exprViz'\n\nexport default [...apiBundles, docsBundle, filterBundle, viewsBundle, genomesBundle, fieldCatalogBundle, exporterBundle, ontologiesBundle, exprVizBundle];\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler'\nimport _ from 'lodash'\nimport binsClient from \"gramene-bins-client\";\nimport treesClient from \"gramene-trees-client\";\nimport {build} from \"gramene-taxonomy-with-genomes\";\n\nconst facets = [\n \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\",\n // \"{!facet.limit='100' facet.mincount='1' key='genetree'}gene_tree\",\n // \"{!facet.limit='100' facet.mincount='1' key='pathways'}pathways__ancestors\",\n // \"{!facet.limit='100' facet.mincount='1' key='domains'}domain_roots\",\n \"{!facet.limit='-1' facet.mincount='1' key='fixed_1000__bin'}fixed_1000__bin\",\n \"{!facet.limit='100' facet.mincount='0' key='AED' type='range' start=0 end=1.0 gap=0.01}MAKER__AED__attr_f\"\n];\nconst genomesOfInterest = '(taxon_id:2769) OR (taxon_id:3055) OR (taxon_id:3218) OR (taxon_id:3702) OR (taxon_id:3847) OR (taxon_id:4555) OR (taxon_id:4558) OR (taxon_id:4577) OR (taxon_id:13333) OR (taxon_id:15368) OR (taxon_id:29760) OR (taxon_id:39947) OR (taxon_id:55577) OR (taxon_id:88036) OR (taxon_id:214687)';\nconst sites = ['main','oryza','maize','sorghum','grapevine'];\nconst grameneSuggestions = createAsyncResourceBundle( {\n name: 'grameneSuggestions',\n actionBaseType: 'GRAMENE_SUGGESTIONS',\n persist: false,\n getPromise: ({store}) => {\n const t = store.selectSuggestionsQuery().replaceAll(':',' ').trim();\n const g = store.selectGrameneGenomes();\n const q = `/suggest?q={!boost b=relevance}name:${t}^5 ids:${t}^5 ids:${t}*^3 synonym:${t}^3 synonym:${t}*^2 text:${t}*^1`;\n // const promises = sites.map(site => fetch(`https://data.gramene.org/${site}${q}`));\n // return Promise.all(promises)\n return fetch(store.selectGrameneAPI() + q)\n .then(res => {\n return res.json()\n })\n .then(suggestions => {\n if (Object.keys(g.active).length > 0) {\n suggestions.grouped.category.groups.forEach(group => {\n group.doclist.docs.forEach(sugg => {\n sugg.num_genes = 0;\n sugg.taxon_id.forEach((id,idx) => {\n if (g.active[id] && !g.active[id].hidden) {\n sugg.num_genes += sugg.taxon_freq[idx]\n }\n })\n })\n })\n }\n return suggestions\n })\n }\n});\n\ngrameneSuggestions.reactGrameneSuggestions = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectSuggestionsQuery',\n (shouldUpdate, queryString) => {\n if (shouldUpdate && queryString) {\n return { actionCreator: 'doFetchGrameneSuggestions' }\n }\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsStatus = createSelector(\n 'selectGrameneSuggestionsShouldUpdate',\n 'selectGrameneSuggestionsIsLoading',\n 'selectGrameneSuggestionsRaw',\n 'selectSuggestionsQuery',\n (shouldUpdate, isLoading, suggestionsRaw, queryString) => {\n if (!queryString) return '';\n if (shouldUpdate) return 'update needed';\n if (isLoading) return 'loading';\n if (suggestionsRaw.data) return suggestionsRaw.data.grouped.category.matches + ' terms';\n console.error(suggestionsRaw)\n return 'error';\n }\n);\n\ngrameneSuggestions.selectGrameneSuggestionsReady = createSelector(\n 'selectGrameneSuggestionsStatus',\n (status) => {\n const regex = RegExp('terms$');\n return regex.test(status);\n }\n);\n\ngrameneSuggestions.doFocusFirstGrameneSuggestion = arg => ({dispatch, getState}) => {\n console.log('inside doFocusFirstGrameneSuggestion');\n};\n\nfunction compressLongTaxonName(node) {\n const fullName = node.name;\n const removedExtraineousWords = fullName.replace(/( Group$| subsp\\.| ssp\\.| var\\.| strain)/, '');\n let finalVersion;\n if (removedExtraineousWords.length > 20) {\n let words = removedExtraineousWords.split(' ');\n if (words.length === 2) {\n // abrreviate first word.\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+/, '$1.')\n }\n if (words.length > 2) {\n finalVersion = removedExtraineousWords.replace(/^([A-Z])[a-z]+\\s([a-z])[a-z]+/, '$1$2.')\n }\n }\n else {\n finalVersion = removedExtraineousWords;\n }\n node.short_name = finalVersion;\n}\n\nconst grameneTaxonomy = createAsyncResourceBundle({\n name: 'grameneTaxonomy',\n actionBaseType: 'GRAMENE_TAXONOMY',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/taxonomy?subset=gramene&rows=-1`)\n .then(res => res.json())\n .then(taxNodes => {\n let taxonomy = _.keyBy(taxNodes, '_id');\n taxNodes.forEach(t => {\n t._id = +t._id; // ensure taxonomy id is a number\n compressLongTaxonName(t);\n if (t.hasOwnProperty(\"is_a\")) {\n t.is_a.forEach(p_id => {\n const p = taxonomy[p_id];\n if (!p.hasOwnProperty('children')) p.children = [];\n p.children.push(t._id)\n })\n }\n });\n return taxonomy\n })\n }\n});\ngrameneTaxonomy.reactGrameneTaxonomy = createSelector(\n 'selectGrameneTaxonomyShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneTaxonomy' }\n }\n }\n);\nconst grameneMaps = createAsyncResourceBundle({\n name: 'grameneMaps',\n actionBaseType: 'GRAMENE_MAPS',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/maps?rows=-1`)\n .then(res => res.json())\n .then(maps => {\n maps.forEach(m => {\n m.regionLength = {};\n m.regions.names.forEach((rname,idx) => {\n m.regionLength[rname] = m.regions.lengths[idx]\n })\n })\n return _.keyBy(maps, 'taxon_id');\n })\n }\n});\ngrameneMaps.reactGrameneMaps = createSelector(\n 'selectGrameneMapsShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneMaps' }\n }\n }\n);\n\nconst expressionStudies = createAsyncResourceBundle( {\n name: 'expressionStudies',\n actionBaseType: 'EXPRESSION_STUDIES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => _.groupBy(res, 'taxon_id'))\n }\n});\nexpressionStudies.reactExpressionStudies = createSelector(\n 'selectExpressionStudiesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchExpressionStudies' }\n }\n }\n);\n\nconst expressionSamples = createAsyncResourceBundle( {\n name: 'expressionSamples',\n actionBaseType: 'EXPRESSION_SAMPLES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n .then(res => res.json())\n .then(samples => _.groupBy(samples, 'experiment'))\n .then(studies => {\n Object.keys(studies).forEach(study => {\n studies[study].forEach(sample => {\n sample.order = +sample.group.replace('g','')\n });\n studies[study].sort((a,b) => a.order - b.order);\n })\n return studies\n })\n }\n});\nexpressionSamples.reactExpressionSamples = createSelector(\n 'selectExpressionSamplesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchExpressionSamples' }\n }\n }\n);\n\nconst curatedGenes = createAsyncResourceBundle( {\n name: 'curatedGenes',\n actionBaseType: 'CURATED_GENES',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`https://devdata.gramene.org/curation/curations?rows=0&minFlagged=0&since=12-12-2029`)\n .then(res => res.json())\n .then(curation => _.keyBy(curation.genes, 'gene_id'))\n }\n});\ncuratedGenes.reactCuratedGenes = createSelector(\n 'selectCuratedGenesShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchCuratedGenes' }\n }\n }\n);\n\nconst grameneGermplasm = createAsyncResourceBundle( {\n name: 'grameneGermplasm',\n actionBaseType: 'GRAMENE_GERMPLASM',\n persist: true,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/germplasm?rows=-1`)\n .then(res => res.json())\n .then(res => {\n res.forEach(g => {\n if (!g.subpop) {\n g.subpop = \"?\"\n }\n });\n return _.groupBy(res, 'ens_id')\n })\n }\n});\ngrameneGermplasm.reactGrameneGermplasm = createSelector(\n 'selectGrameneGermplasmShouldUpdate',\n (shouldUpdate) => {\n if (shouldUpdate) {\n return { actionCreator: 'doFetchGrameneGermplasm' }\n }\n }\n);\n//\n// const grameneExpressionAssays = createAsyncResourceBundle( {\n// name: 'grameneExpressionAssays',\n// actionBaseType: 'GRAMENE_EXPRESSION_ASSAYS',\n// persist: true,\n// getPromise: ({store}) => {\n// return fetch(`${store.selectGrameneAPI()}/assays?rows=-1`)\n// .then(res => res.json())\n// .then(res => {\n// let expr={};\n// res.forEach(assay => {\n// if (!expr.hasOwnProperty(assay.taxon_id)) {\n// expr[assay.taxon_id] = {};\n// }\n// if (!expr[assay.taxon_id].hasOwnProperty(assay.experiment)) {\n// expr[assay.taxon_id][assay.experiment] = [];\n// }\n// assay.order = +assay.group.replace('g','');\n// expr[assay.taxon_id][assay.experiment].push(assay);\n// });\n// // sort each experiment\n// for (const tid in expr) {\n// for (const exp in expr[tid]) {\n// expr[tid][exp].sort((a,b) => a.order - b.order);\n// }\n// }\n// return expr;\n// })\n// }\n// });\n// grameneExpressionAssays.reactGrameneExpressionAssays = createSelector(\n// 'selectGrameneExpressionAssaysShouldUpdate',\n// (shouldUpdate) => {\n// if (shouldUpdate) {\n// return { actionCreator: 'doFetchGrameneExpressionAssays' }\n// }\n// }\n// );\n\nconst MAKERAttribs = [\n 'MAKER__AED__attr_f',\n 'MAKER__QI1__attr_i',\n 'MAKER__QI2__attr_f',\n 'MAKER__QI3__attr_f',\n 'MAKER__QI4__attr_f',\n 'MAKER__QI5__attr_f',\n 'MAKER__QI6__attr_f',\n 'MAKER__QI7__attr_i',\n 'MAKER__QI8__attr_i',\n 'MAKER__QI9__attr_i'\n];\nconst geneAttribs = {\n \"MAKER transcript metrics\" : [\n { name: \"AED\", description: \"Annotation Edit Distance\", dtype: \"f\", fieldName: \"MAKER__AED__attr_f\" },\n { name: \"QI1\", description: \"Length of the 5' UTR\", dtype: \"i\", fieldName: \"MAKER__QI1__attr_i\" },\n { name: \"QI2\", description: \"Fraction of splice sites confirmed by an EST alignment\", dtype: \"f\", fieldName: \"MAKER__QI2__attr_f\" },\n { name: \"QI3\", description: \"Fraction of exons that overlap an EST alignment\", dtype: \"f\", fieldName: \"MAKER__QI3__attr_f\" },\n { name: \"QI4\", description: \"Fraction of exons that overlap EST or Protein alignments\", dtype: \"f\", fieldName: \"MAKER__QI4__attr_f\" },\n // { name: \"QI5\", description: \"Fraction of splice sites confirmed by a SNAP prediction\", dtype: \"f\", fieldName: \"MAKER__QI5__attr_f\" },\n // { name: \"QI6\", description: \"Fraction of exons that overlap a SNAP prediction\", dtype: \"f\", fieldName: \"MAKER__QI6__attr_f\" },\n { name: \"QI7\", description: \"Number of exons in the mRNA\", dtype: \"i\", fieldName: \"MAKER__QI7__attr_i\" },\n { name: \"QI8\", description: \"Length of the 3' UTR\", dtype: \"i\", fieldName: \"MAKER__QI8__attr_i\" },\n { name: \"QI9\", description: \"Length of the protein sequence produced by the mRNA\", dtype: \"i\", fieldName: \"MAKER__QI9__attr_i\" }\n ]\n}\nconst statsFields = geneAttribs['MAKER transcript metrics'].map(\n // (f) => `stats.field={!min=true max=true count=true mean=true stddev=true percentiles='20,40,60,80,90,95,99'}${f}`\n (f) => `stats.field={!min=true max=true count=true mean=true stddev=true percentiles='10,20,30,40,50,60,70,80,90,99.99'}${f.fieldName}`\n);\n\nconst grameneGeneAttribs = createAsyncResourceBundle( {\n name: 'grameneGeneAttribs',\n actionBaseType: 'GRAMENE_GENE_ATTRIBS',\n persist: false,\n getPromise: ({store}) => {\n return fetch(`${store.selectGrameneAPI()}/geneAttributes`).then(res => geneAttribs)\n }\n});\ngrameneGeneAttribs.reactGrameneGeneAttribs = createSelector(\n 'selectGrameneGeneAttribsShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViews',\n (shouldUpdate, status, views) => {\n if (shouldUpdate && (status === 'finished' || status === 'ready')) {\n const byId = _.keyBy(views.options,'id');\n if (byId.attribs.show === \"on\") {\n return { actionCreator: 'doFetchGrameneGeneAttribs' }\n }\n }\n }\n);\n\nconst grameneSearch = createAsyncResourceBundle({\n name: 'grameneSearch',\n actionBaseType: 'GRAMENE_SEARCH',\n persist: false,\n getPromise: ({store}) => {\n const offset = store.selectGrameneSearchOffset();\n const rows = store.selectGrameneSearchRows();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps();\n const taxa = Object.keys(g.active).filter(tid => !m[tid].hidden);\n let fq='';\n if (taxa.length) {\n console.log('search add a fq for ',taxa);\n fq = `&fq=taxon_id:(${taxa.join(' OR ')})`;\n }\n // return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}&stats=true&${statsFields.join('&')}`)\n return fetch(`${store.selectGrameneAPI()}/search?q=${store.selectGrameneFiltersQueryString()}&facet.field=${facets}&rows=${rows}&start=${offset}${fq}`)\n .then(res => res.json())\n .then(res => {\n res.response.docs.forEach(d => {\n d.can_show = {};\n d.capabilities.forEach(c => {\n d.can_show[c]=true;\n })\n });\n return res;\n })\n }\n});\ngrameneSearch.reactGrameneSearch = createSelector(\n 'selectGrameneSearchShouldUpdate',\n 'selectGrameneFiltersStatus',\n 'selectGrameneGenomes',\n (shouldUpdate, status, genomes) => {\n if (shouldUpdate && status === 'search' && genomes) {\n return { actionCreator: 'doFetchGrameneSearch' }\n }\n }\n);\n\nfunction formatFacetCountsForViz(a) {\n let res = {\n count: a.length/2,\n displayName: \"fixed_1000__bin\",\n data: {},\n sorted: []\n };\n let counts = [];\n for(let i=0;i<a.length;i+=2) {\n const fc = {\n id: +a[i],\n count: +a[i+1]\n };\n res.data[a[i]] = fc;\n counts.push(fc);\n }\n res.sorted = counts.sort((a,b) => a.id - b.id);\n return res;\n}\n\n// bundle to prepare data for the TaxDist component\nconst grameneTaxDist = {\n name: 'grameneTaxDist',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n return state;\n }\n },\n selectGrameneTaxDist: createSelector(\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n (grameneSearch,grameneTaxonomy,grameneMaps) => {\n if (grameneSearch && grameneTaxonomy && grameneMaps) {\n _.forIn(grameneMaps, (map, tid) => {\n grameneTaxonomy[tid].name = map.display_name;\n });\n const binnedResults = formatFacetCountsForViz(grameneSearch.facet_counts.facet_fields.fixed_1000__bin);\n let speciesTree = treesClient.taxonomy.tree(Object.values(grameneTaxonomy));\n let binMapper = binsClient.bins(grameneMaps);\n let taxDist = build(binMapper, speciesTree);\n taxDist.setBinType('fixed',1000);\n taxDist.setResults(binnedResults);\n return taxDist;\n }\n return null;\n }\n )\n};\n\n// this query will give the sorghum orthologs of AT1G01260\n// want to provide these on non-sorghum genes if available\n// http://data.gramene.org/search?q=homology__all_orthologs:AT1G01260&fq=taxon_id:4558&fl=id\nconst grameneOrthologs = {\n name: 'grameneOrthologs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_ORTHOLOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_ORTHOLOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestOrthologs: geneId => ({dispatch, store}) => {\n const orthologs = store.selectGrameneOrthologs();\n if (!orthologs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_ORTHOLOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const taxonId = store.selectTargetTaxonId();\n fetch(`${API}/search?q=homology__all_orthologs:${geneId}&fq=taxon_id:${taxonId}&fl=id`)\n .then(res => res.json())\n .then(res => {\n let newOrthologs = {};\n newOrthologs[geneId] = res.response.docs.map(d => d.id);\n dispatch({type: 'GRAMENE_ORTHOLOGS_RECEIVED', payload: newOrthologs})\n })\n }\n },\n selectGrameneOrthologs: state => state.grameneOrthologs\n};\n\nconst grameneParalogs = {\n name: 'grameneParalogs',\n getReducer: () => {\n const initialState = {};\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_PARALOGS_REQUESTED':\n if (!state.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState[payload] = [];\n return newState;\n }\n break;\n case 'GRAMENE_PARALOGS_RECEIVED':\n return Object.assign({}, state, payload);\n }\n return state;\n }\n },\n doRequestParalogs: (geneId,supertree,taxon_id) => ({dispatch, store}) => {\n const paralogs = store.selectGrameneParalogs();\n if (!paralogs.hasOwnProperty(geneId)) {\n dispatch({type: 'GRAMENE_PARALOGS_REQUESTED', payload: geneId});\n const API = store.selectGrameneAPI();\n const q= supertree ? `supertree_attr_s:${supertree}` : `homology__within_species_paralog:${geneId}`;\n fetch(`${API}/search?q=${q}&rows=1000&fq=taxon_id:${taxon_id}`)\n .then(res => res.json())\n .then(res => {\n let newParalogs = {};\n newParalogs[geneId] = res.response.numFound > 0 ? res.response.docs.map(d => d.id) : [geneId];\n dispatch({type: 'GRAMENE_PARALOGS_RECEIVED', payload: newParalogs})\n })\n }\n },\n selectGrameneParalogs: state => state.grameneParalogs\n};\n\n// function selectFacetIDs(store, field) {\n// const path = `grameneGenes.data.facet_counts.facet_fields.${field}`;\n// if (_.has(store,path)) {\n// const flat_facets = _.get(store,path);\n// let idList = [];\n// if (isNaN(+flat_facets[0])) {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(flat_facets[i])\n// }\n// }\n// else {\n// for (let i = 0; i < flat_facets.length; i += 2) {\n// idList.push(+flat_facets[i])\n// }\n// if (idList.length === 1) idList.push(0);\n// }\n// return idList;\n// }\n// }\n//\n// grameneGenes.selectDomainFacets = store => selectFacetIDs(store, 'domains');\n// grameneGenes.selectPathwayFacets = store => selectFacetIDs(store, 'pathways');\n// grameneGenes.selectTaxonomyFacets = store => selectFacetIDs(store, 'taxon_id');\n//\n// const grameneDomains = createAsyncResourceBundle({\n// name: 'grameneDomains',\n// actionBaseType: 'GRAMENE_DOMAINS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/domains?rows=-1&idList=${store.selectDomainFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {domains: docs, numFound: docs.length}})\n// });\n//\n// const gramenePathways = createAsyncResourceBundle({\n// name: 'gramenePathways',\n// actionBaseType: 'GRAMENE_PATHWAYS',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/pathways?rows=-1&idList=${store.selectPathwayFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {pathways: docs, numFound: docs.length}})\n// });\n//\n// const grameneTaxonomy = createAsyncResourceBundle({\n// name: 'grameneTaxonomy',\n// actionBaseType: 'GRAMENE_TAXONOMY',\n// persist: false,\n// getPromise: ({store}) =>\n// fetch(`${store.selectGrameneAPI()}/taxonomy?rows=-1&idList=${store.selectTaxonomyFacets().join(',')}`)\n// .then(res => res.json())\n// .then(docs => {return {taxonomy: docs, numFound: docs.length}})\n// });\n\n\nexport default [grameneSuggestions, grameneSearch, grameneGeneAttribs, grameneMaps, grameneTaxonomy, grameneTaxDist, grameneOrthologs, grameneParalogs, curatedGenes, grameneGermplasm, expressionSamples, expressionStudies];\n","import {createSelector} from \"redux-bundler\";\nimport _ from 'lodash';\nimport ReactGA from 'react-ga4'\nconst MAX_IDLIST_LENGTH = 20;\n\nfunction findNodeWithLeftIdx(node, idx) {\n if (node.leftIdx === idx) {\n return node;\n }\n let result=null;\n if (node.leftIdx < idx && node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n if (child.rightIdx > idx) {\n child.parentIdx = node.leftIdx;\n const res = findNodeWithLeftIdx(child, idx);\n if (res) result = res;\n }\n })\n }\n return result;\n}\n\nfunction markSubtree(node, source, invert) {\n node.marked = (node.leftIdx >= source.leftIdx && node.rightIdx <= source.rightIdx);\n if (invert) node.marked = !node.marked;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n markSubtree(child, source, invert);\n })\n }\n}\n\nfunction reindexTree(node, idx) {\n node.leftIdx = idx;\n idx++;\n if (node.hasOwnProperty('children')) {\n node.children.forEach(child => {\n idx = reindexTree(child, idx);\n });\n }\n node.rightIdx = idx;\n idx++;\n return idx;\n}\n\nconst grameneFilters = {\n name: 'grameneFilters',\n getReducer: () => {\n const initialState = {\n status: 'init', // others include 'search', 'waiting' and 'ready'\n operation: 'AND',\n negate: false,\n marked: false,\n leftIdx: 0,\n rightIdx: 1,\n children: [],\n showMarked: false,\n showMenu: false,\n moveCopyMode: '',\n searchOffset: 0,\n rows: 20\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_FILTERS_CLEARED': {\n newState = Object.assign({}, initialState, {\n status: 'search',\n children: []\n });\n return newState;\n }\n case 'GRAMENE_FILTER_ADDED': {\n const idx = state.rightIdx;\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: idx + 2,\n searchOffset: 0\n });\n let child = _.pick(payload, ['fq_field', 'fq_value', 'name', 'category']);\n child.leftIdx = idx;\n child.rightIdx = idx + 1;\n child.negate = false;\n child.showMenu = false;\n newState.children.push(child);\n markSubtree(newState, child, false);\n return newState;\n }\n case 'GRAMENE_FILTER_TREE_ADDED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n rightIdx: payload.rightIdx + 1,\n searchOffset: 0\n });\n newState.children.push(payload);\n markSubtree(newState, payload, false);\n return newState;\n }\n case 'GRAMENE_FILTER_SET_ADDED': {\n // create a filter with the payload.operation and children payload.filters\n let filter = {\n leftIdx: state.rightIdx,\n rightIdx: state.rightIdx + (payload.filters.length) * 2 + 1,\n operation: payload.operation,\n negate: false,\n showMenu: false,\n children: payload.filters\n };\n if (payload.warning) {\n filter.warning = payload.warning\n }\n let nextIdx = filter.leftIdx+1;\n payload.filters.forEach(f => {\n f.leftIdx = nextIdx++;\n f.rightIdx = nextIdx++;\n f.negate = false;\n f.showMenu = false;\n });\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0,\n rightIdx: filter.rightIdx + 1\n });\n newState.children.push(filter);\n markSubtree(newState, filter, false);\n return newState;\n }\n case 'GRAMENE_FILTER_NEGATED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n node.negate = !node.negate;\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_DELETED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n if (node) {\n let parent = findNodeWithLeftIdx(newState, node.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== node.leftIdx);\n reindexTree(newState, 0);\n markSubtree(newState, parent, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_OPERATION_CHANGED': {\n if (payload.hasOwnProperty('operation')) {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n searchOffset: 0\n });\n let node = findNodeWithLeftIdx(newState, payload.leftIdx);\n node.operation = node.operation === 'AND' ? 'OR' : 'AND';\n markSubtree(newState, node, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_MOVED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n let parent = findNodeWithLeftIdx(newState, source.parentIdx);\n parent.children = parent.children.filter(child => child.leftIdx !== source.leftIdx);\n target.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n target.children.push(source);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_COPIED': {\n newState = Object.assign({}, state, {\n status: 'search',\n showMarked: true,\n moveCopyMode: '',\n searchOffset: 0\n });\n let source = findNodeWithLeftIdx(newState, payload.source.leftIdx);\n let target = findNodeWithLeftIdx(newState, payload.target.leftIdx);\n if (source && target) {\n source.showMenu = false;\n if (!target.hasOwnProperty('children')) {\n let targetCopy = Object.assign({}, target);\n target.children = [targetCopy];\n target.operation = 'OR';\n target.negate = false;\n delete target.fq_field;\n delete target.fq_value;\n delete target.name;\n delete target.category;\n }\n let sourceCopy = Object.assign({}, source);\n target.children.push(sourceCopy);\n reindexTree(newState, 0);\n markSubtree(newState, target, false);\n return newState;\n }\n break;\n }\n case 'GRAMENE_FILTER_TARGETS_MARKED':\n newState = Object.assign({}, state, {\n showMarked: true,\n moveCopyMode: payload.mode,\n moveCopySource: payload.source\n });\n markSubtree(newState, payload.source, true);\n return newState;\n case 'GRAMENE_FILTER_TARGETS_UNMARKED':\n newState = Object.assign({}, state, {\n showMarked: false\n });\n return newState;\n case 'GRAMENE_FILTERS_REPLACED':\n payload.status = 'search';\n payload.searchOffset = 0;\n return payload;\n case 'GRAMENE_FILTERS_STATUS_CHANGED':\n if (!(state.status === 'ready' && payload === 'waiting')) {\n return Object.assign({}, state, {status: payload})\n }\n break;\n case 'GRAMENE_FILTERS_SET_SHOW_MARKED':\n return Object.assign({}, state, {showMarked: payload});\n case 'GRAMENE_FILTER_MENU_TOGGLED':\n payload.showMenu = !payload.showMenu;\n return Object.assign({}, state);\n case 'GRAMENE_SEARCH_PAGE_REQUESTED':\n return Object.assign({}, state, {status: 'search', searchOffset: payload * state.rows});\n case 'GRAMENE_SEARCH_FETCH_STARTED':\n return Object.assign({}, state, {status: 'loading'});\n case 'GRAMENE_SEARCH_FETCH_FINISHED':\n return Object.assign({}, state, {status: 'finished'});\n case 'GRAMENE_GENOMES_UPDATED':\n if (state.status === 'ready') {\n return Object.assign({}, state, {status: 'search'});\n }\n case 'URL_UPDATED':\n if (state.status === 'ready') {\n return Object.assign({}, initialState, {children:[]})\n }\n break;\n case 'APP_IDLE':\n if (state.showMarked) {\n return Object.assign({}, state, {showMarked: false})\n }\n }\n return state;\n }\n },\n doNegateGrameneFilter: filter => ({dispatch, getState}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_NEGATED', payload: filter}\n ]\n })\n },\n doDeleteGrameneFilter: filter => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_TAXONOMY_CLEARED'},\n {type: 'GRAMENE_FILTER_DELETED', payload: filter}\n ]\n })\n },\n doChangeGrameneFilterOperation: filter => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_OPERATION_CHANGED', payload: filter}\n ]\n })\n },\n doMoveOrCopyGrameneFilter: (target) => ({dispatch, getState}) => {\n const state = getState();\n if (state.grameneFilters.moveCopyMode) {\n const source = state.grameneFilters.moveCopySource;\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: `GRAMENE_FILTER_${state.grameneFilters.moveCopyMode.toUpperCase()}D`, payload: {source, target}}\n ]\n })\n }\n },\n doCopyGrameneFilter: (source, target) => ({dispatch, getState}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_COPIED', payload: {source, target}}\n ]\n })\n },\n doMarkGrameneFilterTargets: (source, mode) => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_TARGETS_MARKED', payload: {source:source, mode:mode}})\n },\n doUnmarkGrameneFilterTargets: () => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_TARGETS_UNMARKED'})\n },\n doAcceptGrameneSuggestion: suggestion => ({dispatch, getState}) => {\n if (!suggestion.name) {\n suggestion.name = suggestion.display_name;\n }\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: suggestion}\n ]\n })\n },\n doAddGrameneRangeQuery: terms => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_SET_ADDED', payload: {operation: 'AND', filters: terms}}\n ]\n })\n },\n doToggleGrameneFilterMenu: node => ({dispatch}) => {\n dispatch({type: 'GRAMENE_FILTER_MENU_TOGGLED', payload: node})\n },\n doRequestResultsPage: page => ({dispatch}) => {\n dispatch(\n {type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_SEARCH_PAGE_REQUESTED', payload: page}\n ]\n })\n },\n doReplaceGrameneFilters: filters => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_REPLACED', payload: filters}\n ]\n })\n },\n doClearGrameneFilters: () => ({dispatch}) => {\n dispatch({\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_CLEARED'}\n ]\n })\n },\n selectGrameneFilters: state => state.grameneFilters,\n selectGrameneFiltersStatus: state => state.grameneFilters.status,\n selectGrameneFiltersQueryString: state => {\n const hasSpaces = new RegExp(/^[^\\[\\(].*\\s/);\n const isQuery = new RegExp(/\\([a-zA-Z0-9_]+:[a-zA-Z0-9_]+\\s/);\n const isRegionQuery = new RegExp(/^\\(map:/);\n const idWithColon = new RegExp(/^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+$/);\n function getQuery(node) {\n const negate = node.negate ? 'NOT ' : '';\n if (node.hasOwnProperty('children')) {\n // do some recursion\n return `${negate}(${node.children.map(c => getQuery(c)).sort().join(` ${node.operation} `)})`\n }\n else {\n // this node is a suggestion\n if (node.fq_field === 'location' && isRegionQuery.test(node.fq_value))\n return `${negate}${node.fq_value}`\n if (isQuery.test(node.fq_value))\n return `${negate}${node.fq_value.replace(/:/g,'\\\\:')}`;\n if (hasSpaces.test(node.fq_value))\n return `${negate}${node.fq_field}:\"${node.fq_value}\"`;\n else if (idWithColon.test(node.fq_value))\n return `${negate}${node.fq_field}:${node.fq_value.replace(/:/g,'\\\\:')}`;\n else\n return `${negate}${node.fq_field}:${node.fq_value}`\n }\n }\n if (state.grameneFilters.rightIdx === 1) {\n return '*:*';\n }\n return `*:* AND (${getQuery(state.grameneFilters)})`;\n },\n selectGrameneSearchOffset: state => state.grameneFilters.searchOffset,\n selectGrameneSearchRows: state => state.grameneFilters.rows\n};\n\nconst handleIdList = (queryObject) => {\n let actions = [{type: 'GRAMENE_SEARCH_CLEARED'}];\n let ids = _.uniq(queryObject.idList.split(','));\n let warning = null;\n if (ids.length > MAX_IDLIST_LENGTH) {\n ids = _.slice(ids, 0, MAX_IDLIST_LENGTH);\n warning = `The idList query parameter is limited to ${MAX_IDLIST_LENGTH} genes`\n }\n let filters = ids.map((id,idx) => {\n return {\n category: 'Gene',\n name: id,\n fq_field: 'id',\n fq_value: id\n }\n });\n if (filters.length === 1) {\n actions.push({type: 'GRAMENE_FILTER_ADDED', payload: filters[0]})\n }\n else {\n let action = {type: 'GRAMENE_FILTER_SET_ADDED', payload: {operation: 'OR', filters:filters}};\n if (warning) {\n action.payload.warning = warning\n }\n actions.push(action)\n }\n return { type: 'BATCH_ACTIONS', actions: actions };\n};\n\ngrameneFilters.reactGrameneFilters = createSelector(\n 'selectQueryObject',\n 'selectGrameneFilters',\n 'selectActiveGenomes',\n 'selectUrlObject',\n (queryObject, filters, genomes, myUrl) => {\n if (filters.status === 'init') {\n if (queryObject.filters) {\n const newFilters = JSON.parse(queryObject.filters);\n let actions = [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTERS_REPLACED', payload: newFilters}\n ];\n if (queryObject.genomes) {\n let active={};\n queryObject.genomes.split(',').forEach(t => {\n active[t]=true\n });\n actions.push({type: 'GRAMENE_GENOMES_UPDATED', payload: active});\n }\n return { type: 'BATCH_ACTIONS', actions: actions };\n }\n if (queryObject.hasOwnProperty('sugg')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: JSON.parse(queryObject.sugg)}\n ]\n };\n }\n if (queryObject.hasOwnProperty('suggestion')) {\n const url = new URL(myUrl.href);\n url.search = '';\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'SUGGESTIONS_QUERY_CHANGED', payload: {query: queryObject.suggestion}}\n ]\n };\n }\n if (queryObject.hasOwnProperty('idList')) {\n return handleIdList(queryObject);\n }\n if (queryObject.hasOwnProperty('fq_field') && queryObject.hasOwnProperty('fq_value')\n && queryObject.hasOwnProperty('category') && queryObject.hasOwnProperty('name')) {\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_FILTER_ADDED', payload: queryObject}\n ]\n };\n }\n const url = new URL(myUrl.href);\n if (url.pathname === '/genes') {\n return {type: 'GRAMENE_FILTERS_CLEARED'}\n }\n }\n if (filters.status === 'finished') {\n const url = new URL(myUrl.href);\n url.search = `filters=${JSON.stringify(Object.assign({}, filters, {status: 'init'}))}&genomes=${genomes.join(',')}`;\n ReactGA.event({\n category: \"Gene Search\",\n action: \"filter finished\",\n label: url.search\n });\n return {\n type: 'BATCH_ACTIONS', actions: [\n {type: 'URL_UPDATED', payload: {url: url.href, replace:false}},\n {type: 'GRAMENE_FILTERS_STATUS_CHANGED', payload: 'ready'}\n ]\n }\n }\n }\n);\n\nexport default grameneFilters;\n","import { createSelector } from 'redux-bundler';\n\nconst grameneViews = {\n name: 'grameneViews',\n getReducer: () => {\n const initialState = {\n options: [\n {\n id: 'help',\n name: 'Help / Demo',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'taxonomy',\n name: 'Taxonomic distribution',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'list',\n name: 'Gene list',\n show: 'on',\n shouldScroll: false\n },\n {\n id: 'exprViz',\n name: 'Expression visualization',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'userLists',\n name: 'User Gene Lists',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'export',\n name: 'Data exporter',\n show: 'off',\n shouldScroll: false\n },\n {\n id: 'expression',\n name: 'Gene expression',\n show: 'off',\n shouldScroll: false,\n desiredSamples: {}\n },\n {\n id: 'attribs',\n name: 'Gene attributes',\n show: 'off',\n shouldScroll: false\n }\n // {\n // id: 'domains',\n // name: 'Domains',\n // show: 'disabled'\n // },\n // {\n // id: 'go',\n // name: 'GO terms',\n // show: 'disabled'\n // }\n ],\n touched: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_VIEW_TOGGLED':\n newState = Object.assign({},state);\n newState.touched = { ...(state.touched || {}), [payload]: true };\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'off' : 'on'\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_CLICKED':\n newState = Object.assign({}, state);\n newState.touched = { ...(state.touched || {}), [payload]: true };\n newState.options.forEach(view => {\n view.shouldScroll = false;\n if (view.id === payload) {\n view.show = view.show === 'on' ? 'on' : 'on';\n view.shouldScroll = view.show === 'on';\n }\n });\n return newState;\n case 'GRAMENE_VIEW_SCROLLED':\n newState = Object.assign({}, state);\n newState.options.forEach(v => v.shouldScroll = false)\n return newState;\n default:\n return state;\n }\n }\n },\n doToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_TOGGLED', payload: idx})\n },\n dontToggleGrameneView: idx => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_CLICKED', payload: idx})\n },\n doCancelShouldScroll: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_VIEW_SCROLLED', payload: null})\n },\n selectRawGrameneViews: state => state.grameneViews,\n selectGrameneViews: createSelector(\n 'selectRawGrameneViews',\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneFilters',\n (raw, config, search, filters) => {\n const overrides = (config && config.views) || null;\n const touched = raw.touched || {};\n const numFound = (search && search.response && search.response.numFound) || 0;\n const hasFilters = !!(filters && filters.rightIdx > 1);\n const resultDependentIds = new Set(['taxonomy', 'list', 'export']);\n const autoDisable = (numFound === 0) || !hasFilters;\n const hasFirebase = !!(config && config.firebaseConfig);\n\n let options = raw.options;\n if (!hasFirebase) {\n options = options.filter(v => v.id !== 'userLists');\n }\n if (overrides) {\n options = options.filter(v => overrides[v.id] !== 'hidden');\n }\n options = options.map(v => {\n if (resultDependentIds.has(v.id) && autoDisable) {\n return { ...v, show: 'off' };\n }\n if (!overrides) return v;\n const o = overrides[v.id];\n if (!o) return v;\n if (o === 'disabled') return { ...v, show: 'disabled' };\n if (touched[v.id]) return v;\n return { ...v, show: o };\n });\n const anyOtherOn = options.some(v => v.id !== 'help' && v.show === 'on');\n if (!anyOtherOn) {\n options = options.map(v => v.id === 'help' ? { ...v, show: 'on' } : v);\n }\n return { ...raw, options };\n }\n )\n};\n\nexport default grameneViews;\n","const grameneDocs = {\n name: 'grameneDocs',\n getReducer: () => {\n const initialState = {\n genes: {},\n trees: {},\n domains: {},\n pathways: {},\n expression: {},\n sequences: {},\n rnaSequences: {},\n pepSequences: {},\n studies: {},\n desiredSamples: {},\n consequences: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_CONSEQUENCES_REQUESTED':\n if (!state.consequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.consequences[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_CONSEQUENCES_RECEIVED':\n newState = Object.assign({}, state);\n newState.consequences = Object.assign({}, state.consequences, payload);\n return newState;\n case 'GRAMENE_GENE_REQUESTED':\n if (!state.genes.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.genes[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_GENE_RECEIVED':\n newState = Object.assign({}, state);\n newState.genes = Object.assign({}, state.genes, payload);\n return newState;\n case 'GRAMENE_TREE_REQUESTED':\n if (!state.trees.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.trees[payload] = {};\n return newState;\n }\n break;\n case 'GRAMENE_TREE_RECEIVED':\n newState = Object.assign({}, state);\n newState.trees = Object.assign({}, state.trees, payload);\n return newState;\n case 'GRAMENE_PATHWAYS_RECEIVED':\n newState = Object.assign({}, state);\n newState.pathways = Object.assign({}, state.pathways, payload);\n return newState;\n case 'ATLAS_STUDIES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies = Object.assign({}, state.studies, payload);\n return newState;\n case 'ATLAS_SAMPLES_REQUESTED':\n if (!state.studies.byID[payload].hasOwnProperty('samples')) {\n newState = Object.assign({},state);\n newState.studies.byID[payload].samples = [];\n return newState;\n }\n break;\n case 'ATLAS_SAMPLES_RECEIVED':\n newState = Object.assign({}, state);\n newState.studies.byID[payload.id].samples = payload.samples;\n return newState;\n case 'GENE_SEQUENCE_REQUESTED':\n if (!state.sequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.sequences[payload] = {};\n return newState;\n }\n break;\n case 'RNA_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.rnaSequences[payload] = {};\n return newState;\n }\n break;\n case 'PEP_SEQUENCE_REQUESTED':\n if (!state.rnaSequences.hasOwnProperty(payload)) {\n newState = Object.assign({}, state);\n newState.pepSequences[payload] = {};\n return newState;\n }\n break;\n case 'GENE_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.sequences = Object.assign({}, state.sequences);\n newState.sequences[payload.id] = payload.geneSeq;\n return newState;\n case 'RNA_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.rnaSequences = Object.assign({}, state.rnaSequences);\n newState.rnaSequences[payload.id] = payload.RnaSeq;\n return newState;\n case 'PEP_SEQUENCE_RECEIVED':\n newState = Object.assign({}, state);\n newState.pepSequences = Object.assign({}, state.pepSequences);\n newState.pepSequences[payload.id] = payload.PepSeq;\n return newState;\n case 'PARALOG_EXPRESSION_REQUESTED':\n if (!state.expression.hasOwnProperty(payload)) {\n newState = Object.assign({},state);\n newState.expression[payload] = [];\n return newState;\n }\n break;\n case 'PARALOG_EXPRESSION_RECEIVED':\n newState = Object.assign({}, state);\n newState.expression = Object.assign({}, state.expression);\n newState.expression[payload.id] = payload.paralogs;\n return newState;\n case 'EXPRESSION_SAMPLE_TOGGLED':\n newState = Object.assign({}, state);\n newState.desiredSamples = Object.assign({}, state.desiredSamples);\n if (newState.desiredSamples.hasOwnProperty(payload)) {\n delete newState.desiredSamples[payload]\n }\n else {\n newState.desiredSamples[payload] = {status: 'need'}\n }\n return newState;\n }\n return state;\n }\n },\n doToggleExpressionSample: id => ({dispatch}) => {\n dispatch({type: 'EXPRESSION_SAMPLE_TOGGLED', payload: id});\n },\n doRequestVEP: id => ({dispatch, store}) => {\n const consequences = store.selectGrameneConsequences();\n if (!consequences.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_CONSEQUENCES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=id:${id}&fl=id,VEP__*`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.response.docs.forEach(g => {\n genes[g.id] = g;\n });\n dispatch({type: 'GRAMENE_CONSEQUENCES_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneGene: id => ({dispatch, store}) => {\n const genes = store.selectGrameneGenes();\n if (!genes.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_GENE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genes?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let genes = {};\n res.forEach(g => {\n genes[g._id] = g;\n });\n dispatch({type: 'GRAMENE_GENE_RECEIVED', payload: genes})\n })\n }\n },\n doRequestGrameneTree: id => ({dispatch, store}) => {\n const trees = store.selectGrameneTrees();\n const maps = store.selectGrameneMaps();\n if (!trees.hasOwnProperty(id)) {\n dispatch({type: 'GRAMENE_TREE_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/genetrees?idList=${id}`)\n .then(res => res.json())\n .then(res => {\n let trees = {};\n res.forEach(t => {\n function update_taxon_name(node) {\n if (maps.hasOwnProperty(node.taxon_id)) {\n node.taxon_name = maps[node.taxon_id].display_name\n }\n else if (node.taxon_id === 1100004558) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45580023 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Sorghum bicolor\"\n }\n if (node.taxon_id === 45770001 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Zea mays\"\n }\n if (node.taxon_id === 297600009 && node.hasOwnProperty('children')) {\n node.taxon_name = \"Vitis vinifera\"\n }\n if (node.hasOwnProperty('children')) {\n node.children.forEach(c => update_taxon_name(c))\n }\n }\n update_taxon_name(t);\n trees[t._id] = t;\n });\n dispatch({type: 'GRAMENE_TREE_RECEIVED', payload: trees})\n })\n }\n },\n doRequestGramenePathways: ids => ({dispatch, store}) => {\n const pathways = store.selectGramenePathways();\n let newIds = ids.filter(id => !pathways.hasOwnProperty(id));\n if (newIds) {\n dispatch({type: 'GRAMENE_PATHWAYS_REQUESTED', payload: newIds});\n if (newIds.length === 1) newIds.push(0);\n fetch(`${store.selectGrameneAPI()}/pathways?idList=${newIds.join(',')}`)\n .then(res => res.json())\n .then(res => {\n let pathways = {};\n res.forEach(p => {\n pathways[p._id] = p;\n });\n dispatch({type: 'GRAMENE_PATHWAYS_RECEIVED', payload: pathways})\n })\n }\n },\n doRequestExpressionStudies: id => ({dispatch, store}) => {\n fetch(`${store.selectGrameneAPI()}/experiments?rows=-1`)\n .then(res => res.json())\n .then(res => {\n let studies = {byID:{},byTaxon:{}};\n res.forEach(s => {\n studies.byID[s._id] = s;\n if (! studies.byTaxon.hasOwnProperty(s.taxon_id)) {\n studies.byTaxon[s.taxon_id] = []\n }\n studies.byTaxon[s.taxon_id].push(s._id)\n })\n dispatch({type: 'ATLAS_STUDIES_RECEIVED', payload: studies})\n })\n },\n doRequestStudyMetadata: id => ({dispatch, store}) => {\n const studies = store.selectAtlasStudies();\n if (!studies.byID[id].hasOwnProperty('samples')) {\n dispatch({type: 'ATLAS_SAMPLES_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/assays?experiment=${id}&rows=-1`)\n .then(res => res.json())\n .then(samples => {\n dispatch({type: 'ATLAS_SAMPLES_RECEIVED', payload: {id, samples}})\n })\n }\n },\n doRequestGeneSequence: gene => ({dispatch, store}) => {\n const maps = store.selectGrameneMaps();\n const seqs = store.selectGeneSequences();\n const id = gene._id;\n const MAX_FLANK = 2000;\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'GENE_SEQUENCE_REQUESTED', payload: id});\n const start = gene.location.start > MAX_FLANK ? gene.location.start - MAX_FLANK : 1;\n const dnaLength = maps[gene.taxon_id].regionLength[gene.location.region];\n const end = gene.location.end + MAX_FLANK > dnaLength ? dnaLength : gene.location.end + MAX_FLANK;\n fetch(`${store.selectEnsemblAPI()}/sequence/region/${gene.system_name}/${gene.location.region}:${start}..${end}:${gene.location.strand}?content-type=application/json`)\n .then(res => res.json())\n .then(geneSeq => {\n const x = geneSeq.id.split(':');\n geneSeq.genome = x[1];\n geneSeq.start = +x[3];\n geneSeq.end = +x[4];\n dispatch({type: 'GENE_SEQUENCE_RECEIVED', payload: {id, geneSeq}});\n })\n }\n },\n doRequestRnaSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectRnaSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'RNA_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=cdna&content-type=application/json`)\n .then(res => res.json())\n .then(RnaSeq => {\n dispatch({type: 'RNA_SEQUENCE_RECEIVED', payload: {id, RnaSeq}});\n })\n }\n },\n doRequestPepSequence: (id,gene) => ({dispatch, store}) => {\n const seqs = store.selectPepSequences();\n if (!seqs.hasOwnProperty(id)) {\n dispatch({type: 'PEP_SEQUENCE_REQUESTED', payload: id});\n fetch(`${store.selectEnsemblAPI()}/sequence/id/${id}?species=${gene.system_name}&type=protein&content-type=application/json`)\n .then(res => res.json())\n .then(PepSeq => {\n dispatch({type: 'PEP_SEQUENCE_RECEIVED', payload: {id, PepSeq}});\n })\n }\n },\n doRequestParalogExpression: id => ({dispatch, store}) => {\n const expr = store.selectParalogExpression();\n if (!expr.hasOwnProperty(id)) {\n dispatch({type: 'PARALOG_EXPRESSION_REQUESTED', payload: id});\n fetch(`${store.selectGrameneAPI()}/search?q=homology__within_species_paralog:${id}&fl=id,atlas_id,name,*__expr&rows=100`)\n .then(res => res.json())\n .then(res => {\n const assay_re = /(.+)_g(\\d+)/;\n const paralogs = res.response.docs.map(d => {\n let p = {\n id: d.id,\n name: d.name,\n experiments: {},\n min:1000,\n max:0\n };\n if (d.atlas_id) {\n p.atlas_id = d.atlas_id;\n delete d.atlas_id;\n }\n delete d.id;\n delete d.name;\n Object.entries(d).forEach(assay => {\n const parsed = assay[0].match(assay_re);\n const expr = parsed[1].replace('_','-').replace('-tpms','');\n if (! p.experiments.hasOwnProperty(expr)) {\n p.experiments[expr] = [];\n }\n const g = parsed[2] - 1;\n const e = d[assay[0]];\n if (e < p.min) p.min = e;\n if (e > p.max) p.max = e;\n p.experiments[expr][g] = e;\n });\n return p;\n }).map(p => {\n for (const expr in p.experiments) {\n p.experiments[expr] = p.experiments[expr].filter(e => e >= 0);\n }\n return p;\n });\n dispatch({type: 'PARALOG_EXPRESSION_RECEIVED', payload: {id, paralogs}});\n })\n }\n },\n selectGrameneGenes: state => state.grameneDocs.genes,\n selectGrameneConsequences: state => state.grameneDocs.consequences,\n selectGrameneTrees: state => state.grameneDocs.trees,\n selectGramenePathways: state => state.grameneDocs.pathways,\n selectParalogExpression: state => state.grameneDocs.expression,\n selectGeneSequences: state => state.grameneDocs.sequences,\n selectRnaSequences: state => state.grameneDocs.rnaSequences,\n selectPepSequences: state => state.grameneDocs.pepSequences,\n selectAtlasStudies: state => state.grameneDocs.studies,\n selectDesiredSamples: state => state.grameneDocs.desiredSamples\n};\n\nexport default grameneDocs;\n","import {createSelector} from \"redux-bundler\";\nconst grameneGenomes = {\n name: 'grameneGenomes',\n getReducer: () => {\n const initialState = {\n show: false,\n active: {}\n };\n return (state = initialState, {type, payload}) => {\n let newState;\n switch (type) {\n case 'GRAMENE_GENOMES_TOGGLED':\n newState = Object.assign({},state);\n newState.show = !newState.show;\n return newState;\n case 'GRAMENE_GENOMES_UPDATED':\n newState = Object.assign({}, state);\n newState.active = payload;\n return newState;\n case 'GRAMENE_MAPS_FETCH_FINISHED':\n newState = Object.assign({}, state);\n Object.keys(payload).forEach(key => {newState.active[key] = true;});\n return newState;\n default:\n return state;\n }\n }\n },\n doShowGrameneGenomes: () => ({dispatch, getState}) => {\n dispatch({type: 'GRAMENE_GENOMES_TOGGLED'})\n },\n doInitializeGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_SEARCH_CLEARED'},\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes}]})\n },\n doUpdateGrameneGenomes: genomes => ({dispatch, getState}) => {\n dispatch({type: 'BATCH_ACTIONS', actions: [\n {type: 'GRAMENE_GENOMES_UPDATED', payload: genomes},\n {type: 'GRAMENE_GENOMES_TOGGLED'},\n {type: 'GRAMENE_SEARCH_CLEARED'}]})\n },\n doEnsureGrameneGenome: genome => ({dispatch, getState}) => {\n const state = getState();\n if (Object.keys(state.grameneGenomes.active).length > 0 && !state.grameneGenomes.active.hasOwnProperty(genome)) {\n let active = Object.assign({}, state.grameneGenomes.active);\n active[genome]=true;\n dispatch({type: 'GRAMENE_GENOMES_UPDATED', payload: active})\n }\n },\n selectGrameneGenomes: state => state.grameneGenomes,\n selectActiveGenomes: state => {\n return Object.keys(state.grameneGenomes.active)\n },\n selectActiveGenomeCount: createSelector(\n 'selectGrameneMaps',\n 'selectGrameneGenomes',\n (maps,genomes) => {\n if (maps && genomes) {\n return Object.keys(genomes.active).length || Object.keys(maps).length;\n }\n return 0;\n }\n )\n};\n\nexport default grameneGenomes;\n","import { createAsyncResourceBundle, createSelector } from 'redux-bundler';\nimport overlay from '../fieldCatalog.overlay.json';\nimport { study_info as VEP_STUDY_INFO } from '../vepStudyInfo';\n\n// Fields matched by these globs are multi-valued in Solr.\nconst MULTIVALUED_PATTERNS = [\n /__expr$/,\n /__ancestors$/,\n /__xrefs$/,\n /^VEP__/,\n /^homology__/\n];\n\nfunction parseCsvHeader(text) {\n if (!text) return [];\n const line = text.split(/\\r?\\n/, 1)[0] || '';\n return line\n .split(',')\n .map(s => s.trim().replace(/^\"|\"$/g, ''))\n .filter(Boolean);\n}\n\nfunction synthesizedValue(name) {\n return MULTIVALUED_PATTERNS.some(re => re.test(name)) ? [0] : 0;\n}\n\nfunction applyTemplate(tpl, match) {\n if (!tpl) return null;\n return tpl.replace(/\\$(\\d+)/g, (_, n) => match[+n] || '');\n}\n\nfunction vepDetailLabel(matchGroups) {\n const [, , system, sid] = matchGroups || [];\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n if (info) return info.label;\n return `${system}/${sid}`;\n}\n\nfunction vepDetailTsvHeader(matchGroups) {\n const [conseq, zyg, system, sid] = matchGroups || [];\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n const type = (info && info.type) || '?';\n const study = (info && info.label) || `${system}/${sid}`;\n return `${type}·${conseq}·${zyg}·${study}`;\n}\n\nfunction vepMergedLabel(matchGroups) {\n const [kind] = matchGroups || [];\n if (kind === 'NAT') return 'Merged natural population accessions';\n if (kind === 'EMS') return 'Merged EMS mutant accessions';\n return `Merged ${kind} accessions`;\n}\n\nfunction vepMergedTsvHeader(matchGroups) {\n const [kind] = matchGroups || [];\n return `merged·${kind}`;\n}\n\nfunction classifyKey(name, patterns) {\n for (const p of patterns) {\n const re = new RegExp(p.match);\n const m = name.match(re);\n if (m) {\n return {\n patternId: p.id,\n group: p.group,\n label: applyTemplate(p.labelTemplate, m) || name,\n multiValued: !!p.multiValued,\n expression: !!p.expression,\n isHidden: !!p.is_hidden,\n matchGroups: m.slice(1)\n };\n }\n }\n return null;\n}\n\nfunction inferType(value) {\n if (value === null || value === undefined) return 'unknown';\n if (Array.isArray(value)) {\n return 'array<' + (value.length ? inferType(value[0]) : 'unknown') + '>';\n }\n return typeof value;\n}\n\nfunction buildCatalog(sampleDocs) {\n const hidden = new Set(overlay.hidden || []);\n const overlayFields = overlay.fields || {};\n const patterns = overlay.patterns || [];\n const groupsMeta = overlay.groups || {};\n\n // Union keys from overlay.fields (hardcoded catalog entries) and sample docs.\n const keys = new Set(Object.keys(overlayFields));\n const sampleValues = {};\n for (const doc of (sampleDocs || [])) {\n for (const [k, v] of Object.entries(doc)) {\n keys.add(k);\n if (!(k in sampleValues)) sampleValues[k] = v;\n }\n }\n\n const fields = {};\n for (const name of keys) {\n if (hidden.has(name)) continue;\n\n const overlayEntry = overlayFields[name];\n const classified = overlayEntry ? null : classifyKey(name, patterns);\n if (classified && classified.isHidden) continue;\n const sampleVal = sampleValues[name];\n const sampleType = sampleVal !== undefined ? inferType(sampleVal) : null;\n\n const group = (overlayEntry && overlayEntry.group)\n || (classified && classified.group)\n || 'other';\n\n let label = (overlayEntry && overlayEntry.label)\n || (classified && classified.label)\n || name;\n let tsvHeader = null;\n if (classified && classified.patternId === 'vep_detail') {\n label = vepDetailLabel(classified.matchGroups);\n tsvHeader = vepDetailTsvHeader(classified.matchGroups);\n } else if (classified && classified.patternId === 'vep_merged') {\n label = vepMergedLabel(classified.matchGroups);\n tsvHeader = vepMergedTsvHeader(classified.matchGroups);\n }\n\n const multiValued = (overlayEntry && overlayEntry.multiValued)\n || (classified && classified.multiValued)\n || (sampleType && sampleType.startsWith('array<'))\n || false;\n\n fields[name] = {\n name,\n label,\n tsvHeader,\n group,\n order: overlayEntry && overlayEntry.order != null ? overlayEntry.order : null,\n description: (overlayEntry && overlayEntry.description) || '',\n type: sampleType || 'unknown',\n multiValued,\n patternId: classified ? classified.patternId : null,\n matchGroups: classified ? classified.matchGroups : null,\n expression: !!(classified && classified.expression),\n source: overlayEntry ? 'overlay' : 'sample'\n };\n }\n\n // Build groups (explicit overlay.order first, then natural sort by label)\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n const compareFields = (a, b) => {\n const ao = a.order, bo = b.order;\n if (ao != null && bo != null && ao !== bo) return ao - bo;\n if (ao != null && bo == null) return -1;\n if (ao == null && bo != null) return 1;\n return collator.compare(a.label, b.label);\n };\n const groupIds = new Set(Object.values(fields).map(f => f.group));\n const groups = Array.from(groupIds).map(id => ({\n id,\n label: (groupsMeta[id] && groupsMeta[id].label) || id,\n order: (groupsMeta[id] && groupsMeta[id].order) != null ? groupsMeta[id].order : 50,\n fields: Object.values(fields)\n .filter(f => f.group === id)\n .sort(compareFields)\n .map(f => f.name)\n })).sort((a, b) => a.order - b.order);\n\n return {\n fetchedAt: Date.now(),\n groups,\n fields\n };\n}\n\nconst grameneFieldCatalog = createAsyncResourceBundle({\n name: 'grameneFieldCatalog',\n actionBaseType: 'GRAMENE_FIELD_CATALOG',\n persist: true,\n staleAfter: 5 * 60 * 1000,\n getPromise: ({ store }) => {\n const api = store.selectGrameneAPI();\n const url = `${api}/search?q=*:*&rows=0&wt=csv&fl=*`;\n return fetch(url)\n .then(r => r.text())\n .then(text => parseCsvHeader(text))\n .catch(() => null);\n }\n});\n\nfunction assayFactorLabel(assay) {\n if (!assay) return '';\n const factors = Array.isArray(assay.factor) ? assay.factor : [];\n const labels = factors.map(f => f && f.label).filter(Boolean);\n if (labels.length) return labels.join('; ');\n const chars = Array.isArray(assay.characteristic) ? assay.characteristic : [];\n const organ = chars.find(c => c && c.type === 'organism part');\n return (organ && organ.label) || '';\n}\n\nfunction parseTaxonFacet(grameneSearch, grameneMaps) {\n const arr = grameneSearch\n && grameneSearch.facet_counts\n && grameneSearch.facet_counts.facet_fields\n && grameneSearch.facet_counts.facet_fields.taxon_id;\n if (!Array.isArray(arr) || !arr.length) return null;\n // Search taxon_ids are strain-specific (e.g. 3702001); experiments use\n // species-level NCBI taxon_ids (e.g. 3702). Map via grameneMaps.anchor_taxon_id.\n // If maps aren't loaded yet, skip filtering rather than drop everything.\n if (!grameneMaps || !Object.keys(grameneMaps).length) return null;\n const speciesTaxa = new Set();\n for (let i = 0; i < arr.length; i += 2) {\n const tid = arr[i];\n if (arr[i + 1] <= 0) continue;\n const map = grameneMaps[tid];\n const anchor = map && map.anchor_taxon_id;\n speciesTaxa.add(Number(anchor || tid));\n }\n return speciesTaxa.size ? speciesTaxa : null;\n}\n\nfunction buildExperimentTaxonIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const [taxon, arr] of Object.entries(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) if (e && e._id) index[e._id] = Number(taxon);\n }\n return index;\n}\n\nfunction buildExperimentTitleIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const arr of Object.values(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) {\n if (e && e._id) index[e._id] = e.description || e.title || '';\n }\n }\n return index;\n}\n\nfunction buildSpeciesNameIndex(grameneMaps) {\n const idx = {};\n if (!grameneMaps) return idx;\n for (const m of Object.values(grameneMaps)) {\n if (m && m.anchor_taxon_id && !idx[m.anchor_taxon_id]) {\n idx[m.anchor_taxon_id] = m.display_name || String(m.anchor_taxon_id);\n }\n }\n return idx;\n}\n\nfunction fieldExperimentId(name) {\n let m = name.match(/^(\\w+?)_g\\d+__expr$/);\n if (m) return m[1].replace(/_/g, '-');\n m = name.match(/^(\\w+?)_g\\d+_g\\d+_(pval|logfc|l2fc)_attr_[a-z]$/);\n if (m) return m[1].replace(/_/g, '-');\n return null;\n}\n\nconst STAT_RANK = { l2fc: 0, logfc: 1, pval: 2 };\n\nfunction collapseDiffExprInSubgroups(subgroups, fieldsOut, collator) {\n for (const taxGroup of subgroups) {\n for (const expGroup of (taxGroup.subgroups || [])) {\n const contrastMap = new Map();\n const others = [];\n for (const name of (expGroup.fields || [])) {\n const f = fieldsOut[name];\n if (!f || f.patternId !== 'diffexpr') { others.push(name); continue; }\n const mg = f.matchGroups || [];\n const key = `${mg[1]}|${mg[2]}`;\n let arr = contrastMap.get(key);\n if (!arr) { arr = []; contrastMap.set(key, arr); }\n arr.push(name);\n }\n const newFields = [...others];\n for (const names of contrastMap.values()) {\n if (names.length === 1) { newFields.push(names[0]); continue; }\n names.sort((a, b) => {\n const ra = STAT_RANK[(fieldsOut[a].matchGroups || [])[3]] ?? 99;\n const rb = STAT_RANK[(fieldsOut[b].matchGroups || [])[3]] ?? 99;\n if (ra !== rb) return ra - rb;\n return collator.compare(a, b);\n });\n const rep = names[0];\n const repEntry = fieldsOut[rep];\n const label = (repEntry.label || rep).replace(/\\s+\\((?:pval|logfc|l2fc)\\)/, '');\n fieldsOut[rep] = { ...repEntry, label, linkedFields: names.slice() };\n newFields.push(rep);\n }\n expGroup.fields = newFields;\n }\n }\n}\n\nfunction buildExpressionSubgroups(fieldNames, fieldsOut, experimentTaxa, experimentTitles, speciesNames, collator) {\n const byTaxon = new Map();\n const orphans = [];\n const studiesLoaded = Object.keys(experimentTaxa).length > 0;\n for (const name of fieldNames) {\n const expId = fieldExperimentId(name);\n if (!expId) { orphans.push(name); continue; }\n const taxon = experimentTaxa[expId];\n if (!taxon) {\n if (studiesLoaded) continue;\n orphans.push(name);\n continue;\n }\n let taxonEntry = byTaxon.get(taxon);\n if (!taxonEntry) {\n taxonEntry = new Map();\n byTaxon.set(taxon, taxonEntry);\n }\n let expEntry = taxonEntry.get(expId);\n if (!expEntry) {\n expEntry = [];\n taxonEntry.set(expId, expEntry);\n }\n expEntry.push(name);\n }\n\n const taxonGroups = [];\n for (const [taxon, expMap] of byTaxon) {\n const experiments = [];\n for (const [expId, names] of expMap) {\n names.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n const title = experimentTitles && experimentTitles[expId];\n experiments.push({\n id: 'exp-' + expId,\n label: title ? `${expId} — ${title}` : expId,\n fields: names\n });\n }\n experiments.sort((a, b) => collator.compare(a.label, b.label));\n taxonGroups.push({\n id: 'tax-' + taxon,\n label: speciesNames[taxon] || `taxon ${taxon}`,\n taxon,\n subgroups: experiments\n });\n }\n taxonGroups.sort((a, b) => collator.compare(a.label, b.label));\n\n return { subgroups: taxonGroups, orphans };\n}\n\nfunction buildVepSubgroups(fieldNames, fieldsOut, collator) {\n const buckets = {\n NAT: { merged: [], byConseq: new Map() },\n EMS: { merged: [], byConseq: new Map() }\n };\n const orphans = [];\n\n for (const name of fieldNames) {\n const f = fieldsOut[name];\n if (!f) { orphans.push(name); continue; }\n if (f.patternId === 'vep_merged') {\n const kind = (f.matchGroups && f.matchGroups[0]) || '';\n if (buckets[kind]) buckets[kind].merged.push(name);\n else orphans.push(name);\n } else if (f.patternId === 'vep_detail') {\n const mg = f.matchGroups || [];\n const [conseq, zyg, system, sid] = mg;\n const info = (VEP_STUDY_INFO[system] || {})[sid];\n const kind = info && info.type;\n if (!buckets[kind]) { orphans.push(name); continue; }\n let zmap = buckets[kind].byConseq.get(conseq);\n if (!zmap) {\n zmap = new Map();\n buckets[kind].byConseq.set(conseq, zmap);\n }\n let arr = zmap.get(zyg);\n if (!arr) {\n arr = [];\n zmap.set(zyg, arr);\n }\n arr.push(name);\n } else {\n orphans.push(name);\n }\n }\n\n const kindLabels = { NAT: 'Natural populations', EMS: 'Mutant populations' };\n const subgroups = [];\n for (const kind of ['NAT', 'EMS']) {\n const bucket = buckets[kind];\n if (!bucket.merged.length && bucket.byConseq.size === 0) continue;\n\n const conseqGroups = [];\n for (const [conseq, zmap] of bucket.byConseq) {\n const zygGroups = [];\n for (const [zyg, names] of zmap) {\n names.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n zygGroups.push({\n id: `lof-${kind}-${conseq}-${zyg}`,\n label: zyg === 'het' ? 'heterozygous' : 'homozygous',\n fields: names\n });\n }\n zygGroups.sort((a, b) => collator.compare(a.label, b.label));\n conseqGroups.push({\n id: `lof-${kind}-${conseq}`,\n label: conseq.replace(/_/g, ' '),\n subgroups: zygGroups\n });\n }\n conseqGroups.sort((a, b) => collator.compare(a.label, b.label));\n\n bucket.merged.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n\n subgroups.push({\n id: `lof-${kind}`,\n label: kindLabels[kind],\n fields: bucket.merged,\n subgroups: conseqGroups\n });\n }\n\n return { subgroups, orphans };\n}\n\nfunction enrichLabels(catalog, expressionStudies, expressionSamples, grameneSearch, grameneMaps) {\n if (!catalog || !catalog.fields) return catalog;\n if (!expressionSamples) return catalog;\n\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n const taxaInResults = parseTaxonFacet(grameneSearch, grameneMaps);\n const experimentTaxa = buildExperimentTaxonIndex(expressionStudies);\n const experimentTitles = buildExperimentTitleIndex(expressionStudies);\n const dropped = new Set();\n const fieldsOut = {};\n\n for (const [name, f] of Object.entries(catalog.fields)) {\n if (f.patternId !== 'expr' && f.patternId !== 'diffexpr') {\n fieldsOut[name] = f;\n continue;\n }\n const mg = f.matchGroups || [];\n const experimentSolr = mg[0];\n if (!experimentSolr) { fieldsOut[name] = f; continue; }\n const experimentId = experimentSolr.replace(/_/g, '-');\n\n if (taxaInResults) {\n const expTaxon = experimentTaxa[experimentId];\n if (expTaxon && !taxaInResults.has(expTaxon)) {\n dropped.add(name);\n continue;\n }\n }\n\n const assays = expressionSamples[experimentId] || [];\n let newLabel = f.label;\n if (f.patternId === 'expr') {\n const g = 'g' + mg[1];\n const assay = assays.find(a => a && a.group === g);\n const desc = assayFactorLabel(assay);\n newLabel = desc ? `${experimentId} ${g}: ${desc}` : `${experimentId} ${g}`;\n } else {\n const gA = 'g' + mg[1];\n const gB = 'g' + mg[2];\n const metric = mg[3];\n const aA = assays.find(a => a && a.group === gA);\n const aB = assays.find(a => a && a.group === gB);\n const dA = assayFactorLabel(aA);\n const dB = assayFactorLabel(aB);\n const pair = dA && dB ? `: ${dA} vs ${dB}` : '';\n newLabel = `${experimentId} ${gA} vs ${gB} (${metric})${pair}`;\n }\n\n fieldsOut[name] = newLabel !== f.label ? { ...f, label: newLabel } : f;\n }\n\n // Synthesize any expr fields missing from catalog.fields using the complete\n // assays collection. The doc-sample only surfaces expr keys that happened to\n // appear in the sampled genes; assays is authoritative per-experiment.\n const synthesized = [];\n for (const [experimentId, assays] of Object.entries(expressionSamples)) {\n if (taxaInResults) {\n const expTaxon = experimentTaxa[experimentId];\n if (expTaxon && !taxaInResults.has(expTaxon)) continue;\n }\n const solrPrefix = experimentId.replace(/-/g, '_');\n for (const assay of assays) {\n if (!assay || !assay.group) continue;\n const name = `${solrPrefix}_${assay.group}__expr`;\n if (fieldsOut[name]) continue;\n const desc = assayFactorLabel(assay);\n fieldsOut[name] = {\n name,\n label: desc ? `${experimentId} ${assay.group}: ${desc}` : `${experimentId} ${assay.group}`,\n group: 'expression',\n description: '',\n type: 'array<float>',\n multiValued: true,\n patternId: 'expr',\n matchGroups: [solrPrefix, assay.group.replace(/^g/, '')],\n expression: true,\n source: 'assays'\n };\n synthesized.push(name);\n }\n }\n\n const speciesNames = buildSpeciesNameIndex(grameneMaps);\n\n const groups = catalog.groups.map(g => {\n let list = dropped.size ? g.fields.filter(n => !dropped.has(n)) : g.fields;\n if (g.id === 'expression' && synthesized.length) {\n const existing = new Set(list);\n list = [...list, ...synthesized.filter(n => !existing.has(n))];\n }\n if (g.id === 'lof') {\n const { subgroups, orphans } = buildVepSubgroups(list, fieldsOut, collator);\n orphans.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n return { ...g, fields: orphans, subgroups };\n }\n if (g.id !== 'expression' && g.id !== 'differential') {\n return list === g.fields ? g : { ...g, fields: list };\n }\n const { subgroups, orphans } = buildExpressionSubgroups(\n list, fieldsOut, experimentTaxa, experimentTitles, speciesNames, collator\n );\n if (g.id === 'differential') {\n collapseDiffExprInSubgroups(subgroups, fieldsOut, collator);\n }\n orphans.sort((a, b) => collator.compare(fieldsOut[a].label, fieldsOut[b].label));\n return { ...g, fields: orphans, subgroups };\n });\n\n return { ...catalog, fields: fieldsOut, groups };\n}\n\nfunction filterCatalogByPresentFields(catalog, present) {\n if (!catalog || !catalog.fields || !present) return catalog;\n const filteredFields = {};\n for (const [name, f] of Object.entries(catalog.fields)) {\n if (present.has(name)) filteredFields[name] = f;\n }\n const hasContent = (g) =>\n (g.fields && g.fields.length > 0) ||\n (g.subgroups && g.subgroups.some(hasContent));\n const filterGroup = (g) => {\n const fields = (g.fields || []).filter(n => present.has(n));\n const subgroups = (g.subgroups || [])\n .map(filterGroup)\n .filter(hasContent);\n return { ...g, fields, subgroups };\n };\n const groups = (catalog.groups || []).map(filterGroup).filter(hasContent);\n return { ...catalog, fields: filteredFields, groups };\n}\n\ngrameneFieldCatalog.selectFieldCatalog = createSelector(\n 'selectGrameneFieldCatalog',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneSearch',\n 'selectGrameneMaps',\n (fieldNames, studies, samples, search, maps) => {\n if (!fieldNames || !fieldNames.length) return null;\n const present = new Set(fieldNames);\n // Build a synthetic doc from the discovered field names; values carry the\n // right JS type so inferType picks the correct multiValued/type (arrays\n // for multi-valued fields, scalars otherwise). Derive pval/logfc\n // companions from every l2fc field.\n const doc = {};\n for (const name of present) {\n doc[name] = synthesizedValue(name);\n if (/_l2fc_attr_f$/.test(name)) {\n doc[name.replace('_l2fc_', '_pval_')] = 0;\n doc[name.replace('_l2fc_', '_logfc_')] = 0;\n }\n }\n const catalog = buildCatalog([doc]);\n const enriched = enrichLabels(catalog, studies, samples, search, maps);\n return filterCatalogByPresentFields(enriched, present);\n }\n);\n\ngrameneFieldCatalog.selectFieldCatalogGroups = createSelector(\n 'selectFieldCatalog',\n (catalog) => (catalog && catalog.groups) || []\n);\n\ngrameneFieldCatalog.selectFieldCatalogByName = createSelector(\n 'selectFieldCatalog',\n (catalog) => (catalog && catalog.fields) || {}\n);\n\nexport default grameneFieldCatalog;\n","{\n \"groups\": {\n \"core\": { \"label\": \"Core identifiers\", \"order\": 0 },\n \"location\": { \"label\": \"Genomic location\", \"order\": 1 },\n \"structure\": { \"label\": \"Gene structure\", \"order\": 2 },\n \"homology\": { \"label\": \"Homology\", \"order\": 3 },\n \"expression\": { \"label\": \"Gene expression\", \"order\": 4 },\n \"differential\": { \"label\": \"Differential expression\",\"order\": 5 },\n \"hierarchical\": { \"label\": \"Hierarchical annotations\",\"order\": 6 },\n \"pathways\": { \"label\": \"Pathways\", \"order\": 7 },\n \"GO\": { \"label\": \"Gene Ontology\", \"order\": 7 },\n \"PO\": { \"label\": \"Plant Ontology\", \"order\": 8 },\n \"lof\": { \"label\": \"Loss of function alleles\",\"order\": 9 },\n \"MAKER\": { \"label\": \"MAKER transcript metrics\",\"order\": 10 },\n \"xrefs\": { \"label\": \"External references\", \"order\": 11 },\n \"other\": { \"label\": \"Other\", \"order\": 99 }\n },\n\n \"patterns\": [\n {\n \"id\": \"homology\",\n \"match\": \"^homology__(.+)$\",\n \"group\": \"homology\",\n \"multiValued\": true,\n \"labelTemplate\": \"Homology: $1\"\n },\n {\n \"id\": \"pathways\",\n \"match\": \"^pathways__(.+)$\",\n \"group\": \"pathways\",\n \"multiValued\": true,\n \"labelTemplate\": \"Pathway: $1\"\n },\n {\n \"id\": \"maker\",\n \"match\": \"^MAKER__(.+)__attr_([a-z])$\",\n \"group\": \"MAKER\",\n \"labelTemplate\": \"MAKER: $1\"\n },\n {\n \"id\": \"xrefs\",\n \"match\": \"^(.+)__xrefs$\",\n \"group\": \"xrefs\",\n \"multiValued\": true,\n \"labelTemplate\": \"$1 (xrefs)\"\n },\n {\n \"id\": \"expr\",\n \"match\": \"^(E[-_][A-Za-z0-9_-]+?)_g(\\\\d+)__expr$\",\n \"group\": \"expression\",\n \"expression\": true,\n \"labelTemplate\": \"$1 · g$2\"\n },\n {\n \"id\": \"diffexpr\",\n \"match\": \"^(E[-_][A-Za-z0-9_-]+?)_g(\\\\d+)_g(\\\\d+)_(pval|logfc|l2fc)_attr_([a-z])$\",\n \"group\": \"differential\",\n \"diffExpression\": true,\n \"labelTemplate\": \"$1 · g$2 vs g$3 · $4\"\n },\n {\n \"id\": \"bins\",\n \"match\": \"^(fixed|uniform)_([0-9a-zA-Z]+)__bin$\",\n \"group\": \"bins\",\n \"is_hidden\": true,\n \"labelTemplate\": \"$1 bin ($2)\"\n },\n {\n \"id\": \"neighbors\",\n \"match\": \".*neighbors_[0-9]+$\",\n \"group\": \"neighbors\",\n \"is_hidden\": true,\n \"labelTemplate\": \"neighbors\"\n },\n {\n \"id\": \"vep_merged\",\n \"match\": \"^VEP__merged__(NAT|EMS)__attr_ss$\",\n \"group\": \"lof\",\n \"multiValued\": true,\n \"labelTemplate\": \"Merged $1 accessions\"\n },\n {\n \"id\": \"vep_detail\",\n \"match\": \"^VEP__(.+?)__(homo|het)__(.+?)__(\\\\d+)__attr_ss$\",\n \"group\": \"lof\",\n \"multiValued\": true,\n \"labelTemplate\": \"$1 ($2) $3/$4\"\n },\n {\n \"id\": \"generic_attr\",\n \"match\": \"^(.+)__attr_([a-z])$\",\n \"group\": \"other\",\n \"labelTemplate\": \"$1\"\n }\n ],\n\n \"fields\": {\n \"id\": { \"group\": \"core\", \"label\": \"Gene ID\", \"order\": 1 },\n \"name\": { \"group\": \"core\", \"label\": \"Name\", \"order\": 2 },\n \"description\": { \"group\": \"core\", \"label\": \"Description\", \"order\": 4 },\n \"summary\": { \"group\": \"core\", \"label\": \"Summary\", \"order\": 5 },\n \"synonyms\": { \"group\": \"core\", \"label\": \"Synonyms\", \"multiValued\": true, \"order\": 3 },\n \"biotype\": { \"group\": \"core\", \"label\": \"Biotype\", \"order\": 6 },\n \"taxon_id\": { \"group\": \"core\", \"label\": \"Taxon ID\", \"order\": 8 },\n \"system_name\": { \"group\": \"core\", \"label\": \"System name\", \"order\": 7 },\n \"db_type\": { \"group\": \"core\", \"label\": \"DB type\", \"order\": 9 },\n\n \"closest_rep_id\": { \"group\": \"homology\", \"label\": \"Closest representative ID\", \"order\": 1 },\n \"closest_rep_name\": { \"group\": \"homology\", \"label\": \"Closest representative name\", \"order\": 2 },\n \"closest_rep_identity\": { \"group\": \"homology\", \"label\": \"Closest representative identity\", \"order\": 3 },\n \"closest_rep_taxon_id\": { \"group\": \"homology\", \"label\": \"Closest representative taxon\", \"order\": 4 },\n \"closest_rep_description\": { \"group\": \"homology\", \"label\": \"Closest representative description\", \"order\": 5 },\n \"model_rep_id\": { \"group\": \"homology\", \"label\": \"Model representative ID\", \"order\": 6 },\n \"model_rep_name\": { \"group\": \"homology\", \"label\": \"Model representative name\", \"order\": 7 },\n \"model_rep_identity\": { \"group\": \"homology\", \"label\": \"Model representative identity\", \"order\": 8 },\n \"model_rep_taxon_id\": { \"group\": \"homology\", \"label\": \"Model representative taxon\", \"order\": 9 },\n \"model_rep_description\": { \"group\": \"homology\", \"label\": \"Model representative description\", \"order\": 10 },\n\n \"gene_tree\": { \"group\": \"homology\", \"label\": \"Gene tree ID\", \"order\": 11 },\n \"pan_tree\": { \"group\": \"homology\", \"label\": \"Pan-gene tree ID\", \"order\": 14 },\n\n \"capabilities\": { \"group\": \"other\", \"label\": \"Capabilities\", \"multiValued\": true },\n\n \"map\": { \"group\": \"location\", \"label\": \"Map\", \"order\": 1 },\n \"region\": { \"group\": \"location\", \"label\": \"Region\", \"order\": 2 },\n \"start\": { \"group\": \"location\", \"label\": \"Start\", \"order\": 3 },\n \"end\": { \"group\": \"location\", \"label\": \"End\", \"order\": 4 },\n \"strand\": { \"group\": \"location\", \"label\": \"Strand\", \"order\": 5 },\n\n \"GO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"GO terms\", \"multiValued\": true, \"order\": 1 },\n \"PO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"PO terms\", \"multiValued\": true, \"order\": 2 },\n \"TO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"TO terms\", \"multiValued\": true, \"order\": 3 },\n \"QTL_TO__ancestors\": { \"group\": \"hierarchical\", \"label\": \"QTL traits (TO)\", \"multiValued\": true, \"order\": 7 },\n \"domains__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Domains\", \"multiValued\": true, \"order\": 4 },\n \"taxonomy__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Taxonomy\", \"multiValued\": true, \"order\": 6 },\n \"supertree_attr_s\": { \"group\": \"homology\", \"label\": \"Supertree\", \"order\": 13 },\n \"gene_tree_root_taxon_id\": { \"group\": \"homology\", \"label\": \"Gene tree root taxon\", \"order\": 12 },\n \"protein__length\": { \"group\": \"structure\", \"label\": \"Protein length\" },\n \"transcript__count\": { \"group\": \"structure\", \"label\": \"Transcript count\" },\n \"transcript__exons\": { \"group\": \"structure\", \"label\": \"Exon count\" },\n \"transcript__length\": { \"group\": \"structure\", \"label\": \"Transcript length\" },\n \"expressed_in_gxa_attr_ss\": { \"group\": \"expression\", \"label\": \"Expressed in GXA\", \"multiValued\": true },\n\n \"MAKER__AED__attr_f\": { \"group\": \"MAKER\", \"label\": \"AED\", \"description\": \"Annotation Edit Distance\" },\n \"MAKER__QI1__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI1: Length of the 5' UTR\" },\n \"MAKER__QI2__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI2: Fraction of splice sites confirmed by EST\" },\n \"MAKER__QI3__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI3: Fraction of exons overlapping an EST\" },\n \"MAKER__QI4__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI4: Fraction of exons overlapping EST or protein\" },\n \"MAKER__QI5__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI5: Fraction of splice sites confirmed by SNAP\" },\n \"MAKER__QI6__attr_f\": { \"group\": \"MAKER\", \"label\": \"QI6: Fraction of exons overlapping a SNAP\" },\n \"MAKER__QI7__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI7: Number of exons in the mRNA\" },\n \"MAKER__QI8__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI8: Length of the 3' UTR\" },\n \"MAKER__QI9__attr_i\": { \"group\": \"MAKER\", \"label\": \"QI9: Length of the protein sequence\" },\n\n \"homology__all_orthologs\": { \"group\": \"homology\", \"label\": \"All orthologs\", \"multiValued\": true, \"order\": 15 },\n \"homology__ortholog_one2one\": { \"group\": \"homology\", \"label\": \"1:1 orthologs\", \"multiValued\": true, \"order\": 16 },\n \"homology__ortholog_one2many\": { \"group\": \"homology\", \"label\": \"1:many orthologs\", \"multiValued\": true, \"order\": 17 },\n \"homology__ortholog_many2many\": { \"group\": \"homology\", \"label\": \"Many:many orthologs\", \"multiValued\": true, \"order\": 18 },\n \"homology__syntenic_ortholog_one2one\":{ \"group\": \"homology\", \"label\": \"Syntenic 1:1 orthologs\", \"multiValued\": true, \"order\": 19 },\n \"homology__within_species_paralog\": { \"group\": \"homology\", \"label\": \"Within-species paralogs\", \"multiValued\": true, \"order\": 20 },\n\n \"pathways__ancestors\": { \"group\": \"hierarchical\", \"label\": \"Pathways\", \"multiValued\": true, \"order\": 5 },\n\n \"canonical_transcript__attr_s\": { \"group\": \"structure\", \"label\": \"Canonical transcript ID\" }\n },\n\n \"hidden\": [\n \"_version_\", \"_terms\", \"score\",\n \"gene_idx\", \"gene_idx_multi\", \"species_idx\",\n \"compara_idx\", \"compara_idx_multi\",\n \"_id\", \"annotations\", \"bins\", \"gene_structure\",\n \"homology\", \"location\", \"xrefs\",\n \"domain_roots\", \"familyRoot__ancestors\", \"taxonomy__ancestors\", \"capabilities\",\n \"saved_search\"\n ]}\n","export const study_info = {\n 'sorghum_bicolor': {\n '1': { label: 'Purdue EMS', type: 'EMS' },\n '2': { label: 'USDA Lubbock EMS', type: 'EMS' },\n '3': { label: 'Lozano', type: 'NAT' },\n '4': { label: 'USDA Lubbock EMS', type: 'EMS' },\n '5': { label: 'Boatwright SAP', type: 'NAT' },\n '7': { label: 'Kumar BAP', type: 'NAT' },\n '8': { label: 'Lasky landraces', type: 'NAT' },\n '9': { label: 'Sorghum Genomics Toolbox', type: 'NAT' }\n },\n 'zea_maysb73': {\n '15': { label: 'MaizeGDB 2024', type: 'NAT' }\n },\n 'oryza_sativa': {\n '7': { label: 'Rice 3K', type: 'NAT' },\n '20': { label: '19K-RGP', type: 'NAT' },\n '29': { label: 'Rice USDA mini core', type: 'NAT' },\n '38': { label: 'RAPDB 2024', type: 'NAT' }\n },\n 'oryza_aus': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativa117425': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativair64rs2': { '20': { label: '19K-RGP', type: 'NAT' } },\n 'oryza_sativamh63': { '20': { label: '19K-RGP', type: 'NAT' } }\n};\n","import { createSelector } from 'redux-bundler';\nimport { runExporterDownload } from '../components/exporter/downloadRunner';\n\nconst DEFAULT_FIELDS = ['id', 'name', 'system_name', 'biotype'];\nconst PREVIEW_ROWS = 20;\nconst PREVIEW_DEBOUNCE_MS = 250;\n\nfunction computePreviewSignature(store) {\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n return `${q}|${taxa.sort().join(',')}`;\n}\n\nlet debounceTimer = null;\nlet pendingRequestId = 0;\nlet pendingDownloadId = 0;\nlet currentDownloadController = null;\n\nconst markStale = (preview) => ({ ...preview, status: 'stale' });\n\nconst exporter = {\n name: 'exporter',\n\n getReducer: () => {\n const initialState = {\n selectedFields: DEFAULT_FIELDS,\n format: 'tsv',\n cutoffs: { exprMinTPM: 0.5, diffMaxPval: 0.05 },\n preview: { status: 'stale', data: null, error: null, requestId: 0, signature: null },\n download: { status: 'idle', progress: 0, total: 0, error: null, requestId: 0 }\n };\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'EXPORTER_FIELD_TOGGLED': {\n const idx = state.selectedFields.indexOf(payload);\n const selectedFields = idx === -1\n ? [...state.selectedFields, payload]\n : state.selectedFields.filter(f => f !== payload);\n return { ...state, selectedFields };\n }\n case 'EXPORTER_FIELDS_REORDERED':\n return { ...state, selectedFields: payload };\n case 'EXPORTER_FIELDS_BULK_SET': {\n const { names, selected } = payload;\n if (!Array.isArray(names) || names.length === 0) return state;\n if (selected) {\n const existing = new Set(state.selectedFields);\n const additions = names.filter(n => !existing.has(n));\n if (additions.length === 0) return state;\n return { ...state, selectedFields: [...state.selectedFields, ...additions] };\n }\n const remove = new Set(names);\n const next = state.selectedFields.filter(n => !remove.has(n));\n if (next.length === state.selectedFields.length) return state;\n return { ...state, selectedFields: next };\n }\n case 'EXPORTER_FORMAT_SET':\n return { ...state, format: payload };\n case 'EXPORTER_CUTOFFS_SET':\n return { ...state, cutoffs: { ...state.cutoffs, ...(payload || {}) } };\n case 'EXPORTER_FIELDS_CLEARED':\n return { ...state, selectedFields: [] };\n case 'EXPORTER_PREVIEW_INVALIDATED':\n return { ...state, preview: markStale(state.preview) };\n\n case 'EXPORTER_PREVIEW_STARTED':\n return {\n ...state,\n preview: { ...state.preview, status: 'loading', requestId: payload.requestId, error: null, signature: payload.signature }\n };\n case 'EXPORTER_PREVIEW_SUCCEEDED':\n if (payload.requestId !== state.preview.requestId) return state;\n return {\n ...state,\n preview: { status: 'ready', data: payload.data, error: null, requestId: payload.requestId, signature: state.preview.signature }\n };\n case 'EXPORTER_PREVIEW_FAILED':\n if (payload.requestId !== state.preview.requestId) return state;\n return {\n ...state,\n preview: { ...state.preview, status: 'error', error: payload.error }\n };\n\n case 'EXPORTER_DOWNLOAD_REQUESTED':\n return {\n ...state,\n download: { status: 'preparing', progress: 0, total: 0, error: null, requestId: payload.requestId }\n };\n case 'EXPORTER_DOWNLOAD_STARTED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'downloading', total: payload.total }\n };\n case 'EXPORTER_DOWNLOAD_PROGRESS':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, progress: payload.progress }\n };\n case 'EXPORTER_DOWNLOAD_COMPLETED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'done', progress: payload.written || state.download.progress }\n };\n case 'EXPORTER_DOWNLOAD_CANCELLED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'cancelled' }\n };\n case 'EXPORTER_DOWNLOAD_FAILED':\n if (payload.requestId !== state.download.requestId) return state;\n return {\n ...state,\n download: { ...state.download, status: 'error', error: payload.error }\n };\n case 'EXPORTER_DOWNLOAD_RESET':\n return {\n ...state,\n download: { status: 'idle', progress: 0, total: 0, error: null, requestId: state.download.requestId }\n };\n default:\n return state;\n }\n };\n },\n\n doToggleExporterField: fieldName => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELD_TOGGLED', payload: fieldName }),\n\n doReorderExporterFields: fieldList => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_REORDERED', payload: fieldList }),\n\n doBulkSetExporterFields: (names, selected) => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_BULK_SET', payload: { names, selected } }),\n\n doSetExporterFormat: fmt => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FORMAT_SET', payload: fmt }),\n\n doSetExporterCutoffs: cutoffs => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_CUTOFFS_SET', payload: cutoffs }),\n\n doClearExporterFields: () => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_FIELDS_CLEARED' }),\n\n doFetchExporterPreview: () => ({ dispatch, store }) => {\n clearTimeout(debounceTimer);\n const requestId = ++pendingRequestId;\n const signature = computePreviewSignature(store);\n dispatch({ type: 'EXPORTER_PREVIEW_STARTED', payload: { requestId, signature } });\n debounceTimer = setTimeout(() => {\n if (requestId !== pendingRequestId) return;\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const url = `${api}/search?q=${q}&fl=*&rows=${PREVIEW_ROWS}${fq}`;\n\n fetch(url)\n .then(r => r.json())\n .then(json => {\n const docs = (json && json.response && json.response.docs) || [];\n dispatch({ type: 'EXPORTER_PREVIEW_SUCCEEDED', payload: { requestId, data: docs } });\n })\n .catch(err => {\n dispatch({ type: 'EXPORTER_PREVIEW_FAILED', payload: { requestId, error: String(err) } });\n });\n }, PREVIEW_DEBOUNCE_MS);\n },\n\n reactExporterPreview: createSelector(\n 'selectExporter',\n 'selectGrameneFiltersStatus',\n 'selectGrameneFiltersQueryString',\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n (exp, filtersStatus, q, g, m) => {\n if (!exp || !exp.preview) return;\n if (filtersStatus === 'init') return;\n if (exp.preview.status === 'loading') return;\n const maps = m || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => maps[tid] && !maps[tid].hidden);\n const sig = `${q}|${taxa.sort().join(',')}`;\n if (exp.preview.signature === sig && exp.preview.status !== 'stale') return;\n return { actionCreator: 'doFetchExporterPreview' };\n }\n ),\n\n doStartExporterDownload: () => ({ dispatch, store }) => {\n if (currentDownloadController) {\n currentDownloadController.abort();\n }\n const requestId = ++pendingDownloadId;\n const controller = new AbortController();\n currentDownloadController = controller;\n dispatch({ type: 'EXPORTER_DOWNLOAD_REQUESTED', payload: { requestId } });\n\n const isSuperseded = () => requestId !== pendingDownloadId;\n\n runExporterDownload({\n dispatch,\n store,\n requestId,\n signal: controller.signal,\n isSuperseded\n }).catch(err => {\n if (err && err.name === 'AbortError') {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n } else {\n dispatch({ type: 'EXPORTER_DOWNLOAD_FAILED', payload: { requestId, error: String(err) } });\n }\n });\n },\n\n doCancelExporterDownload: () => ({ dispatch }) => {\n if (currentDownloadController) {\n currentDownloadController.abort();\n currentDownloadController = null;\n }\n pendingDownloadId++;\n },\n\n doResetExporterDownload: () => ({ dispatch }) =>\n dispatch({ type: 'EXPORTER_DOWNLOAD_RESET' }),\n\n selectExporter: state => state.exporter,\n selectExporterSelectedFields: state => state.exporter.selectedFields,\n selectExporterFormat: state => state.exporter.format,\n selectExporterCutoffs: state => state.exporter.cutoffs,\n selectExporterPreview: state => state.exporter.preview,\n selectExporterDownload: state => state.exporter.download\n};\n\nexport default exporter;\n","import { buildTableData, toJSONRows } from './formatters';\nimport { ANCESTOR_FIELD_MAP, collectAncestorIds } from './ancestorsResolver';\n\nconst PAGE_SIZE = 1000;\n\nfunction buildSearchURL(api, q, fl, rows, start, fq) {\n const params = [\n `q=${q}`,\n `rows=${rows}`,\n `start=${start}`,\n 'facet=false'\n ];\n if (fl) params.push(`fl=${encodeURIComponent(fl)}`);\n return `${api}/search?${params.join('&')}${fq}`;\n}\n\nfunction triggerBrowserSave(blob, filename) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(() => URL.revokeObjectURL(url), 2000);\n}\n\nexport async function runExporterDownload({ dispatch, store, requestId, signal, isSuperseded }) {\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const fields = store.selectExporterSelectedFields();\n const fl = fields.join(',');\n const format = store.selectExporterFormat();\n const catalog = store.selectFieldCatalog();\n const expressionStudies = store.selectExpressionStudies();\n const expressionSamples = store.selectExpressionSamples();\n const ancestorFields = fields.filter(n => ANCESTOR_FIELD_MAP[n]);\n\n const cutoffs = store.selectExporterCutoffs && store.selectExporterCutoffs();\n const buildResolverCtx = () => ({\n expressionStudies,\n expressionSamples,\n taxonomy: store.selectGrameneTaxonomy(),\n pathways: store.selectGramenePathways(),\n ontologies: store.selectOntologies(),\n cutoffs\n });\n\n const ensureAncestorRecords = async (docs) => {\n if (ancestorFields.length === 0 || docs.length === 0) return;\n const idsByOnt = collectAncestorIds(docs, ancestorFields);\n const waits = [];\n for (const [ontKey, ids] of Object.entries(idsByOnt)) {\n if (!ids.length) continue;\n if (ontKey === 'taxonomy') continue;\n if (ontKey === 'pathways') {\n const pathwaysCache = store.selectGramenePathways() || {};\n const missing = ids.filter(id => !pathwaysCache.hasOwnProperty(id));\n if (missing.length) store.doRequestGramenePathways(missing);\n continue;\n }\n const p = store.doEnsureOntologyRecords(ontKey, ids);\n if (p && typeof p.then === 'function') waits.push(p);\n }\n if (waits.length) await Promise.all(waits);\n };\n\n const fetchJSON = (url) => fetch(url, { signal }).then(r => {\n if (!r.ok) throw new Error(`HTTP ${r.status}`);\n return r.json();\n });\n\n const countUrl = buildSearchURL(api, q, 'id', 0, 0, fq);\n const countResp = await fetchJSON(countUrl);\n const total = (countResp && countResp.response && countResp.response.numFound) || 0;\n\n dispatch({ type: 'EXPORTER_DOWNLOAD_STARTED', payload: { requestId, total } });\n\n if (total === 0) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_COMPLETED', payload: { requestId, written: 0 } });\n return;\n }\n\n const tsvPieces = [];\n const jsonRows = [];\n let progress = 0;\n\n if (format === 'tsv') {\n const { header } = buildTableData([], fields, catalog, buildResolverCtx());\n tsvPieces.push(header.join('\\t') + '\\n');\n }\n\n let start = 0;\n while (start < total) {\n if (isSuperseded()) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n return;\n }\n const url = buildSearchURL(api, q, fl, PAGE_SIZE, start, fq);\n const resp = await fetchJSON(url);\n const docs = (resp && resp.response && resp.response.docs) || [];\n if (docs.length === 0) break;\n\n await ensureAncestorRecords(docs);\n const resolverCtx = buildResolverCtx();\n\n if (format === 'tsv') {\n const { rows } = buildTableData(docs, fields, catalog, resolverCtx);\n for (const row of rows) tsvPieces.push(row.join('\\t') + '\\n');\n } else {\n const rows = toJSONRows(docs, fields, resolverCtx);\n for (const r of rows) jsonRows.push(r);\n }\n\n start += docs.length;\n progress = start;\n dispatch({ type: 'EXPORTER_DOWNLOAD_PROGRESS', payload: { requestId, progress } });\n }\n\n if (isSuperseded()) {\n dispatch({ type: 'EXPORTER_DOWNLOAD_CANCELLED', payload: { requestId } });\n return;\n }\n\n const stamp = new Date().toISOString().slice(0, 19).replace(/[:T]/g, '-');\n let blob;\n let filename;\n if (format === 'tsv') {\n blob = new Blob(tsvPieces, { type: 'text/tab-separated-values' });\n filename = `gramene-export-${stamp}.tsv`;\n } else {\n blob = new Blob([JSON.stringify(jsonRows, null, 2)], { type: 'application/json' });\n filename = `gramene-export-${stamp}.json`;\n }\n\n triggerBrowserSave(blob, filename);\n dispatch({ type: 'EXPORTER_DOWNLOAD_COMPLETED', payload: { requestId, written: progress } });\n}\n","import {\n partitionFields,\n resolveExpressionForDoc,\n resolveDiffExpressionForDoc,\n EXPRESSION_EXTRA_COLUMNS,\n DIFFEXPRESSION_EXTRA_COLUMNS\n} from './expressionResolver';\nimport {\n ANCESTOR_FIELD_MAP,\n isAncestorField,\n formatAncestorsCellTSV,\n formatAncestorsJSON,\n resolveAncestorsForDoc,\n ANCESTOR_EXTRA_COLUMNS\n} from './ancestorsResolver';\n\nfunction scrubTSV(s) {\n return String(s).replace(/[\\t\\r\\n]/g, ' ');\n}\n\nfunction formatCellTSV(value) {\n if (value === null || value === undefined) return '';\n if (Array.isArray(value)) return value.map(formatCellTSV).join('|');\n if (typeof value === 'object') return JSON.stringify(value);\n return scrubTSV(value);\n}\n\nfunction formatDocFieldTSV(doc, name, resolverCtx) {\n if (isAncestorField(name)) {\n const ontKey = ANCESTOR_FIELD_MAP[name];\n const ids = Array.isArray(doc[name]) ? doc[name] : [];\n return scrubTSV(formatAncestorsCellTSV(ontKey, ids, doc.taxon_id, resolverCtx));\n }\n return formatCellTSV(doc[name]);\n}\n\nexport function buildTSVHeader(fieldNames, catalog) {\n return fieldNames.map(n => {\n const f = catalog && catalog.fields && catalog.fields[n];\n if (!f) return n;\n return f.tsvHeader || f.label;\n });\n}\n\nexport function buildTSVRow(doc, fieldNames, resolverCtx) {\n return fieldNames.map(n => formatDocFieldTSV(doc, n, resolverCtx));\n}\n\nconst EMPTY_EXPR_ROW = EXPRESSION_EXTRA_COLUMNS.map(() => '');\nconst EMPTY_DIFF_ROW = DIFFEXPRESSION_EXTRA_COLUMNS.map(() => '');\nconst EMPTY_ANC_ROW = ANCESTOR_EXTRA_COLUMNS.map(() => '');\n\nfunction exprRowToCells(er) {\n return [\n scrubTSV(er.experiment),\n scrubTSV(er.experiment_name),\n scrubTSV(er.assay),\n scrubTSV(er.sample),\n scrubTSV(er.value)\n ];\n}\n\nfunction diffRowToCells(dr) {\n return [\n scrubTSV(dr.diff_experiment),\n scrubTSV(dr.diff_experiment_name),\n scrubTSV(dr.group1_factors),\n scrubTSV(dr.group2_factors),\n scrubTSV(dr.l2fc),\n scrubTSV(dr.pval)\n ];\n}\n\nfunction ancRowToCells(ar) {\n return [\n scrubTSV(ar.hierarchy),\n scrubTSV(ar.term_id),\n scrubTSV(ar.term_name),\n scrubTSV(ar.term_type)\n ];\n}\n\nfunction splitPlainAndAncestor(nonExpressionFields) {\n const ancestorFields = [];\n const plainFields = [];\n for (const n of nonExpressionFields) {\n if (isAncestorField(n)) ancestorFields.push(n);\n else plainFields.push(n);\n }\n return { ancestorFields, plainFields };\n}\n\nfunction buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx) {\n const expressionStudies = resolverCtx && resolverCtx.expressionStudies;\n const expressionSamples = resolverCtx && resolverCtx.expressionSamples;\n const cutoffs = resolverCtx && resolverCtx.cutoffs;\n const hasExpr = expressionFields.length > 0;\n const hasDiff = diffExpressionFields.length > 0;\n const hasAnc = ancestorFields.length > 0;\n const rows = [];\n for (const doc of (docs || [])) {\n const baseCells = buildTSVRow(doc, plainFields, resolverCtx);\n const ancRows = hasAnc\n ? resolveAncestorsForDoc(doc, ancestorFields, resolverCtx)\n : [];\n const exprRows = hasExpr\n ? resolveExpressionForDoc(doc, expressionFields, expressionStudies, expressionSamples, cutoffs)\n : [];\n const diffRows = hasDiff\n ? resolveDiffExpressionForDoc(doc, diffExpressionFields, expressionStudies, expressionSamples, cutoffs)\n : [];\n const ancCells = ancRows.length ? ancRows.map(ancRowToCells) : (hasAnc ? [EMPTY_ANC_ROW] : [null]);\n const exprCells = exprRows.length ? exprRows.map(exprRowToCells) : (hasExpr ? [EMPTY_EXPR_ROW] : [null]);\n const diffCells = diffRows.length ? diffRows.map(diffRowToCells) : (hasDiff ? [EMPTY_DIFF_ROW] : [null]);\n for (const a of ancCells) {\n for (const e of exprCells) {\n for (const d of diffCells) {\n const out = [...baseCells];\n if (a) out.push(...a);\n if (e) out.push(...e);\n if (d) out.push(...d);\n rows.push(out);\n }\n }\n }\n }\n return rows;\n}\n\nexport function toTSV(docs, fieldNames, catalog, resolverCtx) {\n const { expressionFields, diffExpressionFields, nonExpressionFields } = partitionFields(fieldNames, catalog);\n const { ancestorFields, plainFields } = splitPlainAndAncestor(nonExpressionFields);\n\n if (expressionFields.length === 0 && diffExpressionFields.length === 0 && ancestorFields.length === 0) {\n const header = buildTSVHeader(fieldNames, catalog).join('\\t');\n const rows = (docs || []).map(d => buildTSVRow(d, fieldNames, resolverCtx).join('\\t'));\n return [header, ...rows].join('\\n');\n }\n\n const header = [\n ...buildTSVHeader(plainFields, catalog),\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ].join('\\t');\n\n const rows = buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx);\n return [header, ...rows.map(r => r.join('\\t'))].join('\\n');\n}\n\nexport function buildTableData(docs, fieldNames, catalog, resolverCtx) {\n const { expressionFields, diffExpressionFields, nonExpressionFields } = partitionFields(fieldNames, catalog);\n const { ancestorFields, plainFields } = splitPlainAndAncestor(nonExpressionFields);\n\n if (expressionFields.length === 0 && diffExpressionFields.length === 0 && ancestorFields.length === 0) {\n return {\n header: buildTSVHeader(fieldNames, catalog),\n headerKeys: fieldNames.slice(),\n rows: (docs || []).map(d => buildTSVRow(d, fieldNames, resolverCtx))\n };\n }\n\n const header = [\n ...buildTSVHeader(plainFields, catalog),\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ];\n const headerKeys = [\n ...plainFields,\n ...(ancestorFields.length ? ANCESTOR_EXTRA_COLUMNS : []),\n ...(expressionFields.length ? EXPRESSION_EXTRA_COLUMNS : []),\n ...(diffExpressionFields.length ? DIFFEXPRESSION_EXTRA_COLUMNS : [])\n ];\n const rows = buildExpandedRows(docs, plainFields, ancestorFields, expressionFields, diffExpressionFields, resolverCtx);\n return { header, headerKeys, rows };\n}\n\nexport function toJSONRows(docs, fieldNames, resolverCtx) {\n return (docs || []).map(d => {\n const row = {};\n for (const n of fieldNames) {\n if (isAncestorField(n)) {\n const ontKey = ANCESTOR_FIELD_MAP[n];\n const ids = Array.isArray(d[n]) ? d[n] : [];\n row[n] = formatAncestorsJSON(ontKey, ids, d.taxon_id, resolverCtx);\n } else {\n row[n] = d[n] !== undefined ? d[n] : null;\n }\n }\n return row;\n });\n}\n\nexport function toJSON(docs, fieldNames, resolverCtx) {\n return JSON.stringify(toJSONRows(docs, fieldNames, resolverCtx), null, 2);\n}\n","const EXPR_FIELD_RE = /^(E[-_][A-Za-z0-9_-]+?)_g(\\d+)__expr$/;\nconst DIFFEXPR_FIELD_RE = /^(E[-_][A-Za-z0-9_-]+?)_g(\\d+)_g(\\d+)_(pval|logfc|l2fc)_attr_([a-z])$/;\n\nexport const EXPRESSION_EXTRA_COLUMNS = [\n 'experiment',\n 'experiment_name',\n 'assay',\n 'sample',\n 'value'\n];\n\nexport const DIFFEXPRESSION_EXTRA_COLUMNS = [\n 'diff_experiment',\n 'diff_experiment_name',\n 'group1_factors',\n 'group2_factors',\n 'l2fc',\n 'pval'\n];\n\nexport function parseExprFieldName(name) {\n const m = name.match(EXPR_FIELD_RE);\n if (!m) return null;\n return {\n experimentId: m[1].replace(/_/g, '-'),\n group: 'g' + m[2],\n solrField: name\n };\n}\n\nexport function parseDiffExprFieldName(name) {\n const m = name.match(DIFFEXPR_FIELD_RE);\n if (!m) return null;\n return {\n experimentId: m[1].replace(/_/g, '-'),\n group1: 'g' + m[2],\n group2: 'g' + m[3],\n stat: m[4],\n solrField: name\n };\n}\n\nexport function isExpressionField(name, catalog) {\n const entry = catalog && catalog.fields && catalog.fields[name];\n if (entry && entry.expression) return true;\n return parseExprFieldName(name) !== null;\n}\n\nexport function isDiffExpressionField(name, catalog) {\n const entry = catalog && catalog.fields && catalog.fields[name];\n if (entry && entry.diffExpression) return true;\n return parseDiffExprFieldName(name) !== null;\n}\n\nexport function partitionFields(fieldNames, catalog) {\n const expressionFields = [];\n const diffExpressionFields = [];\n const nonExpressionFields = [];\n for (const n of fieldNames) {\n if (isDiffExpressionField(n, catalog)) diffExpressionFields.push(n);\n else if (isExpressionField(n, catalog)) expressionFields.push(n);\n else nonExpressionFields.push(n);\n }\n return { expressionFields, diffExpressionFields, nonExpressionFields };\n}\n\nfunction joinLabels(arr) {\n if (!Array.isArray(arr)) return '';\n return arr.map(f => f && f.label).filter(Boolean).join('; ');\n}\n\nexport function buildExperimentIndex(expressionStudies) {\n const index = {};\n if (!expressionStudies) return index;\n for (const arr of Object.values(expressionStudies)) {\n if (!Array.isArray(arr)) continue;\n for (const e of arr) if (e && e._id) index[e._id] = e;\n }\n return index;\n}\n\nfunction findAssay(expressionSamples, experimentId, group) {\n if (!expressionSamples) return null;\n const arr = expressionSamples[experimentId];\n if (!arr) return null;\n return arr.find(a => a.group === group) || null;\n}\n\nexport function resolveExpressionForDoc(doc, expressionFields, expressionStudies, expressionSamples, cutoffs) {\n const rows = [];\n const experimentIndex = buildExperimentIndex(expressionStudies);\n const minTPM = cutoffs && cutoffs.exprMinTPM;\n const minTPMActive = minTPM !== null && minTPM !== undefined && minTPM !== '' && Number.isFinite(+minTPM);\n for (const fieldName of expressionFields) {\n const parsed = parseExprFieldName(fieldName);\n if (!parsed) continue;\n const val = doc[fieldName];\n if (val === undefined || val === null) continue;\n if (minTPMActive && (!Number.isFinite(+val) || +val < +minTPM)) continue;\n const exp = experimentIndex[parsed.experimentId];\n const assay = findAssay(expressionSamples, parsed.experimentId, parsed.group);\n rows.push({\n field: fieldName,\n experiment: parsed.experimentId,\n experiment_name: exp ? (exp.description || exp.title || exp.name || '') : '',\n assay: parsed.group,\n sample: assay ? joinLabels(assay.factor) || joinLabels(assay.characteristic) : '',\n value: val\n });\n }\n return rows;\n}\n\nexport function resolveDiffExpressionForDoc(doc, diffExpressionFields, expressionStudies, expressionSamples, cutoffs) {\n const experimentIndex = buildExperimentIndex(expressionStudies);\n const byContrast = new Map();\n for (const fieldName of diffExpressionFields) {\n const parsed = parseDiffExprFieldName(fieldName);\n if (!parsed) continue;\n const val = doc[fieldName];\n if (val === undefined || val === null) continue;\n const key = `${parsed.experimentId}|${parsed.group1}|${parsed.group2}`;\n let entry = byContrast.get(key);\n if (!entry) {\n entry = {\n experimentId: parsed.experimentId,\n group1: parsed.group1,\n group2: parsed.group2,\n pval: '',\n l2fc: ''\n };\n byContrast.set(key, entry);\n }\n if (parsed.stat === 'pval') entry.pval = val;\n else entry.l2fc = val; // l2fc or logfc\n }\n const maxPval = cutoffs && cutoffs.diffMaxPval;\n const maxPvalActive = maxPval !== null && maxPval !== undefined && maxPval !== '' && Number.isFinite(+maxPval);\n const rows = [];\n for (const entry of byContrast.values()) {\n if (maxPvalActive) {\n const pv = +entry.pval;\n if (!Number.isFinite(pv) || pv > +maxPval) continue;\n }\n const exp = experimentIndex[entry.experimentId];\n const assay1 = findAssay(expressionSamples, entry.experimentId, entry.group1);\n const assay2 = findAssay(expressionSamples, entry.experimentId, entry.group2);\n rows.push({\n diff_experiment: entry.experimentId,\n diff_experiment_name: exp ? (exp.description || exp.title || exp.name || '') : '',\n group1_factors: assay1 ? joinLabels(assay1.factor) || joinLabels(assay1.characteristic) : entry.group1,\n group2_factors: assay2 ? joinLabels(assay2.factor) || joinLabels(assay2.characteristic) : entry.group2,\n l2fc: entry.l2fc,\n pval: entry.pval\n });\n }\n return rows;\n}\n","// Maps gene-doc field name -> ontology key used for resolution.\nexport const ANCESTOR_FIELD_MAP = {\n GO__ancestors: 'GO',\n PO__ancestors: 'PO',\n TO__ancestors: 'TO',\n QTL_TO__ancestors: 'TO',\n domains__ancestors: 'domains',\n pathways__ancestors: 'pathways',\n taxonomy__ancestors: 'taxonomy'\n};\n\n// Display label used in the \"hierarchy\" column.\nexport const ANCESTOR_HIERARCHY_LABEL = {\n GO__ancestors: 'Gene Ontology',\n PO__ancestors: 'Plant Ontology',\n TO__ancestors: 'Trait Ontology',\n QTL_TO__ancestors: 'Trait Ontology',\n domains__ancestors: 'InterPro',\n pathways__ancestors: 'Plant Reactome',\n taxonomy__ancestors: 'Taxonomy'\n};\n\nexport const ANCESTOR_EXTRA_COLUMNS = [\n 'hierarchy',\n 'term_id',\n 'term_name',\n 'term_type'\n];\n\nexport function isAncestorField(name) {\n return Object.prototype.hasOwnProperty.call(ANCESTOR_FIELD_MAP, name);\n}\n\nexport function partitionAncestorFields(fieldNames) {\n const ancestor = [];\n const plain = [];\n for (const n of fieldNames) {\n if (isAncestorField(n)) ancestor.push(n);\n else plain.push(n);\n }\n return { ancestor, plain };\n}\n\n// Gather the ids referenced across docs for each ontology/field.\nexport function collectAncestorIds(docs, fieldNames) {\n const byOnt = {};\n for (const name of fieldNames) {\n const ont = ANCESTOR_FIELD_MAP[name];\n if (!ont) continue;\n if (!byOnt[ont]) byOnt[ont] = new Set();\n for (const d of (docs || [])) {\n const v = d && d[name];\n if (!Array.isArray(v)) continue;\n for (const id of v) if (id != null) byOnt[ont].add(+id);\n }\n }\n const out = {};\n for (const k of Object.keys(byOnt)) out[k] = Array.from(byOnt[k]);\n return out;\n}\n\nfunction getOntologyRecord(ontKey, id, ctx) {\n if (!ctx) return null;\n const idNum = +id;\n if (ontKey === 'taxonomy') {\n const t = ctx.taxonomy;\n return (t && t[idNum]) || null;\n }\n if (ontKey === 'pathways') {\n const p = ctx.pathways;\n return (p && p[idNum]) || null;\n }\n const bucket = ctx.ontologies && ctx.ontologies[ontKey];\n return (bucket && bucket[idNum]) || null;\n}\n\n// Returns list of ancestor ids *excluding* self.\nfunction ancestorsOfRecord(ontKey, record, docTaxonId, ctx) {\n if (!record) return null;\n if (ontKey === 'taxonomy') {\n const visited = new Set();\n const stack = Array.isArray(record.is_a) ? record.is_a.slice() : [];\n const taxonomy = (ctx && ctx.taxonomy) || {};\n while (stack.length) {\n const pid = +stack.pop();\n if (visited.has(pid)) continue;\n visited.add(pid);\n const parent = taxonomy[pid];\n if (parent && Array.isArray(parent.is_a)) {\n for (const g of parent.is_a) if (!visited.has(+g)) stack.push(g);\n }\n }\n return Array.from(visited);\n }\n if (ontKey === 'pathways') {\n const taxonKey = docTaxonId != null ? `ancestors_${docTaxonId}` : null;\n let arr = taxonKey && record[taxonKey];\n if (!Array.isArray(arr)) {\n const collected = new Set();\n for (const k of Object.keys(record)) {\n if (k.startsWith('ancestors_') && Array.isArray(record[k])) {\n for (const a of record[k]) collected.add(+a);\n }\n }\n arr = Array.from(collected);\n }\n return arr.filter(x => +x !== +record._id);\n }\n // GO / PO / TO / domains — `ancestors` already includes self\n if (Array.isArray(record.ancestors)) {\n return record.ancestors.filter(x => +x !== +record._id);\n }\n return [];\n}\n\nexport function mostSpecific(ontKey, ids, docTaxonId, ctx) {\n if (!Array.isArray(ids) || ids.length === 0) return [];\n const ancestorSet = new Set();\n let anyResolved = false;\n for (const id of ids) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n if (!rec || rec.missing) continue;\n anyResolved = true;\n const anc = ancestorsOfRecord(ontKey, rec, docTaxonId, ctx);\n if (!anc) continue;\n for (const a of anc) ancestorSet.add(+a);\n }\n if (!anyResolved) return ids.slice();\n return ids.filter(id => !ancestorSet.has(+id));\n}\n\nfunction displayIdAndName(ontKey, id, ctx) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n if (!rec || rec.missing) return { id: String(id), name: '' };\n const displayId = rec.id != null ? String(rec.id) : String(rec._id != null ? rec._id : id);\n let name = rec.name || '';\n if (ontKey === 'taxonomy' && !name) name = rec.display_name || '';\n return { id: displayId, name: String(name) };\n}\n\nexport function formatAncestorsCellTSV(ontKey, ids, docTaxonId, ctx) {\n const specific = mostSpecific(ontKey, ids, docTaxonId, ctx);\n return specific.map(id => {\n const { id: disp, name } = displayIdAndName(ontKey, id, ctx);\n return name ? `${disp} ${name}` : disp;\n }).join(';');\n}\n\nexport function formatAncestorsJSON(ontKey, ids, docTaxonId, ctx) {\n const specific = mostSpecific(ontKey, ids, docTaxonId, ctx);\n return specific.map(id => displayIdAndName(ontKey, id, ctx));\n}\n\nfunction termTypeForRecord(ontKey, rec) {\n if (!rec) return '';\n if (ontKey === 'GO') return rec.namespace || rec.type || '';\n if (ontKey === 'taxonomy') return rec.rank || '';\n return rec.type || rec.namespace || '';\n}\n\n// Expand a doc's selected ancestor fields into rows of\n// { hierarchy, term_id, term_name, term_type }, one per most-specific term.\nexport function resolveAncestorsForDoc(doc, ancestorFields, ctx) {\n const rows = [];\n for (const fieldName of ancestorFields) {\n const ontKey = ANCESTOR_FIELD_MAP[fieldName];\n if (!ontKey) continue;\n const ids = Array.isArray(doc[fieldName]) ? doc[fieldName] : [];\n if (!ids.length) continue;\n const specific = mostSpecific(ontKey, ids, doc.taxon_id, ctx);\n const hierarchy = ANCESTOR_HIERARCHY_LABEL[fieldName] || fieldName;\n for (const id of specific) {\n const rec = getOntologyRecord(ontKey, id, ctx);\n const { id: disp, name } = displayIdAndName(ontKey, id, ctx);\n rows.push({\n hierarchy,\n term_id: disp,\n term_name: name,\n term_type: termTypeForRecord(ontKey, rec)\n });\n }\n }\n return rows;\n}\n","const ONT_KEYS = ['GO', 'PO', 'TO', 'domains'];\nconst BATCH_SIZE = 200;\n\nconst inflight = {};\n\nconst ontologies = {\n name: 'ontologies',\n getReducer: () => {\n const initialState = { GO: {}, PO: {}, TO: {}, domains: {} };\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'ONTOLOGY_RECORDS_REQUESTED': {\n const { key, ids } = payload;\n const bucket = { ...state[key] };\n for (const id of ids) {\n if (!bucket.hasOwnProperty(id)) bucket[id] = null;\n }\n return { ...state, [key]: bucket };\n }\n case 'ONTOLOGY_RECORDS_RECEIVED': {\n const { key, records } = payload;\n return { ...state, [key]: { ...state[key], ...records } };\n }\n default:\n return state;\n }\n };\n },\n\n doEnsureOntologyRecords: (key, ids) => ({ dispatch, store }) => {\n if (!ONT_KEYS.includes(key)) return Promise.resolve();\n if (!Array.isArray(ids) || ids.length === 0) return Promise.resolve();\n const existing = store.selectOntologies()[key] || {};\n const missing = [];\n for (const id of ids) {\n if (id == null) continue;\n const idNum = +id;\n if (!existing.hasOwnProperty(idNum) && !(inflight[key] && inflight[key].has(idNum))) {\n missing.push(idNum);\n }\n }\n if (missing.length === 0) return Promise.resolve();\n\n if (!inflight[key]) inflight[key] = new Set();\n for (const id of missing) inflight[key].add(id);\n dispatch({ type: 'ONTOLOGY_RECORDS_REQUESTED', payload: { key, ids: missing } });\n\n const api = store.selectGrameneAPI();\n const batches = [];\n for (let i = 0; i < missing.length; i += BATCH_SIZE) {\n batches.push(missing.slice(i, i + BATCH_SIZE));\n }\n\n const fetchBatch = (batch) => {\n const idList = batch.length === 1 ? `${batch[0]},0` : batch.join(',');\n return fetch(`${api}/${key}?idList=${idList}&rows=${batch.length + 1}`)\n .then(r => r.json())\n .then(docs => {\n const records = {};\n for (const d of (docs || [])) {\n if (d && d._id != null) records[d._id] = d;\n }\n for (const id of batch) {\n if (!records.hasOwnProperty(id)) records[id] = { _id: id, missing: true };\n }\n dispatch({ type: 'ONTOLOGY_RECORDS_RECEIVED', payload: { key, records } });\n })\n .catch(() => {\n const records = {};\n for (const id of batch) records[id] = { _id: id, missing: true };\n dispatch({ type: 'ONTOLOGY_RECORDS_RECEIVED', payload: { key, records } });\n })\n .finally(() => {\n for (const id of batch) inflight[key].delete(id);\n });\n };\n\n return Promise.all(batches.map(fetchBatch));\n },\n\n selectOntologies: state => state.ontologies\n};\n\nexport default ontologies;\n","import { createSelector } from 'redux-bundler';\n\n// State shape:\n// {\n// pivot: { status, signature, data: { [taxon_id]: <gene count> }, error, requestId },\n// activeTaxon: <taxon_id|null>,\n// byTaxon: {\n// [taxon_id]: {\n// selectedFields: [<solr field name>...],\n// fieldsModalOpen: <bool>,\n// fetch: { status, offset, total, signature, requestId, error },\n// rows: [<doc>...]\n// }\n// }\n// }\n// Per-taxon study lists are derived in the view layer from expressionStudies.\n\nconst PAGE_SIZE = 200;\n\nlet pivotPendingId = 0;\nconst fetchPending = {}; // per-taxon request id\nconst attrsPending = {}; // per-taxon request id for available attrs\nconst existencePending = {}; // per-taxon request id for field-existence check\n\nfunction pivotSignature(store) {\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n return `${q}|${taxa.sort().join(',')}`;\n}\n\nfunction fetchSignature(store, taxon) {\n const q = store.selectGrameneFiltersQueryString();\n const ev = store.selectExprViz();\n const sel = (ev.byTaxon[taxon] && ev.byTaxon[taxon].selectedFields) || [];\n return `${q}|${taxon}|${sel.slice().sort().join(',')}`;\n}\n\nconst ALWAYS_FL = ['id', 'name', 'system_name', 'taxon_id'];\n\nconst exprViz = {\n name: 'exprViz',\n\n getReducer: () => {\n const initialState = {\n pivot: { status: 'idle', signature: null, data: {}, error: null, requestId: 0 },\n activeTaxon: null,\n byTaxon: {}\n };\n\n function ensureTaxon(state, taxon) {\n if (state.byTaxon[taxon]) return state.byTaxon[taxon];\n return {\n selectedFields: [],\n fieldsModalOpen: false,\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null },\n rows: [],\n availableAttrs: null,\n attrsSignature: null,\n attrsRequestId: 0,\n fieldExistence: null,\n existenceStatus: 'idle',\n existenceSignature: null,\n existenceRequestId: 0\n };\n }\n\n return (state = initialState, { type, payload }) => {\n switch (type) {\n case 'EXPRVIZ_PIVOT_STARTED':\n return { ...state, pivot: { status: 'loading', signature: payload.signature, data: state.pivot.data, error: null, requestId: payload.requestId } };\n case 'EXPRVIZ_PIVOT_SUCCEEDED':\n if (payload.requestId !== state.pivot.requestId) return state;\n return { ...state, pivot: { status: 'ready', signature: state.pivot.signature, data: payload.data, error: null, requestId: payload.requestId } };\n case 'EXPRVIZ_PIVOT_FAILED':\n if (payload.requestId !== state.pivot.requestId) return state;\n return { ...state, pivot: { ...state.pivot, status: 'error', error: payload.error } };\n\n case 'EXPRVIZ_ACTIVE_TAXON_SET':\n return { ...state, activeTaxon: payload };\n\n case 'EXPRVIZ_FIELDS_MODAL_TOGGLED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: { ...state.byTaxon, [payload.taxon]: { ...t, fieldsModalOpen: payload.open } }\n };\n }\n case 'EXPRVIZ_FIELDS_SET': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n selectedFields: payload.fields,\n rows: [],\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null }\n }\n }\n };\n }\n case 'EXPRVIZ_FIELDS_REORDERED': {\n const t = state.byTaxon[payload.taxon];\n if (!t) return state;\n // Same set of fields — preserve rows; only the column/axis order changes.\n const setA = new Set(t.selectedFields);\n const setB = new Set(payload.fields);\n if (setA.size !== setB.size || ![...setA].every(f => setB.has(f))) {\n return state;\n }\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, selectedFields: payload.fields }\n }\n };\n }\n\n case 'EXPRVIZ_FETCH_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n fetch: { ...t.fetch, status: 'loading', signature: payload.signature, requestId: payload.requestId, error: null }\n }\n }\n };\n }\n case 'EXPRVIZ_FETCH_BATCH': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.fetch.requestId) return state;\n const rows = t.rows.concat(payload.docs);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n rows,\n fetch: { ...t.fetch, offset: rows.length, total: payload.total, status: rows.length >= payload.total ? 'done' : 'loading' }\n }\n }\n };\n }\n case 'EXPRVIZ_FETCH_FAILED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.fetch.requestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, fetch: { ...t.fetch, status: 'error', error: payload.error } }\n }\n };\n }\n\n case 'EXPRVIZ_ATTRS_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, attrsRequestId: payload.requestId, attrsSignature: payload.signature }\n }\n };\n }\n case 'EXPRVIZ_ATTRS_SUCCEEDED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.attrsRequestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, availableAttrs: payload.attrs }\n }\n };\n }\n\n case 'EXPRVIZ_EXISTENCE_STARTED': {\n const t = ensureTaxon(state, payload.taxon);\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: {\n ...t,\n existenceStatus: 'loading',\n existenceRequestId: payload.requestId,\n existenceSignature: payload.signature\n }\n }\n };\n }\n case 'EXPRVIZ_EXISTENCE_SUCCEEDED': {\n const t = state.byTaxon[payload.taxon];\n if (!t || payload.requestId !== t.existenceRequestId) return state;\n return {\n ...state,\n byTaxon: {\n ...state.byTaxon,\n [payload.taxon]: { ...t, existenceStatus: 'ready', fieldExistence: payload.counts }\n }\n };\n }\n\n case 'GRAMENE_SEARCH_CLEARED': {\n // Search context changed — invalidate pivot and any loaded rows.\n // Selected fields are kept so the user can re-run the load.\n const newByTaxon = {};\n for (const tid of Object.keys(state.byTaxon)) {\n newByTaxon[tid] = {\n ...state.byTaxon[tid],\n rows: [],\n fetch: { status: 'idle', offset: 0, total: 0, signature: null, requestId: 0, error: null },\n availableAttrs: null,\n attrsSignature: null,\n fieldExistence: null,\n existenceStatus: 'idle',\n existenceSignature: null\n };\n }\n return {\n ...state,\n pivot: { status: 'idle', signature: null, data: {}, error: null, requestId: 0 },\n byTaxon: newByTaxon\n };\n }\n\n default:\n return state;\n }\n };\n },\n\n doFetchExprVizPivot: () => ({ dispatch, store }) => {\n const requestId = ++pivotPendingId;\n const signature = pivotSignature(store);\n dispatch({ type: 'EXPRVIZ_PIVOT_STARTED', payload: { requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const g = store.selectGrameneGenomes();\n const m = store.selectGrameneMaps() || {};\n const taxa = Object.keys(g.active || {}).filter(tid => m[tid] && !m[tid].hidden);\n const fq = taxa.length ? `&fq=taxon_id:(${taxa.join(' OR ')})` : '';\n const facetField = \"{!facet.limit='300' facet.mincount='1' key='taxon_id'}taxon_id\";\n const url = `${api}/search?q=${q}${fq}&fq=expressed_in_gxa_attr_ss:*&rows=0&facet=true&facet.field=${facetField}`;\n\n fetch(url)\n .then(r => r.json())\n .then(json => {\n const arr = (json && json.facet_counts && json.facet_counts.facet_fields && json.facet_counts.facet_fields.taxon_id) || [];\n const data = {};\n for (let i = 0; i < arr.length; i += 2) {\n data[arr[i]] = arr[i + 1];\n }\n if (Object.keys(data).length === 0) {\n console.warn('[exprViz] no taxon_ids found with expression', { url, json });\n }\n dispatch({ type: 'EXPRVIZ_PIVOT_SUCCEEDED', payload: { requestId, data } });\n })\n .catch(err => {\n dispatch({ type: 'EXPRVIZ_PIVOT_FAILED', payload: { requestId, error: String(err) } });\n });\n },\n\n doSetExprVizActiveTaxon: tid => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_ACTIVE_TAXON_SET', payload: tid }),\n\n doToggleExprVizFieldsModal: (taxon, open) => ({ dispatch, store }) => {\n dispatch({ type: 'EXPRVIZ_FIELDS_MODAL_TOGGLED', payload: { taxon, open: !!open } });\n if (open) store.doFetchExprVizAvailableAttrs(taxon);\n },\n\n doFetchExprVizAvailableAttrs: taxon => ({ dispatch, store }) => {\n const q = store.selectGrameneFiltersQueryString();\n const signature = `${q}|${taxon}`;\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (t && t.availableAttrs && t.attrsSignature === signature) return;\n const requestId = (attrsPending[taxon] = (attrsPending[taxon] || 0) + 1);\n dispatch({ type: 'EXPRVIZ_ATTRS_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const facetField = \"{!facet.limit='2000' facet.mincount='1' key='attrs'}expressed_in_gxa_attr_ss\";\n const url = `${api}/search?q=${q}&fq=taxon_id:${taxon}&fq=expressed_in_gxa_attr_ss:*&rows=0&facet=true&facet.field=${facetField}`;\n fetch(url)\n .then(r => r.json())\n .then(json => {\n if (requestId !== attrsPending[taxon]) return;\n const arr = (json && json.facet_counts && json.facet_counts.facet_fields && json.facet_counts.facet_fields.attrs) || [];\n const attrs = [];\n for (let i = 0; i < arr.length; i += 2) attrs.push(arr[i]);\n dispatch({ type: 'EXPRVIZ_ATTRS_SUCCEEDED', payload: { taxon, requestId, attrs } });\n })\n .catch(() => { /* swallow — non-fatal; modal still works without filtering */ });\n },\n\n doSetExprVizFields: (taxon, fields) => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_FIELDS_SET', payload: { taxon, fields } }),\n\n doReorderExprVizFields: (taxon, fields) => ({ dispatch }) =>\n dispatch({ type: 'EXPRVIZ_FIELDS_REORDERED', payload: { taxon, fields } }),\n\n doFetchExprVizData: taxon => ({ dispatch, store }) => {\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (!t || t.selectedFields.length === 0) return;\n const requestId = (fetchPending[taxon] = (fetchPending[taxon] || 0) + 1);\n const signature = fetchSignature(store, taxon);\n dispatch({ type: 'EXPRVIZ_FETCH_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const q = store.selectGrameneFiltersQueryString();\n const fl = [...new Set([...ALWAYS_FL, ...t.selectedFields])].join(',');\n\n const fetchPage = (offset) => {\n if (requestId !== fetchPending[taxon]) return; // superseded\n const url = `${api}/search?q=${q}&fq=taxon_id:${taxon}&fl=${fl}&rows=${PAGE_SIZE}&start=${offset}`;\n fetch(url)\n .then(r => r.json())\n .then(json => {\n if (requestId !== fetchPending[taxon]) return;\n const docs = (json.response && json.response.docs) || [];\n const total = (json.response && json.response.numFound) || 0;\n dispatch({ type: 'EXPRVIZ_FETCH_BATCH', payload: { taxon, requestId, docs, total } });\n const next = offset + docs.length;\n if (docs.length > 0 && next < total) {\n fetchPage(next);\n }\n })\n .catch(err => {\n dispatch({ type: 'EXPRVIZ_FETCH_FAILED', payload: { taxon, requestId, error: String(err) } });\n });\n };\n fetchPage(0);\n },\n\n // Per-candidate-field non-null counts under the current q + taxon. Used by\n // FieldsModal to hide fields that have no data in the current result set\n // before the user picks. Uses stats.field (the swagger whitelist drops\n // facet.query) batched across multiple GETs to stay under URL limits.\n doFetchExprVizFieldExistence: (taxon, fields) => ({ dispatch, store }) => {\n if (!fields || fields.length === 0) return;\n const q = store.selectGrameneFiltersQueryString();\n const fieldsKey = fields.slice().sort().join(',');\n const signature = `${q}|${taxon}|${fieldsKey}`;\n const ev = store.selectExprViz();\n const t = ev.byTaxon[taxon];\n if (t && t.fieldExistence && t.existenceSignature === signature) return;\n\n const requestId = (existencePending[taxon] = (existencePending[taxon] || 0) + 1);\n dispatch({ type: 'EXPRVIZ_EXISTENCE_STARTED', payload: { taxon, requestId, signature } });\n\n const api = store.selectGrameneAPI();\n const BATCH_SIZE = 40;\n const batches = [];\n for (let i = 0; i < fields.length; i += BATCH_SIZE) {\n batches.push(fields.slice(i, i + BATCH_SIZE));\n }\n\n Promise.all(batches.map(batch => {\n const params = new URLSearchParams();\n params.append('q', q);\n params.append('fq', `taxon_id:${taxon}`);\n params.append('rows', '0');\n params.append('stats', 'true');\n batch.forEach(f => params.append('stats.field', f));\n return fetch(`${api}/search?${params.toString()}`)\n .then(r => r.json())\n .then(json => {\n const sf = (json && json.stats && json.stats.stats_fields) || {};\n const out = {};\n for (const f of Object.keys(sf)) {\n const s = sf[f];\n out[f] = s && typeof s.count === 'number' ? s.count : 0;\n }\n return out;\n });\n }))\n .then(results => {\n if (requestId !== existencePending[taxon]) return;\n const counts = Object.assign({}, ...results);\n dispatch({ type: 'EXPRVIZ_EXISTENCE_SUCCEEDED', payload: { taxon, requestId, counts } });\n })\n .catch(() => { /* swallow — non-fatal; modal falls back to showing all */ });\n },\n\n reactExprVizPivot: createSelector(\n 'selectExprViz',\n 'selectGrameneFiltersStatus',\n 'selectGrameneViews',\n 'selectGrameneFiltersQueryString',\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n (ev, filtersStatus, views, q, g, m) => {\n if (!ev || filtersStatus === 'init') return;\n const onView = views && views.options && views.options.find(v => v.id === 'exprViz');\n if (!onView || onView.show !== 'on') return;\n const maps = m || {};\n const taxa = Object.keys((g && g.active) || {}).filter(tid => maps[tid] && !maps[tid].hidden);\n const sig = `${q}|${taxa.sort().join(',')}`;\n if (ev.pivot.status === 'loading') return;\n if (ev.pivot.signature === sig && ev.pivot.status === 'ready') return;\n return { actionCreator: 'doFetchExprVizPivot' };\n }\n ),\n\n selectExprViz: state => state.exprViz,\n selectExprVizPivot: state => state.exprViz.pivot,\n selectExprVizActiveTaxon: state => state.exprViz.activeTaxon,\n selectExprVizByTaxon: state => state.exprViz.byTaxon\n};\n\nexport default exprViz;\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\n\nconst Gene = ({gene}) => {\n return <div className=\"row\">{gene.id}</div>\n};\n\nconst Genes = (results, rows, doChangeQuantity) => {\n if (results && results.numFound > 0) {\n const moreButton = (results.numFound > rows)\n ? <button onClick={e => doChangeQuantity('Genes',20)}>more</button>\n : '';\n const fewerButton = (rows > 20)\n ? <button onClick={e => doChangeQuantity('Genes',-20)}>fewer</button>\n : '';\n const docsToShow = results.response.docs.slice(0,rows);\n return (\n <div id=\"Genes\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Genes</h4>\n </div>\n {docsToShow.map((doc,idx) => <Gene key={idx} gene={doc}/>)}\n {fewerButton}{moreButton}\n </div>\n );\n }\n};\n\nconst Pathway = ({pathway}) => {\n return <div className=\"row\">{pathway.name}</div>\n};\nconst Pathways = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Pathways\" className=\"container mb40 anchor\">\n <div className=\"fancy-title\">\n <h4>Pathways</h4>\n </div>\n {results.pathways.map((doc,idx) => (<Pathway key={idx} pathway={doc}/>))}\n </div>\n );\n }\n};\n\nconst Domain = ({domain}) => {\n return <div className=\"row\">{domain.id}</div>\n};\nconst Domains = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Domains\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Domains</h4>\n </div>\n {results.domains.map((doc,idx) => (<Domain key={idx} domain={doc}/>))}\n </div>\n );\n }\n};\n\nconst Taxon = ({taxon}) => {\n return <div className=\"row\">{taxon.id}</div>\n};\nconst Species = results => {\n if (results && results.numFound > 0) {\n return (\n <div id=\"Species\" className=\"container mb40 anchor\">\n <div className=\"fancy-title mb40\">\n <h4>Species</h4>\n </div>\n {results.taxonomy.map((doc,idx) => (<Taxon key={idx} taxon={doc}/>))}\n </div>\n );\n }\n};\n\nconst ResultList = ({grameneGenes, grameneDomains, gramenePathways, grameneTaxonomy, searchUI, searchUpdated, doChangeQuantity}) => {\n if (searchUI.Gramene) {\n return (\n <div id=\"gramene\" className=\"row\">\n <div className=\"fancy-title pt50\">\n <h3>Gramene search results</h3>\n </div>\n {searchUI.Genes && Genes(grameneGenes, searchUI.rows.Genes, doChangeQuantity)}\n {searchUI.Domains && Domains(grameneDomains)}\n {searchUI.Pathways && Pathways(gramenePathways)}\n {searchUI.Species && Species(grameneTaxonomy)}\n </div>\n )\n }\n else {\n return null;\n }\n};\n\nexport default connect(\n 'selectGrameneGenes',\n 'selectGrameneDomains',\n 'selectGramenePathways',\n 'selectGrameneTaxonomy',\n 'selectSearchUI',\n 'selectSearchUpdated',\n 'doChangeQuantity',\n ResultList\n);\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\n\nconst getStatus = (cat, results, isChecked, toggle) => {\n const tally = results ? results.numFound : <img src=\"/static/images/dna_spinner.svg\"/>;\n return (\n <li className='category-leaf'>\n <input type=\"checkbox\" checked={isChecked} onChange={e => toggle(cat)}/>\n <a data-scroll href={`#${cat}`} className=\"nav-link active\">{cat}<span style={{float:\"right\"}}>{tally}</span></a>\n </li>\n )\n};\n\nconst ResultSummary = ({grameneGenes, gramenePathways, grameneDomains, grameneTaxonomy, searchUI, searchUpdated, doToggleCategory}) => {\n const status = grameneGenes ?\n grameneGenes.numFound:\n<img src=\"/static/images/dna_spinner.svg\"/>;\n if (searchUI.Gramene) return (\n <li className=\"active category-expanded\">\n <a onClick={e => doToggleCategory('Gramene')}>\n Gramene Search<span style={{float:\"right\"}}>{status}</span>\n </a>\n <ul className=\"list-unstyled\">\n {getStatus('Genes', grameneGenes, searchUI.Genes, doToggleCategory)}\n {getStatus('Domains', grameneDomains, searchUI.Domains, doToggleCategory)}\n {getStatus('Pathways', gramenePathways, searchUI.Pathways, doToggleCategory)}\n {getStatus('Species', grameneTaxonomy, searchUI.Species, doToggleCategory)}\n</ul>\n </li>\n);\nelse return (\n <li className=\"active category-collapsed\">\n <a onClick={e => doToggleCategory('Gramene')}>\n Gramene Search<span\n style={{float:\"right\"}}>{status}</span>\n </a>\n </li>\n);\n};\n\nexport default connect(\n 'selectGrameneGenes',\n 'selectGramenePathways',\n 'selectGrameneDomains',\n 'selectGrameneTaxonomy',\n 'selectSearchUI',\n 'selectSearchUpdated',\n 'doToggleCategory',\n ResultSummary\n);\n","import {connect} from 'redux-bundler-react'\nimport React from 'react'\nimport ReactGA from 'react-ga4'\nimport { Button, Badge, Alert } from 'react-bootstrap'\nimport './styles.css'\n\nfunction showMatches(text, x) {\n let re = new RegExp(`(${x})`, 'ig');\n let match = text.split(re);\n return <span>\n {match.map((str, idx) => {\n if (idx % 2 === 1) {\n return <span key={idx} style={{fontWeight:'bolder'}}>{str}</span>\n }\n return <span key={idx}>{str}</span>\n })}\n </span>\n}\n\nfunction logAction(sugg) {\n ReactGA.event({\n category: 'Search',\n action: 'SetFilter',\n label: sugg.name\n })\n}\nfunction getLowestCommonAncestorName(tids, taxonomy) {\n let lca;\n tids.forEach(tid => {\n if (!lca) {\n lca = [...taxonomy[tid].ancestors];\n } else {\n let ancestors = new Set(taxonomy[tid].ancestors);\n while (!ancestors.has(lca[0])) {\n lca.shift();\n }\n }\n });\n return taxonomy[lca[0]].short_name;\n}\n\nconst TryPan = (props) => {\n const query = props.query;\n const pan = props.pan;\n return <div className=\"suggestion-panlink\">\n <a target=\"_blank\" href={pan.url + \"?suggestion=\" + query}>\n <img src={pan.svg} title={`Search at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst TryAnotherSite = props => {\n const query = props.query;\n const config = props.config;\n let sites = Object.keys(config.panSite);\n return <div>\n <Alert variant={'info'}>Don't see what you're looking for? Search for <b>{query}</b> on one of our sister sites</Alert>\n {sites.map((p, idx) => <TryPan key={idx} query={query} pan={config.panSite[p]}/>)}\n </div>\n}\n\nconst Suggestions = props => {\n let suggestions = props.grameneSuggestions;\n if (suggestions && suggestions.grouped) {\n if (suggestions.grouped.category.matches === 0) {\n let sugg1 = {\n fq_field: 'text',\n fq_value: props.suggestionsQuery,\n name: `Genes containing \"${props.suggestionsQuery}\"`,\n category: 'Gene',\n };\n let sugg2 = {\n fq_field: 'text',\n fq_value: `${props.suggestionsQuery}*`,\n name: `Genes matching \"${props.suggestionsQuery}*\"`,\n category: 'Gene',\n };\n return (\n <div style={{margin: '10px', maxWidth: '820px'}}>\n <Alert variant={'info'}><em>No suggestions found.</em> You may still attempt a full text search, though it is unlikely to find any genes for you.</Alert>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg1); props.doAcceptSuggestion(sugg1); props.doAcceptGrameneSuggestion(sugg1)}}>\n {`All genes that contain the word \"${props.suggestionsQuery}\"`}\n </Button>\n <Button id={'word'}\n size={'sm'}\n variant={'outline-secondary'}\n onClick={() => {logAction(sugg2); props.doAcceptSuggestion(sugg2); props.doAcceptGrameneSuggestion(sugg2)}}>\n {`All genes that contain a word that starts with \"${props.suggestionsQuery}\"`}\n </Button>\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n else {\n return (\n <div style={{margin: '10px'}}>\n {suggestions.grouped.category.groups.map((g,idx) => {\n return <div key={idx} id='gramene-suggestion'>\n <h4 className=\"mt10\">{g.groupValue}</h4>\n {g.doclist.docs.map((sugg,jdx) =>\n <Button id={`${idx}-${jdx}`}\n key={jdx}\n disabled={sugg.num_genes === 0}\n size='sm'\n variant=\"outline-secondary\"\n onClick={() => {logAction(sugg); props.doAcceptSuggestion(sugg); props.doAcceptGrameneSuggestion(sugg)}}>\n {showMatches(sugg.display_name,props.suggestionsQuery)}{' '}\n <Badge bg=\"secondary\">{sugg.num_genes}</Badge>\n <i>&nbsp;{getLowestCommonAncestorName(sugg.taxon_id, props.grameneTaxonomy)}</i>\n </Button>\n )}\n </div>\n })}\n <TryAnotherSite query={props.suggestionsQuery} config={props.configuration}/>\n </div>\n );\n }\n }\n else {\n return <div></div>\n }\n}\n\nexport default connect(\n 'selectGrameneSuggestions',\n 'selectSuggestionsQuery',\n 'selectGrameneTaxonomy',\n 'selectConfiguration',\n 'doAcceptSuggestion',\n 'doAcceptGrameneSuggestion',\n Suggestions\n);\n","import React, { useState, useRef, useEffect } from 'react'\nimport { connect } from 'redux-bundler-react'\nimport { Navbar, Nav, NavDropdown, Container, OverlayTrigger, Popover} from 'react-bootstrap'\nimport Switch from 'react-switch'\nimport { IoAlertCircle } from 'react-icons/io5'\nimport { BsGearFill,BsTrash,BsChevronDown,BsChevronRight } from 'react-icons/bs'\nimport GeneList from './results/GeneList'\nimport TaxDist from './results/TaxDist'\nimport HelpDemo from './results/HelpDemo'\nimport GeneAttribs from './results/GeneAttribs'\nimport TaxonomyModal from './TaxonomyModal'\nimport Expression from './results/Expression'\nimport UserGeneLists from './results/UserGeneLists'\nimport ExporterView from './exporter/ExporterView'\nimport ExprVizView from './exprViz/ExprVizView'\nimport Auth from './Auth'\nimport ReactGA from 'react-ga4'\nimport './styles.css';\n\nconst CollapsibleSection = ({ title, defaultOpen = true, extra, children }) => {\n const [open, setOpen] = useState(defaultOpen);\n return (\n <div className=\"sidebar-section\">\n <div className=\"sidebar-section-header\" onClick={() => setOpen(!open)}>\n <b>{title}</b>\n <span className=\"sidebar-section-actions\">\n {extra}\n <span className=\"sidebar-section-toggle\">\n {open ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n </span>\n </div>\n {open && <div className=\"sidebar-section-body\">{children}</div>}\n </div>\n );\n};\n\nconst inventory = {\n help: HelpDemo,\n list: GeneList,\n taxonomy: TaxDist,\n attribs: GeneAttribs,\n expression: Expression,\n exprViz: ExprVizView,\n userLists: UserGeneLists,\n export: ExporterView\n};\n\nconst StatusCmp = props => {\n let content = props.grameneFiltersStatus;\n // if (props.grameneFiltersStatus === 'init') {\n // props.doClearGrameneFilters();\n // }\n if (props.grameneFiltersStatus === 'ready') {\n let tally = <span>Ready</span>;\n if (props.grameneSearch) {\n let genes = props.grameneSearch.response.numFound;\n let genomes = props.grameneSearch.facet_counts.facet_fields.taxon_id.length / 2;\n tally = <span><b>{genes}</b> genes in <b>{genomes}</b> genomes</span>;\n }\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Genomes Filter</Popover.Header>\n <Popover.Body>Searching {props.activeGenomeCount} genomes</Popover.Body>\n </Popover>\n );\n\n content = <span>\n {tally}\n <OverlayTrigger placement=\"auto\" overlay={popover}>\n <span style={{float:'right', cursor:'pointer'}} onClick={props.doShowGrameneGenomes}><BsGearFill/></span>\n </OverlayTrigger>\n <TaxonomyModal/>\n </span>;\n }\n return <div style={{padding:'5px', color:'cornsilk', fontSize:'small'}}>{content}</div>\n};\n\nconst Status = connect(\n 'selectGrameneSearch',\n 'selectGrameneFiltersStatus',\n 'selectActiveGenomeCount',\n 'doShowGrameneGenomes',\n 'doClearGrameneFilters',\n StatusCmp\n);\n\nconst handleClick = (e, moveCopyMode, showMarked, node, actions) => {\n if (!e) e = window.event;\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n\n if (showMarked && moveCopyMode) {\n if (node.marked) {\n actions.selectTarget(node);\n }\n else {\n actions.unmarkTargets()\n }\n }\n console.log(node, showMarked);\n};\nfunction logAction(action) {\n ReactGA.event({\n category: 'Search',\n action: action\n })\n}\nconst Filter = ({node,moveCopyMode,showMarked,actions}) => {\n let classes = 'gramene-filter gramene-filter';\n if (node.operation) {\n classes = `${classes}-${node.operation}`\n }\n if (node.negate) {\n classes = `${classes} gramene-filter-NOT`\n }\n if (showMarked && node.marked) {\n classes = `${classes} gramene-filter-marked`\n }\n let content = '';\n let menu = '';\n let children = [];\n\n if (node.showMenu) {\n let key=1;\n let menuItems = [];\n if (node.hasOwnProperty('operation')) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Change to ${node.operation}`); actions.changeOperation(node)}}>convert to <i>{node.operation === 'AND' ? 'OR' : 'AND'}</i></li>);\n }\n if (node.leftIdx > 0) {\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Delete filter`); actions.deleteNode(node)}}>delete</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Move filter`); actions.markTargets(node,'move')}}>move{node.isSource && ' select destination'}</li>);\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Copy filter`); actions.markTargets(node,'copy')}}>copy{node.isSource && ' select destination'}</li>)\n }\n menuItems.push(<li key={key++} onClick={()=>{logAction(`Negate filter`); actions.negate(node)}}>negate</li>);\n menu = <div className='gramene-filter-menu'><ul>{menuItems}</ul></div>;\n }\n let warning;\n if (node.warning) {\n const popover = (\n <Popover>\n <Popover.Header as=\"h3\">Warning</Popover.Header>\n <Popover.Body>{node.warning}</Popover.Body>\n </Popover>\n );\n warning = (\n <OverlayTrigger placement=\"auto\" overlay={popover}><span style={{float:'right', color:'red', cursor:'pointer'}}><IoAlertCircle/></span></OverlayTrigger>\n )\n }\n if (node.operation) {\n children = node.children.map((child,idx) => <Filter key={idx} moveCopyMode={moveCopyMode} node={child} showMarked={showMarked} actions={actions}/>);\n content = (\n <div>\n <span className='gramene-filter-operation'\n onClick={()=>actions.toggleMenu(node)}>{node.operation}</span>\n {warning}\n </div>\n );\n }\n else {\n content = <span className='gramene-filter-text'\n onClick={()=>actions.toggleMenu(node)}>{node.category} |&nbsp;{node.name}</span>;\n }\n return (\n <div key={node.leftIdx} className={classes} onClick={(e)=>handleClick(e,moveCopyMode, showMarked,node,actions)}>\n {content}{menu}{children}\n </div>\n )\n};\n\nconst FiltersCmp = props => {\n const actions = {\n negate: props.doNegateGrameneFilter,\n deleteNode: props.doDeleteGrameneFilter,\n changeOperation: props.doChangeGrameneFilterOperation,\n selectTarget: props.doMoveOrCopyGrameneFilter,\n markTargets: props.doMarkGrameneFilterTargets,\n unmarkTargets: props.doUnmarkGrameneFilterTargets,\n toggleMenu: props.doToggleGrameneFilterMenu\n };\n const containerClass = props.configuration.id === 'sorghum' ? 'sorghumbase-filter-container': 'gramene-filter-container';\n if (props.grameneFilters.rightIdx > 1) {\n return <div className={containerClass}>\n <CollapsibleSection title=\"Filters\"\n extra={<span style={{cursor:'pointer', marginRight:'0.5rem'}} onClick={(e)=>{e.stopPropagation(); props.doClearGrameneFilters()}}><BsTrash/></span>}>\n <Filter node={props.grameneFilters}\n moveCopyMode={props.grameneFilters.moveCopyMode}\n showMarked={props.grameneFilters.showMarked}\n actions={actions}/>\n </CollapsibleSection>\n </div>\n }\n else {\n return <div className={containerClass}>\n <CollapsibleSection title=\"Filters\">\n <div className='gramene-filter gramene-filter-AND'>No filters defined</div>\n </CollapsibleSection>\n </div>\n }\n};\n\nconst Filters = connect(\n 'selectGrameneFilters',\n 'selectConfiguration',\n 'doNegateGrameneFilter',\n 'doDeleteGrameneFilter',\n 'doChangeGrameneFilterOperation',\n 'doMoveOrCopyGrameneFilter',\n 'doMarkGrameneFilterTargets',\n 'doUnmarkGrameneFilterTargets',\n 'doToggleGrameneFilterMenu',\n 'doClearGrameneFilters',\n FiltersCmp\n);\n\nconst ResultsCmp = props => {\n let activeViews = props.grameneViews.options;\n return props.grameneFilters.rightIdx > 0 ? (\n <div>\n {activeViews.map((v,idx) => {\n let p = Object.assign({}, props);\n const divRef = useRef(null);\n useEffect(() => {\n if (v.shouldScroll) {\n const navBarHeight=0;\n const scrollPosition = divRef.current.offsetTop - navBarHeight;\n window.scrollTo({\n top: scrollPosition,\n behavior: 'smooth'\n })\n props.doCancelShouldScroll();\n }\n }, [v.shouldScroll]);\n return (\n <div key={idx} ref={divRef}>\n {v.show === 'on' && <div style={{borderTopWidth:'medium'}} className='gramene-view-header'>{v.name}</div>}\n {v.show === 'on' && React.createElement(inventory[v.id], p)}\n </div>\n )\n })}\n </div>\n ) : null;\n};\n\nconst Results = connect(\n 'selectGrameneFilters',\n 'selectGrameneViews',\n 'doCancelShouldScroll',\n ResultsCmp\n);\n\nconst ViewsCmp = props => (\n <div className={'gramene-view-container'}>\n <CollapsibleSection title=\"Views\">\n {props.grameneViews.options.filter(view => view.show !== 'disabled').map((view,idx) => (\n <div style={{textWrap:'nowrap'}} key={idx}>\n <Switch onChange={()=>props.doToggleGrameneView(view.id)} checked={view.show === 'on'}\n height={18}\n width={30}\n handleDiameter={16}\n checkedIcon={false}\n uncheckedIcon={false}\n />\n <span className={`gramene-view-span-${view.show}`} onClick={(e) => {\n props.dontToggleGrameneView(view.id)\n }}>{view.name}</span>\n </div>\n ))}\n </CollapsibleSection>\n </div>\n);\n\nconst Views = connect(\n 'selectGrameneViews',\n 'doToggleGrameneView',\n 'dontToggleGrameneView',\n ViewsCmp\n);\n\nexport {Status, Filters, Results, Views, Auth};\n","import React from 'react'\nimport ReactGA from 'react-ga4'\nimport { connect } from 'redux-bundler-react'\nimport './genes.css'\nimport Expression from './details/Expression'\nimport Homology from './details/Homology'\nimport Location from './details/Location'\nimport Pathways from \"./details/Pathways\"\nimport VEP from \"./details/VEP\"\nimport Xrefs from \"./details/Xrefs\"\nimport Publications from \"./details/Publications\"\nimport Sequences from \"./details/Sequences\"\nimport {suggestionToFilters} from \"../utils\";\nimport {GrFormPrevious, GrFormNextLink, GrFormNext, GrHpe} from 'react-icons/gr'\nimport { Badge, OverlayTrigger, Tooltip } from 'react-bootstrap'\n\nlet external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n\nlet inventory = {\n sequences: Sequences,\n location: Location,\n expression: Expression,\n homology: Homology,\n pathways: Pathways,\n VEP: VEP,\n xrefs: Xrefs,\n pubs: Publications\n};\n\nfunction renderTairSummary(searchResult) {\n const summary = searchResult.summary;\n if(summary && summary !== \"NULL\" && searchResult.system_name === \"arabidopsis_thaliana\") {\n return (\n <div className=\"gene-summary-tair\">\n {trimSummary(summary)}\n </div>\n )\n }\n}\n\nfunction trimSummary(summary) {\n if(summary.length > 160) {\n const start = summary.substr(0, 150);\n const rest = summary.substr(150);\n return <p>{start}<span className=\"ellipsis\">…</span><span className=\"rest\">{rest}</span></p>\n }\n else {\n return <p>{summary}</p>\n }\n}\nconst PanLink = (props) => {\n const gene = props.gene;\n const pan = props.pan;\n return <div className=\"gene-panlink\">\n <a target=\"_blank\" href={pan.url + \"?idList=\" + gene.id}>\n <img src={pan.svg} title={`View this gene at ${pan.name}`}/>\n </a>\n </div>;\n};\n\nconst CurationComponent1 = ({ curation }) => {\n return (\n <div className=\"gene-curation\">\n <span>Curated gene structure</span>\n {curation.okay > 0 && <span className=\"status\">✔️ {curation.okay}</span>}\n {curation.flagged > -10 && <span className=\"status\">⚠️ {curation.flagged}</span>}\n </div>\n );\n};\nconst CurationComponent = ({ curation, gene }) => {\n const total = curation.okay + curation.flagged;\n const okayRatio = (curation.okay / total);\n const flaggedRatio = (curation.flagged / total);\n const tooltip = (\n <Tooltip id=\"tooltip\">\n <strong>Gene structure</strong><br/>\n Okay: {curation.okay} &nbsp;\n Flagged: {curation.flagged}\n </Tooltip>\n );\n return (\n <OverlayTrigger placement=\"left\" overlay={tooltip}>\n <a className=\"gene-curation\" target=\"_blank\" href={`https://devdata.gramene.org/curation/curations?idList=${gene.id}`}>\n <span className=\"okay\" style={{opacity: okayRatio}}>☑</span>\n <span className=\"flagged\" style={{opacity: flaggedRatio}}>⚠</span>\n </a>\n </OverlayTrigger>\n )\n};\n\nconst ClosestOrthologCmp = (props) => {\n let id, taxon_id, name, desc, species, className, identity;\n const gene = props.gene;\n\n if (gene.closest_rep_id) {\n name = gene.closest_rep_name || gene.closest_rep_id;\n desc = gene.closest_rep_description;\n species = gene.closest_rep_species_name;\n id = gene.closest_rep_id;\n taxon_id = gene.closest_rep_taxon_id;\n className = \"closest-ortholog\";\n identity = gene.closest_rep_identity || 0;\n }\n else if (gene.model_rep_id) {\n name = gene.model_rep_name || gene.model_rep_id;\n desc = gene.model_rep_description;\n species = gene.model_rep_species_name;\n id = gene.model_rep_id;\n taxon_id = gene.model_rep_taxon_id;\n className = \"model-ortholog\";\n identity = gene.model_rep_identity || 0;\n }\n var isZm = new RegExp(/^Zm00001e/);\n if (isZm.test(desc)) {\n desc='';\n }\n\n return (\n <div className={className} onClick={() => {\n props.doEnsureGrameneGenome(taxon_id);\n props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene',\n fq_field: 'id',\n fq_value: id,\n name: name\n }))\n }}>\n <div className=\"gene-species\">{species}</div>\n {identity > 0 && <div className=\"rep-identity\">{Math.round(identity*100)}</div>}\n <h3 className=\"gene-id\">{name}</h3>\n <p>{desc}</p>\n </div>\n );\n};\n\nconst ClosestOrtholog = connect(\n 'doReplaceGrameneFilters','doEnsureGrameneGenome',\n ClosestOrthologCmp\n);\n\nfunction renderClosestOrtholog(gene) {\n\n if (shouldShowClosestOrtholog(gene)) {\n\n // we used to not add the closest ortholog to the DOM if the homology detail was visible.\n // however, that could cause the height of the result to change. Instead we set visibility:hidden\n // so that the renderer takes into account the height of the ortholog even if not shown.\n return (\n <ClosestOrtholog gene={gene}/>\n );\n }\n}\n\n// show closest ortholog prominently if we have data to show:-\n// a. either there's a closest ortholog (determined by traversing the gene tree until an id or description looks\n// curated) b. or there's a model ortholog (traverse tree to find an ortholog in arabidopsis)\nfunction shouldShowClosestOrtholog(searchResult) {\n return (\n searchResult.closest_rep_id || (\n searchResult.model_rep_id &&\n searchResult.model_rep_id !== searchResult.id\n )\n );\n}\n\nconst allDetails = [\n {\n id: 'VEP',\n label: 'Germplasm',\n popup: 'Germplasm with protein truncating variants (PTVs)',\n available: false\n },\n {\n id: 'sequences',\n label: 'Sequences',\n popup: 'Gene/cDNA/protein fasta',\n available: true\n },\n {\n id: 'location',\n label: 'Location',\n popup: 'Genome Browser',\n available: false\n },\n {\n id: 'expression',\n label: 'Expression',\n popup: 'Gene Expression Atlas',\n available: false\n },\n {\n id: 'homology',\n label: 'Homology',\n popup: 'Gene Family Tree',\n available: false\n },\n {\n id: 'pathways',\n label: 'Pathways',\n popup: 'Plant Reactome Pathways',\n available: false\n },\n {\n id: 'pubs',\n label: 'Papers',\n popup: 'Curated Publications',\n available: false\n },\n {\n id: 'xrefs',\n label: 'Xrefs',\n popup: 'Database Cross-references',\n available: false\n }\n];\n\n\nclass Gene extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n details: allDetails.map(o => ({...o})).filter(d => props.config.details[d.id]),\n expandedDetail: props.expandedDetail\n };\n let hasData = {};\n props.searchResult.capabilities.forEach(c => {\n hasData[c] = true;\n if (c === 'PanOryza') {\n hasData.xrefs = true;\n }\n });\n this.state.details.forEach(d => d.available |= hasData.hasOwnProperty(d.id));\n }\n getDetailStatus(d) {\n if (this.state.expandedDetail === d.id) return 'expanded';\n if (d.available) return 'closed'\n return d.id === \"pubs\" ? 'empty' : 'disabled';\n }\n setExpanded(d) {\n if (d.available || d.id === \"pubs\") {\n if (this.state.expandedDetail === d.id) {\n this.setState({expandedDetail: null})\n }\n else {\n const geneId = this.props.searchResult.id;\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(geneId))) {\n this.props.requestGene(geneId)\n }\n ReactGA.event({\n category: 'Search',\n action: 'Details',\n label: d.label\n });\n this.setState({expandedDetail: d.id})\n }\n }\n }\n ensureGene(id) {\n if (!(this.props.geneDocs && this.props.geneDocs.hasOwnProperty(id))) {\n this.props.requestGene(id);\n return false;\n }\n return this.props.geneDocs[id].hasOwnProperty('taxon_id')\n }\n renderMetadata() {\n let gene = this.props.searchResult;\n if (gene.model_rep_taxon_id) {\n gene.model_rep_species_name = this.props.taxLut[gene.model_rep_taxon_id].short_name;\n }\n if (gene.closest_rep_taxon_id) {\n gene.closest_rep_species_name = this.props.taxLut[gene.closest_rep_taxon_id].short_name;\n }\n return renderTairSummary(gene) || renderClosestOrtholog(gene);\n }\n render() {\n const panSite = this.props.config.panSite;\n const searchResult = this.props.searchResult;\n const taxName = this.props.taxName;\n const curation = this.props.curation;\n // let orthologs='';\n // if (this.props.orthologs && this.props.orthologs.hasOwnProperty(searchResult.id)) {\n // orthologs = this.props.orthologs[searchResult.id].join(', ');\n // }\n const numWordsInDescription = searchResult.description.split(' ').length;\n return (\n <div className=\"result-gene\">\n <div className=\"result-gene-summary\">\n <div className=\"result-gene-title-body\">\n {panSite.hasOwnProperty(searchResult.system_name) && <PanLink pan={panSite[searchResult.system_name]} gene={searchResult}/>}\n {curation && <CurationComponent curation={curation} gene={searchResult}/> }\n <div className=\"gene-title\">\n <div className=\"gene-species\">{taxName}</div>\n <h3 className=\"gene-name\">{searchResult.name}\n {searchResult.id !== searchResult.name && <small className=\"gene-id\">&nbsp;{searchResult.id}</small>}\n </h3>\n </div>\n {searchResult.synonyms && <small className=\"gene-synonyms\">{searchResult.synonyms.join(', ')}</small>}\n {searchResult.description !== \"unknown\" && (numWordsInDescription > 1 || searchResult.can_show.pubs) && <p className=\"gene-description\">{searchResult.description}</p>}\n </div>\n {this.renderMetadata()}\n </div>\n <div className=\"gene-detail-tabs\">\n {this.state.details.map((d,idx) => (\n <OverlayTrigger\n key={idx}\n placement={'bottom'}\n overlay={\n <Tooltip id={`tooltip`}>{d.popup}</Tooltip>\n }\n >\n <div key={idx}\n className={`col-md-1 text-center gene-detail-tab-${this.getDetailStatus(d)}`}\n onClick={()=>this.setExpanded(d)}\n >{d.label}</div>\n </OverlayTrigger>\n ))}\n </div>\n {this.state.expandedDetail && this.ensureGene(searchResult.id) && <div className=\"visible-detail\">{React.createElement(inventory[this.state.expandedDetail], this.props)}</div>}\n </div>\n )\n }\n}\n\nconst GeneList = props => {\n if (props.grameneSearch && props.grameneSearch.response && props.grameneTaxonomy) {\n let prev,page,next;\n const numFound = props.grameneSearch.response.numFound;\n if (numFound > props.grameneSearchRows) {\n const pageNum = props.grameneSearchOffset/props.grameneSearchRows;\n page = <span style={{padding:'10px'}}>page <b>{pageNum + 1}</b> of <b>{Math.ceil(numFound/props.grameneSearchRows)}</b></span>;\n prev = <GrHpe/>;\n if (pageNum > 0) {\n prev = <Badge onClick={()=>props.doRequestResultsPage(pageNum - 1)}><GrFormPrevious/></Badge>\n }\n next = <GrHpe/>;\n if (numFound > props.grameneSearchOffset + props.grameneSearchRows) {\n next = <Badge onClick={()=>props.doRequestResultsPage(pageNum + 1)}><GrFormNext/></Badge>\n }\n }\n return <div>\n <div>{prev}{page}{next}</div>\n {props.grameneSearch.response.docs.map((g,idx) => (\n <Gene key={idx}\n searchResult={g}\n config={props.configuration}\n taxName={props.grameneTaxonomy[g.taxon_id].name}\n geneDocs={props.grameneGenes}\n requestGene={props.doRequestGrameneGene}\n requestOrthologs={props.doRequestOrthologs}\n orthologs={props.grameneOrthologs}\n taxLut={props.grameneTaxonomy}\n curation={props.curatedGenes ? props.curatedGenes[g.id] : null}\n expandedDetail={props.grameneSearch.response.numFound === 1 && g.can_show.homology ? 'homology' : null}\n />\n ))}\n {prev}{page}{next}\n </div>\n }\n return null;\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneGenes',\n 'selectGrameneOrthologs',\n 'selectGrameneSearchOffset',\n 'selectGrameneSearchRows',\n 'selectCuratedGenes',\n 'doRequestGrameneGene',\n 'doRequestOrthologs',\n 'doRequestResultsPage',\n GeneList);\n","import React, { useRef, useEffect, useState } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Row, Col} from 'react-bootstrap';\nimport BAR, {haveBAR} from \"gramene-efp-browser\";\n\nfunction DynamicIframe(props) {\n // Create a ref for the iframe element\n const iframeRef = useRef(null);\n const [iframeHeight, setIframeHeight] = useState(500); // Default height\n\n useEffect(() => {\n const handleMessage = (event) => {\n if (event.data.type === 'heightChange') {\n setIframeHeight(event.data.height + 44);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => window.removeEventListener(\"message\", handleMessage);\n }, []);\n\n return (\n <iframe\n ref={iframeRef}\n src={props.url}\n title=\"Dynamic Iframe\"\n style={{ width: '100%', height: `${iframeHeight}px`, border: 'none' }}\n />\n );\n}\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [atlasExperiment, setAtlasExperiment] = useState(null);\n const [atlasExperimentList, setAtlasExperimentList] = useState([]);\n const [atlasFacets, setAtlasFacets] = useState(null);\n const [isLocal, setIsLocal] = useState(false);\n const [activeTab, setActiveTab] = useState('gene');\n\n const handleLocalAPIChange = (event) => {\n setIsLocal(event.target.checked);\n };\n useEffect(() => {\n const tid = Math.floor(gene.taxon_id / 1000);\n if (props.expressionStudies[tid]) {\n let facets={Differential: {}, Baseline: {}};\n let eList = props.expressionStudies[tid].sort((a,b) => {\n const a_name = `${a.type}:${a.description || a._id}`;\n const b_name = `${b.type}:${b.description || b._id}`;\n return a_name < b_name ? -1 : 1;\n });\n if (props.searchResult.hasOwnProperty('expressed_in_gxa_attr_ss')) {\n const in_gxa = new Set(props.searchResult.expressed_in_gxa_attr_ss);\n eList = eList.filter(e => in_gxa.has(e._id))\n }\n eList.forEach(e => {e.factors.forEach(factor => facets[e.type][factor] = 1);});\n setAtlasExperimentList(eList);\n setAtlasFacets(facets);\n let refExp = eList.filter(e => e.isRef);\n if (refExp.length === 1) {\n setAtlasExperiment(refExp[0]._id);\n } else {\n // no reference experiment - choose first\n setAtlasExperiment(eList[0]._id);\n }\n }\n }, [props.expressionStudies]);\n\n let paralogs_url;\n let gene_url = `https://dev.gramene.org/static/atlasWidget.html?genes=${gene.atlas_id || gene._id}&localAPI=${isLocal}`;\n let paralogs = [];\n if (props.grameneParalogs && props.grameneParalogs[gene._id]) {\n paralogs = props.grameneParalogs[gene._id];\n } else if (gene.homology) {\n props.doRequestParalogs(gene._id, gene.homology.supertree, gene.taxon_id);\n }\n // if (gene.homology && gene.homology.homologous_genes && gene.homology.homologous_genes.within_species_paralog) {\n // paralogs = gene.homology.homologous_genes.within_species_paralog;\n // }\n if (paralogs.length > 0 && atlasExperiment) {\n paralogs_url= `https://dev.gramene.org/static/atlasWidget.html?genes=${paralogs.join(' ')}&experiment=${atlasExperiment}&localAPI=${isLocal}`;\n }\n return <Tabs activeKey={activeTab} onSelect={(k) => setActiveTab(k)}>\n {paralogs_url &&\n <Tab tabClassName=\"gxa\" eventKey=\"paralogs\" title={`Paralogs`} key=\"gxaparalogs\">\n <Form.Select aria-label='experiment selector'\n placeholder='Select experiment'\n onChange={(e) => setAtlasExperiment(e.target.value)}>\n { atlasExperimentList.map((e,idx) =>\n <option key={idx} value={e._id}>{e.type}: {e.description || e._id}</option>\n )}\n </Form.Select>\n {activeTab === \"paralogs\" && <DynamicIframe url={paralogs_url}/> }\n </Tab>\n }\n <Tab tabClassName=\"gxa\" eventKey=\"gene\" title=\"All Studies\" key=\"gxa\">\n {/*<Form.Check*/}\n {/* type=\"switch\"*/}\n {/* id=\"localAPI\"*/}\n {/* label=\"Local API\"*/}\n {/* checked={isLocal}*/}\n {/* onChange={handleLocalAPIChange}*/}\n {/*/>*/}\n {activeTab === \"gene\" && <DynamicIframe url={gene_url}/> }\n </Tab>\n {haveBAR(gene) &&\n <Tab tabClassName=\"eFP\" eventKey=\"eFP\" title=\"eFP Browser\" key=\"bar\"><BAR gene={gene}/></Tab>\n }\n </Tabs>\n};\n\nexport default connect(\n 'selectGrameneParalogs',\n 'selectExpressionStudies',\n 'doRequestParalogs',\n //'doRequestParalogExpression',\n Detail\n);\n\n","import React from 'react'\nimport _ from 'lodash';\nimport {connect} from \"redux-bundler-react\";\nimport TreeVis from \"gramene-genetree-vis\";\nimport treesClient from \"gramene-trees-client\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport {suggestionToFilters} from \"../../utils\";\nimport {Spinner, Alert} from \"react-bootstrap\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Homology extends React.Component {\n constructor(props) {\n super(props);\n if (!props.geneDocs.hasOwnProperty(props.searchResult.id)) {\n props.requestGene(props.searchResult.id)\n }\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n }\n renderTreeVis() {\n return (\n <div className=\"gene-genetree\">\n <TreeVis genetree={this.tree}\n initialGeneOfInterest={this.gene}\n genomesOfInterest={this.props.grameneGenomes.active}\n taxonomy={this.taxonomy}\n allowGeneSelection={true}\n pivotTree={true}\n enableCuration={false}\n enablePhyloview={true}\n numberOfNeighbors={10}\n ensemblUrl={this.props.configuration.ensemblURL}/>\n </div>\n )\n }\n filterAllHomologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'gene_tree',\n fq_value: this.tree._id,\n name: `Homologs of ${this.gene.name}`\n }))\n }\n filterOrthologs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__all_orthologs',\n fq_value: this.gene._id,\n name: `Orthologs of ${this.gene.name}`\n }))\n }\n filterParalogs() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'homology__within_species_paralog',\n fq_value: this.gene._id,\n name: `Paralogs of ${this.gene.name}`\n }))\n }\n searchSupertree() {\n this.props.doReplaceGrameneFilters(suggestionToFilters({\n category: 'Gene Tree',\n fq_field: 'supertree_attr_s',\n fq_value: this.gene.homology.supertree,\n name: this.gene.homology.supertree\n }))\n }\n orthologList() {\n return this.orthoParaList('ortholog');\n }\n\n paralogList() {\n return this.orthoParaList('within_species_paralog');\n }\n\n orthoParaList(type) {\n var homology, thisGeneId;\n homology = _.get(this.gene, 'homology.homologous_genes');\n thisGeneId = this.gene._id;\n\n if (homology) {\n var homologs = _(homology)\n .pickBy(function filterCategories(thing, name) {\n return name.indexOf(type) === 0;\n })\n .values()\n .flatten()\n .uniq()\n .value();\n\n if (!_.isEmpty(homologs)) {\n if (!homologs.includes(thisGeneId)) {\n console.log(\"add to homologs list\",thisGeneId);\n homologs.push(thisGeneId);\n }\n return homologs; // only return something if we have something. We're testing for truthiness later.\n }\n }\n }\n explorations() {\n let x = [{\n name: 'Homologs',\n category: 'Gene Tree',\n count: this.tree.geneCount,\n handleClick: this.filterAllHomologs.bind(this)\n }];\n if (this.orthologs) {\n x.push({\n name: 'Orthologs',\n category: 'Gene Tree',\n count: this.orthologs.length,\n handleClick: this.filterOrthologs.bind(this)\n });\n }\n if (this.paralogs) {\n x.push({\n name: 'Paralogs',\n category: 'Gene Tree',\n count: this.paralogs.length,\n handleClick: this.filterParalogs.bind(this)\n });\n }\n if (this.gene.homology.supertree) {\n x.push({\n name: `Supertree`,\n category: `Gene Tree`,\n count: this.gene.homology.supertree,\n handleClick: this.searchSupertree.bind(this)\n })\n }\n return x;\n }\n links() {\n let links = [\n {\n name: 'Ensembl Gene Tree view',\n url: `${this.props.configuration.ensemblURL}/${this.gene.system_name}/Gene/Compara_Tree?g=${this.gene._id}`\n }\n ];\n if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n links.push({\n name: 'Curate',\n url: this.props.curation.url + this.gene._id\n })\n }\n return links;\n }\n render() {\n const id = this.props.searchResult.id;\n if (!this.props.geneDocs.hasOwnProperty(id)) {\n return <Spinner/>\n }\n this.gene = this.props.geneDocs[id];\n const treeId = this.gene.homology.gene_tree.id;\n if (! this.props.grameneTrees.hasOwnProperty(treeId)) {\n this.props.doRequestGrameneTree(treeId);\n }\n else {\n const tree = this.props.grameneTrees[treeId];\n if (tree.hasOwnProperty('taxon_id')) {\n this.tree = treesClient.genetree.tree([this.props.grameneTrees[treeId]]);\n this.orthologs = this.orthologList();\n this.paralogs = this.paralogList();\n }\n }\n let flagged=0;\n // if (this.props.curation && this.props.curation.taxa.hasOwnProperty(this.gene.taxon_id)) {\n // flagged = this.props.curatedGenes && this.props.curatedGenes[id] ? this.props.curatedGenes[id].flagged : 0;\n // }\n return (\n <Detail>\n <Title key=\"title\">Compara Gene Tree</Title>\n <Description key=\"description\">\n This phylogram shows the relationships between this gene and others similar to it, as determined by Ensembl Compara.\n {flagged > 1 && <Alert variant={'warning'}>This gene was flagged for potential gene structural annotation issues by {flagged} curators</Alert>}\n </Description>\n {this.tree && <Content key=\"content\">{this.renderTreeVis()}</Content>}\n {this.tree && <Explore key=\"explore\" explorations={this.explorations()}/>}\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n )\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGrameneTrees',\n 'selectGrameneGenomes',\n 'selectConfiguration',\n 'selectCuration',\n 'selectCuratedGenes',\n 'doRequestGrameneTree',\n 'doAcceptGrameneSuggestion',\n 'doReplaceGrameneFilters',\n Homology\n);\n\n","import React from 'react';\nimport keyBy from 'lodash/keyBy';\nimport _ from \"lodash\";\nimport ReactGA from \"react-ga4\";\nimport { BiLinkExternal } from \"react-icons/bi\";\nimport { Button, Badge } from \"react-bootstrap\";\n\nexport const Detail = props => {\n let subComponents = keyBy(props.children, 'key');\n return (\n <div className=\"detail\">\n <div className=\"intro\">\n {subComponents.title}\n {subComponents.description}\n </div>\n <div className=\"content-wrapper\">\n {subComponents.content}\n </div>\n <div className=\"actions\">\n <div className=\"action-wrapper\" xs={12} sm={5}>\n {subComponents.explore}\n </div>\n <div className=\"action-wrapper\" xs={12} sm={7}>\n {subComponents.links}\n </div>\n </div>\n </div>\n )\n};\n\nexport const Title = props => <h4>{props.children}</h4>;\nexport const Description = props => <p className=\"description\">{props.children}</p>;\nexport const Content = props => <div className=\"content\">{props.children}</div>;\n\nconst QueryTerm = props => {\n let category, name, badge;\n name = props.name;\n if (props.category) {\n category = props.category + ' | ';\n }\n if (_.isNumber(props.count)) {\n badge = <Badge style={{marginLeft: \"0.5rem\"}} bg='secondary'>{props.count}</Badge>\n }\n return (\n <Button variant='outline-dark' onClick={props.handleClick}>\n {category}{name}{badge}\n </Button>\n )\n};\n\nfunction renderExplorations(explorations) {\n return explorations.map(\n (exploration, idx) =>\n <QueryTerm key={idx} {...exploration} />\n );\n}\nexport const Explore = props => (\n <div className=\"explore\">\n <h5>Search Filters</h5>\n <div>\n {renderExplorations(props.explorations)}\n </div>\n </div>\n);\n\nfunction renderLinks(links) {\n let external = <small title=\"This link opens a page from an external site\"> <BiLinkExternal/></small>;\n return links.map((link, idx) =>\n <li key={idx}>\n <a href={link.url} target=\"_blank\" className=\"external-link\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: link.name\n })\n }}>{link.name}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={link.name}*/}\n {/* to={link.url}*/}\n {/* target=\"_blank\"*/}\n {/* className=\"external-link\"*/}\n {/*>*/}\n {/* {link.name}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n}\n\nexport const Links = props => (\n <div className=\"links\">\n <h5>Links to other resources</h5>\n <ul>\n {renderLinks(props.links)}\n </ul>\n </div>\n);\n","import { initializeApp, getApps, getApp } from \"firebase/app\";\n\nexport const getFirebaseApp = (config) => {\n if (!config) return null;\n const name = config.projectId || '[DEFAULT]';\n if (getApps().some(a => a.name === name)) return getApp(name);\n return initializeApp(config, name);\n};\n\nexport const suggestionToFilters = (suggestion) => {\n return {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 3,\n children: [\n {\n fq_field: suggestion.fq_field,\n fq_value: suggestion.fq_value,\n name: suggestion.name,\n category: suggestion.category,\n leftIdx: 1,\n rightIdx: 2,\n negate: false,\n marked: false\n }\n ]\n }\n}\n","import React from 'react'\nimport getProp from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport {Button} from \"react-bootstrap\";\nimport Browser from \"./location/browser\";\nimport {connect} from \"redux-bundler-react\";\nimport {Detail, Title, Description, Content, Explore, Links} from \"./generic\";\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/msa.less';\nimport '../../../../node_modules/gramene-genetree-vis/src/styles/tree.less';\n\nclass Location extends React.Component {\n constructor(props) {\n super(props);\n this.gene = this.props.geneDocs[this.props.searchResult.id];\n this.initRegion();\n this.state = {\n visibleRange: this.initVisibleRange()\n };\n }\n\n initVisibleRange() {\n var location, span, padding, result;\n location = this.gene.location;\n if(!location) {\n throw new Error(`Could not find the location of the gene in props.`);\n }\n\n span = location.end - location.start + 1;\n padding = Math.floor(.1 * span);\n\n result = {\n chr: location.region,\n start: location.start - padding,\n end: location.end + padding\n };\n\n result.displayName = `${result.chr}:${result.start}-${result.end}`;\n\n return result;\n }\n\n initRegion() {\n var region, isChromosome, regionType, regionName;\n region = this.gene.location.region;\n if (region) {\n isChromosome = /^\\d+$/.test(region);\n if (isChromosome) {\n regionType = 'chromosome';\n regionName = 'Chromosome ' + region;\n }\n else {\n regionType = 'scaffold';\n regionName = region;\n }\n this.region = {\n isChromsome: isChromosome,\n name: regionName,\n type: regionType\n };\n }\n }\n\n\n handleViewChange(chr, start, end) {\n var visibleRange = {\n chr: chr,\n start: start,\n end: end,\n displayName: `${chr}:${start}-${end}`\n };\n\n if(!isEqual(visibleRange, this.state.visibleRange)) {\n this.setState({\n visibleRange: visibleRange\n });\n }\n }\n\n updateQuery(restrictToVisibleRange) {\n var location, geneName, visibleRange, filter, filterDisplayName, fq;\n location = this.gene.location;\n geneName = this.gene.name;\n // category: 'Gene Tree',\n // fq_field: 'gene_tree',\n // fq_value: this.tree._id,\n // name: `Homologs of ${this.gene.name}`\n\n let terms = [\n {\n category: \"Map\",\n name: location.map,\n fq_field: 'map',\n fq_value: location.map\n },\n {\n category: \"Region\",\n name: location.region,\n fq_field: 'region',\n fq_value: location.region\n }\n ];\n fq = `map:${location.map} AND region:${location.region}`;\n\n if (restrictToVisibleRange) {\n visibleRange = this.state.visibleRange;\n\n terms.push({\n category: \"Interval\",\n name: `${visibleRange.start}-${visibleRange.end}`,\n fq_field: 'start',\n fq_value: `[${visibleRange.start} TO ${visibleRange.end}]`\n });\n fq += ` AND (start:[${visibleRange.start} TO ${visibleRange.end}]`\n + ` OR end:[${visibleRange.start} TO ${visibleRange.end}])`;\n\n filterDisplayName = visibleRange.displayName;\n } else {\n filterDisplayName = \"Shares \" + this.region.type + \" with \" + geneName;\n }\n\n console.log(\"User asked to filter by location\");\n filter = {\n category: 'Location',\n id: fq,\n fq: fq,\n display_name: filterDisplayName\n };\n\n // QueryActions.removeAllFilters();\n // QueryActions.setFilter(filter);\n this.props.doAddGrameneRangeQuery(terms);\n if (this.props.closeModal) this.props.closeModal();\n }\n\n explorations() {\n var visible, result;\n visible = this.state.visibleRange;\n result = [\n {\n name: `All on ${this.region.name}`,\n handleClick: ()=>this.updateQuery(false)\n }\n ];\n if (visible) {\n result.push({\n name: `All within ${getProp(visible, 'displayName')}`,\n handleClick: ()=>this.updateQuery(true)\n });\n }\n return result;\n }\n\n links() {\n function jgiify(id) {\n return id.replace('SORBI_3','Sobic.').replace(/\\.v[0-9]\\.[0-9]$/,'');\n }\n var gene = this.gene;\n let links = [\n {name: 'Ensembl Browser', url: `${this.props.config.ensemblURL}/${gene.system_name}/Gene/Summary?g=${gene._id}`}\n ];\n if (gene.annotations.taxonomy.ancestors.includes(4557))\n links.push({name: 'Phytozome', url: `https://phytozome-next.jgi.doe.gov/report/gene/Sbicolor_v5_1/${jgiify(gene._id)}`})\n if (gene.taxon_id === 3702)\n links.push(\n {name: 'tair', url: `https://www.arabidopsis.org/servlets/TairObject?name=${gene._id}&type=locus`},\n {name: 'ThaleMine', url: `https://bar.utoronto.ca/thalemine/keywordSearchResults.do?searchTerm=${gene._id}&searchSubmit=search`}\n );\n if (gene.taxon_id === 39947)\n links.push({name: 'RAP-DB', url: `https://rapdb.dna.affrc.go.jp/locus/?name=${gene._id}`});\n const isMaize = new RegExp(/^Zm[0-9]+/);\n if (isMaize.test(gene._id))\n links.push({name: 'MaizeGDB', url: `http://www.maizegdb.org/gene_center/gene/${gene._id}`});\n return links;\n }\n\n render() {\n return (\n <Detail>\n {/*<Title key=\"title\">Genome location: {this.renderGenePosition()}</Title>*/}\n <Description key=\"description\">Currently viewing: {this.renderLocation()}&nbsp;{this.renderResetButton()}</Description>\n <Content key=\"content\">\n {this.renderBrowser()}\n </Content>\n <Explore key=\"explore\" explorations={this.explorations()}/>\n <Links key=\"links\" links={this.links()}/>\n </Detail>\n );\n }\n\n\n renderBrowser() {\n return (\n <Browser gene={this.gene} {...this.props} {...this.state} onViewChange={ this.handleViewChange.bind(this) }/>\n );\n }\n\n renderGenePosition() {\n var location = this.gene.location;\n return (\n <span className=\"location\">\n <span className=\"region\">{this.region.name}</span>:<span className=\"start\">{location.start}</span>-<span\n className=\"end\">{location.end}</span>\n </span>\n );\n }\n\n renderLocation() {\n var location = this.state.visibleRange;\n return (\n <span className=\"location\">\n <span className=\"region\">{location.chr}</span>:<span className=\"start\">{location.start}</span>-<span\n className=\"end\">{location.end}</span>\n </span>\n );\n }\n\n resetVisibleRange() {\n const {chr, start, end} = this.initVisibleRange();\n this.handleViewChange(chr, start, end);\n }\n\n renderResetButton() {\n // let active=isEqual(this.props.visibleRange, this.state.visibleRange);\n return (\n <Button\n size=\"sm\"\n variant=\"outline-dark\"\n onClick={() => this.resetVisibleRange()}>\n Reset\n </Button>\n )\n }\n}\n\nexport default connect('doAddGrameneRangeQuery',Location);\n\n","import React from \"react\";\nimport DallianceBrowser from \"./dallianceBrowser.js\";\n\nexport default class Browser extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return (\n <div className=\"location-browser\">\n <DallianceBrowser {...this.props} expanded={!!this.props.closeModal} />\n </div>\n )\n }\n\n}\n\n// Browser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// visibleRange: React.PropTypes.object.isRequired,\n// onViewChange: React.PropTypes.func.isRequired\n// };","import React from \"react\";\nimport isEqual from \"lodash/isEqual\";\n\n// var ensemblREST = require('../../../../../package.json').gramene.ensemblREST;\n//const ensemblREST = 'http://data.gramene.org/ensembl63';\n// const ensemblREST = 'https://data.sorghumbase.org/ensembl2';\n// const ensemblREST = 'https://data.gramene.org/vitis-ensembl1';\n// const ensemblREST = 'https://data.gramene.org/pansite-ensembl';\n\n// calculate this once.\nconst PREFIX = '/static/gramene-dalliance/';\n\nexport default class DallianceBrowser extends React.Component {\n\n constructor(props) {\n super(props);\n this.initialVisibleRange = props.visibleRange;\n }\n\n shouldComponentUpdate(newProps) {\n // should we reset the view to initial state?\n if(isEqual(newProps.visibleRange, this.initialVisibleRange)) {\n this.browser.setLocation(newProps.visibleRange.chr, newProps.visibleRange.start, newProps.visibleRange.end);\n }\n\n return false;\n }\n\n biodallianceElementId() {\n return this.props.gene._id + 'Browser';\n }\n\n browser() {\n var g, view, start, end, browser;\n g = this.props.gene;\n view = this.props.visibleRange;\n start = view.start;\n end = view.end;\n\n this.browser = browser = new Browser(\n {\n pageName: this.biodallianceElementId(),\n chr: g.location.region,\n viewStart: start,\n viewEnd: end,\n cookieKey: g._id + 'BrowserCookie',\n prefix: PREFIX,\n\n coordSystem: {\n speciesName: g.system_name,\n taxon: g.taxon_id,\n auth: 'Gramene',\n version: '3',\n ucscName: 'IRGSP-1.0'\n },\n\n sources: [\n {\n name: 'DNA',\n ensemblURI: this.props.config.ensemblRest,\n species: g.system_name,\n tier_type: 'sequence'\n },\n {\n name: 'Genes',\n uri: this.props.config.ensemblRest,\n tier_type: 'ensembl',\n species: g.system_name,\n type: ['gene', 'transcript', 'exon', 'cds']\n }\n ],\n\n // hubs: ['/Track_Hubs/DRP000315/hub.txt'],\n disablePoweredBy: true,\n setDocumentTitle: false,\n noDefaultLabels: true,//!this.props.expanded,\n noPersist: true,\n noPersistView: true,\n maxWorkers: 2,\n noTitle: true,\n noLocationField: false,\n noLeapButtons: true,//!this.props.expanded,\n noZoomSlider: false, //!this.props.expanded,\n noTrackAdder: true,//!this.props.expanded,\n noTrackEditor: true,//!this.props.expanded,\n noExport: true,//!this.props.expanded,\n noOptions: true,//!this.props.expanded,\n noHelp: true,\n maxViewWidth: 1000000\n }\n );\n\n browser.addViewListener(this.props.onViewChange);\n }\n\n cancel() {\n if (typeof this.timeoutID == \"number\") {\n window.clearTimeout(this.timeoutID);\n delete this.timeoutID;\n }\n }\n\n componentDidMount() {\n // this.browser();\n this.cancel();\n var self = this;\n this.timeoutID = window.setTimeout(function () {self.browser();}, 0);\n }\n\n componentWillUnmount() {\n this.cancel();\n }\n\n render() {\n return (\n <div id={this.biodallianceElementId()}/>\n );\n }\n}\n\n// DallianceBrowser.propTypes = {\n// gene: React.PropTypes.object.isRequired,\n// visibleRange: React.PropTypes.object.isRequired,\n// expanded: React.PropTypes.bool,\n// onViewChange: React.PropTypes.func.isRequired\n// };\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport FlatToNested from 'flat-to-nested';\nimport {Explore, Links} from \"./generic\";\nimport treesClient from \"gramene-trees-client\";\n// import {TreeMenu} from \"react-tree-menu\";\nimport TreeMenu from \"react-simple-tree-menu\";\nimport '../../../../node_modules/react-simple-tree-menu/dist/main.css';\n\nimport {Spinner} from \"react-bootstrap\";\nimport _ from 'lodash'\nimport \"./tree-view.css\"\n\nvar reactomeURL = \"https://plantreactome.gramene.org\";\n\nclass Pathways extends React.Component {\n constructor(props) {\n super(props);\n this.taxonomy = treesClient.taxonomy.tree(Object.values(props.grameneTaxonomy))\n this.gene = props.geneDocs[props.searchResult.id];\n this.holderId = 'displayHolder' + this.gene._id;\n this.state = { treeVisible: true, height: 500 };\n }\n\n getTreeWidth() {\n return this.state.treeVisible ? 250 : 0;\n }\n\n getDiagramWidth() {\n // Account for toggle button (24px) and 1px border\n const toggleWidth = 25;\n const treeWidth = this.getTreeWidth();\n return this.divWrapper.clientWidth - treeWidth - toggleWidth - 1;\n }\n\n initDiagram() {\n this.diagram = Reactome.Diagram.create({\n proxyPrefix: reactomeURL,\n placeHolder: this.holderId,\n width: this.getDiagramWidth(),\n height: this.state.height\n });\n }\n\n startResize(e) {\n e.preventDefault();\n const startY = e.clientY;\n const startHeight = this.state.height;\n\n const onMouseMove = (moveEvent) => {\n const newHeight = Math.max(200, startHeight + (moveEvent.clientY - startY));\n this.setState({ height: newHeight });\n };\n\n const onMouseUp = () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n // Recreate diagram at new height\n if (this.currentPathwayId && this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n this.loadDiagram(this.currentPathwayId);\n }\n };\n\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n }\n\n toggleTree() {\n // Use the synchronously-tracked ID, not the async onDiagramLoaded one\n const savedDiagram = this.currentPathwayId;\n if (this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n }\n this.setState({ treeVisible: !this.state.treeVisible }, () => {\n // Use requestAnimationFrame to ensure DOM has updated before\n // reinitializing the diagram with the new available width\n requestAnimationFrame(() => {\n if (savedDiagram) {\n this.loadDiagram(savedDiagram);\n }\n });\n });\n }\n\n stableId(dbId) {\n let prefix = this.taxonomy.indices.id[this.gene.taxon_id].model.reactomePrefix || 'OSA';\n return `R-${prefix}-${dbId}`;\n }\n\n loadDiagram(pathwayId, reactionId) {\n this.currentPathwayId = pathwayId;\n if (!this.diagram) this.initDiagram();\n this.diagram.loadDiagram(pathwayId);\n\n this.diagram.onDiagramLoaded(function (loaded) {\n this.loadedDiagram = loaded;\n if (reactionId) {\n this.diagram.selectItem(reactionId);\n }\n // var xref = _.find(this.props.gene.xrefs,{db : 'Gramene_Plant_Reactome'}).ids[0];\n this.diagram.flagItems(this.gene._id);\n }.bind(this));\n }\n\n componentDidMount() {\n if (Reactome && Reactome.Diagram) {\n // this.initDiagram();\n }\n else {\n window.addEventListener('launchDiagram', function (e) {\n // this.initDiagram()\n }.bind(this));\n }\n this._handleResize = _.debounce(() => {\n if (this.currentPathwayId && this.divWrapper) {\n const savedDiagram = this.currentPathwayId;\n if (this.diagram) {\n this.diagram.detach();\n this.diagram = null;\n this.loadedDiagram = null;\n }\n this.loadDiagram(savedDiagram);\n }\n }, 300);\n window.addEventListener('resize', this._handleResize);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.state.hierarchy && ! this.state.selectedNode) {\n let node = this.state.hierarchy[0];\n let path = [0];\n let parent = node;\n while (node.nodes) {\n path.push(0);\n parent = node;\n node = node.nodes[0];\n }\n console.log(parent,node,path);\n this.loadNodes(path);\n }\n if (!this.state.hierarchy && this.pathwayIds) {\n const haveDocs = this.pathwayIds.filter(id => this.props.gramenePathways.hasOwnProperty(id));\n if (haveDocs.length === this.pathwayIds.length) {\n const docs = this.pathwayIds.map(id => this.props.gramenePathways[id]);\n this.getHierarchy(this.makeTaxonSpecific(docs,this.gene.taxon_id));\n }\n }\n }\n\n componentWillMount() {\n var pathways, reactionId, ancestorIds;\n pathways = this.gene.annotations.pathways;\n if(!pathways) {\n throw new Error(\"No pathway annotation present for \" + this.gene._id);\n }\n\n this.pathwayIds = _.clone(pathways.ancestors);\n pathways.entries.forEach(function(reaction) {\n let [r,speciesCode,id] = reaction.id.split('-');\n\n this.pathwayIds.push(+id);\n }.bind(this));\n\n this.props.doRequestGramenePathways(this.pathwayIds);\n\n // DocActions.needDocs('pathways', this.pathwayIds, (docs) => { return this.makeTaxonSpecific(docs,this.props.gene.taxon_id)}, this.getHierarchy);\n }\n\n makeTaxonSpecific(docs,taxon_id) {\n let lineageField = 'lineage_'+taxon_id;\n if (! docs[0].hasOwnProperty(lineageField)) {\n let tid = Math.floor(taxon_id / 1000);\n lineageField = 'lineage_'+tid;\n }\n let tsDocs = docs.map(function(doc) {\n let tsDoc = _.pick(doc,['_id','name','type']);\n tsDoc.lineage = doc[lineageField];\n return tsDoc;\n });\n console.log(tsDocs);\n return tsDocs;\n }\n\n componentWillUnmount() {\n // DocActions.noLongerNeedDocs('pathways', this.pathwayIds);\n if (this.diagram) this.diagram.detach();\n if (this._handleResize) {\n window.removeEventListener('resize', this._handleResize);\n this._handleResize.cancel();\n }\n }\n\n getHierarchy(docs) {\n let pathways = _.keyBy(docs,'_id');\n let nodes = [];\n this.pathwayIds.forEach(function (pwyId) {\n if (pathways[pwyId]) {\n let pwy = pathways[pwyId];\n pwy.lineage.forEach(function(line) {\n let parentOffset = line.length - 2;\n nodes.push({\n id: pwyId,\n key: pwyId,\n label: pwy.name,\n type: pwy.type,\n checkbox: false,\n selected: false,\n parent: parentOffset >=0 ? line[parentOffset] : undefined\n });\n });\n }\n });\n\n let nested = new FlatToNested({\n children: 'nodes'\n }).convert(nodes);\n\n this.setState({hierarchy: [nested], selectedNode: undefined});\n }\n possiblyLoadNodes(node) {\n if (!node.selected) {\n let selectedNode = this.state.selectedNode;\n selectedNode.selected = false;\n node.selected = true;\n selectedNode = node;\n if (node.type === \"Pathway\") {\n let pathway = this.stableId(node.id);\n this.loadDiagram(pathway);\n }\n else {\n let reaction = this.stableId(node.id);\n let pathway = this.stableId(node.parent.split(\"/\").pop());\n if (this.loadedDiagram === pathway) {\n this.diagram.selectItem(reaction);\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n this.loadDiagram(pathway,reaction);\n }\n }\n this.setState({selectedNode})\n }\n }\n loadNodes(nodes) {\n let hierarchy = this.state.hierarchy;\n let selectedNode = this.state.selectedNode;\n let offset = nodes.shift();\n let nodeRef = hierarchy[offset];\n let lineage = [nodeRef];\n while (nodeRef.nodes) {\n nodeRef = nodeRef.nodes[0];\n lineage.unshift(nodeRef);\n }\n if (lineage[0].id !== 2894885) {\n let pathway = this.stableId(lineage[0].id);\n let reaction = undefined;\n if (lineage[0].type === \"Reaction\") {\n reaction = pathway;\n pathway = this.stableId(lineage[1].id);\n }\n if (lineage[0].selected) {\n selectedNode = undefined;\n lineage[0].selected = false;\n if (this.loadedDiagram === pathway) {\n this.diagram.resetSelection();\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n this.loadDiagram(pathway);\n }\n }\n else {\n if (selectedNode) {\n selectedNode.selected = false;\n }\n selectedNode = lineage[0];\n lineage[0].selected = true;\n if (this.loadedDiagram === pathway) {\n if (reaction) {\n this.diagram.selectItem(reaction);\n }\n else {\n this.diagram.resetSelection();\n }\n }\n else {\n if (this.diagram) this.diagram.resetSelection();\n if (reaction) {\n this.loadDiagram(pathway, reaction);\n }\n else {\n this.loadDiagram(pathway);\n }\n }\n }\n this.setState({hierarchy: hierarchy, selectedNode: selectedNode});\n }\n }\n\n renderHierarchy() {\n if (this.state.hierarchy) {\n let path = [];\n let allPaths = [];\n let nodes = this.state.hierarchy;\n while (nodes) {\n path.push(nodes[0].key);\n allPaths.push(path.join('/'));\n if (nodes[0].hasOwnProperty('nodes')) {\n nodes = nodes[0].nodes;\n }\n else {\n nodes = undefined;\n }\n }\n // console.log(path);\n return <TreeMenu\n data={this.state.hierarchy}\n hasSearch={false}\n onClickItem={(item) => this.possiblyLoadNodes(item)}\n onClickItemx={(item) => console.log('onClickItem', item)}\n initialActiveKey={path.join('/')}\n initialOpenNodes={allPaths}\n />;\n // return (\n // <TreeMenu\n // data={this.state.hierarchy}\n // expandIconClass=\"fa fa-chevron-right\"\n // collapseIconClass=\"fa fa-chevron-down\"\n // stateful={true}\n // collapsible={true}\n // onTreeNodeClick={this.loadNodes.bind(this)}\n // />\n // );\n }\n return <Spinner/>\n }\n\n updateQuery() {\n console.log(\"User asked to filter by \"+ this.state.selectedNode.type);\n\n this.props.doAcceptGrameneSuggestion({\n category: 'Plant Reactome',\n fq_field: 'pathways__ancestors',\n fq_value: this.state.selectedNode.id,\n name: this.state.selectedNode.label\n })\n }\n\n render() {\n let reactomeLink,searchFilter;\n\n if (this.state.selectedNode) {\n let xrefLUT = _.keyBy(this.gene.xrefs,'db');\n let links = [\n {name: 'Plant Reactome '+this.state.selectedNode.type, url: `${reactomeURL}/content/detail/${this.stableId(this.state.selectedNode.id)}`}\n ];\n if (xrefLUT.hasOwnProperty('notGramene_Plant_Reactome')) {\n links.push({name: 'Plant Reactome Gene', url: `${reactomeURL}/content/detail/${xrefLUT.notGramene_Plant_Reactome.ids[0]}`});\n }\n reactomeLink = <Links key=\"links\" links={links}/>;\n let filters = [\n {\n name: `All genes in this ${this.state.selectedNode.type}`,\n handleClick: ()=>this.updateQuery()\n }\n ];\n searchFilter = <Explore key=\"explore\" explorations={filters}/>;\n }\n const treeWidth = this.getTreeWidth();\n return (\n <div ref={(div) => {this.divWrapper = div;}} className=\"pathways-container\">\n <div className=\"pathways-layout\" style={{height: this.state.height}}>\n <button\n className=\"pathways-tree-toggle\"\n onClick={() => this.toggleTree()}\n title={this.state.treeVisible ? 'Hide pathway hierarchy' : 'Show pathway hierarchy'}\n >\n {this.state.treeVisible ? '◀' : '▶'}\n </button>\n {this.state.treeVisible && (\n <div className=\"pathways-tree-panel\">\n {this.renderHierarchy()}\n </div>\n )}\n <div className=\"pathways-diagram-panel\" id={this.holderId}/>\n </div>\n <div\n className=\"pathways-resize-handle\"\n onMouseDown={(e) => this.startResize(e)}\n title=\"Drag to resize\"\n />\n {searchFilter}\n {reactomeLink}\n </div>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneTaxonomy',\n 'selectGramenePathways',\n 'doRequestGramenePathways',\n 'doAcceptGrameneSuggestion',\n Pathways\n);\n","import React, {useState, useEffect, useRef, useCallback} from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Button} from 'react-bootstrap';\nimport { AgGridReact } from \"ag-grid-react\";\nimport _ from 'lodash';\nimport \"ag-grid-community/styles/ag-grid.css\";\nimport \"ag-grid-community/styles/ag-theme-quartz.css\";\nimport '@fortawesome/fontawesome-free/css/all.min.css';\nimport \"./VEP.css\";\nimport { study_info } from '../../../vepStudyInfo';\n\nconst ggURL = {\n xIRRI: 'https://gringlobal.irri.org/gringlobal/accessiondetail?id=',\n IRRI: 'https://www.irri.org/genesys-rice#/a/',\n ARS: 'https://npgsweb.ars-grin.gov/gringlobal/accessiondetail.aspx?id=',\n ICRISAT: 'https://genebank.icrisat.org/IND/PassportSummary?ID=',\n sorbmutdb: 'https://www.depts.ttu.edu/igcast/sorbmutdb.php',\n maizeGDB: 'https://wgs.maizegdb.org/',\n NCBI: 'https://www.ncbi.nlm.nih.gov/biosample/?term='\n};\n\nconst rice_studies = {'1': {label: 'Rice 3K', type: 'NAT'}};\nconst AccessionLink = ({germplasm, gene_id}) => {\n const genebank = germplasm.stock_center;\n const url = ggURL[genebank];\n if (germplasm.germplasm_dbid) { // link to stock center\n const germ_id = germplasm.germplasm_dbid;\n if (germ_id && url && germ_id !== \"0\") {\n return <a target=\"_blank\" href={`${url}${germ_id}`}>\n {germplasm.pub_id} ({genebank})</a>;\n }\n }\n if (genebank === \"sorbmutdb\") {\n return (\n <form id={germplasm.pub_id} action={url} method=\"post\" target=\"_blank\">\n <input type=\"hidden\" name=\"search\" value={gene_id.replace('SORBI_3','Sobic.')} />\n <input type=\"hidden\" name=\"submit\" value=\"Search\" />\n <button type=\"submit\" className=\"button-like-link\">SorbMutDB</button>\n </form>\n );\n }\n if (germplasm.pop_id === '15' && germplasm.stock_center === 'NOT FOUND') {\n return <a target=\"_blank\" href={ggURL['maizeGDB']}>{germplasm.pub_id} (SNPVersity)</a>\n }\n return <span>{germplasm.pub_id}</span>\n}\nfunction compareGermplasm(a, b) {\n const aSub = a?.germplasm?.subpop ?? '';\n const bSub = b?.germplasm?.subpop ?? '';\n const subCmp = aSub.localeCompare(bSub, 'en', { sensitivity: 'accent' });\n if (subCmp !== 0) return subCmp;\n\n const aPub = a?.germplasm?.pub_id ?? '';\n const bPub = b?.germplasm?.pub_id ?? '';\n return aPub.localeCompare(bPub, 'en', { sensitivity: 'accent' });\n}\nfunction group_germplasm(gene, germplasmLUT, vep_obj) {\n let accessionTable = [];\n Object.entries(vep_obj).forEach(([key,accessions]) => {\n const parts = key.split(\"__\");\n if (parts[0] === \"VEP\") {\n if (parts[1] !== \"merged\") {\n accessions.filter(ens_id => germplasmLUT.hasOwnProperty(ens_id)).forEach(ens_id => {\n const germplasm = germplasmLUT[ens_id][0];\n const pop = study_info[parts[3]][parts[4]];\n const conseq = parts[1].replaceAll(\"_\",\" \");\n const status = parts[2] === \"het\" ? \"heterozygous\" : \"homozygous\";\n const accInfo = {\n key: [pop.label,conseq,status].join('%%%'),\n germplasm: germplasm,\n pop: pop\n };\n accessionTable.push(accInfo);\n });\n }\n }\n });\n // group accessionTable by key field\n const groups = _.groupBy(accessionTable, 'key');\n let grouped = [];\n let id=0;\n Object.keys(groups).sort().forEach((group) => {\n const [pop,conseq,status] = group.split('%%%');\n id++;\n const tally = groups[group].length;\n grouped.push({\n id: id,\n group: group,\n summary: true,\n pop: pop,\n conseq: conseq,\n status: status,\n tally: tally\n });\n groups[group].sort(compareGermplasm).forEach(acc => {\n id++;\n grouped.push({\n id: id,\n group: group,\n summary: false,\n pop:pop,\n conseq: conseq,\n status: status,\n accession: acc,\n tally: tally\n })\n })\n })\n return grouped;\n}\nconst THRESHOLD = 5;\nconst GridWithGroups = ({groups,gene_id,doGrin}) => {\n const [rowData, setRowData] = useState(groups);\n\n const initialExpanded = {};\n rowData.forEach((row) => {\n if (row.summary) {\n initialExpanded[row.group] = (row.tally < THRESHOLD);\n }\n });\n const [expandedGroups, setExpandedGroups] = useState(initialExpanded);\n\n\n // Toggle group visibility\n const toggleGroup = (group) => {\n setExpandedGroups((prevExpandedGroups) => ({\n ...prevExpandedGroups,\n [group]: !prevExpandedGroups[group], // Toggle the group's state\n }));\n };\n\n // Filter the data to show/hide rows based on the expanded group state\n const getVisibleRowData = () => {\n const visibleRows = [];\n rowData.forEach((row) => {\n if (row.summary) {\n if (row.tally > 1) {\n visibleRows.push(row);\n }\n } else if (expandedGroups[row.group]) {\n visibleRows.push(row); // Show non-summary rows if the group is expanded\n }\n });\n return visibleRows;\n };\n\n // Define columns with a custom renderer for the summary rows\n const columnDefs = [\n { field: 'pop', headerName: 'Study/Population', flex: 1, minWidth: 120,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'conseq', headerName: 'VEP consequence', flex: 1, minWidth: 130,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'status', headerName: 'Allele status', flex: 1, minWidth: 100,\n cellRenderer: (params) => {\n if (params.data.summary || params.data.tally === 1) {\n return params.value;\n }\n return null;\n }\n },\n { field: 'accession', headerName: doGrin ? 'Order Germplasm' : 'Accession', flex: 1, minWidth: 140,\n headerComponent: (props) => {\n return (\n <div style={{display: 'flex', alignItems: 'center'}}>\n {doGrin && <i className=\"fas fa-shopping-cart\">&nbsp;</i>}\n <span>{props.displayName}</span>\n </div>\n );\n }, // Use the custom header with the shopping cart icon\n cellRenderer: (params) => {\n if (params.value) {\n return <AccessionLink germplasm={params.value.germplasm} gene_id={gene_id} />;\n }\n if (params.data.summary) {\n return (\n <span\n onClick={() => toggleGroup(params.data.group)}\n >\n {params.data.tally} Accessions {expandedGroups[params.data.group] ? '▼' : '▶'}\n </span>\n );\n }\n return null;\n }\n },\n { field: 'synonym', headerName: 'Synonym', filter:false, sortable:false, flex: 1, minWidth: 110, cellRenderer: (params) => {\n if (params.data.accession) {\n return params.data.accession.germplasm.ens_id\n }\n return null;\n }},\n { field: 'subpop', headerName: 'Subpopulation', filter:false, sortable: false, flex: 1, minWidth: 110, cellRenderer: (params) => {\n if (params.data.accession && params.data.accession.germplasm.subpop && params.data.accession.germplasm.subpop !== \"?\") {\n return params.data.accession.germplasm.subpop\n }\n return null;\n }},\n { field: 'search', headerName: 'All LOF Genes', sortable:false, filter:false, flex: 1, minWidth: 100,\n cellRenderer: (params) => {\n if (params.data.accession) {\n const currentURL = new URL(window.location.href);\n const accession = params.data.accession;\n currentURL.search = '';\n currentURL.searchParams.set('category', 'Germplasm');\n currentURL.searchParams.set('fq_field', `VEP__merged__${accession.pop.type}__attr_ss`);\n currentURL.searchParams.set('fq_value', accession.germplasm.ens_id);\n currentURL.searchParams.set('name', accession.germplasm.ens_id);\n\n return <Button size='sm' href={currentURL.toString()}>Search</Button>\n\n }\n return null;\n }\n }\n ];\n\n const defaultColDef = {\n sortable: true,\n filter: \"agTextColumnFilter\",\n cellStyle: (params) => {\n if (params.data.summary) {\n return {cursor: 'pointer'};\n }\n return null;\n }\n };\n\n const nVisible = getVisibleRowData().length;\n const tableHeight = 50 + Math.min(nVisible, 10) * 42;\n return (\n <div style={{ overflowX: \"auto\", width: \"100%\", maxWidth: \"1200px\" }}>\n <div\n className=\"ag-theme-quartz\"\n style={{ height: tableHeight, minWidth: \"810px\", width: \"100%\" }}\n >\n <AgGridReact\n rowData={getVisibleRowData()}\n columnDefs={columnDefs}\n getRowNodeId={(data) => data.id}\n animateRows={true}\n defaultColDef={defaultColDef}\n />\n </div>\n </div>\n );\n};\n\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n if (props.grameneConsequences && props.grameneConsequences[gene._id] && props.grameneGermplasm) {\n const groups = group_germplasm(gene, props.grameneGermplasm, props.grameneConsequences[gene._id]);\n\n return <div>\n <h5>Predicted loss-of-function alleles were detected in these germplasm.</h5>\n <div >Explore other variants within this gene in the <a target=\"_blank\"\n href={`${props.configuration.ensemblURL}/${gene.system_name}/Gene/Variation_Gene/Image?db=core;g=${props.searchResult.id}`}>\n Variant image</a> page in the Ensembl genome browser.</div>\n <GridWithGroups groups={...groups} gene_id={gene._id} doGrin={!props.configuration.hasOwnProperty('noGRIN')}/>\n </div>\n } else {\n props.doRequestVEP(gene._id);\n return <pre>loading</pre>;\n }\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneConsequences',\n 'selectGrameneGermplasm',\n 'doRequestVEP',\n Detail\n);\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n <td className=\"xref-name-col\">{db}</td>\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n </tr>\n );\n }\n}\n\nfunction formatXrefsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n return gene.xrefs\n .filter(xr => dbxrefs.isKnown(xr.db) && xr.db !== \"PUBMED\")\n .sort()\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\n\nconst Xrefs = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Cross-references</Title>\n <Description key=\"description\">References to this gene in other databases:</Description>\n <Content key=\"content\">\n <table className=\"xrefs table\">\n <thead>\n <tr>\n <th className=\"xref-name-col\">Database</th>\n <th className=\"xref-value-col\">IDs and links</th>\n </tr>\n </thead>\n <tbody>\n {formatXrefsForGene(geneDocs[searchResult.id])}\n </tbody>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Xrefs;\n\n","import React from 'react'\nimport ReactGA from 'react-ga4'\n// import {connect} from \"redux-bundler-react\";\nimport _ from 'lodash'\nimport dbxrefs from 'gramene-dbxrefs';\nimport {Detail, Title, Description, Content} from \"./generic\";\n\nconst HOW_MANY_TO_SHOW_BY_DEFAULT = 10;\n\nclass Xref extends React.Component {\n constructor(props) {\n super(props);\n this.state = {showAll: false};\n }\n\n toggleShowAll() {\n this.setState({showAll: !this.state.showAll});\n }\n\n possiblyTruncateList(vals) {\n var ellipsis, ellipsisChar, ellipsisTitle;\n\n if (vals.length > HOW_MANY_TO_SHOW_BY_DEFAULT) {\n if (this.state.showAll) {\n ellipsisChar = '^ show first ' + HOW_MANY_TO_SHOW_BY_DEFAULT;\n ellipsisTitle = 'Show less';\n }\n else {\n ellipsisChar = '… show all (' + (vals.length - HOW_MANY_TO_SHOW_BY_DEFAULT) + ' more)';\n ellipsisTitle = 'Show more';\n vals = vals.slice(0, HOW_MANY_TO_SHOW_BY_DEFAULT);\n }\n\n ellipsis = (\n <li key=\"showMore\" className=\"showAll\">\n <a title={ellipsisTitle} onClick={this.toggleShowAll.bind(this)}>{ellipsisChar}</a>\n </li>\n );\n\n vals.push(ellipsis);\n }\n\n return vals;\n }\n\n render() {\n var db = this.props.xref.label;\n var urlfcn = this.props.xref.url;\n\n var members = this.props.members.sort();\n\n var vals = members.map(function (item, idx) {\n var url = urlfcn(item),\n liClass = idx < HOW_MANY_TO_SHOW_BY_DEFAULT ? \"default\" : \"extra\";\n let external = <small title=\"This link opens a page from an external site\"> <i className=\"fa fa-external-link\"/></small>;\n return (\n <li key={idx} className={liClass}>\n <a href={url} target=\"_blank\" onClick={()=>{\n ReactGA.event({\n category: \"outbound link\", action: \"follow\", label: item\n })\n }}>{item}{external}</a>\n {/*<ReactGA.OutboundLink*/}\n {/* eventLabel={db}*/}\n {/* to={url}*/}\n {/* target=\"_blank\"*/}\n {/*>*/}\n {/* {item}{external}*/}\n {/*</ReactGA.OutboundLink>*/}\n </li>\n )\n })\n\n vals = this.possiblyTruncateList(vals);\n\n return (\n <tr>\n {/*<td className=\"xref-name-col\">{db}</td>*/}\n <td className=\"xref-value-col\">\n <ol className=\"xref-id-list\">{vals}</ol>\n </td>\n <td className=\"xref-name-col\">{this.props.source}</td>\n <td className=\"xref-value-col\">{this.props.text}</td>\n </tr>\n );\n }\n}\n\nfunction formatPubsForGene(gene) {\n if(!gene || !_.isArray(gene.xrefs)) {\n throw new Error(\"No xrefs for \" + _.get(gene._id));\n }\n let pubs = gene.xrefs.filter(xr => xr.db === \"PUBMED\");\n if (pubs.length === 0) {\n return <tr><td colSpan={3}>No publications found.</td></tr>\n }\n return pubs.sort((a,b) => {\n if (a.source) {\n if (b.source) {\n if (a.source < b.source) {\n return -1;\n }\n if (a.source > b.source) {\n return 1;\n }\n }\n else {\n return -1;\n }\n }\n else if (b.source) {\n return 1;\n }\n if (a.db < b.db) {\n return -1;\n }\n if (a.db > b.db) {\n return 1;\n }\n return 0;\n })\n .map((xr,idx) => {\n var xref = dbxrefs.fetch(xr.db);\n return (\n <Xref key={idx} xref={xref} members={xr.ids} source={xr.source} text={xr.text} />\n )\n })\n}\nconst formURL = 'https://docs.google.com/forms/d/e/1FAIpQLSey-xPyTysdd9c2phXT6kcbjEDeCppG4dLG7LjZCeLpx_KGog/viewform?usp=pp_url&entry.1266455249=';\nconst Publications = ({searchResult, geneDocs}) => (\n <Detail>\n <Title key=\"title\">Curated publications</Title>\n <Description key=\"description\">Functions described in the literature:</Description>\n <Content key=\"content\">\n <table className=\"xrefs xrefs-pubs table\">\n <thead>\n <tr>\n <th className=\"xref-10-col\">PubMed link</th>\n <th className=\"xref-10-col\">Curation source</th>\n <th className=\"xref-80-col\">Title/Description</th>\n </tr>\n </thead>\n <tbody>\n {formatPubsForGene(geneDocs[searchResult.id])}\n </tbody>\n <tfoot>\n <tr>\n <th colSpan={3}>Submit a gene function <a target=\"_blank\" href={formURL + searchResult.id}>here</a></th>\n </tr>\n </tfoot>\n </table>\n </Content>\n </Detail>\n);\n\nexport default Publications;\n\n","import React, { useState, useEffect } from 'react';\nimport {connect} from \"redux-bundler-react\";\nimport {Tabs, Tab, Form, Container, Row, Col, ToggleButton, ButtonGroup } from 'react-bootstrap';\nimport { AiOutlineCopy } from 'react-icons/ai';\nimport './sequences.css';\nimport keyBy from \"lodash/keyBy\";\n\nconst CodeBlock = props => {\n const plainFasta = `>${props.id}\\n${props.seq}`\n\n const [showNotification, setShowNotification] = useState(false);\n\n const copyCode = () => {\n // Use the Clipboard API to write text to the clipboard\n navigator.clipboard.writeText(plainFasta)\n .then(() => {\n setShowNotification(true);\n })\n .catch((err) => {\n console.error('Unable to copy to clipboard', err);\n });\n };\n\n useEffect(() => {\n if (showNotification) {\n const notificationTimeout = setTimeout(() => {\n setShowNotification(false);\n }, 2000); // Hide the notification after 2 seconds\n\n return () => clearTimeout(notificationTimeout);\n }\n }, [showNotification]);\n\n return (\n <div className=\"fasta-container\">\n <code className=\"fasta\"><span className=\"header\">&gt;{props.id}</span><br/>{\n props.blocks.map((block,idx) =>\n <span key={idx} className={block.kind}>{block.seq}</span>\n )\n }</code>\n <p className=\"fasta-key\">\n <b>Key:</b>&nbsp;5'UTR&nbsp;\n <span className=\"square-utr5\">&nbsp;&nbsp;</span>\n &nbsp;CDS&nbsp;\n <span className=\"square-cds\">&nbsp;&nbsp;</span>\n &nbsp;3'UTR&nbsp;\n <span className=\"square-utr3\">&nbsp;&nbsp;</span>\n </p>\n <button className=\"copy-button\" onClick={copyCode}><AiOutlineCopy /></button>\n {showNotification && <div className=\"notification\">Sequence copied</div>}\n </div>\n );\n};\n\nconst decoratePeptide = (seq, transcript) => {\n let junctions = [];\n if (transcript.exon_junctions) {\n transcript.exon_junctions.forEach((ej, idx) => {\n if (ej > transcript.cds.start && ej <= transcript.cds.end) {\n junctions.push(Math.floor((ej - transcript.cds.start) / 3));\n }\n });\n }\n if (junctions.length === 0) {\n return [{kind:'cds', seq:seq}];\n }\n let offset = 0;\n let blocks = [];\n junctions.forEach((j, idx) => {\n let kind = idx % 2 === 0 ? \"cds\" : \"cds-other\";\n blocks.push({kind: kind, seq: seq.substring(offset, j)});\n offset = j;\n });\n blocks.push({kind: junctions.length % 2 === 0 ? \"cds\" : \"cds-other\", seq: seq.substring(junctions.pop())});\n return blocks;\n}\nconst decorateSeq = (geneSeq, gene, up, down, tid, mode) => {\n // return a list of blocks with kind and seq properties\n let blocks = [];\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n const offset = gene.location.strand === 1\n ? gene.location.start - geneSeq.start\n : geneSeq.end - gene.location.end\n if (up > 0) {\n const TSS = gene.gene_structure.exons.find(exon => exon.id === transcript.exons[0]).start;\n blocks.push({\n kind:'upstream',\n seq: geneSeq.seq.substring(offset - up + TSS - 1, offset + TSS - 1).toLowerCase()\n })\n }\n // add exons and introns based on tid\n let pos_in_transcript = 0;\n let pos_in_gene = 0;\n let blockType = 'utr5';\n let extra = '';\n transcript.exons.forEach((eid, e_idx) => {\n const exon = gene.gene_structure.exons.find(exon => exon.id === eid);\n if (e_idx > 0 && mode === \"dna\") {\n blocks.push({\n kind: 'intron',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + exon.start - 1).toLowerCase()\n });\n pos_in_gene = exon.start-1;\n }\n if (mode === \"rna\") {\n extra = e_idx % 2 === 1 ? '-other' : '';\n }\n let exon_length = exon.end - exon.start + 1;\n if (transcript.cds && pos_in_transcript < transcript.cds.start && pos_in_transcript + exon_length >= transcript.cds.start) {\n // CDS starts in this exon\n const utr5_len = transcript.cds.start - pos_in_transcript - 1;\n if (utr5_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + utr5_len)\n });\n exon_length -= utr5_len;\n pos_in_gene += utr5_len;\n pos_in_transcript = transcript.cds.start - 1;\n }\n blockType = 'cds';\n }\n if (blockType === 'cds' && pos_in_transcript + exon_length >= transcript.cds.end) {\n // CDS ends in this exon\n const cds_len = transcript.cds.end - pos_in_transcript;\n if (cds_len > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + cds_len)\n });\n exon_length -= cds_len;\n pos_in_gene += cds_len;\n pos_in_transcript = transcript.cds.end;\n }\n blockType = 'utr3';\n }\n if (exon_length > 0) {\n blocks.push({\n kind: blockType + extra,\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + exon_length)\n })\n }\n pos_in_gene = exon.end;\n pos_in_transcript += exon_length;\n })\n // check if there's more to the gene locus after end of transcript?\n // downstream is currently relative to end of transcript but upstream is relative to first TSS\n if (down > 0) {\n blocks.push({\n kind:'downstream',\n seq: geneSeq.seq.substring(offset + pos_in_gene, offset + pos_in_gene + down).toLowerCase()\n })\n }\n return blocks;\n};\nconst buildId = (gene, geneSeq, up, down) => {\n let gs = gene.location.strand === 1 ? gene.location.start - up : gene.location.start - down;\n let ge = gene.location.strand === 1 ? gene.location.end + down : gene.location.end + up;\n let extras = [];\n if (gene.location.strand === -1) {\n extras.push('reverse')\n }\n if (up > 0) {\n extras.push(`upstream=${up}`)\n }\n if (down > 0) {\n extras.push(`downstream=${down}`)\n }\n return `${geneSeq.genome}|${gene._id}|${gene.location.region}:${gs}..${ge} ${extras.join('|')}`\n};\nconst Detail = props => {\n const gene = props.geneDocs[props.searchResult.id];\n const [tab, setTab] = useState('dna');\n const [upstream, setUpstream] = useState(0);\n const [downstream, setDownstream] = useState(0);\n const [tid, setTid] = useState(gene.gene_structure.canonical_transcript);\n let geneSeq;\n let rnaSeq;\n let pepSeq;\n if (props.geneSequences && props.geneSequences[gene._id]) {\n geneSeq = props.geneSequences[gene._id];\n }\n else {\n props.doRequestGeneSequence(gene)\n return <pre>loading</pre>;\n }\n if (props.rnaSequences && props.rnaSequences[tid]) {\n rnaSeq = props.rnaSequences[tid]\n }\n else {\n props.doRequestRnaSequence(tid, gene)\n return <pre>loading</pre>;\n }\n const maxUp = gene.location.strand === 1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const maxDown = gene.location.strand === -1 ? gene.location.start - geneSeq.start : geneSeq.end - gene.location.end;\n const transcript = gene.gene_structure.transcripts.find(tr => tr.id === tid);\n let tl_id;\n if (transcript.translation) {\n tl_id = transcript.translation.id;\n if (props.pepSequences && props.pepSequences[tl_id]) {\n pepSeq = props.pepSequences[tl_id];\n }\n else {\n props.doRequestPepSequence(tl_id, gene);\n return <pre>loading</pre>;\n }\n }\n return <Tabs activeKey={tab}\n onSelect={(k) => setTab(k)}\n >\n <Tab tabClassName=\"dna\" eventKey=\"dna\" title=\"Genomic sequence\">\n <Container style={{ maxWidth: '100ch', marginLeft: 0}}>\n <Row>\n <Col><b><i>Show flanking sequence</i></b></Col>\n </Row>\n <div className=\"flanking-guide\">\n <span className=\"flanking-label-left\">Upstream</span>\n <div className=\"horizontal-line\"/>\n <span className=\"flanking-center-label\">Transcript (unspliced)</span>\n <div className=\"horizontal-line\"/>\n <span className=\"flanking-label-right\">Downstream</span>\n\n <span className=\"flanking-value-left\">{upstream}</span>\n <Form.Range\n className=\"reverse-slide\"\n style={{width: '60px'}}\n value={upstream}\n onChange={(e) => setUpstream(e.target.value)}\n min={0}\n max={maxUp}\n step={10}\n />\n <span/>\n <Form.Range\n style={{width: '60px'}}\n value={downstream}\n onChange={(e) => setDownstream(e.target.value)}\n min={0}\n max={maxDown}\n step={10}\n />\n <span className=\"flanking-value-right\">{downstream}</span>\n </div>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Highlight transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={buildId(gene,geneSeq,+upstream,+downstream)} seq={geneSeq.seq.substring(maxUp - +upstream, maxUp + gene.location.end - gene.location.start + 1 + +downstream)} blocks={decorateSeq(geneSeq,gene,+upstream,+downstream,tid,\"dna\")}/>}\n </Tab>\n <Tab tabClassName=\"rna\" eventKey=\"rna\" title=\"Transcript sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tid} seq={rnaSeq.seq} blocks={decorateSeq(geneSeq,gene,0,0,tid,\"rna\")}/>}\n </Tab>\n {gene.biotype === \"protein_coding\" &&\n <Tab tabClassName=\"pep\" eventKey=\"pep\" title=\"Peptide sequence\">\n <Container style={{ width: '100ch', marginLeft: 0}}>\n {gene.gene_structure.transcripts.length > 1 &&\n <Row>\n <Col><b><i>Select transcript</i></b><br/>\n <ButtonGroup>{gene.gene_structure.transcripts.sort((a,b) => a.id.localeCompare(b.id)).map((tr, idx) => {\n let v = tr.id === gene.gene_structure.canonical_transcript ? 'primary' : 'secondary';\n if (tr.id !== tid) {\n v = `outline-${v}`\n }\n return <ToggleButton\n variant={v}\n key={idx}\n id={`radio-${idx}`}\n type=\"radio\"\n name={tr.id}\n value={tr.id}\n checked={tr.id === tid}\n onChange={e => setTid(e.currentTarget.value)}\n >{tr.id}</ToggleButton>\n })}</ButtonGroup>\n </Col>\n </Row>\n }\n </Container>\n {geneSeq && <CodeBlock id={tl_id} seq={pepSeq.seq} blocks={decoratePeptide(pepSeq.seq,transcript)}/>}\n </Tab>}\n </Tabs>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGeneSequences',\n 'selectRnaSequences',\n 'selectPepSequences',\n 'doRequestGeneSequence',\n 'doRequestRnaSequence',\n 'doRequestPepSequence',\n Detail\n);\n\n","import React from 'react'\nimport { connect } from 'redux-bundler-react'\nimport Vis from \"gramene-search-vis\"\nimport Selection from './selection.js'\nimport '../../../node_modules/gramene-search-vis/styles/main.less';\n\nclass TaxDist extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n collapseEmpties: true,\n comparaOnly: true,\n showCompara: props.configuration.hasOwnProperty('partialCompara')\n };\n }\n handleSelection(selections) {\n this.setState({selections})\n }\n handleHighlight(highlight) {\n this.setState({highlight})\n }\n handleFilter() {\n this.setState({selections:null})\n }\n toggleEmpties() {\n this.setState({collapseEmpties: !this.state.collapseEmpties})\n }\n toggleCompara() {\n this.setState({comparaOnly: !this.state.comparaOnly})\n }\n render() {\n let selectedTaxa = {};\n if (this.props.grameneSearch) {\n if (this.state.collapseEmpties) {\n this.props.grameneSearch.facet_counts.facet_fields.taxon_id.filter((tid, idx) => idx % 2 === 0).forEach(tid => {\n selectedTaxa[tid] = true;\n })\n } else {\n if (Object.keys(this.props.grameneGenomes.active).length === 0 && this.props.grameneMaps) {\n Object.keys(this.props.grameneMaps).forEach(tid => selectedTaxa[tid] = true);\n } else {\n Object.keys(this.props.grameneGenomes.active).forEach(tid => selectedTaxa[tid]= true);\n }\n }\n if (this.state.showCompara && this.state.comparaOnly && this.props.grameneMaps) {\n Object.keys(selectedTaxa).forEach(tid => {\n if (!this.props.grameneMaps[tid].in_compara) {\n delete selectedTaxa[tid];\n }\n })\n }\n }\n return (\n <div className=\"results-vis big-vis\">\n {this.props.grameneTaxDist && <span>\n <button type=\"button\"\n className=\"btn btn-outline-primary btn-sm\"\n onClick={this.toggleEmpties.bind(this)}>\n {this.state.collapseEmpties ? 'Expand' : 'Collapse'} empty branches\n </button>\n {this.state.showCompara && <button type=\"button\"\n className=\"btn btn-outline-success btn-sm\"\n onClick={this.toggleCompara.bind(this)}>\n Show {this.state.comparaOnly ? 'all genomes' : 'only genomes in gene trees'}\n </button>\n }\n </span>}\n {this.props.grameneTaxDist && <Vis taxonomy={this.props.grameneTaxDist}\n selectedTaxa={selectedTaxa}\n onSelection={this.handleSelection.bind(this)}\n onHighlight={this.handleHighlight.bind(this)}\n />}\n {this.renderSelection()}\n </div>\n );\n }\n renderSelection() {\n if (this.state.selections && this.props.grameneTaxDist) {\n return <Selection taxonomy={this.props.grameneTaxDist}\n selectedTaxa={{}}\n selections={this.state.selections}\n onFilter={this.handleFilter.bind(this)}/>\n }\n }\n}\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneTaxDist',\n 'selectGrameneGenomes',\n 'selectGrameneSearch',\n 'selectGrameneMaps',\n TaxDist\n);\n","import React from 'react';\nimport numeral from 'numeral';\nimport _ from \"lodash\";\n\nimport {Table, Button, Badge} from 'react-bootstrap';\nimport {connect} from \"redux-bundler-react\";\n\nfunction selectionStats(selections, taxonomy) {\n const selectionData = getSelectionData(selections, taxonomy);\n const totalGeneResults = taxonomy.model.results.count;\n const fq = fqFromSelections(selections);\n\n return {\n selectedGenes: selectionData.resultsCount,\n totalGeneResults,\n fq,\n numSelectedBins: selectionData.binsCount,\n proportionGenesSelected: selectionData.resultsCount / totalGeneResults\n }\n}\n\nfunction getSelectionData(selection, taxonomy) {\n return _.reduce(selection, (countAcc, sel) => {\n const bins = taxonomy.getBins(sel.binFrom.idx, sel.binTo.idx);\n countAcc.binsCount += bins.length;\n countAcc.resultsCount += _.reduce(bins, (acc, bin) => acc + bin.results.count, 0);\n return countAcc;\n }, {resultsCount: 0, binsCount: 0});\n}\n\nconst selectionToSolrRange = (sel)=>`[${sel.binFrom.idx} TO ${sel.binTo.idx}]`;\n\nfunction fqFromSelections(selections) {\n const rangeStrings = selections.map(selectionToSolrRange);\n return `fixed_1000__bin:(${rangeStrings.join(' ')})`;\n}\n\nconst Selections = ({selections, taxonomy, doAcceptGrameneSuggestion, onFilter}) => {\n const stats = selectionStats(selections, taxonomy);\n\n const setFilter = () => {\n doAcceptGrameneSuggestion({\n category: 'Selections',\n fq_field: 'fixed_1000__bin',\n fq_value: `(${selections.map(selectionToSolrRange).join(' ')})`,\n name: `${selections.length} region${selections.length === 1 ? '':'s'}`\n });\n onFilter();\n };\n\n const formatProportion = (prop) => '(' + (_.isFinite(prop) ? numeral(prop).format('0.0%') : undefined) + ')';\n\n return (\n <div>\n <Table>\n <tbody>\n <tr>\n <th>Number of selected genes</th>\n <td>{stats.selectedGenes} {formatProportion(stats.proportionGenesSelected)}</td>\n <td><Button size='sm' onClick={setFilter}>selections&nbsp;|<Badge>{stats.selectedGenes}</Badge></Button>\n </td>\n </tr>\n </tbody>\n </Table>\n </div>\n )\n};\n\nexport default connect(\n 'doAcceptGrameneSuggestion',\n Selections\n);\n","import React from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport {Alert, Container, Row, Card, CardGroup} from 'react-bootstrap'\nimport './genes.css'\n\nconst examples = [\n {\n subsite: {\n maize:1,\n sorghum:1,\n main:1,\n },\n text: \"What are the orthologs of Arabidopsis thaliana's PAD4 gene in Andropogoneae?\",\n filters: {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 5,\n children: [\n {\n fq_field: 'homology__all_orthologs',\n fq_value: 'AT3G52430',\n name: 'Orthologs of PAD4',\n category: 'Gene Tree',\n leftIdx:1,\n rightIdx:2,\n negate: false,\n marked: false\n },\n {\n fq_field: 'taxonomy__ancestors',\n fq_value: 147429,\n name: 'Andropogoneae',\n category: 'Taxonomy',\n leftIdx:3,\n rightIdx:4,\n negate: false,\n marked: false\n }\n ]\n }\n },\n {\n subsite: {\n grapevine:1\n },\n text: \"What are the orthologs of Arabidopsis thaliana's PAD4 gene in rosids?\",\n filters: {\n status: 'init',\n rows: 20,\n operation: 'AND',\n negate: false,\n leftIdx: 0,\n rightIdx: 5,\n children: [\n {\n fq_field: 'homology__all_orthologs',\n fq_value: 'AT3G52430',\n name: 'Orthologs of PAD4',\n category: 'Gene Tree',\n leftIdx:1,\n rightIdx:2,\n negate: false,\n marked: false\n },\n {\n fq_field: 'taxonomy__ancestors',\n fq_value: 71275,\n name: 'rosids',\n category: 'Taxonomy',\n leftIdx:3,\n rightIdx:4,\n negate: false,\n marked: false\n }\n ]\n }\n }\n];\nconst HelpDemo = ({configuration,doReplaceGrameneFilters}) => (\n <Container fluid style={{padding: '40px'}}>\n <Row>\n <h3>Search Features</h3>\n </Row>\n <Row>\n <CardGroup style={{width:'80%'}}>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Suggestions</Card.Title>\n <Card.Text>Matching terms are provided as you type:</Card.Text>\n <div className='gene-search-pic-sugg'/>\n </Card.Body>\n </Card>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Visualization</Card.Title>\n <Card.Text>See the distribution of results across all genomes:</Card.Text>\n <div className='gene-search-pic-results'/>\n </Card.Body>\n </Card>\n <Card style={{'backgroundColor':'#f3f6f5', 'borderColor':'#DDE5E3'}}>\n <Card.Body>\n <Card.Title>Gene tree view</Card.Title>\n <Card.Text>Explore evolutionary history of a gene family:</Card.Text>\n <div className='gene-search-pic-genetree'/>\n </Card.Body>\n </Card>\n </CardGroup>\n </Row>\n <Row>\n <h4>For Example</h4>\n </Row>\n <Row>\n <small>\n You can ask sophisticated questions about the genes:<br/>\n <ul>\n {examples.filter(e => !!e.subsite[configuration.id]).map((e,idx) => (\n <li key={idx}><a onClick={() => doReplaceGrameneFilters(e.filters)}>{e.text}</a></li>\n ))}\n </ul>\n </small>\n </Row>\n </Container>\n);\n\nexport default connect(\n 'selectConfiguration',\n 'doReplaceGrameneFilters',\n HelpDemo\n);\n\n","import { connect } from 'redux-bundler-react'\n\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport StatsByGroup from \"./StatsByGroup\";\n\n\nclass GeneAttribs extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n render() {\n if (this.props.grameneGeneAttribs && this.props.grameneSearch) {\n const groups = this.props.grameneGeneAttribs;\n const stats = this.props.grameneSearch.stats;\n return <StatsByGroup groups={groups} stats={stats} />;\n }\n return null;\n }\n}\n\nexport default connect(\n 'selectGrameneSearch',\n 'selectGrameneGeneAttribs',\n GeneAttribs\n);\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\n\n/**\n * StatsByGroup\n *\n * Props:\n * - groups: {\n * [groupName: string]: Array<{\n * name: string,\n * description: string,\n * dtype: \"i\" | \"f\",\n * fieldName: string\n * }>\n * }\n * - stats: {\n * stats_fields: {\n * [fieldName: string]: {\n * min?: number,\n * max?: number,\n * count?: number,\n * mean?: number,\n * stddev?: number,\n * percentiles?: (string | number)[] // [\"10.0\", v10, \"20.0\", v20, ...] (order preserved)\n * }\n * }\n * }\n *\n * Columns: attr, desc, mean, stddev, min, max, count, dist\n */\nexport default function StatsByGroup({ groups, stats }) {\n const fields = stats?.stats_fields || {};\n\n return (\n <div style={{ fontFamily: \"system-ui, -apple-system, Segoe UI, Roboto, sans-serif\", lineHeight: 1.35 }}>\n {Object.entries(groups).map(([groupName, attrs]) => (\n <GroupTable\n key={groupName}\n groupName={groupName}\n attributes={attrs}\n fields={fields}\n />\n ))}\n </div>\n );\n}\n\nfunction GroupTable({ groupName, attributes, fields }) {\n const hasAny = attributes?.some((a) => fields[a.fieldName]);\n\n const columns = useMemo(\n () => [\n { key: \"attr\", label: \"Attribute\", min: 120 },\n { key: \"desc\", label: \"Description\", min: 380, flex: true },\n { key: \"mean\", label: \"Mean\", min: 100 },\n { key: \"stddev\", label: \"Std Dev\", min: 110 },\n { key: \"min\", label: \"Min\", min: 90 },\n { key: \"max\", label: \"Max\", min: 90 },\n { key: \"count\", label: \"Count\", min: 90 },\n { key: \"dist\", label: \"Distribution\",min: 220 },\n ],\n []\n );\n\n const initial = useMemo(\n () => columns.map((c) => (c.flex ? Math.max(380, c.min) : c.min)),\n [columns]\n );\n\n const { colWidths, startResize, resizing } = useResizableColumns({\n initialWidths: initial,\n minWidths: columns.map((c) => c.min || 60),\n });\n\n const nfInt = useMemo(() => new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 0 }), []);\n const nfFloat = useMemo(\n () => new Intl.NumberFormat(\"en-US\", { minimumFractionDigits: 0, maximumFractionDigits: 3 }),\n []\n );\n\n return (\n <section style={{ marginBottom: 24 }}>\n <header style={{ display: \"flex\", alignItems: \"baseline\", gap: 12, marginBottom: 8 }}>\n <h2 style={{ margin: 0, fontSize: 18 }}>{groupName}</h2>\n {!hasAny && <span style={{ fontSize: 12, color: \"#666\" }}>No stats available for this group.</span>}\n </header>\n\n <div\n style={{\n overflowX: \"auto\",\n border: \"1px solid #eee\",\n borderRadius: 8,\n boxShadow: \"0 1px 2px rgba(0,0,0,0.04)\",\n }}\n >\n <table style={tableStyle}>\n <colgroup>\n {colWidths.map((w, i) => (\n <col key={i} style={{ width: w }} />\n ))}\n </colgroup>\n\n <thead>\n <tr>\n {columns.map((col, i) => (\n <ResizableTh\n key={col.key}\n label={col.label}\n index={i}\n onResizeStart={startResize}\n />\n ))}\n </tr>\n </thead>\n\n <tbody>\n {attributes.map((a) => {\n const s = fields[a.fieldName] || {};\n return (\n <tr key={a.fieldName}>\n <Td mono title={a.fieldName}>{a.name}</Td>\n <Td title={a.description}>{a.description}</Td>\n <Td align=\"right\">{fmtValue(s.mean, a.dtype, true, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.stddev, a.dtype, true, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.min, a.dtype, false, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtValue(s.max, a.dtype, false, nfInt, nfFloat)}</Td>\n <Td align=\"right\">{fmtCount(s.count, nfInt)}</Td>\n <Td>\n <PercentileHeatmapNormalized\n percentilesArr={s.percentiles}\n min={s.min}\n max={s.max}\n />\n </Td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n <div style={{ marginTop: 6, fontSize: 12, color: \"#666\" }}>\n <em>Tip:</em> Drag the divider at the right edge of any header to resize.\n {resizing && <span style={{ marginLeft: 8, color: \"#999\" }}>(resizing…)</span>}\n </div>\n </section>\n );\n}\n\n/* ===================== Percentiles / Heatmap ===================== */\n\n/**\n * Convert alternating array into ordered pairs: [[\"10.0\", v10], [\"20.0\", v20], ...]\n * - Preserves the exact order provided by Solr\n */\nfunction percentilesArrayToPairs(arr) {\n if (!Array.isArray(arr)) return [];\n const out = [];\n for (let i = 0; i < arr.length - 1; i += 2) {\n out.push([String(arr[i]), arr[i + 1]]);\n }\n return out;\n}\n\nfunction normalizeBetween(value, min, max) {\n if (!isFinite(min) || !isFinite(max) || max <= min || !isFinite(value)) return null;\n return (value - min) / (max - min);\n}\n\n// White -> Blue (0 -> 1)\nfunction rgbWhiteToBlue(vNorm) {\n const t = clamp01(vNorm);\n const rg = Math.round(255 * (1 - t));\n return `rgb(${rg}, ${rg}, 255)`;\n}\nfunction clamp01(x) {\n if (typeof x !== \"number\" || !isFinite(x)) return 0;\n return Math.max(0, Math.min(1, x));\n}\nfunction fmtFloat(v) {\n if (v == null || !isFinite(v)) return \"n/a\";\n return v.toFixed(3);\n}\n\n/**\n * PercentileHeatmapNormalized\n * - Infers bins from percentilesArr (order preserved)\n * - Colors normalized by row min/max\n */\nfunction PercentileHeatmapNormalized({ percentilesArr, min, max }) {\n const pairs = useMemo(() => percentilesArrayToPairs(percentilesArr), [percentilesArr]);\n const n = pairs.length || 1; // avoid zero columns\n const validScale = isFinite(min) && isFinite(max) && max > min;\n\n return (\n <div style={{ ...heatRowDynamic, gridTemplateColumns: `repeat(${n}, 1fr)` }}>\n {pairs.map(([pStr, raw], idx) => {\n const rawNum = typeof raw === \"number\" && isFinite(raw) ? raw : null;\n const norm = rawNum == null ? null : (validScale ? normalizeBetween(rawNum, min, max) : null);\n const bg = norm == null ? \"#f2f2f2\" : rgbWhiteToBlue(norm);\n const label = `${pStr} → raw ${fmtFloat(rawNum)} (norm ${fmtFloat(norm)})`;\n return <HeatCell key={`${pStr}-${idx}`} background={bg} label={label} />;\n })}\n </div>\n );\n}\n\nfunction HeatCell({ background, label }) {\n const [hover, setHover] = useState(false);\n return (\n <div\n style={{ ...heatCell, background }}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n title={label}\n >\n {hover && <span style={popover}>{label}</span>}\n </div>\n );\n}\n\n/* ===================== Resizable columns ===================== */\n\nfunction useResizableColumns({ initialWidths, minWidths }) {\n const [colWidths, setColWidths] = useState(initialWidths);\n const [resizing, setResizing] = useState(false);\n const activeRef = useRef(null); // { index, startX, startW }\n\n useEffect(() => {\n if (initialWidths?.length) setColWidths(initialWidths);\n }, [initialWidths?.length]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const onMouseMove = (e) => {\n if (!activeRef.current) return;\n const { index, startX, startW } = activeRef.current;\n const dx = e.clientX - startX;\n const next = [...colWidths];\n const minW = minWidths?.[index] ?? 60;\n next[index] = Math.max(minW, startW + dx);\n setColWidths(next);\n };\n\n const endResize = () => {\n activeRef.current = null;\n setResizing(false);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", endResize);\n };\n\n const startResize = (index, ev) => {\n const startX = ev.clientX;\n const startW = colWidths[index];\n activeRef.current = { index, startX, startW };\n setResizing(true);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n window.addEventListener(\"mousemove\", onMouseMove);\n window.addEventListener(\"mouseup\", endResize);\n };\n\n useEffect(() => {\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove);\n window.removeEventListener(\"mouseup\", endResize);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return { colWidths, setColWidths, startResize, resizing };\n}\n\nfunction ResizableTh({ label, index, onResizeStart }) {\n return (\n <th style={thStyle}>\n <div style={{ position: \"relative\", width: \"100%\" }}>\n <span>{label}</span>\n <span\n onMouseDown={(e) => onResizeStart(index, e)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n title=\"Drag to resize column\"\n style={resizerStyle}\n />\n </div>\n </th>\n );\n}\n\n/* ===================== Formatting helpers ===================== */\n\nfunction fmtCount(v, nfInt) {\n if (v === null || v === undefined) return \"—\";\n return nfInt.format(v);\n}\n\nfunction fmtValue(v, dtype = \"f\", isStat = false, nfInt, nfFloat) {\n if (v === null || v === undefined || Number.isNaN(v)) return \"—\";\n const isIntType = dtype === \"i\";\n return isIntType && !isStat ? nfInt.format(v) : nfFloat.format(v);\n}\n\n/* ===================== Cells & Styles ===================== */\n\nfunction Td({ children, align = \"left\", mono = false, title }) {\n return (\n <td\n title={title}\n style={{\n ...cellBase,\n textAlign: align,\n borderBottom: \"1px solid #eee\",\n padding: \"8px 10px\",\n fontFamily: mono ? \"ui-monospace, SFMono-Regular, Menlo, monospace\" : undefined,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n verticalAlign: \"top\",\n }}\n >\n {children}\n </td>\n );\n}\n\nconst tableStyle = {\n width: \"100%\",\n borderCollapse: \"collapse\",\n tableLayout: \"fixed\",\n minWidth: 980,\n};\n\nconst cellBase = {\n fontSize: 13,\n lineHeight: 1.35,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n};\n\nconst thStyle = {\n ...cellBase,\n textAlign: \"left\",\n borderBottom: \"1px solid #ddd\",\n background: \"#fafafa\",\n fontWeight: 600,\n padding: \"10px 10px\",\n position: \"relative\",\n};\n\nconst resizerStyle = {\n position: \"absolute\",\n right: -5,\n top: 0,\n height: \"100%\",\n width: 10,\n cursor: \"col-resize\",\n boxShadow: \"inset -1px 0 0 rgba(0,0,0,0.08)\",\n};\n\nconst heatRowDynamic = {\n display: \"grid\",\n gap: 2,\n alignItems: \"center\",\n width: \"100%\",\n minWidth: 200,\n};\n\nconst heatCell = {\n height: 16,\n borderRadius: 3,\n position: \"relative\",\n boxShadow: \"inset 0 0 0 1px rgba(0,0,0,0.06)\",\n};\n\nconst popover = {\n position: \"absolute\",\n left: \"50%\",\n top: -26,\n transform: \"translateX(-50%)\",\n padding: \"2px 6px\",\n fontSize: 11,\n background: \"rgba(0,0,0,0.8)\",\n color: \"#fff\",\n borderRadius: 4,\n whiteSpace: \"nowrap\",\n pointerEvents: \"none\",\n};\n","import React from \"react\";\nimport { connect } from 'redux-bundler-react'\nimport { Modal, Button } from \"react-bootstrap\";\nimport { BsChevronDown, BsChevronRight } from \"react-icons/bs\";\n\n// name → subtle background colour. Checked against node.name at render time.\nconst CLADE_COLORS = {\n \"Chlorophyta\": \"#e8f5e9\",\n \"Bryophyta\": \"#f1f8e9\",\n \"Liliopsida\": \"#fff8e1\", // monocots\n \"eudicotyledons\": \"#fce4ec\",\n \"Poaceae\": \"#fff3e0\",\n \"Fabaceae\": \"#ede7f6\",\n \"Brassicaceae\": \"#e1f5fe\",\n \"Solanaceae\": \"#ffebee\",\n};\n\nfunction findRoots(tax) {\n return Object.values(tax).filter(n =>\n !n.is_a || n.is_a.length === 0 || !n.is_a.some(p => tax[p])\n );\n}\n\n// Post-order: attach .leafIds (taxon_ids of maps in subtree) and .isLeaf\nfunction annotate(node, tax, maps) {\n const leafIds = [];\n if (maps[node._id]) { node.isLeaf = true; leafIds.push(node._id); }\n (node.children || []).forEach(cid => {\n const child = tax[cid];\n if (!child) return;\n annotate(child, tax, maps);\n child.leafIds.forEach(id => leafIds.push(id));\n });\n node.leafIds = leafIds;\n}\n\n// Walk down the spine through single-child internals until a branch point,\n// leaf, or node that is itself a genome.\nfunction compressChain(node, tax, maps) {\n const chain = [node];\n let cur = node;\n while (true) {\n const kids = (cur.children || [])\n .map(cid => tax[cid])\n .filter(c => c && c.leafIds && c.leafIds.length > 0);\n if (kids.length !== 1) break;\n if (maps[cur._id]) break;\n cur = kids[0];\n chain.push(cur);\n }\n return { chain, terminal: cur };\n}\n\n// Render a breadcrumb chain. If the chain has more than 3 nodes, collapse the\n// middle into a hoverable ellipsis that reveals the hidden names on hover.\nconst CHAIN_DISPLAY_MAX = 3;\nfunction renderChain(chain) {\n const nameOf = n => n.short_name || n.name;\n if (chain.length <= CHAIN_DISPLAY_MAX) {\n return chain.map((n, i) => (\n <React.Fragment key={n._id}>\n {i > 0 && <span className=\"tax-sep\"> › </span>}\n {nameOf(n)}\n </React.Fragment>\n ));\n }\n const first = chain[0];\n const last = chain[chain.length - 1];\n const middle = chain.slice(1, -1);\n const fullTitle = chain.map(nameOf).join(' › ');\n return (\n <>\n {nameOf(first)}\n <span className=\"tax-sep\"> › </span>\n <span className=\"tax-ellipsis\" title={fullTitle}>\n <span className=\"tax-ellipsis-short\">…</span>\n <span className=\"tax-ellipsis-full\">\n {middle.map(n => (\n <React.Fragment key={n._id}>\n {nameOf(n)}\n <span className=\"tax-sep\"> › </span>\n </React.Fragment>\n ))}\n </span>\n </span>\n <span className=\"tax-sep\"> › </span>\n {nameOf(last)}\n </>\n );\n}\n\n// Drop a parent when its single child has the same name (e.g. species node\n// above a subspecies-less record that repeats the species name). The terminal\n// (last element) is always preserved; only redundant ancestors are removed.\nfunction dedupAdjacent(chain) {\n const out = [];\n for (const n of chain) {\n if (out.length && out[out.length - 1].name === n.name) {\n out[out.length - 1] = n; // keep the child, drop the parent\n } else {\n out.push(n);\n }\n }\n return out;\n}\n\n// Use the node's direct `rank` field when it carries a real value.\nfunction getRank(node) {\n const r = node && node.rank;\n return r && r !== 'no rank' ? r : null;\n}\n\n// Search nodes whose name or a synonym contains the query. Prefix matches rank higher.\nfunction searchTaxonomy(query, tax) {\n const q = query.trim().toLowerCase();\n if (!q) return [];\n const out = [];\n Object.values(tax).forEach(n => {\n const name = n.name || '';\n const nameLc = name.toLowerCase();\n if (nameLc.includes(q)) {\n out.push({ node: n, matched: name, via: 'name', prefix: nameLc.startsWith(q) });\n return;\n }\n const syns = n.synonym || [];\n for (const s of syns) {\n const sLc = s.toLowerCase();\n if (sLc.includes(q)) {\n out.push({ node: n, matched: s, via: 'synonym', prefix: sLc.startsWith(q) });\n return;\n }\n }\n });\n out.sort((a, b) =>\n (a.prefix === b.prefix ? 0 : a.prefix ? -1 : 1)\n || a.node.name.localeCompare(b.node.name)\n );\n return out.slice(0, 20);\n}\n\n// Compute the { selected, expanded } pair for a fresh modal opening:\n// selection is seeded from active genomes (or everything non-hidden),\n// and every ancestor of a selected genome is pre-expanded so the user sees\n// all of their current selections without manually drilling in.\nfunction computeOpenState(props) {\n const { grameneMaps, grameneTaxonomy, grameneGenomes } = props;\n const activeKeys = Object.keys(grameneGenomes.active || {});\n const seedAll = activeKeys.length === 0;\n const selected = new Set();\n Object.values(grameneMaps || {}).forEach(m => {\n if (m.hidden) return;\n if (seedAll || grameneGenomes.active[m.taxon_id]) selected.add(m.taxon_id);\n });\n const expanded = new Set();\n if (grameneTaxonomy) {\n selected.forEach(tid => {\n let cur = grameneTaxonomy[tid];\n const seen = new Set();\n while (cur && !seen.has(cur._id)) {\n seen.add(cur._id);\n expanded.add(cur._id);\n const pid = cur.is_a && cur.is_a[0];\n cur = pid ? grameneTaxonomy[pid] : null;\n }\n });\n }\n return { selected, expanded };\n}\n\nclass TaxonomyModal extends React.Component {\n constructor(props) {\n super(props);\n const { grameneMaps, grameneTaxonomy } = props;\n\n let roots = [];\n if (grameneTaxonomy) {\n roots = findRoots(grameneTaxonomy);\n roots.forEach(r => annotate(r, grameneTaxonomy, grameneMaps));\n }\n\n const { selected, expanded } = computeOpenState(props);\n this.state = {\n selected,\n expanded,\n roots,\n query: '',\n highlightId: null,\n activeIdx: 0,\n };\n this.rowRefs = {};\n this._matches = [];\n this._activeHitEl = null;\n }\n\n handleQueryChange(e) {\n this.setState({ query: e.target.value, activeIdx: 0 });\n }\n\n handleSearchKeyDown(e) {\n const n = this._matches.length;\n if (e.key === 'ArrowDown') {\n if (n === 0) return;\n e.preventDefault();\n this.setState({ activeIdx: Math.min(this.state.activeIdx + 1, n - 1) });\n } else if (e.key === 'ArrowUp') {\n if (n === 0) return;\n e.preventDefault();\n this.setState({ activeIdx: Math.max(this.state.activeIdx - 1, 0) });\n } else if (e.key === 'Enter') {\n if (n === 0) return;\n e.preventDefault();\n const hit = this._matches[this.state.activeIdx] || this._matches[0];\n if (hit) this.pickMatch(hit.node);\n } else if (e.key === 'Escape') {\n if (this.state.query) {\n e.preventDefault();\n this.setState({ query: '', activeIdx: 0 });\n }\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // On each hidden→shown transition, reseed selection from current active\n // genomes and expand every ancestor so selected taxa are visible.\n const wasShown = prevProps.grameneGenomes && prevProps.grameneGenomes.show;\n const isShown = this.props.grameneGenomes && this.props.grameneGenomes.show;\n if (!wasShown && isShown) {\n const { selected, expanded } = computeOpenState(this.props);\n this.setState({ selected, expanded, query: '', activeIdx: 0, highlightId: null });\n }\n // Keep the highlighted hit scrolled into view inside the dropdown.\n if (prevState.activeIdx !== this.state.activeIdx && this._activeHitEl) {\n this._activeHitEl.scrollIntoView({ block: 'nearest' });\n }\n }\n\n pickMatch(node) {\n // Expand every ancestor so the node is visible, then scroll + flash.\n const { grameneTaxonomy } = this.props;\n const expanded = new Set(this.state.expanded);\n let cur = node;\n const seen = new Set();\n while (cur && !seen.has(cur._id)) {\n seen.add(cur._id);\n expanded.add(cur._id);\n const pid = cur.is_a && cur.is_a[0];\n cur = pid ? grameneTaxonomy[pid] : null;\n }\n this.setState({ expanded, query: '', highlightId: node._id }, () => {\n const el = this.rowRefs[node._id];\n if (el && el.scrollIntoView) el.scrollIntoView({ block: 'center', behavior: 'smooth' });\n clearTimeout(this._hlTimer);\n this._hlTimer = setTimeout(() => this.setState({ highlightId: null }), 1800);\n });\n }\n\n toggleExpand(id) {\n const expanded = new Set(this.state.expanded);\n expanded.has(id) ? expanded.delete(id) : expanded.add(id);\n this.setState({ expanded });\n }\n\n toggleLeaf(taxonId) {\n const selected = new Set(this.state.selected);\n selected.has(taxonId) ? selected.delete(taxonId) : selected.add(taxonId);\n this.setState({ selected });\n }\n\n toggleSubtree(terminal) {\n const selected = new Set(this.state.selected);\n const allOn = terminal.leafIds.every(id => selected.has(id));\n terminal.leafIds.forEach(id => allOn ? selected.delete(id) : selected.add(id));\n this.setState({ selected });\n }\n\n selectAll() {\n const s = new Set();\n Object.values(this.props.grameneMaps).forEach(m => {\n if (!m.hidden) s.add(m.taxon_id);\n });\n this.setState({ selected: s });\n }\n\n selectNone() {\n this.setState({ selected: new Set() });\n }\n\n handleClose() {\n const active = {};\n this.state.selected.forEach(id => { active[id] = true; });\n if (Object.keys(active).length === 0) {\n Object.values(this.props.grameneMaps).forEach(m => {\n if (!m.hidden) active[m.taxon_id] = true;\n });\n }\n this.props.doUpdateGrameneGenomes(active);\n }\n\n renderNode(node, depth, inheritedColor) {\n const { grameneTaxonomy, grameneMaps } = this.props;\n const { selected, expanded } = this.state;\n\n const { chain: rawChain, terminal } = compressChain(node, grameneTaxonomy, grameneMaps);\n const chain = dedupAdjacent(rawChain);\n const leafIds = terminal.leafIds;\n if (leafIds.length === 0) return null;\n\n const selCount = leafIds.reduce((n, id) => n + (selected.has(id) ? 1 : 0), 0);\n const total = leafIds.length;\n const allOn = selCount === total;\n const someOn = selCount > 0 && !allOn;\n\n const visibleKids = (terminal.children || [])\n .map(cid => grameneTaxonomy[cid])\n .filter(c => c && c.leafIds.length > 0);\n const hasKids = visibleKids.length > 0;\n const terminalIsGenome = !!grameneMaps[terminal._id];\n\n const isOpen = expanded.has(terminal._id);\n\n // Deepest clade colour in the chain wins; falls back to inherited.\n const color = chain.reduce(\n (acc, n) => CLADE_COLORS[n.name] || acc,\n inheritedColor\n );\n\n const isHighlighted = rawChain.some(n => n._id === this.state.highlightId);\n\n return (\n <div\n key={terminal._id}\n className={\"tax-node\" + (isHighlighted ? \" tax-node-highlight\" : \"\")}\n style={{ background: color }}\n ref={el => {\n // Register every traversed node (including dedupped-away parents) so\n // search results targeting any ancestor still scroll to this row.\n rawChain.forEach(n => { this.rowRefs[n._id] = el; });\n }}\n >\n <div className=\"tax-row\" style={{ paddingLeft: depth * 7 }}>\n {hasKids ? (\n <span\n className=\"tax-chevron\"\n onClick={() => this.toggleExpand(terminal._id)}\n >\n {isOpen ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n ) : (\n <span className=\"tax-chevron-spacer\"/>\n )}\n\n <input\n type=\"checkbox\"\n checked={allOn}\n ref={el => { if (el) el.indeterminate = someOn; }}\n onChange={() => {\n if (hasKids) this.toggleSubtree(terminal);\n else if (terminalIsGenome) this.toggleLeaf(terminal._id);\n }}\n />\n {' '}\n <span className={hasKids ? \"tax-label tax-label-internal\" : \"tax-label\"}>\n {renderChain(chain)}\n </span>\n\n {(hasKids || terminalIsGenome) && (\n <span className=\"tax-count\"> ({selCount} / {total})</span>\n )}\n\n {hasKids && terminalIsGenome && (\n <label className=\"tax-self-leaf\">\n <input\n type=\"checkbox\"\n checked={selected.has(terminal._id)}\n onChange={() => this.toggleLeaf(terminal._id)}\n />\n <em>this genome</em>\n </label>\n )}\n </div>\n\n {hasKids && isOpen && (\n <div className=\"tax-children\">\n {visibleKids.map(c => this.renderNode(c, depth + 1, color))}\n </div>\n )}\n </div>\n );\n }\n\n render() {\n const { roots } = this.state;\n const { grameneTaxonomy, grameneMaps } = this.props;\n\n // Hide the root spine: start rendering at the first real branch point.\n const topLevel = [];\n roots.forEach(r => {\n const { terminal } = compressChain(r, grameneTaxonomy || {}, grameneMaps || {});\n (terminal.children || []).forEach(cid => {\n const child = grameneTaxonomy && grameneTaxonomy[cid];\n if (child && child.leafIds && child.leafIds.length > 0) {\n topLevel.push(child);\n }\n });\n });\n\n return (\n <Modal\n show={this.props.grameneGenomes.show}\n onHide={this.handleClose.bind(this)}\n size='lg'\n >\n <Modal.Header closeButton>\n <Modal.Title>Select Genomes of Interest</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Button variant=\"outline-secondary\" onClick={this.selectAll.bind(this)}>All</Button>{' '}\n <Button variant=\"outline-secondary\" onClick={this.selectNone.bind(this)}>None</Button>\n\n {(() => {\n this._matches = this.state.query\n ? searchTaxonomy(this.state.query, grameneTaxonomy || {})\n : [];\n const matches = this._matches;\n const activeIdx = Math.min(this.state.activeIdx, Math.max(0, matches.length - 1));\n return (\n <div className=\"tax-search\">\n <input\n type=\"text\"\n className=\"tax-search-input\"\n placeholder=\"Find taxon by name or synonym…\"\n value={this.state.query}\n onChange={this.handleQueryChange.bind(this)}\n onKeyDown={this.handleSearchKeyDown.bind(this)}\n />\n {this.state.query && (\n <div className=\"tax-search-results\">\n {matches.length === 0 ? (\n <div className=\"tax-search-empty\">No matches</div>\n ) : matches.map(({ node, matched, via }, i) => {\n const rank = getRank(node);\n const count = (node.leafIds && node.leafIds.length) || 0;\n const isLeaf = !!(grameneMaps && grameneMaps[node._id]);\n const isActive = i === activeIdx;\n return (\n <div\n key={node._id}\n ref={el => { if (isActive) this._activeHitEl = el; }}\n className={\"tax-search-hit\" + (isActive ? \" tax-search-hit-active\" : \"\")}\n onMouseDown={e => e.preventDefault()}\n onMouseEnter={() => this.setState({ activeIdx: i })}\n onClick={() => this.pickMatch(node)}\n >\n <span className=\"tax-search-name\">{node.name}</span>\n {via === 'synonym' && (\n <span className=\"tax-search-syn\"> {matched} <em>syn.</em></span>\n )}\n {rank && <span className=\"tax-search-rank\"> {rank}</span>}\n {!isLeaf && (\n <span className=\"tax-search-count\"> · {count} genome{count === 1 ? '' : 's'}</span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n })()}\n\n <div className=\"tax-tree\">\n {topLevel.map(n => this.renderNode(n, 0, null))}\n </div>\n <Button onClick={this.handleClose.bind(this)}>Submit</Button>\n </Modal.Body>\n </Modal>\n );\n }\n}\n\nexport default connect(\n 'selectGrameneGenomes',\n 'selectGrameneMaps',\n 'selectGrameneTaxonomy',\n 'doUpdateGrameneGenomes',\n TaxonomyModal\n)\n","import React, { useState, Suspense } from 'react'\nimport {connect} from \"redux-bundler-react\";\nimport { Accordion, Button } from 'react-bootstrap';\nimport \"./expression.css\";\nimport Study from './Study';\nconst LazyStudy = React.lazy(() => import('./Study'));\n\nconst StudyList = props => {\n return <Accordion alwaysOpen defaultActiveKey={props.studies.length === 1 ? \"study_0\" : undefined}>\n {props.studies.map((study, idx) => {\n return (\n <Accordion.Item key={idx} eventKey={'study_'+idx}>\n <Accordion.Header>{study.description}</Accordion.Header>\n <Accordion.Body>\n {/*<Suspense fallback={<div>Loading...</div>}>*/}\n {/* <LazyStudy id={study._id}/>*/}\n {/*</Suspense>*/}\n <Study id={study._id}/>\n </Accordion.Body>\n </Accordion.Item>\n )\n })}\n </Accordion>\n};\n\nconst Expression = props => {\n let searchTaxa = {};\n if (props.grameneSearch) {\n const taxon_id_facet = props.grameneSearch.facet_counts.facet_fields.taxon_id;\n taxon_id_facet.filter((tid, idx) => idx % 2 === 0).forEach(tid => {\n if (tid > 1000000) {\n const tid2 = Math.floor(tid / 1000);\n if (props.expressionStudies[tid2]) {\n searchTaxa[tid2] = tid;\n }\n }\n else {\n searchTaxa[tid] = tid;\n }\n });\n }\n const availableTaxa = Object.keys(props.expressionStudies)\n .filter(tid => searchTaxa[tid])\n .sort((a,b) => props.grameneMaps[searchTaxa[a]].left_index - props.grameneMaps[searchTaxa[b]].left_index);\n return availableTaxa && props.grameneTaxonomy &&\n <div>\n <div>This is where you can launch a component for the selected samples. props.desiredSamples lists them.\n This component can request the data from the API\n organize samples by factor metadata? One big table with all the studies?\n <Button\n onClick={console.log(Object.keys(props.desiredSamples))}\n >Show Samples ({Object.keys(props.desiredSamples).length} selected)</Button>\n </div>\n <Accordion alwaysOpen defaultActiveKey={availableTaxa.length === 1 ? \"tax_0\" : undefined}>\n {availableTaxa.map((tid, idx) => {\n const baselineStudies = props.expressionStudies[tid].filter(study => study.type === 'Baseline');\n const n = baselineStudies.length;\n return <Accordion.Item key={idx} eventKey={'tax_'+idx}>\n <Accordion.Header>{props.grameneTaxonomy[tid].name} - {n} {n === 1 ? 'study' : 'studies'}</Accordion.Header>\n <Accordion.Body><StudyList studies={baselineStudies}/></Accordion.Body>\n </Accordion.Item>\n })}\n </Accordion>\n </div>\n};\n\nexport default connect(\n 'selectConfiguration',\n 'selectGrameneSearch',\n 'selectGrameneTaxonomy',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectDesiredSamples', // current set of samples to fetch expression data for\n Expression\n);\n","import {connect} from \"redux-bundler-react\";\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {Table, Form, Button, Alert, Spinner, Container, Row, Col, Modal} from 'react-bootstrap';\nimport { getFirebaseApp } from \"../utils\";\nimport {getAuth, onAuthStateChanged} from \"firebase/auth\";\n\nconst MAX_GENE_IDS = 1000; // Define the maximum number of gene IDs allowed\n\nconst formatCreatedAt = (value) => {\n if (!value) return '';\n const d = new Date(value);\n if (isNaN(d.getTime())) return '';\n return d.toLocaleDateString();\n};\n\nconst applySortFilter = (lists, search, sort) => {\n const s = search.trim().toLowerCase();\n let result = s\n ? lists.filter(l => (l.label || '').toLowerCase().includes(s))\n : lists.slice();\n const { key, dir } = sort;\n const mult = dir === 'asc' ? 1 : -1;\n result.sort((a, b) => {\n let av = a[key], bv = b[key];\n if (key === 'createdAt') {\n av = av ? new Date(av).getTime() : 0;\n bv = bv ? new Date(bv).getTime() : 0;\n } else if (key === 'n_genes') {\n av = av || 0;\n bv = bv || 0;\n } else {\n av = (av || '').toString().toLowerCase();\n bv = (bv || '').toString().toLowerCase();\n }\n if (av < bv) return -1 * mult;\n if (av > bv) return 1 * mult;\n return 0;\n });\n return result;\n};\n\nconst SortHeader = ({ label, sortKey, sort, onToggle }) => {\n const active = sort.key === sortKey;\n const indicator = active ? (sort.dir === 'asc' ? ' ▲' : ' ▼') : '';\n return (\n <th\n style={{ cursor: 'pointer', userSelect: 'none', position: 'sticky', top: 0, background: '#fff', zIndex: 1 }}\n onClick={() => onToggle(sortKey)}\n >\n {label}{indicator}\n </th>\n );\n};\n\nconst stickyHeaderStyle = { position: 'sticky', top: 0, background: '#fff', zIndex: 1 };\n\nconst GeneListDisplayComponent = props => {\n const [publicGeneLists, setPublicGeneLists] = useState([]);\n const [privateGeneLists, setPrivateGeneLists] = useState([]);\n const [error, setError] = useState(null);\n const [notice, setNotice] = useState(null);\n const [user, setUser] = useState({});\n const [editingId, setEditingId] = useState(null);\n const [editLabel, setEditLabel] = useState('');\n const [editIsPublic, setEditIsPublic] = useState(false);\n const [deleteTarget, setDeleteTarget] = useState(null);\n const [search, setSearch] = useState('');\n const [sort, setSort] = useState({ key: 'createdAt', dir: 'desc' });\n const auth = props.auth;\n if (auth) onAuthStateChanged(auth, (user) => setUser(user));\n\n const toggleSort = (key) => setSort(s =>\n s.key === key ? { key, dir: s.dir === 'asc' ? 'desc' : 'asc' } : { key, dir: 'asc' }\n );\n\n const currentUid = user && user.uid;\n const mergedLists = useMemo(() => {\n const byId = new Map();\n [...publicGeneLists, ...privateGeneLists].forEach(l => byId.set(l._id, l));\n return Array.from(byId.values());\n }, [publicGeneLists, privateGeneLists]);\n\n const displayedLists = useMemo(\n () => applySortFilter(mergedLists, search, sort),\n [mergedLists, search, sort]\n );\n\n const fetchPrivateGeneLists = async () => {\n if (!auth) {\n setPrivateGeneLists([]);\n setError(null);\n setNotice(null);\n return;\n }\n if (!user || typeof user.getIdToken !== 'function') {\n setPrivateGeneLists([]);\n setError(null);\n setNotice('Log in to create and manage your personal gene lists.');\n return;\n }\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=false`, {\n method: 'GET',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n const result = await response.json();\n\n if (response.ok) {\n setError(null);\n setNotice(null);\n setPrivateGeneLists(result);\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch private gene lists. Please try again later.');\n }\n };\n // Fetch saved gene lists from a backend or local storage\n const fetchPublicGeneLists = async () => {\n try {\n // Replace this with actual fetch from your backend or storage\n const response = await fetch(`${props.api}/gene_lists?site=${props.site}&isPublic=true`);\n const result = await response.json();\n\n if (response.ok) {\n setPublicGeneLists(result); // array of saved gene lists\n } else {\n setError('Error fetching gene lists.');\n }\n } catch (err) {\n setError('Failed to fetch gene lists. Please try again later.');\n }\n };\n\n // Example functions for viewing and deleting lists\n const viewGeneList = (list) => {\n props.addFilter({\n category: 'Gene List',\n fq_field: 'saved_search',\n fq_value: list.hash,\n name: list.label\n })\n };\n\n const startEdit = (list) => {\n setEditingId(list._id);\n setEditLabel(list.label || '');\n setEditIsPublic(!!list.isPublic);\n };\n\n const cancelEdit = () => {\n setEditingId(null);\n setEditLabel('');\n setEditIsPublic(false);\n };\n\n const saveEdit = async (listId) => {\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?listId=${encodeURIComponent(listId)}`, {\n method: 'PATCH',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n },\n body: JSON.stringify({ label: editLabel, isPublic: editIsPublic })\n });\n if (response.ok) {\n cancelEdit();\n setError(null);\n await fetchPrivateGeneLists();\n await fetchPublicGeneLists();\n } else if (response.status === 401) {\n setError('You must be signed in to edit a gene list.');\n } else if (response.status === 404) {\n setError('Gene list not found or you do not own it.');\n } else if (response.status === 400) {\n setError('Nothing to update — please enter a label.');\n } else {\n setError('Failed to update gene list.');\n }\n } catch (err) {\n setError('Failed to update gene list.');\n }\n };\n\n const requestDelete = (list) => setDeleteTarget(list);\n const cancelDelete = () => setDeleteTarget(null);\n\n const confirmDelete = async () => {\n if (!deleteTarget) return;\n const listId = deleteTarget._id;\n setDeleteTarget(null);\n try {\n const token = await user.getIdToken();\n const response = await fetch(`${props.api}/gene_lists?listId=${encodeURIComponent(listId)}`, {\n method: 'DELETE',\n headers: { \"Authorization\": `Bearer ${token}` }\n });\n if (response.ok) {\n await fetchPrivateGeneLists();\n await fetchPublicGeneLists();\n } else if (response.status === 401) {\n alert('You must be signed in to delete a gene list.');\n } else if (response.status === 404) {\n alert('Gene list not found or you do not own it.');\n } else {\n alert('Failed to delete gene list.');\n }\n } catch (err) {\n alert('Failed to delete gene list.');\n }\n };\n\n // Fetch data when the component is mounted or after a save\n useEffect(() => {\n fetchPublicGeneLists();\n }, [props.refreshKey]);\n useEffect(() => {\n fetchPrivateGeneLists();\n }, [user, props.refreshKey]);\n\n return (\n <div className=\"gene-list-display-component\">\n {error && (\n <Alert variant=\"danger\">\n {error}\n </Alert>\n )}\n\n {notice && (\n <Alert variant=\"info\">\n {notice}\n </Alert>\n )}\n\n {mergedLists.length > 0 ? (\n <div className=\"mt-4\">\n <div className=\"d-flex justify-content-end mb-2\">\n <Form.Control\n type=\"search\"\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{ maxWidth: 220 }}\n size=\"sm\"\n />\n </div>\n <div style={{ maxHeight: 500, overflowY: 'auto', border: '1px solid #dee2e6', borderRadius: 4 }}>\n <Table striped hover className=\"mb-0\">\n <thead>\n <tr>\n <SortHeader label=\"List Name\" sortKey=\"label\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Owner\" sortKey=\"owner\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Genes\" sortKey=\"n_genes\" sort={sort} onToggle={toggleSort} />\n <SortHeader label=\"Created\" sortKey=\"createdAt\" sort={sort} onToggle={toggleSort} />\n <th style={stickyHeaderStyle}>Actions</th>\n </tr>\n </thead>\n <tbody>\n {displayedLists.map((list, index) => {\n const isMine = currentUid && list.uid === currentUid;\n const ownerLabel = isMine ? 'You' : (list.owner || 'Unknown');\n return editingId === list._id ? (\n <tr key={index}>\n <td>\n <Form.Control\n type=\"text\"\n value={editLabel}\n onChange={(e) => setEditLabel(e.target.value)}\n placeholder=\"List name\"\n />\n <Form.Check\n type=\"switch\"\n id={`edit-public-${list._id}`}\n label=\"Public\"\n checked={editIsPublic}\n onChange={() => setEditIsPublic(!editIsPublic)}\n className=\"mt-2\"\n />\n </td>\n <td>{ownerLabel}</td>\n <td>{list.n_genes || 0}</td>\n <td>{formatCreatedAt(list.createdAt)}</td>\n <td>\n <Button variant=\"primary\" size=\"sm\" onClick={() => saveEdit(list._id)}>\n Save\n </Button>\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={cancelEdit} className=\"ml-2\">\n Cancel\n </Button>\n </td>\n </tr>\n ) : (\n <tr key={index}>\n <td>{list.label}{list.isPublic ? ' (public)' : ''}</td>\n <td>{ownerLabel}</td>\n <td>{list.n_genes || 0}</td>\n <td>{formatCreatedAt(list.createdAt)}</td>\n <td>\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={() => viewGeneList(list)}>\n View\n </Button>\n {isMine && (\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={() => startEdit(list)} className=\"ml-2\">\n Edit\n </Button>\n )}\n {isMine && (\n <Button variant=\"outline-danger\" size=\"sm\" onClick={() => requestDelete(list)} className=\"ml-2\">\n Delete\n </Button>\n )}\n </td>\n </tr>\n );\n })}\n </tbody>\n </Table>\n </div>\n </div>\n ) : (\n <Alert variant=\"warning\" className=\"mt-4\">\n No saved gene lists found.\n </Alert>\n )}\n\n <Modal show={!!deleteTarget} onHide={cancelDelete} centered>\n <Modal.Header closeButton>\n <Modal.Title>Delete gene list?</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n Are you sure you want to delete\n {deleteTarget ? <> <strong>{deleteTarget.label}</strong></> : ' this gene list'}?\n This action cannot be undone.\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={cancelDelete} autoFocus>\n Cancel\n </Button>\n <Button variant=\"danger\" onClick={confirmDelete}>\n Delete\n </Button>\n </Modal.Footer>\n </Modal>\n </div>\n );\n};\n\nconst GeneListComponent = props => {\n const [geneList, setGeneList] = useState('');\n const [listHash, setListHash] = useState(null);\n const [validationError, setValidationError] = useState([]);\n const [listName, setListName] = useState('');\n const [listIsPublic, setListIsPublic] = useState(false);\n const [validatedList, setValidatedList] = useState([]);\n const [errorMessage, setErrorMessage] = useState('');\n const [loading, setLoading] = useState(false); // New loading state\n const [user, setUser] = useState({});\n const auth = props.auth;\n if (auth) onAuthStateChanged(auth, (user) => setUser(user));\n\n // Function to handle gene list input\n const handleGeneListChange = (event) => {\n setGeneList(event.target.value);\n };\n\n // Function to handle drag and drop of gene list\n const handleDrop = (event) => {\n event.preventDefault();\n const geneData = event.dataTransfer.getData('text');\n setGeneList(geneData);\n };\n\n // Function to handle drag over (needed for drop)\n const handleDragOver = (event) => {\n event.preventDefault();\n };\n\n // Function to submit gene list for validation\n const handleSubmit = async () => {\n const geneArray = geneList.split('\\n').filter(Boolean); // Convert the gene list into an array and filter out empty values\n\n if (geneArray.length > MAX_GENE_IDS) {\n setErrorMessage(`You have exceeded the maximum limit of ${MAX_GENE_IDS} gene IDs.`);\n return;\n }\n\n setErrorMessage(''); // Reset error message if validation passes\n setLoading(true); // Set loading state to true to show progress\n\n try {\n const response = await fetch(`${props.api}/gene_lists/validate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(geneArray),\n });\n\n const result = await response.json();\n\n if (result.hash) {\n setListHash(result.hash);\n setValidatedList(result.ids);\n setValidationError(result.missing);\n } else {\n // Handle errors from validation\n alert('Error during validation.');\n }\n } catch (error) {\n alert('There was an error with the validation service.',error);\n } finally {\n setLoading(false); // Set loading to false when the request is complete\n }\n };\n\n // Function to save the validated gene list\n const handleSaveList = async () => {\n const queryParams = {\n label: listName,\n hash: listHash,\n site: props.site,\n n_genes: validatedList.length,\n isPublic: listIsPublic\n };\n const queryString = new URLSearchParams(queryParams).toString();\n\n const token = await user.getIdToken();\n try {\n const response = await fetch(`${props.api}/gene_lists?${queryString}`, {\n method: 'POST',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${token}`\n }\n });\n if (!response.ok) {\n throw new Error('Failed to save list');\n }\n const result = await response.json();\n console.log(result);\n setGeneList('');\n setListHash(null);\n setValidatedList([]);\n setValidationError([]);\n setListName('');\n setListIsPublic(false);\n if (props.onListSaved) props.onListSaved();\n\n } catch (error) {\n console.error(\"There was an problem with fetch\", error)\n }\n };\n\n return (\n <div className=\"gene-list-component\">\n <Form>\n {/* Input for Gene List */}\n <Form.Group controlId=\"geneList\">\n <Form.Label>Paste or drop your gene list here:</Form.Label>\n <Form.Control\n as=\"textarea\"\n rows={10}\n value={geneList}\n onChange={handleGeneListChange}\n placeholder={`Paste or drop your gene list here (Maximum: ${MAX_GENE_IDS} IDs)`}\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n />\n </Form.Group>\n\n {/* Display error if gene list exceeds limit */}\n {errorMessage && (\n <Alert variant=\"danger\">\n {errorMessage}\n </Alert>\n )}\n\n {/* Button to submit for validation */}\n <Button variant=\"primary\" onClick={handleSubmit}>\n Validate Gene List\n </Button>\n </Form>\n\n {/* Display validation in progress */}\n {loading && (\n <div className=\"validation-summary mt-4\">\n <h3>Validation in Progress...</h3>\n <Spinner animation=\"border\" role=\"status\">\n <span className=\"sr-only\">Validating...</span>\n </Spinner>\n </div>\n )}\n\n\n {/* Display validation summary */}\n {!loading && listHash && (\n <div className=\"validation-summary mt-3 p-3 border rounded bg-light\">\n <div>\n <span className=\"text-success\">\n <strong>{validatedList.length}</strong> valid\n </span>\n {validationError.length > 0 && (\n <div className=\"text-danger mt-1\">\n <strong>{validationError.length}</strong> not found\n </div>\n )}\n </div>\n {validationError.length > 0 && (\n <details className=\"mt-2\">\n <summary style={{cursor: 'pointer'}}>Show unrecognized IDs</summary>\n <pre className=\"small mt-2 mb-0\" style={{maxHeight: 150, overflow: 'auto'}}>\n {validationError.join('\\n')}\n </pre>\n </details>\n )}\n </div>\n )}\n\n {/* Input for saving validated gene list */}\n {!loading && validatedList.length > 0 && (\n <div className=\"save-list mt-4\">\n <Form.Group controlId=\"listName\">\n <Form.Label>Save Validated Gene List</Form.Label>\n <Form.Control\n type=\"text\"\n value={listName}\n onChange={(e) => setListName(e.target.value)}\n placeholder=\"Enter list name\"\n />\n <Form.Check\n type='switch'\n id='listIsPublic'\n label='Public'\n onChange={(e) => setListIsPublic(!listIsPublic)}\n />\n </Form.Group>\n {user ?\n <Button variant=\"primary\" onClick={handleSaveList}>\n Save Gene List\n </Button>\n : <Button variant=\"secondary\" disabled>Login Required</Button> }\n </div>\n )}\n </div>\n );\n};\n\nconst UserGeneListsComponent = props => {\n const [refreshKey, setRefreshKey] = useState(0);\n const handleListSaved = () => setRefreshKey(k => k + 1);\n const firebaseConfig = props.configuration && props.configuration.firebaseConfig;\n const auth = useMemo(() => {\n const app = getFirebaseApp(firebaseConfig);\n return app ? getAuth(app) : null;\n }, [firebaseConfig]);\n if (!auth) {\n return (\n <Alert variant=\"info\">\n User gene lists are not available on this site.\n </Alert>\n );\n }\n return (\n <Container fluid>\n <Row>\n <Col><GeneListComponent api={props.configuration.grameneData} site={props.configuration.id} auth={auth} onListSaved={handleListSaved}/></Col>\n <Col><GeneListDisplayComponent api={props.configuration.grameneData} site={props.configuration.id} auth={auth} addFilter={props.doAcceptGrameneSuggestion} refreshKey={refreshKey}/></Col>\n </Row>\n </Container>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n 'doAcceptGrameneSuggestion',\n UserGeneListsComponent\n);\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport FieldTree from './FieldTree';\nimport Preview from './Preview';\nimport ExportFooter from './ExportFooter';\nimport './styles.css';\n\nconst MIN_LEFT_PCT = 15;\nconst MAX_LEFT_PCT = 85;\n\nconst ExporterViewCmp = props => {\n const {\n fieldCatalog: catalog,\n grameneFieldCatalogIsLoading: isLoading,\n grameneFieldCatalogRaw: raw,\n grameneFieldCatalogShouldUpdate: shouldUpdate,\n doFetchGrameneFieldCatalog\n } = props;\n const [fieldQuery, setFieldQuery] = useState('');\n const [leftPct, setLeftPct] = useState(50);\n const [dragging, setDragging] = useState(false);\n const containerRef = useRef(null);\n\n useEffect(() => {\n if (shouldUpdate) doFetchGrameneFieldCatalog();\n }, [shouldUpdate, doFetchGrameneFieldCatalog]);\n\n const onPointerMove = useCallback((e) => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n const pct = ((e.clientX - rect.left) / rect.width) * 100;\n if (!Number.isFinite(pct)) return;\n setLeftPct(Math.max(MIN_LEFT_PCT, Math.min(MAX_LEFT_PCT, pct)));\n }, []);\n\n useEffect(() => {\n if (!dragging) return;\n const onUp = () => setDragging(false);\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n const prev = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n return () => {\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n document.body.style.userSelect = prev;\n };\n }, [dragging, onPointerMove]);\n\n if (!catalog || !catalog.groups) {\n const msg = isLoading ? 'Loading…' : (raw && raw.error) ? `error: ${String(raw.error)}` : 'init';\n return (\n <div className=\"exporter-view\">\n <em style={{padding: '1rem'}}>Loading field catalog… ({msg})</em>\n </div>\n );\n }\n\n const gridStyle = {\n gridTemplateColumns: `${leftPct}% 8px ${100 - leftPct}%`\n };\n\n return (\n <div className=\"exporter-view\" ref={containerRef} style={gridStyle}>\n <div className=\"exporter-pane\">\n <div className=\"exporter-pane-header exporter-pane-header-row\">\n <b>Available fields</b>\n <small style={{color: '#888', marginLeft: '0.5rem'}}>\n {Object.keys(catalog.fields).length} total\n </small>\n <input\n type=\"search\"\n className=\"form-control exporter-field-search exporter-field-search-inline\"\n placeholder=\"Search fields…\"\n value={fieldQuery}\n onChange={e => setFieldQuery(e.target.value)}\n />\n </div>\n <div className=\"exporter-pane-body\">\n <FieldTree query={fieldQuery}/>\n </div>\n </div>\n\n <div\n className={'exporter-divider' + (dragging ? ' dragging' : '')}\n onPointerDown={e => { e.preventDefault(); setDragging(true); }}\n onDoubleClick={() => setLeftPct(50)}\n role=\"separator\"\n aria-orientation=\"vertical\"\n title=\"Drag to resize · double-click to reset\"\n />\n\n <div className=\"exporter-pane exporter-right-pane\">\n <div className=\"exporter-right-split\">\n <div className=\"exporter-preview-section\">\n <Preview/>\n </div>\n <ExportFooter/>\n </div>\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectGrameneFieldCatalogIsLoading',\n 'selectGrameneFieldCatalogRaw',\n 'selectGrameneFieldCatalogShouldUpdate',\n 'doFetchGrameneFieldCatalog',\n ExporterViewCmp\n);\n","import React, { useState, useMemo } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { BsChevronDown, BsChevronRight } from 'react-icons/bs';\n\nconst MAX_VISIBLE_PER_GROUP = 200;\n\nfunction collectFieldNames(group) {\n const names = [...(group.fields || [])];\n for (const s of group.subgroups || []) names.push(...collectFieldNames(s));\n return names;\n}\n\nfunction collectMatchingFieldNames(group) {\n const names = [...(group.matchingFields || [])];\n for (const s of group.subgroups || []) names.push(...collectMatchingFieldNames(s));\n return names;\n}\n\nfunction filterGroup(group, q, catalog) {\n const matchingFields = (group.fields || []).filter(name => {\n if (!q) return true;\n const f = catalog.fields[name];\n return name.toLowerCase().includes(q) || (f && f.label.toLowerCase().includes(q));\n });\n const groupLabelMatches = q && group.label && group.label.toLowerCase().includes(q);\n const subgroups = (group.subgroups || [])\n .map(s => filterGroup(s, groupLabelMatches ? '' : q, catalog))\n .filter(s => s);\n if (!q) return { ...group, matchingFields, subgroups };\n if (groupLabelMatches) {\n return {\n ...group,\n matchingFields: group.fields || [],\n subgroups: (group.subgroups || []).map(s => filterGroup(s, '', catalog))\n };\n }\n if (matchingFields.length === 0 && subgroups.length === 0) return null;\n return { ...group, matchingFields, subgroups };\n}\n\nconst FieldRow = ({ name, catalog, selectedSet, onToggle }) => {\n const f = catalog.fields[name];\n if (!f) return null;\n const linked = f.linkedFields;\n const checked = linked\n ? linked.every(n => selectedSet.has(n))\n : selectedSet.has(name);\n return (\n <li>\n <label title={name + (f.description ? '\\n' + f.description : '')}>\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => onToggle(name)}\n />\n <span className=\"exporter-field-label\">{f.label}</span>\n {f.multiValued && <span className=\"exporter-field-badge\">[]</span>}\n </label>\n </li>\n );\n};\n\nconst GroupNode = ({ group, depth, catalog, selectedSet, onToggle, onBulkSet, openMap, setOpen, forceOpen }) => {\n const matchingNames = collectMatchingFieldNames(group);\n const total = matchingNames.length;\n const isAllLinkedSelected = (name) => {\n const f = catalog.fields[name];\n const linked = f && f.linkedFields;\n if (linked) return linked.every(n => selectedSet.has(n));\n return selectedSet.has(name);\n };\n const selectedCount = matchingNames.reduce((n, name) => n + (isAllLinkedSelected(name) ? 1 : 0), 0);\n const allSelected = total > 0 && selectedCount === total;\n const noneSelected = selectedCount === 0;\n const isOpen = forceOpen || openMap[group.id] || false;\n const visible = (group.matchingFields || []).slice(0, MAX_VISIBLE_PER_GROUP);\n const truncated = (group.matchingFields || []).length - visible.length;\n\n const expandLinked = (names) => {\n const out = [];\n for (const n of names) {\n const f = catalog.fields[n];\n if (f && f.linkedFields) out.push(...f.linkedFields);\n else out.push(n);\n }\n return out;\n };\n\n const handleBulk = (e, selected) => {\n e.stopPropagation();\n if (matchingNames.length === 0) return;\n onBulkSet(expandLinked(matchingNames), selected);\n };\n\n return (\n <div className=\"exporter-group\" style={{ marginLeft: depth > 0 ? '0.75rem' : 0 }}>\n <div className=\"exporter-group-header\" onClick={() => setOpen(group.id, !isOpen)}>\n <span className=\"exporter-group-chevron\">\n {isOpen ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n <b>{group.label}</b>\n <span className=\"exporter-group-actions\">\n <button\n type=\"button\"\n className=\"exporter-group-action\"\n disabled={allSelected || total === 0}\n onClick={e => handleBulk(e, true)}\n title=\"Select all fields in this group\"\n >All</button>\n <button\n type=\"button\"\n className=\"exporter-group-action\"\n disabled={noneSelected}\n onClick={e => handleBulk(e, false)}\n title=\"Deselect all fields in this group\"\n >None</button>\n </span>\n <span className=\"exporter-group-count\">{selectedCount}/{total}</span>\n </div>\n {isOpen && (\n <>\n {(group.subgroups || []).map(sub => (\n <GroupNode\n key={sub.id}\n group={sub}\n depth={depth + 1}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={onToggle}\n onBulkSet={onBulkSet}\n openMap={openMap}\n setOpen={setOpen}\n forceOpen={forceOpen}\n />\n ))}\n {visible.length > 0 && (\n <ul className=\"exporter-group-fields\">\n {visible.map(name => (\n <FieldRow\n key={name}\n name={name}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={onToggle}\n />\n ))}\n {truncated > 0 && (\n <li className=\"exporter-group-truncated\">\n <em>… {truncated} more. Refine search to see.</em>\n </li>\n )}\n </ul>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst FieldTreeCmp = props => {\n const { fieldCatalog: catalog, exporterSelectedFields, doToggleExporterField, doBulkSetExporterFields, query = '' } = props;\n const [openMap, setOpenMap] = useState({});\n\n const selectedSet = useMemo(() => new Set(exporterSelectedFields), [exporterSelectedFields]);\n\n const handleToggle = (name) => {\n const f = catalog && catalog.fields && catalog.fields[name];\n const linked = f && f.linkedFields;\n if (linked) {\n const allSelected = linked.every(n => selectedSet.has(n));\n doBulkSetExporterFields(linked, !allSelected);\n } else {\n doToggleExporterField(name);\n }\n };\n\n const q = query.trim().toLowerCase();\n\n const filtered = useMemo(() => {\n if (!catalog || !catalog.groups) return [];\n return catalog.groups\n .map(g => filterGroup(g, q, catalog))\n .filter(g => g && ((g.matchingFields && g.matchingFields.length) || (g.subgroups && g.subgroups.length)));\n }, [catalog, q]);\n\n if (!catalog || !catalog.groups) {\n return <div className=\"exporter-panel-empty\">Loading field catalog…</div>;\n }\n\n const setOpen = (id, val) => setOpenMap(s => ({ ...s, [id]: val }));\n const forceOpen = !!q;\n\n return (\n <div className=\"exporter-field-tree\">\n <div className=\"exporter-field-tree-body\">\n {filtered.map(group => (\n <GroupNode\n key={group.id}\n group={group}\n depth={0}\n catalog={catalog}\n selectedSet={selectedSet}\n onToggle={handleToggle}\n onBulkSet={doBulkSetExporterFields}\n openMap={openMap}\n setOpen={setOpen}\n forceOpen={forceOpen}\n />\n ))}\n {filtered.length === 0 && (\n <div className=\"exporter-panel-empty\">No fields match \"{query}\".</div>\n )}\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExporterSelectedFields',\n 'doToggleExporterField',\n 'doBulkSetExporterFields',\n FieldTreeCmp\n);\n","import React, { useEffect, useMemo, useState, useRef } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { BsArrowLeftShort, BsArrowRightShort, BsSliders } from 'react-icons/bs';\nimport { buildTableData, toJSON } from './formatters';\nimport { ANCESTOR_FIELD_MAP, collectAncestorIds } from './ancestorsResolver';\nimport CutoffsModal from './CutoffsModal';\n\nconst PreviewCmp = props => {\n const {\n fieldCatalog: catalog,\n exporterSelectedFields: fields,\n exporterFormat: format,\n exporterPreview: preview,\n expressionStudies,\n expressionSamples,\n grameneTaxonomy,\n gramenePathways,\n ontologies,\n exporterCutoffs,\n doSetExporterFormat,\n doReorderExporterFields,\n doClearExporterFields,\n doSetExporterCutoffs,\n doEnsureOntologyRecords,\n doRequestGramenePathways\n } = props;\n\n const [showCutoffs, setShowCutoffs] = useState(false);\n const docs = preview.data || [];\n\n const ancestorFieldsSelected = useMemo(\n () => fields.filter(n => ANCESTOR_FIELD_MAP[n]),\n [fields]\n );\n\n useEffect(() => {\n if (ancestorFieldsSelected.length === 0 || docs.length === 0) return;\n const idsByOnt = collectAncestorIds(docs, ancestorFieldsSelected);\n for (const [ontKey, ids] of Object.entries(idsByOnt)) {\n if (!ids.length) continue;\n if (ontKey === 'taxonomy') continue; // already cached globally\n if (ontKey === 'pathways') {\n if (doRequestGramenePathways) doRequestGramenePathways(ids);\n continue;\n }\n if (doEnsureOntologyRecords) doEnsureOntologyRecords(ontKey, ids);\n }\n }, [docs, ancestorFieldsSelected, doEnsureOntologyRecords, doRequestGramenePathways]);\n\n if (fields.length === 0) {\n return (\n <div className=\"exporter-preview-empty\">\n <em>Select at least one field to preview.</em>\n </div>\n );\n }\n\n const renderStatus = () => {\n if (preview.status === 'loading') return <small className=\"exporter-preview-status\">Loading…</small>;\n if (preview.status === 'error') return <small className=\"exporter-preview-status error\">Error: {preview.error}</small>;\n if (preview.status === 'stale') return <small className=\"exporter-preview-status\">Refreshing…</small>;\n if (preview.status === 'idle') return <small className=\"exporter-preview-status\">Idle</small>;\n return null;\n };\n\n const resolverCtx = {\n expressionStudies,\n expressionSamples,\n taxonomy: grameneTaxonomy,\n pathways: gramenePathways,\n ontologies,\n cutoffs: exporterCutoffs\n };\n\n const moveField = (name, delta) => {\n const idx = fields.indexOf(name);\n if (idx === -1) return;\n const target = idx + delta;\n if (target < 0 || target >= fields.length) return;\n const next = [...fields];\n [next[idx], next[target]] = [next[target], next[idx]];\n doReorderExporterFields(next);\n };\n\n return (\n <div className=\"exporter-preview\">\n <div className=\"exporter-preview-toolbar\">\n <span className=\"exporter-preview-title\"><b>Preview</b> (first 20 genes)</span>\n <span className=\"exporter-preview-fields-count\">\n {fields.length} field{fields.length === 1 ? '' : 's'}\n {fields.length > 0 && (\n <button\n className=\"btn btn-sm btn-link exporter-clear-btn\"\n onClick={doClearExporterFields}\n >clear</button>\n )}\n </span>\n <span className=\"exporter-preview-format\">\n <label>\n <input\n type=\"radio\"\n name=\"exporter-format\"\n value=\"tsv\"\n checked={format === 'tsv'}\n onChange={() => doSetExporterFormat('tsv')}\n /> TSV\n </label>\n <label>\n <input\n type=\"radio\"\n name=\"exporter-format\"\n value=\"json\"\n checked={format === 'json'}\n onChange={() => doSetExporterFormat('json')}\n /> JSON\n </label>\n </span>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-light exporter-cutoffs-btn\"\n onClick={() => setShowCutoffs(true)}\n title=\"Expression cutoffs\"\n >\n <BsSliders/> Cutoffs\n </button>\n {renderStatus()}\n </div>\n {showCutoffs && (\n <CutoffsModal\n cutoffs={exporterCutoffs}\n onApply={doSetExporterCutoffs}\n onClose={() => setShowCutoffs(false)}\n />\n )}\n <div className=\"exporter-preview-body\">\n {format === 'tsv' ? (\n <TSVTable\n docs={docs}\n fields={fields}\n catalog={catalog}\n resolverCtx={resolverCtx}\n onMoveField={moveField}\n />\n ) : (\n <pre className=\"exporter-preview-json\">{toJSON(docs, fields, resolverCtx)}</pre>\n )}\n </div>\n </div>\n );\n};\n\nconst MIN_COL_WIDTH = 40;\n\nconst TSVTable = ({ docs, fields, catalog, resolverCtx, onMoveField }) => {\n const { header, headerKeys, rows } = buildTableData(docs, fields, catalog, resolverCtx);\n const reorderableCount = fields.length;\n const [colWidths, setColWidths] = useState({});\n const thRefs = useRef({});\n\n const startResize = (key) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n const th = thRefs.current[key];\n const startWidth = (th && th.getBoundingClientRect().width) || 100;\n const startX = e.clientX;\n const onMove = (ev) => {\n const delta = ev.clientX - startX;\n const next = Math.max(MIN_COL_WIDTH, startWidth + delta);\n setColWidths(prev => ({ ...prev, [key]: next }));\n };\n const onUp = () => {\n window.removeEventListener('pointermove', onMove);\n window.removeEventListener('pointerup', onUp);\n window.removeEventListener('pointercancel', onUp);\n document.body.style.userSelect = '';\n };\n document.body.style.userSelect = 'none';\n window.addEventListener('pointermove', onMove);\n window.addEventListener('pointerup', onUp);\n window.addEventListener('pointercancel', onUp);\n };\n\n return (\n <div className=\"exporter-preview-tsv-scroll\">\n <table className=\"exporter-preview-tsv\">\n <thead>\n <tr>\n {header.map((h, i) => {\n const key = headerKeys[i];\n const fieldIdx = fields.indexOf(key);\n const reorderable = fieldIdx !== -1;\n const w = colWidths[key];\n const thStyle = w ? { width: `${w}px`, maxWidth: `${w}px`, minWidth: `${w}px` } : undefined;\n return (\n <th key={key} title={key} style={thStyle} ref={el => { thRefs.current[key] = el; }}>\n <div className=\"exporter-preview-th-inner\">\n <button\n type=\"button\"\n className=\"exporter-preview-reorder-btn\"\n disabled={!reorderable || fieldIdx === 0}\n onClick={() => onMoveField(key, -1)}\n title=\"Move left\"\n ><BsArrowLeftShort/></button>\n <span className=\"exporter-preview-th-label\">{h}</span>\n <button\n type=\"button\"\n className=\"exporter-preview-reorder-btn\"\n disabled={!reorderable || fieldIdx === reorderableCount - 1}\n onClick={() => onMoveField(key, 1)}\n title=\"Move right\"\n ><BsArrowRightShort/></button>\n </div>\n <span\n className=\"exporter-preview-col-resizer\"\n onPointerDown={startResize(key)}\n onDoubleClick={() => setColWidths(prev => { const n = { ...prev }; delete n[key]; return n; })}\n title=\"Drag to resize · double-click to reset\"\n />\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, r) => (\n <tr key={r}>\n {row.map((c, i) => {\n const key = headerKeys[i];\n const w = colWidths[key];\n const tdStyle = w ? { width: `${w}px`, maxWidth: `${w}px`, minWidth: `${w}px` } : undefined;\n return (\n <td key={key} title={c} style={tdStyle}>{c}</td>\n );\n })}\n </tr>\n ))}\n {rows.length === 0 && (\n <tr>\n <td colSpan={header.length} className=\"exporter-preview-empty-row\">\n <em>No rows.</em>\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExporterSelectedFields',\n 'selectExporterFormat',\n 'selectExporterPreview',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneTaxonomy',\n 'selectGramenePathways',\n 'selectOntologies',\n 'selectExporterCutoffs',\n 'doSetExporterFormat',\n 'doReorderExporterFields',\n 'doClearExporterFields',\n 'doSetExporterCutoffs',\n 'doEnsureOntologyRecords',\n 'doRequestGramenePathways',\n PreviewCmp\n);\n","import React, { useState, useEffect } from 'react';\n\nconst parseNumberOrNull = (v) => {\n if (v === '' || v === null || v === undefined) return null;\n const n = +v;\n return Number.isFinite(n) ? n : null;\n};\n\nconst CutoffsModal = ({ cutoffs, onApply, onClose }) => {\n const [exprMinTPM, setExprMinTPM] = useState(\n cutoffs && cutoffs.exprMinTPM != null ? String(cutoffs.exprMinTPM) : ''\n );\n const [diffMaxPval, setDiffMaxPval] = useState(\n cutoffs && cutoffs.diffMaxPval != null ? String(cutoffs.diffMaxPval) : ''\n );\n\n useEffect(() => {\n const onKey = (e) => { if (e.key === 'Escape') onClose(); };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [onClose]);\n\n const apply = () => {\n onApply({\n exprMinTPM: parseNumberOrNull(exprMinTPM),\n diffMaxPval: parseNumberOrNull(diffMaxPval)\n });\n onClose();\n };\n\n return (\n <div className=\"exporter-modal-backdrop\" onClick={onClose}>\n <div className=\"exporter-modal\" onClick={e => e.stopPropagation()} role=\"dialog\" aria-modal=\"true\">\n <div className=\"exporter-modal-header\">\n <b>Expression cutoffs</b>\n <button type=\"button\" className=\"exporter-modal-close\" onClick={onClose} aria-label=\"Close\">×</button>\n </div>\n <div className=\"exporter-modal-body\">\n <div className=\"exporter-modal-field\">\n <label>\n Minimum TPM (gene expression)\n <input\n type=\"number\"\n step=\"0.1\"\n min=\"0\"\n value={exprMinTPM}\n onChange={e => setExprMinTPM(e.target.value)}\n placeholder=\"no minimum\"\n />\n </label>\n <small>Exclude expression rows with TPM below this value. Blank disables the cutoff.</small>\n </div>\n <div className=\"exporter-modal-field\">\n <label>\n Maximum p-value (differential expression)\n <input\n type=\"number\"\n step=\"0.001\"\n min=\"0\"\n max=\"1\"\n value={diffMaxPval}\n onChange={e => setDiffMaxPval(e.target.value)}\n placeholder=\"no maximum\"\n />\n </label>\n <small>Exclude diff-expression contrasts with p-value above this. Blank disables the cutoff.</small>\n </div>\n </div>\n <div className=\"exporter-modal-footer\">\n <button type=\"button\" className=\"btn btn-sm btn-link\" onClick={onClose}>Cancel</button>\n <button type=\"button\" className=\"btn btn-sm btn-primary\" onClick={apply}>Apply</button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default CutoffsModal;\n","import React from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Modal, Button, ProgressBar } from 'react-bootstrap';\n\nconst ExportFooterCmp = props => {\n const {\n exporterSelectedFields,\n exporterFormat,\n exporterDownload: dl,\n doStartExporterDownload,\n doCancelExporterDownload,\n doResetExporterDownload\n } = props;\n\n const inFlight = dl.status === 'preparing' || dl.status === 'downloading';\n const pct = dl.total > 0\n ? Math.min(100, Math.round((dl.progress / dl.total) * 100))\n : 0;\n\n const canStart = !inFlight && exporterSelectedFields.length > 0;\n\n return (\n <>\n <div className=\"exporter-footer\">\n <div className=\"exporter-footer-summary\">\n <small>\n {exporterSelectedFields.length} field{exporterSelectedFields.length === 1 ? '' : 's'} selected\n · format: <b>{exporterFormat.toUpperCase()}</b>\n </small>\n </div>\n <Button\n variant=\"primary\"\n size=\"sm\"\n disabled={!canStart}\n onClick={doStartExporterDownload}\n >\n Download {exporterFormat.toUpperCase()}\n </Button>\n </div>\n\n <Modal show={dl.status !== 'idle'} onHide={doResetExporterDownload} centered backdrop=\"static\">\n <Modal.Header closeButton={!inFlight}>\n <Modal.Title>\n {dl.status === 'preparing' && 'Preparing export…'}\n {dl.status === 'downloading' && 'Exporting…'}\n {dl.status === 'done' && 'Export complete'}\n {dl.status === 'cancelled' && 'Export cancelled'}\n {dl.status === 'error' && 'Export failed'}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {inFlight && (\n <>\n <ProgressBar\n now={pct}\n label={dl.total > 0 ? `${dl.progress.toLocaleString()} / ${dl.total.toLocaleString()}` : 'Counting…'}\n striped\n animated\n />\n <div style={{ marginTop: '0.5rem', fontSize: '0.85rem', color: '#666' }}>\n Fetching genes in pages of 1000. This may take a while for large result sets.\n </div>\n </>\n )}\n {dl.status === 'done' && (\n <div>\n Wrote <b>{dl.progress.toLocaleString()}</b> genes to disk.\n </div>\n )}\n {dl.status === 'cancelled' && (\n <div>\n Stopped at <b>{dl.progress.toLocaleString()}</b> / {dl.total.toLocaleString()} genes. No file was saved.\n </div>\n )}\n {dl.status === 'error' && (\n <div className=\"text-danger\">{dl.error}</div>\n )}\n </Modal.Body>\n <Modal.Footer>\n {inFlight ? (\n <Button variant=\"outline-secondary\" size=\"sm\" onClick={doCancelExporterDownload}>\n Cancel\n </Button>\n ) : (\n <Button variant=\"secondary\" size=\"sm\" onClick={doResetExporterDownload}>\n Close\n </Button>\n )}\n </Modal.Footer>\n </Modal>\n </>\n );\n};\n\nexport default connect(\n 'selectExporterSelectedFields',\n 'selectExporterFormat',\n 'selectExporterDownload',\n 'doStartExporterDownload',\n 'doCancelExporterDownload',\n 'doResetExporterDownload',\n ExportFooterCmp\n);\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Tabs, Tab, Button, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\nimport FieldsModal from './FieldsModal';\nimport ExprTable from './ExprTable';\nimport ParallelCoordsPlot from './ParallelCoordsPlot';\nimport './styles.css';\n\nfunction speciesTaxonId(tid) {\n const n = +tid;\n return n > 1000000 ? Math.floor(n / 1000) : n;\n}\n\nfunction genomeName(grameneMaps, tid) {\n if (!grameneMaps) return tid;\n const direct = grameneMaps[tid];\n if (direct && direct.display_name) return direct.display_name;\n const sp = grameneMaps[speciesTaxonId(tid)];\n if (sp && sp.display_name) return sp.display_name;\n return tid;\n}\n\nconst ExprVizViewCmp = props => {\n const {\n exprVizPivot: pivot,\n exprViz,\n exprVizActiveTaxon: activeTaxon,\n grameneMaps,\n expressionStudies,\n expressionSamples,\n doSetExprVizActiveTaxon,\n doToggleExprVizFieldsModal,\n doFetchExprVizData\n } = props;\n\n const studiesFor = tid => {\n if (!expressionStudies) return [];\n return expressionStudies[tid] || expressionStudies[speciesTaxonId(tid)] || [];\n };\n\n const taxa = useMemo(() => {\n const ids = Object.keys(pivot.data || {});\n if (!grameneMaps) return ids;\n return ids.sort((a, b) => {\n const ma = grameneMaps[a] || grameneMaps[speciesTaxonId(a)];\n const mb = grameneMaps[b] || grameneMaps[speciesTaxonId(b)];\n return ((ma && ma.left_index) || 0) - ((mb && mb.left_index) || 0);\n });\n }, [pivot.data, grameneMaps]);\n\n useEffect(() => {\n if (taxa.length === 0) return;\n if (!activeTaxon || !taxa.includes(String(activeTaxon))) {\n doSetExprVizActiveTaxon(taxa[0]);\n }\n }, [taxa, activeTaxon, doSetExprVizActiveTaxon]);\n\n if (pivot.status === 'loading') {\n return <div className=\"exprviz-view\"><em>Loading studies…</em></div>;\n }\n if (pivot.status === 'error') {\n return <div className=\"exprviz-view\"><em>Error: {pivot.error}</em></div>;\n }\n if (taxa.length === 0) {\n return <div className=\"exprviz-view\"><em>No expression studies for current results.</em></div>;\n }\n\n return (\n <div className=\"exprviz-view\">\n <Tabs\n activeKey={activeTaxon || taxa[0]}\n onSelect={k => doSetExprVizActiveTaxon(k)}\n className=\"exprviz-tabs\"\n >\n {taxa.map(tid => {\n const studies = studiesFor(tid);\n const taxName = genomeName(grameneMaps, tid);\n const geneCount = pivot.data[tid] || 0;\n return (\n <Tab\n key={tid}\n eventKey={tid}\n title={`${taxName} (${studies.length} studies · ${geneCount} genes)`}\n >\n <TaxonPanel\n taxon={tid}\n studies={studies}\n expressionSamples={expressionSamples}\n tabState={exprViz.byTaxon[tid]}\n onOpenFields={() => doToggleExprVizFieldsModal(tid, true)}\n onLoad={() => doFetchExprVizData(tid)}\n onReorder={(next) => props.doReorderExprVizFields(tid, next)}\n onAddRangeQuery={props.doAddGrameneRangeQuery}\n />\n </Tab>\n );\n })}\n </Tabs>\n <FieldsModal/>\n </div>\n );\n};\n\nfunction rowMatchesSelections(row, selections) {\n for (const f of Object.keys(selections)) {\n const v = row[f];\n if (v == null || Array.isArray(v)) return false;\n const n = +v;\n if (!Number.isFinite(n)) return false;\n const [lo, hi] = selections[f];\n if (n < lo || n > hi) return false;\n }\n return true;\n}\n\nfunction fmt(n) {\n if (!Number.isFinite(n)) return String(n);\n const a = Math.abs(n);\n if (a !== 0 && (a < 0.001 || a >= 1e6)) return n.toExponential(3);\n return Number(n.toFixed(4)).toString();\n}\n\nfunction tsvCell(v) {\n if (v == null) return '';\n if (Array.isArray(v)) return v.join(',');\n const s = typeof v === 'object' ? JSON.stringify(v) : String(v);\n return s.replace(/[\\t\\r\\n]+/g, ' ');\n}\n\nfunction downloadTsv(filename, rows, fields) {\n const cols = ['id', 'name', ...fields];\n const headerLabels = ['id', 'name', ...fields.map(f => f.replace(/__expr$/, ''))];\n const lines = [headerLabels.join('\\t')];\n for (const r of rows) lines.push(cols.map(c => tsvCell(r[c])).join('\\t'));\n const blob = new Blob([lines.join('\\n') + '\\n'], { type: 'text/tab-separated-values' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n\nconst TaxonPanel = ({ taxon, studies, expressionSamples, tabState, onOpenFields, onLoad, onReorder, onAddRangeQuery }) => {\n const selected = (tabState && tabState.selectedFields) || [];\n const rows = (tabState && tabState.rows) || [];\n const fetchInfo = (tabState && tabState.fetch) || { status: 'idle', total: 0 };\n const [scale, setScale] = useState('linear');\n const [selections, setSelections] = useState({});\n const [clearVersion, setClearVersion] = useState(0);\n const [hoveredId, setHoveredId] = useState(null);\n\n const hasBrush = Object.keys(selections).length > 0;\n const filteredRows = useMemo(() => {\n if (!hasBrush) return rows;\n return rows.filter(r => rowMatchesSelections(r, selections));\n }, [rows, selections, hasBrush]);\n\n // Drop fields with no numeric data in the loaded rows so empty axes/columns\n // don't clutter the visualization. Selected-but-empty fields stay in the\n // underlying selection so a future load can repopulate them.\n const visibleFields = useMemo(() => {\n if (rows.length === 0 || selected.length === 0) return selected;\n return selected.filter(f => rows.some(r => {\n const v = r[f];\n return v != null && !Array.isArray(v) && Number.isFinite(+v);\n }));\n }, [rows, selected]);\n\n const handleReorder = onReorder\n ? (newVisibleOrder) => {\n const visibleSet = new Set(newVisibleOrder);\n const hidden = selected.filter(f => !visibleSet.has(f));\n onReorder([...newVisibleOrder, ...hidden]);\n }\n : undefined;\n\n useEffect(() => {\n if (rows.length === 0 && hasBrush) {\n setSelections({});\n setClearVersion(v => v + 1);\n }\n }, [rows.length, hasBrush]);\n\n return (\n <div className=\"exprviz-tab-panel\">\n <div className=\"exprviz-toolbar\">\n <Button size=\"sm\" onClick={onOpenFields}>\n Select fields ({selected.length} selected, {studies.length} studies)\n </Button>\n <Button\n size=\"sm\"\n variant=\"primary\"\n disabled={selected.length === 0 || fetchInfo.status === 'loading'}\n onClick={onLoad}\n >\n {fetchInfo.status === 'loading' ? 'Loading…' : 'Load data'}\n </Button>\n <ToggleButtonGroup\n type=\"radio\"\n name={`exprviz-scale-${taxon}`}\n size=\"sm\"\n value={scale}\n onChange={setScale}\n >\n <ToggleButton id={`exprviz-scale-${taxon}-lin`} value=\"linear\" variant=\"outline-secondary\">Linear</ToggleButton>\n <ToggleButton id={`exprviz-scale-${taxon}-log`} value=\"log\" variant=\"outline-secondary\">Log</ToggleButton>\n </ToggleButtonGroup>\n <Button\n size=\"sm\"\n variant=\"outline-secondary\"\n disabled={!hasBrush}\n onClick={() => { setClearVersion(v => v + 1); setSelections({}); }}\n >\n Clear brushes\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline-secondary\"\n disabled={filteredRows.length === 0 || visibleFields.length === 0}\n onClick={() => downloadTsv(`expression_${taxon}.tsv`, filteredRows, visibleFields)}\n title=\"Download the visible rows and columns as tab-delimited text\"\n >\n Download TSV\n </Button>\n <Button\n size=\"sm\"\n variant=\"success\"\n disabled={!hasBrush || !onAddRangeQuery}\n onClick={() => {\n const terms = Object.keys(selections).map(field => {\n const [lo, hi] = selections[field];\n return {\n category: 'Expression',\n name: `${field}: ${fmt(lo)}–${fmt(hi)}`,\n fq_field: field,\n fq_value: `[${lo} TO ${hi}]`\n };\n });\n onAddRangeQuery(terms);\n }}\n title=\"Add brush ranges as an AND-conjunction filter on the search\"\n >\n Apply as filter\n </Button>\n <span className=\"exprviz-status\">\n {hasBrush ? `${filteredRows.length} of ${rows.length}` : rows.length}\n {fetchInfo.total ? ` / ${fetchInfo.total}` : ''} genes\n {hasBrush ? ' (brushed)' : ' loaded'}\n </span>\n </div>\n <div className=\"exprviz-body\">\n <div className=\"exprviz-plot\">\n <ParallelCoordsPlot\n rows={rows}\n fields={visibleFields}\n scale={scale}\n onBrushChange={setSelections}\n onReorder={handleReorder}\n clearVersion={clearVersion}\n hoveredId={hoveredId}\n />\n </div>\n <div className=\"exprviz-table\">\n <ExprTable\n rows={filteredRows}\n fields={visibleFields}\n onReorder={handleReorder}\n studies={studies}\n expressionSamples={expressionSamples}\n onHoverRow={setHoveredId}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default connect(\n 'selectExprViz',\n 'selectExprVizPivot',\n 'selectExprVizActiveTaxon',\n 'selectGrameneMaps',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'doSetExprVizActiveTaxon',\n 'doToggleExprVizFieldsModal',\n 'doFetchExprVizData',\n 'doReorderExprVizFields',\n 'doAddGrameneRangeQuery',\n ExprVizViewCmp\n);\n","import React, { useState, useMemo, useEffect } from 'react';\nimport { connect } from 'redux-bundler-react';\nimport { Modal, Button, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\n\nfunction speciesTaxonId(tid) {\n const n = +tid;\n return n > 1000000 ? Math.floor(n / 1000) : n;\n}\n\nconst EXPERIMENT_KEYS = [\n { key: 'exp:study', label: 'Study' },\n { key: 'exp:type', label: 'Study type' },\n { key: 'exp:organism', label: 'Organism' }\n];\n\n// One record per expression field (one sample group within one study).\n// `props` is a flat map of property-key → value used for filtering and display.\nfunction buildFieldRecords(taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps) {\n const records = [];\n const factorTypes = new Set();\n const charTypes = new Set();\n if (!expressionSamples || !expressionStudies) return { records, factorTypes: [], charTypes: [] };\n\n const studyById = {};\n const list = expressionStudies[taxon] || expressionStudies[speciesTaxonId(taxon)] || [];\n list.forEach(s => { studyById[s._id] = s; });\n\n for (const studyId of studyIds) {\n const study = studyById[studyId];\n if (!study) continue;\n const samples = expressionSamples[studyId];\n if (!samples) continue;\n\n const byGroup = {};\n for (const s of samples) if (!byGroup[s.group]) byGroup[s.group] = s;\n\n for (const group of Object.keys(byGroup)) {\n const sample = byGroup[group];\n const fieldName = `${studyId.replace(/-/g, '_')}_${group}__expr`;\n if (fieldCatalog && fieldCatalog.fields && !fieldCatalog.fields[fieldName]) continue;\n\n const props = {};\n props['exp:study'] = study.description || studyId;\n props['exp:type'] = study.type || '(unknown)';\n const taxon_id = study.taxon_id;\n const taxName = grameneMaps && (grameneMaps[taxon_id] || grameneMaps[speciesTaxonId(taxon_id)]);\n props['exp:organism'] = (taxName && taxName.display_name) || String(taxon_id);\n\n const usedFactorTypes = new Set();\n (sample.factor || []).forEach(f => {\n props[`fac:${f.type}`] = f.label;\n factorTypes.add(f.type);\n usedFactorTypes.add(f.type);\n });\n (sample.characteristic || []).forEach(c => {\n if (usedFactorTypes.has(c.type)) return; // factor takes precedence\n props[`char:${c.type}`] = c.label;\n charTypes.add(c.type);\n });\n\n records.push({ fieldName, studyId, group, props });\n }\n }\n return {\n records,\n factorTypes: Array.from(factorTypes).sort(),\n charTypes: Array.from(charTypes).sort()\n };\n}\n\nfunction fieldMatches(field, selections, excludeKey) {\n for (const key of Object.keys(selections)) {\n if (key === excludeKey) continue;\n const values = selections[key];\n if (!values || values.size === 0) continue;\n const v = field.props[key];\n if (v == null || !values.has(v)) return false;\n }\n return true;\n}\n\nfunction valueCounts(records, key, selections) {\n const counts = new Map();\n for (const f of records) {\n if (!fieldMatches(f, selections, key)) continue;\n const v = f.props[key];\n if (v == null) continue;\n counts.set(v, (counts.get(v) || 0) + 1);\n }\n return counts;\n}\n\nfunction labelForKey(key, tree) {\n for (const grp of tree) {\n for (const t of grp.types) if (t.key === key) return t.label;\n }\n return key;\n}\n\nconst FieldsModalCmp = props => {\n const {\n fieldCatalog,\n exprViz,\n expressionStudies,\n expressionSamples,\n grameneMaps,\n doToggleExprVizFieldsModal,\n doSetExprVizFields,\n doFetchExprVizFieldExistence\n } = props;\n\n const taxon = Object.keys(exprViz.byTaxon).find(t => exprViz.byTaxon[t].fieldsModalOpen);\n const open = !!taxon;\n const availableAttrs = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].availableAttrs;\n\n const studyIds = useMemo(() => {\n if (!taxon || !expressionStudies) return [];\n const list = expressionStudies[taxon] || expressionStudies[speciesTaxonId(taxon)] || [];\n let ids = list.map(s => s._id);\n if (availableAttrs) {\n const allow = new Set(availableAttrs);\n ids = ids.filter(id => allow.has(id));\n }\n return ids;\n }, [taxon, expressionStudies, availableAttrs]);\n\n const allRecords = useMemo(\n () => buildFieldRecords(taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps),\n [taxon, studyIds, expressionStudies, expressionSamples, fieldCatalog, grameneMaps]\n );\n\n const candidateFields = useMemo(\n () => allRecords.records.map(r => r.fieldName),\n [allRecords]\n );\n\n // Trigger the field-existence facet check whenever the modal is open and\n // the candidate field list is known. The bundle caches per (q, taxon, fields).\n useEffect(() => {\n if (open && taxon && candidateFields.length > 0) {\n doFetchExprVizFieldExistence(taxon, candidateFields);\n }\n }, [open, taxon, candidateFields, doFetchExprVizFieldExistence]);\n\n const fieldExistence = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].fieldExistence;\n const existenceStatus = taxon && exprViz.byTaxon[taxon] && exprViz.byTaxon[taxon].existenceStatus;\n\n // Once existence counts are loaded, drop fields with no data in the current\n // result set. Until then, render with the full candidate set so the modal\n // doesn't flash empty during the precheck.\n const { records, factorTypes, charTypes } = useMemo(() => {\n if (!fieldExistence) return allRecords;\n const live = new Set(Object.keys(fieldExistence).filter(f => fieldExistence[f] > 0));\n const filtered = allRecords.records.filter(r => live.has(r.fieldName));\n const factorTypes = new Set();\n const charTypes = new Set();\n for (const r of filtered) {\n for (const k of Object.keys(r.props)) {\n if (k.startsWith('fac:')) factorTypes.add(k.slice(4));\n else if (k.startsWith('char:')) charTypes.add(k.slice(5));\n }\n }\n return {\n records: filtered,\n factorTypes: Array.from(factorTypes).sort(),\n charTypes: Array.from(charTypes).sort()\n };\n }, [allRecords, fieldExistence]);\n\n const propTree = useMemo(() => [\n { group: 'experiment', label: 'Experiment', types: EXPERIMENT_KEYS },\n { group: 'factors', label: 'Factors', types: factorTypes.map(t => ({ key: `fac:${t}`, label: t })) },\n { group: 'characteristics', label: 'Characteristics', types: charTypes.map(t => ({ key: `char:${t}`, label: t })) }\n ], [factorTypes, charTypes]);\n\n const [selections, setSelections] = useState({});\n const [expandedKey, setExpandedKey] = useState(null);\n const [collapsedGroups, setCollapsedGroups] = useState({});\n const [valueSort, setValueSort] = useState('count');\n const [orderedSelectedKeys, setOrderedSelectedKeys] = useState([]);\n const [searchQuery, setSearchQuery] = useState('');\n const searchLc = searchQuery.trim().toLowerCase();\n const isSearching = searchLc.length > 0;\n\n // Distinct values per property type, ignoring the type's own selection but\n // applying every other selected type. Counts shown next to a property type\n // reflect \"how many distinct values exist among the fields currently\n // matching the rest of the filter.\"\n const valueSetByKey = useMemo(() => {\n const allKeys = new Set();\n for (const r of records) for (const k of Object.keys(r.props)) allKeys.add(k);\n const m = {};\n for (const key of allKeys) {\n const set = new Set();\n for (const r of records) {\n if (!fieldMatches(r, selections, key)) continue;\n const v = r.props[key];\n if (v != null) set.add(v);\n }\n m[key] = set;\n }\n return m;\n }, [records, selections]);\n\n // Reset state when modal (re)opens for a taxon.\n useEffect(() => {\n if (open && taxon) {\n setSelections({});\n setExpandedKey(null);\n setCollapsedGroups({});\n setOrderedSelectedKeys([]);\n setSearchQuery('');\n }\n }, [open, taxon]);\n\n // Keep orderedSelectedKeys in sync with selections (preserves the order in\n // which the user first selected each property type).\n useEffect(() => {\n setOrderedSelectedKeys(prev => {\n const active = Object.keys(selections);\n const activeSet = new Set(active);\n const kept = prev.filter(k => activeSet.has(k));\n const newOnes = active.filter(k => !prev.includes(k));\n return [...kept, ...newOnes];\n });\n }, [selections]);\n\n const matchingFields = useMemo(\n () => records.filter(r => fieldMatches(r, selections, null)),\n [records, selections]\n );\n\n if (!open) return null;\n\n const toggleValue = (key, value) => {\n setSelections(prev => {\n const next = { ...prev };\n const set = new Set(next[key] || []);\n if (set.has(value)) set.delete(value); else set.add(value);\n if (set.size === 0) delete next[key]; else next[key] = set;\n return next;\n });\n };\n\n const clearTypeSelection = (key) => {\n setSelections(prev => {\n if (!prev[key]) return prev;\n const next = { ...prev };\n delete next[key];\n return next;\n });\n };\n\n const toggleGroup = (g) => setCollapsedGroups(prev => ({ ...prev, [g]: !prev[g] }));\n\n const renderValues = (key, typeLabelMatches) => {\n const counts = valueCounts(records, key, selections);\n let entries = Array.from(counts.entries());\n if (isSearching && !typeLabelMatches) {\n entries = entries.filter(([v]) => String(v).toLowerCase().includes(searchLc));\n }\n if (valueSort === 'name') entries.sort((a, b) => String(a[0]).localeCompare(String(b[0])));\n else entries.sort((a, b) => b[1] - a[1] || String(a[0]).localeCompare(String(b[0])));\n const sel = selections[key] || new Set();\n\n return (\n <div className=\"exprviz-tree-values\">\n <div className=\"exprviz-values-toolbar\">\n <ToggleButtonGroup\n type=\"radio\"\n name={`exprviz-vsort-${key}`}\n size=\"sm\"\n value={valueSort}\n onChange={setValueSort}\n >\n <ToggleButton id={`exprviz-vsort-name-${key}`} value=\"name\" variant=\"outline-secondary\">Name</ToggleButton>\n <ToggleButton id={`exprviz-vsort-count-${key}`} value=\"count\" variant=\"outline-secondary\">Count</ToggleButton>\n </ToggleButtonGroup>\n {sel.size > 0 && (\n <Button size=\"sm\" variant=\"link\" onClick={() => clearTypeSelection(key)}>clear</Button>\n )}\n </div>\n {entries.map(([v, c]) => (\n <label key={v} className=\"exprviz-tree-value\">\n <input type=\"checkbox\" checked={sel.has(v)} onChange={() => toggleValue(key, v)} />\n <span className=\"exprviz-tree-value-label\" title={v}>{v}</span>\n <span className=\"exprviz-tree-value-count\">{c}</span>\n </label>\n ))}\n {entries.length === 0 && <em className=\"exprviz-tree-empty\">No values</em>}\n </div>\n );\n };\n\n return (\n <Modal show={open} onHide={() => doToggleExprVizFieldsModal(taxon, false)} size=\"xl\" scrollable>\n <Modal.Header closeButton>\n <Modal.Title>\n Filter expression fields ({matchingFields.length} of {records.length} match)\n {existenceStatus === 'loading' && (\n <span className=\"exprviz-modal-loading\"> · checking field availability…</span>\n )}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"exprviz-fields-layout\">\n <div className=\"exprviz-tree\">\n <input\n type=\"text\"\n className=\"exprviz-tree-search\"\n placeholder=\"Search property types and values…\"\n value={searchQuery}\n onChange={e => setSearchQuery(e.target.value)}\n />\n {propTree.map(grp => {\n const typeRows = grp.types.map(t => {\n const numValues = (valueSetByKey[t.key] && valueSetByKey[t.key].size) || 0;\n if (numValues === 0) return null;\n const typeLabelMatches = isSearching && t.label.toLowerCase().includes(searchLc);\n let matchingValueCount = numValues;\n if (isSearching && !typeLabelMatches) {\n const vset = valueSetByKey[t.key] || new Set();\n matchingValueCount = 0;\n for (const v of vset) if (String(v).toLowerCase().includes(searchLc)) matchingValueCount++;\n if (matchingValueCount === 0) return null;\n }\n const sel = selections[t.key];\n const selCount = sel ? sel.size : 0;\n const isExpanded = isSearching ? !typeLabelMatches : (expandedKey === t.key);\n return (\n <div key={t.key} className={`exprviz-tree-type${selCount > 0 ? ' is-active' : ''}`}>\n <div\n className=\"exprviz-tree-type-header\"\n onClick={() => setExpandedKey(isExpanded ? null : t.key)}\n >\n <span className=\"exprviz-tree-caret\">{isExpanded ? '▾' : '▸'}</span>\n <span className=\"exprviz-tree-type-label\">{t.label}</span>\n <span className=\"exprviz-tree-type-count\">\n {selCount > 0 ? `${selCount}/${numValues}` : numValues}\n </span>\n </div>\n {isExpanded && renderValues(t.key, typeLabelMatches)}\n </div>\n );\n }).filter(Boolean);\n if (isSearching && typeRows.length === 0) return null;\n const groupCollapsed = !isSearching && collapsedGroups[grp.group];\n return (\n <div key={grp.group} className=\"exprviz-tree-group\">\n <div className=\"exprviz-tree-group-header\" onClick={() => toggleGroup(grp.group)}>\n <span className=\"exprviz-tree-caret\">{groupCollapsed ? '▶' : '▼'}</span>\n <strong>{grp.label}</strong>\n </div>\n {!groupCollapsed && grp.types.length === 0 && (\n <div className=\"exprviz-tree-empty\"><em>(none)</em></div>\n )}\n {!groupCollapsed && typeRows}\n </div>\n );\n })}\n </div>\n <div className=\"exprviz-fields-preview\">\n <table className=\"exprviz-fields-table\">\n <thead>\n <tr>\n <th>Field</th>\n {orderedSelectedKeys.map(k => <th key={k}>{labelForKey(k, propTree)}</th>)}\n </tr>\n </thead>\n <tbody>\n {matchingFields.map(f => (\n <tr key={f.fieldName}>\n <td title={f.fieldName}>{f.fieldName.replace(/__expr$/, '')}</td>\n {orderedSelectedKeys.map(k => <td key={k}>{f.props[k] || ''}</td>)}\n </tr>\n ))}\n {matchingFields.length === 0 && (\n <tr><td colSpan={1 + orderedSelectedKeys.length}><em>No matching fields</em></td></tr>\n )}\n </tbody>\n </table>\n </div>\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"secondary\" onClick={() => doToggleExprVizFieldsModal(taxon, false)}>\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n disabled={matchingFields.length === 0}\n onClick={() => {\n doSetExprVizFields(taxon, matchingFields.map(f => f.fieldName));\n doToggleExprVizFieldsModal(taxon, false);\n }}\n >\n Apply ({matchingFields.length} fields)\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n\nexport default connect(\n 'selectFieldCatalog',\n 'selectExprViz',\n 'selectExpressionStudies',\n 'selectExpressionSamples',\n 'selectGrameneMaps',\n 'doToggleExprVizFieldsModal',\n 'doSetExprVizFields',\n 'doFetchExprVizFieldExistence',\n FieldsModalCmp\n);\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { AgGridReact } from 'ag-grid-react';\nimport { OverlayTrigger, Popover } from 'react-bootstrap';\nimport 'ag-grid-community/styles/ag-grid.css';\nimport 'ag-grid-community/styles/ag-theme-quartz.css';\n\nconst baseColDefs = [\n { field: 'id', headerName: 'Gene ID', pinned: 'left', width: 160, suppressMovable: true },\n { field: 'name', headerName: 'Name', width: 140, suppressMovable: true }\n];\n\nfunction arraysEqual(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\nfunction buildFieldInfo(fields, studies, expressionSamples) {\n const info = {};\n if (!fields || !studies || !expressionSamples) return info;\n const wanted = new Set(fields);\n for (const study of studies) {\n const studyId = study._id;\n const samples = expressionSamples[studyId];\n if (!samples) continue;\n const byGroup = {};\n for (const s of samples) if (!byGroup[s.group]) byGroup[s.group] = s;\n for (const group of Object.keys(byGroup)) {\n const fieldName = `${studyId.replace(/-/g, '_')}_${group}__expr`;\n if (!wanted.has(fieldName)) continue;\n const sample = byGroup[group];\n const factors = {};\n (sample.factor || []).forEach(f => { factors[f.type] = f.label; });\n const characteristics = {};\n (sample.characteristic || []).forEach(c => {\n if (factors[c.type] != null) return;\n characteristics[c.type] = c.label;\n });\n info[fieldName] = {\n studyId,\n studyDescription: study.description || studyId,\n group,\n replicates: samples.filter(s => s.group === group).length,\n factors,\n characteristics\n };\n }\n }\n return info;\n}\n\n// Custom header: re-implements sort click + menu button so ag-grid's column\n// drag/menu/filter still work, with an info icon as the popover trigger.\nconst HeaderWithInfo = (props) => {\n const { displayName, enableSorting, enableMenu, showColumnMenu, progressSort, column, info } = props;\n const [sort, setSort] = useState(column && column.getSort ? column.getSort() : null);\n const menuRef = useRef(null);\n\n useEffect(() => {\n if (!column || !column.addEventListener) return;\n const handler = () => setSort(column.getSort());\n column.addEventListener('sortChanged', handler);\n return () => column.removeEventListener('sortChanged', handler);\n }, [column]);\n\n const onSortClick = (event) => {\n if (enableSorting && progressSort) progressSort(event.shiftKey);\n };\n\n const onMenuClick = (event) => {\n event.stopPropagation();\n if (showColumnMenu && menuRef.current) showColumnMenu(menuRef.current);\n };\n\n const factorEntries = info ? Object.entries(info.factors || {}) : [];\n const charEntries = info ? Object.entries(info.characteristics || {}) : [];\n const popover = info ? (\n <Popover id={`exprviz-header-${info.studyId}-${info.group}`} className=\"exprviz-header-popover\">\n <Popover.Header as=\"h6\">{info.studyDescription}</Popover.Header>\n <Popover.Body>\n <div><strong>Study:</strong> {info.studyId}</div>\n <div><strong>Group:</strong> {info.group} ({info.replicates} {info.replicates === 1 ? 'rep' : 'reps'})</div>\n {factorEntries.length > 0 && (\n <div className=\"exprviz-header-section\">\n <strong>Factors</strong>\n <ul>{factorEntries.map(([t, v]) => <li key={t}><em>{t}:</em> {v}</li>)}</ul>\n </div>\n )}\n {charEntries.length > 0 && (\n <div className=\"exprviz-header-section\">\n <strong>Characteristics</strong>\n <ul>{charEntries.map(([t, v]) => <li key={t}><em>{t}:</em> {v}</li>)}</ul>\n </div>\n )}\n </Popover.Body>\n </Popover>\n ) : null;\n\n return (\n <div className=\"exprviz-header\">\n <span\n className=\"exprviz-header-text\"\n onClick={onSortClick}\n style={{ cursor: enableSorting ? 'pointer' : 'default' }}\n >\n {displayName}\n {sort === 'asc' && <span className=\"exprviz-header-sort\"> ▲</span>}\n {sort === 'desc' && <span className=\"exprviz-header-sort\"> ▼</span>}\n </span>\n {info && (\n <OverlayTrigger\n trigger={['hover', 'focus']}\n placement=\"bottom\"\n overlay={popover}\n delay={{ show: 200, hide: 100 }}\n >\n <span\n className=\"exprviz-header-info\"\n onClick={e => e.stopPropagation()}\n onMouseDown={e => e.stopPropagation()}\n aria-label=\"More info\"\n >ⓘ</span>\n </OverlayTrigger>\n )}\n {enableMenu && (\n <span\n ref={menuRef}\n className=\"exprviz-header-menu ag-icon ag-icon-menu\"\n onClick={onMenuClick}\n />\n )}\n </div>\n );\n};\n\nconst ExprTable = ({ rows, fields, onReorder, studies, expressionSamples, onHoverRow }) => {\n const fieldInfo = useMemo(\n () => buildFieldInfo(fields, studies, expressionSamples),\n [fields, studies, expressionSamples]\n );\n\n const columnDefs = useMemo(() => {\n const expressionCols = (fields || []).map(f => ({\n field: f,\n headerName: f.replace(/__expr$/, ''),\n width: 160,\n suppressMovable: false,\n headerComponent: HeaderWithInfo,\n headerComponentParams: { info: fieldInfo[f] },\n valueFormatter: p => {\n const v = p.value;\n if (v == null) return '';\n if (Array.isArray(v)) return v.join(', ');\n if (typeof v === 'object') return JSON.stringify(v);\n return String(v);\n }\n }));\n return [...baseColDefs, ...expressionCols];\n }, [fields, fieldInfo]);\n\n const onColumnMoved = (e) => {\n if (!onReorder || !e.finished) return;\n const allCols = e.api.getAllGridColumns ? e.api.getAllGridColumns() : (e.columnApi && e.columnApi.getAllGridColumns && e.columnApi.getAllGridColumns());\n if (!allCols) return;\n const next = allCols\n .map(c => c.getColId())\n .filter(id => fields.includes(id));\n if (!arraysEqual(next, fields)) {\n onReorder(next);\n }\n };\n\n if (!rows || rows.length === 0) {\n return <div className=\"exprviz-table-empty\"><em>No data loaded.</em></div>;\n }\n\n return (\n <div className=\"ag-theme-quartz exprviz-aggrid\">\n <AgGridReact\n rowData={rows}\n columnDefs={columnDefs}\n defaultColDef={{ resizable: true, sortable: true, filter: true }}\n animateRows={false}\n suppressFieldDotNotation={true}\n suppressDragLeaveHidesColumns={true}\n onColumnMoved={onColumnMoved}\n onCellMouseOver={e => onHoverRow && onHoverRow(e.data && e.data.id)}\n onCellMouseOut={() => onHoverRow && onHoverRow(null)}\n />\n </div>\n );\n};\n\nexport default ExprTable;\n","import React, { useEffect, useRef } from 'react';\nimport * as d3 from 'd3';\n\n// Parallel-coordinates plot with per-axis brushing and drag-to-reorder axes.\n// - Axis labels are draggable horizontally; on drop, onReorder(newOrder) fires.\n// - Brushes on axes intersect (AND): a row is \"in\" only when every active brush contains it.\n// - Numeric fields use a linear or symlog scale; non-numeric values are skipped.\n\nconst MARGIN = { top: 100, right: 24, bottom: 24, left: 32 };\nconst LABEL_ROTATION = -40;\nconst BRUSH_WIDTH = 16;\n\nfunction isNumeric(v) {\n if (v == null) return false;\n if (Array.isArray(v)) return false;\n const n = +v;\n return Number.isFinite(n);\n}\n\nfunction arraysEqual(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\n// Powers-of-10 tick values spanning [lo, hi]; includes 0 if the range crosses zero.\n// Clamped to |v| >= 0.1 to keep low-magnitude tick labels from overlapping near 0.\nconst MIN_LOG_TICK = 0.1;\nfunction logTickValues([lo, hi]) {\n const ticks = new Set();\n if (lo <= 0 && hi >= 0) ticks.add(0);\n if (hi >= MIN_LOG_TICK) {\n const start = Math.max(-1, Math.floor(Math.log10(lo > 0 ? lo : MIN_LOG_TICK)));\n const end = Math.ceil(Math.log10(hi));\n for (let p = start; p <= end; p++) {\n const v = Math.pow(10, p);\n if (v >= MIN_LOG_TICK && v <= hi) ticks.add(v);\n }\n }\n if (lo <= -MIN_LOG_TICK) {\n const start = Math.max(-1, Math.floor(Math.log10(hi < 0 ? -hi : MIN_LOG_TICK)));\n const end = Math.ceil(Math.log10(-lo));\n for (let p = start; p <= end; p++) {\n const v = -Math.pow(10, p);\n if (-v >= MIN_LOG_TICK && v >= lo) ticks.add(v);\n }\n }\n return Array.from(ticks).sort((a, b) => a - b);\n}\n\nfunction logTickFormat(v) {\n if (v === 0) return '0';\n const a = Math.abs(v);\n if (a >= 0.01 && a < 10000) return d3.format('~g')(v);\n return d3.format('.0e')(v);\n}\n\nconst ParallelCoordsPlot = ({\n rows,\n fields,\n scale = 'linear',\n onBrushChange,\n onReorder,\n clearVersion = 0,\n hoveredId = null\n}) => {\n const svgRef = useRef(null);\n const containerRef = useRef(null);\n // selections in data domain: { [field]: [lo, hi] }\n const selectionsRef = useRef({});\n const lastClearRef = useRef(0);\n\n useEffect(() => {\n if (clearVersion !== lastClearRef.current) {\n selectionsRef.current = {};\n lastClearRef.current = clearVersion;\n if (onBrushChange) onBrushChange({});\n }\n Object.keys(selectionsRef.current).forEach(f => {\n if (!fields || !fields.includes(f)) delete selectionsRef.current[f];\n });\n\n const svg = d3.select(svgRef.current);\n svg.selectAll('*').remove();\n if (!fields || fields.length === 0 || !rows || rows.length === 0) return;\n\n const el = containerRef.current;\n const width = (el && el.clientWidth) || 600;\n const height = (el && el.clientHeight) || 300;\n const innerW = width - MARGIN.left - MARGIN.right;\n const innerH = height - MARGIN.top - MARGIN.bottom;\n\n svg.attr('viewBox', `0 0 ${width} ${height}`);\n\n const g = svg.append('g').attr('transform', `translate(${MARGIN.left},${MARGIN.top})`);\n\n // Mutable order during drag — starts as a copy of fields.\n let order = fields.slice();\n const x = d3.scalePoint().range([0, innerW]).padding(0.5).domain(order);\n\n const yByField = {};\n let globalExt = null;\n if (scale === 'log') {\n const all = [];\n fields.forEach(f => {\n rows.forEach(r => {\n const v = r[f];\n if (isNumeric(v)) all.push(+v);\n });\n });\n globalExt = all.length ? d3.extent(all) : [0, 1];\n }\n fields.forEach(f => {\n if (scale === 'log') {\n yByField[f] = d3.scaleSymlog().domain(globalExt).range([innerH, 0]).nice();\n } else {\n const vals = rows.map(r => r[f]).filter(isNumeric).map(Number);\n const ext = vals.length ? d3.extent(vals) : [0, 1];\n yByField[f] = d3.scaleLinear().domain(ext).range([innerH, 0]).nice();\n }\n });\n\n function pathForRow(row, posOf) {\n const pts = order.map(f => {\n const v = row[f];\n if (!isNumeric(v)) return null;\n return [posOf(f), yByField[f](Number(v))];\n });\n return line(pts);\n }\n\n const line = d3.line()\n .defined(d => d != null && Number.isFinite(d[1]))\n .x(d => d[0])\n .y(d => d[1]);\n\n const linesG = g.append('g').attr('class', 'exprviz-pc-lines');\n const paths = linesG\n .selectAll('path')\n .data(rows)\n .enter()\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', 'steelblue')\n .attr('stroke-width', 1)\n .attr('data-id', d => d && d.id != null ? String(d.id) : null)\n .attr('d', row => pathForRow(row, f => x(f)));\n\n function isBrushedIn(row) {\n for (const f of order) {\n const sel = selectionsRef.current[f];\n if (!sel) continue;\n const v = row[f];\n if (!isNumeric(v)) return false;\n const n = Number(v);\n const [lo, hi] = sel;\n if (n < lo || n > hi) return false;\n }\n return true;\n }\n\n function applyBrushStyles() {\n const anyActive = Object.keys(selectionsRef.current).length > 0;\n paths\n .classed('exprviz-pc-line-in', d => !anyActive || isBrushedIn(d))\n .classed('exprviz-pc-line-out', d => anyActive && !isBrushedIn(d));\n }\n applyBrushStyles();\n\n // axis groups, keyed by field name so D3 can match them across reorders\n const axisG = g.selectAll('.exprviz-pc-axis')\n .data(order, d => d)\n .enter()\n .append('g')\n .attr('class', 'exprviz-pc-axis')\n .attr('transform', d => `translate(${x(d)},0)`);\n\n axisG.each(function(f) {\n const ax = d3.select(this);\n const axisGen = d3.axisLeft(yByField[f]);\n if (scale === 'log') {\n axisGen.tickValues(logTickValues(yByField[f].domain())).tickFormat(logTickFormat);\n } else {\n axisGen.ticks(5);\n }\n ax.call(axisGen);\n\n const label = ax.append('text')\n .attr('class', 'exprviz-pc-axis-label')\n .attr('x', 4).attr('y', -4)\n .attr('text-anchor', 'start')\n .attr('transform', `rotate(${LABEL_ROTATION}, 0, -4)`)\n .attr('fill', '#333')\n .style('font-size', '10px')\n .style('cursor', 'grab')\n .text(f.replace(/__expr$/, ''));\n\n // hit area for grabbing — sits along the rotated label\n ax.append('rect')\n .attr('class', 'exprviz-pc-axis-handle')\n .attr('x', 0).attr('y', -11)\n .attr('width', 140).attr('height', 14)\n .attr('transform', `rotate(${LABEL_ROTATION}, 0, -4)`)\n .attr('fill', 'transparent')\n .style('cursor', 'grab');\n\n const brush = d3.brushY()\n .extent([[-BRUSH_WIDTH / 2, 0], [BRUSH_WIDTH / 2, innerH]])\n .on('brush end', (event) => {\n const s = event.selection;\n if (!s) {\n delete selectionsRef.current[f];\n } else {\n const y = yByField[f];\n const a = y.invert(s[0]);\n const b = y.invert(s[1]);\n selectionsRef.current[f] = [Math.min(a, b), Math.max(a, b)];\n }\n applyBrushStyles();\n // event.sourceEvent is null when brush.move is called programmatically\n // (e.g. when this effect re-runs and we restore prior selections).\n // Skipping that case avoids a re-render loop with the parent.\n if (event.type === 'end' && event.sourceEvent && onBrushChange) {\n onBrushChange({ ...selectionsRef.current });\n }\n });\n\n const brushG = ax.append('g').attr('class', 'exprviz-pc-brush').call(brush);\n\n const prior = selectionsRef.current[f];\n if (prior) {\n const y = yByField[f];\n const py0 = y(prior[1]);\n const py1 = y(prior[0]);\n if (Number.isFinite(py0) && Number.isFinite(py1)) {\n brushG.call(brush.move, [py0, py1]);\n }\n }\n });\n\n // Drag-to-reorder: while dragging, only the dragged axis moves and the\n // line segments connecting to it are recomputed. Other axes stay put.\n // The new order is computed once at drag end and emitted via onReorder.\n const drag = d3.drag()\n .container(function() { return g.node(); })\n .subject(function(event, d) { return { x: x(d), y: 0 }; })\n .on('start', function(event, d) {\n const axNode = this.parentNode;\n d3.select(axNode).raise().classed('exprviz-pc-axis-dragging', true);\n d3.select(axNode).select('.exprviz-pc-axis-label').style('cursor', 'grabbing');\n linesG.classed('exprviz-pc-lines-dragging', true);\n })\n .on('drag', function(event, d) {\n const axNode = this.parentNode;\n const newX = Math.max(0, Math.min(innerW, event.x));\n d3.select(axNode).attr('transform', `translate(${newX},0)`);\n paths.attr('d', row => pathForRow(row, f => f === d ? newX : x(f)));\n })\n .on('end', function(event, d) {\n const axNode = this.parentNode;\n const newX = Math.max(0, Math.min(innerW, event.x));\n d3.select(axNode).classed('exprviz-pc-axis-dragging', false);\n d3.select(axNode).select('.exprviz-pc-axis-label').style('cursor', 'grab');\n linesG.classed('exprviz-pc-lines-dragging', false);\n\n const newOrder = order.slice().sort((a, b) => {\n const xa = a === d ? newX : x(a);\n const xb = b === d ? newX : x(b);\n return xa - xb;\n });\n\n if (onReorder && !arraysEqual(newOrder, fields)) {\n // Snap the dragged axis to its target slot for the brief moment\n // before the parent re-renders with the new order.\n x.domain(newOrder);\n d3.select(axNode).attr('transform', `translate(${x(d)},0)`);\n paths.attr('d', row => pathForRow(row, f => x(f)));\n onReorder(newOrder);\n } else {\n // No order change — restore the dragged axis to its original slot.\n d3.select(axNode).attr('transform', `translate(${x(d)},0)`);\n paths.attr('d', row => pathForRow(row, f => x(f)));\n }\n });\n\n axisG.selectAll('.exprviz-pc-axis-label, .exprviz-pc-axis-handle').call(drag);\n }, [rows, fields, scale, onBrushChange, onReorder, clearVersion]);\n\n // Highlight the polyline matching the hovered row id without rebuilding the\n // SVG. Raises the highlighted path so it draws above its neighbors.\n useEffect(() => {\n const svg = d3.select(svgRef.current);\n if (svg.empty()) return;\n const paths = svg.selectAll('.exprviz-pc-lines path');\n paths.classed('exprviz-pc-line-hover', false);\n if (hoveredId == null) return;\n const target = paths.filter(function() {\n return this.getAttribute('data-id') === String(hoveredId);\n });\n target.classed('exprviz-pc-line-hover', true).raise();\n }, [hoveredId, rows, fields, scale]);\n\n if (!fields || fields.length === 0) {\n return <div className=\"exprviz-plot-empty\"><em>Select fields to plot.</em></div>;\n }\n\n return (\n <div ref={containerRef} className=\"exprviz-pc-container\">\n <svg ref={svgRef} width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\"/>\n </div>\n );\n};\n\nexport default ParallelCoordsPlot;\n","import React, { useMemo, useState } from 'react'\nimport { Button, Modal } from 'react-bootstrap'\nimport { connect } from \"redux-bundler-react\";\nimport { getFirebaseApp } from \"./utils\";\nimport { getAuth, onAuthStateChanged, signOut, GoogleAuthProvider, signInWithPopup } from \"firebase/auth\";\nimport { BsChevronDown, BsChevronRight } from 'react-icons/bs';\n\nconst provider = new GoogleAuthProvider();\n\nconst Auth = props => {\n const firebaseConfig = props.configuration && props.configuration.firebaseConfig;\n const auth = useMemo(() => {\n const app = getFirebaseApp(firebaseConfig);\n return app ? getAuth(app) : null;\n }, [firebaseConfig]);\n const [user, setUser] = useState({});\n const [open, setOpen] = useState(true);\n if (!auth) return null;\n onAuthStateChanged(auth, (user) => setUser(user));\n\n function handleLogin() {\n signInWithPopup(auth, provider)\n .then((result) => {\n setUser(result.user)\n }).catch((err) => {\n console.log(err)\n });\n }\n function handleLogout() {\n signOut(auth)\n .then(() => {\n setUser(null);\n }).catch((err) => {\n console.log(err)\n });\n }\n return (\n <div className={props.configuration.id === 'sorghum' ? 'sorghumbase-auth-container': 'gramene-auth-container'}>\n <div className=\"sidebar-section\">\n <div className=\"sidebar-section-header\" onClick={() => setOpen(!open)}>\n <b>Account</b>\n <span className=\"sidebar-section-actions\">\n <span className=\"sidebar-section-toggle\">\n {open ? <BsChevronDown/> : <BsChevronRight/>}\n </span>\n </span>\n </div>\n {open && <div className=\"sidebar-section-body\">\n <div>\n {user\n ? <Button size=\"sm\" variant=\"success\" onClick={handleLogout}>{user.displayName}</Button>\n : <Button size=\"sm\" variant=\"success\" onClick={handleLogin}>Login</Button>\n }\n </div>\n </div>}\n </div>\n </div>\n )\n}\n\nexport default connect(\n 'selectConfiguration',\n Auth\n)\n"],"names":[],"version":3,"file":"index.js.map"}